The main IPC drivers also include basic functions to manipulate 16 or 32-bit words. These include read and write command functions, functions for setting and clearing bits as well as block reads and writes. All write functions also have “protected” counterparts, allowing IPC commands to be used to write to write-protected registers. The Message Direction is indicated in the function name for the main IPC drivers as well. For instance, function calls for the M3 to execute a command on the C28 would begin with “IPCMtoC”, and function calls for the C28 to execute a command on the M3 would begin with “IPCCtoM”. The main IPC drivers use tIpcController data structures to facilitate communications. A single tIpcController is tied to a C28 IPC interrupt and M3 IPC interrupt pair. The C28 application and M3 application must each define a tIpcController data structure for the same interrupt pair. tIpcController uses pointers to handle the queuing of messages sent between an M3 and C28 IPC interrupt pair within ring buffers. The data structure allows these complicated details to be hidden from the user application.