IPC双核通信
1. void IPC_setFlagLtoR(IPC_Type_t ipcType, uint32_t flags);
函数说明:本地核设置本地到远程的IPC标志。
此函数允许本地核系统设置指定的IPC标志并发送到远程核系统。flags
参数可以是任何IPC标志值:IPC_FLAG0 - IPC_FLAG31
。
参数说明
输入参数: - 参数
ipcType
是对应所使用IPC实例的枚举类型。
- 参数flags
是要设置的IPC标志掩码。返回参数 - 无
2. void IPC_clearFlagLtoR(IPC_Type_t ipcType, uint32_t flags);
函数说明: 本地核清除本地到远程的IPC标志。
此函数允许本地核系统清除发送到远程核系统的指定IPC标志。flags
参数可以是任何IPC标志值:IPC_FLAG0 - IPC_FLAG31。
参数说明
输入参数: - 参数
ipcType
是对应所使用IPC实例的枚举类型。 - 参数flags
是要清除的IPC标志掩码。返回参数 - 无
3. void IPC_ackFlagRtoL(IPC_Type_t ipcType, uint32_t flags);
函数说明: 本地内核确认远程到本地的IPC标志。
此函数允许本地内核系统确认/清除远程内核系统设置的IPC标志。flags
参数可以是任何IPC标志值:IPC_FLAG0 - IPC_FLAG31
。
参数说明
输入参数: - 参数
ipcType
是与使用的IPC实例对应的枚举。 - 参数flags
是用于确认的IPC标志掩码。返回参数 - 无
4. bool IPC_isFlagBusyLtoR(IPC_Type_t ipcType, uint32_t flags);
函数说明: 确定给定的IPC标志是否处于忙碌状态。
此函数允许调用者确定指定的本地到远程IPC标志是否处于待处理状态。flags
参数可以是任何IPC标志值:IPC_FLAG0 - IPC_FLAG31
。
参数说明
输入参数: - 参数
ipcType
是与使用的IPC实例对应的枚举。 - 参数flags
是用于确认的IPC标志掩码。返回参数 - 参数
true
是任意指定的IPC标志处于忙碌状态 - 参数false
是所有指定的IPC标志空闲
5. bool IPC_isFlagBusyRtoL(IPC_Type_t ipcType, uint32_t flags);
函数说明: 确定给定的远程到本地IPC标志是否处于忙碌状态。
此函数允许调用者确定指定的远程到本地IPC标志是否处于待处理状态。flags
参数可以是任何IPC标志值:IPC_FLAG0 - IPC_FLAG31
。
参数说明
输入参数: - 参数
ipcType
是与使用的IPC实例对应的枚举。 - 参数flags
是用于确认的IPC标志掩码。返回参数 - 参数
true
是任意指定的IPC标志处于忙碌状态 - 参数false
是所有指定的IPC标志空闲
6. void IPC_waitForFlag(IPC_Type_t ipcType, uint32_t flag);
函数说明: 等待远程内核发送标志。
此函数允许调用者等待远程内核发送远程到本地的标志。flag
参数可以是任何IPC标志值:IPC_FLAG0 - IPC_FLAG31
。
参数说明
输入参数: - 参数
ipcType
是与使用的IPC实例对应的枚举。 - 参数flags
是用于确认的IPC标志掩码。返回参数 - 无
7. void IPC_waitForAck(IPC_Type_t ipcType, uint32_t flag);
函数说明: 等待IPC标志被确认。
此函数允许调用者等待远程内核确认IPC标志。flag
参数可以是任何IPC标志值:IPC_FLAG0 - IPC_FLAG31
。
参数说明
输入参数: - 参数
ipcType
是与使用的IPC实例对应的枚举。 - 参数flags
是用于确认的IPC标志掩码。返回参数 - 无
8. void IPC_sync(IPC_Type_t ipcType, uint32_t flag);
函数说明: 同步两个内核。 此函数允许本地和远程内核进行同步。在另一个内核进入此函数之前,任何一个内核都不会从该函数调用中返回。 参数说明
输入参数: - 参数
ipcType
是与使用的IPC实例对应的枚举。 - 参数flags
是用于确认的IPC标志掩码。注意:必须在两个内核上使用相同的标志掩码调用此函数。
返回参数 - 无
9. void IPC_init(IPC_Type_t ipcType)
函数说明: 初始化IPC。 此函数通过清除所有标志来初始化IPC。 参数说明
输入参数: - 参数
ipcType
是与使用的IPC实例对应的枚举。返回参数 - 无
10. bool IPC_sendCommand(IPC_Type_t ipcType, uint32_t flags, bool addrCorrEnable,
uint32_t command, uint32_t addr, uint32_t data);
函数说明: 向远程内核发送命令。
此函数允许调用者向远程内核发送命令。命令由唯一的命令值、一个32位地址
和一个32位数据
组成。
该函数还将指定的标志发送给远程内核。由于本地和远程内核的地址空间可能存在差异,例如在F2838X设备中,C28x内核和CM内核的地址空间不同。如果 addr
指向的是IPC MSG RAM
中的地址,addrCorrEnable
参数可以用于纠正地址不匹配。
参数说明
输入参数: - 参数
ipcType
是与使用的IPC实例对应的枚举。 - 参数flags
是用于确认的IPC标志掩码。 - 参数addrCorrEnable
是用于确定是否将addr
参数转换为远程内核地址空间的标志。 - 参数command
是32位的命令值。 - 参数addr
是作为命令一部分发送的32位地址。 - 参数data
是作为命令一部分发送的32位数据。 - 参数flags
参数可以是任何IPC标志值:IPC_FLAG0 - IPC_FLAG31
。 - 参数addrCorrEnable
参数可以取以下值: -IPC_ADDR_CORRECTION_ENABLE
: 将地址转换为远程内核的地址空间 -IPC_ADDR_CORRECTION_DISABLE
: 不修改addr
参数应用程序应使用 IPC_getResponse 函数读取远程内核发送的响应。
注意:在收到响应之前,应用程序应等待,不能发送另一个命令。
注意:
addrCorrEnable
参数在发送和接收内核上必须保持一致。返回参数 - 参数
true
是命令发送成功 - 参数false
是指定的标志忙碌且命令未发送
11. bool IPC_readCommand(IPC_Type_t ipcType, uint32_t flags, bool addrCorrEnable,
uint32_t *command, uint32_t *addr, uint32_t *data);
函数说明: 读取远程内核发送的命令。
此函数允许调用者读取远程内核发送的命令。命令由唯一的命令值、一个32位地址
和一个32位数据
组成。
本地和远程内核的地址空间可能存在差异,例如在F2838X设备中,C28x内核和CM内核的地址空间不同。如果 addr
指向的是IPC MSG RAM
中的地址,addrCorrEnable
参数可以用于纠正地址不匹配。
参数说明
输入参数: - 参数
ipcType
是与使用的IPC实例对应的枚举。 - 参数flags
是用于确认的IPC标志掩码。 - 参数addrCorrEnable
是用于确定是否将addr
参数转换为远程内核地址空间的标志。 - 参数command
是32位的命令值。 - 参数addr
是作为命令一部分发送的32位地址。 - 参数data
是作为命令一部分发送的32位数据。 - 参数flags
参数可以是任何IPC标志值:IPC_FLAG0 - IPC_FLAG31
。 - 参数addrCorrEnable
参数可以取以下值: -IPC_ADDR_CORRECTION_ENABLE
: 将地址转换为远程内核的地址空间 -IPC_ADDR_CORRECTION_DISABLE
: 不修改addr
参数注意:在读取命令后,应用程序应确认标志并在需要时发送响应。
注意:
addrCorrEnable
参数在发送和接收内核上必须保持一致。返回参数 - 参数
true
是命令发送成功 - 参数false
是指定的标志忙碌且命令未发送
12. void IPC_sendResponse(IPC_Type_t ipcType, uint32_t data)
函数说明: 向远程内核发送命令的响应。 此函数允许调用者对远程内核之前发送的命令进行响应。 参数说明
输入参数: - 参数
ipcType
是与使用的IPC实例对应的枚举。 - 参数data
是要发送的32位响应值。返回参数 - 无
13. uint32_t IPC_getResponse(IPC_Type_t ipcType)
函数说明: 读取远程内核的响应。 此函数允许调用者读取远程内核对本地内核先前发送命令的响应。 参数说明
输入参数: - 参数
ipcType
是与使用的IPC实例对应的枚举。返回参数 - 32位的响应值。
14. uint64_t IPC_getCounter(IPC_Type_t ipcType)
函数说明: 读取时间戳计数器值。 此函数允许调用者读取IPC时间戳计数器值。 参数说明
输入参数: - 参数
ipcType
是与使用的IPC实例对应的枚举。返回参数 - 64位的计数器值。
15. void IPC_registerInterrupt(IPC_Type_t ipcType, uint32_t ipcInt,
void (*pfnHandler)(void));
函数说明: 为IPC注册中断处理程序。
此函数注册在发生IPC中断时调用的处理程序。该函数在中断控制器中启用全局中断。ipcInt
参数可以是任何IPC标志值:IPC_INT0 - IPC_INT7
。IPC_INT0
对应于IPC
标志0中断,依此类推。
参数说明
输入参数: - 参数
ipcType
是与使用的IPC实例对应的枚举。 - 参数ipcInt
是正在注册中断的标志号。 - 参数pfnHandler
是指向ISR函数的指针。
16. void IPC_unregisterInterrupt(IPC_Type_t ipcType, uint32_t ipcInt);
函数说明: 注销IPC的中断处理程序。
此函数清除在发生IPC中断时调用的处理程序。该函数还会在中断控制器中屏蔽该中断,以确保不再调用中断处理程序。ipcInt
参数可以是任何IPC标志值:IPC_INT0 - IPC_INT7
。IPC_INT0
对应于IPC标志0中断,依此类推。
参数说明
输入参数: - 参数
ipcType
是与使用的IPC实例对应的枚举。 - 参数ipcInt
是正在注销中断的标志号。
17. void IPC_initMessageQueue(IPC_Type_t ipcType, volatile IPC_MessageQueue_t *msgQueue,
uint32_t ipcInt_L, uint32_t ipcInt_R);
函数说明: 初始化IPC消息队列。
此函数使用环形缓冲区和索引地址为一对IPC中断初始化IPC消息队列。ipcInt_L
和 ipcInt_R
参数可以是以下值之一:IPC_INT0
,IPC_INT1
,IPC_INT2
,IPC_INT3
。
参数说明
输入参数: - 参数
ipcType
是与使用的IPC实例对应的枚举。 - 参数msgQueue
指定IPC_MessageQueue_t
实例的地址。 - 参数ipcInt_L
指定本地内核用于消息队列的中断号。 - 参数ipcInt_R
指定远程内核用于消息队列的中断号。注意:如果某个中断当前正被一个
IPC_MessageQueue_t
实例使用,该中断不应与另一个IPC_MessageQueue_t
实例关联。注意:对于特定的
ipcInt_L - ipcInt_R
配对,必须在本地和远程系统上定义并初始化IPC_MessageQueue_t
实例。返回参数 - 无
18. bool IPC_sendMessageToQueue(IPC_Type_t ipcType,
volatile IPC_MessageQueue_t *msgQueue,
bool addrCorrEnable, IPC_Message_t *msg, bool block);
函数说明: 向消息队列发送消息。
此函数检查消息队列中是否有空闲插槽。如果有空插槽,它将把 msg
指向的消息放入空闲插槽并设置适当的IPC中断标志。
参数说明
输入参数: - 参数
ipcType
是与使用的IPC实例对应的枚举。 - 参数msgQueue
指定IPC_MessageQueue_t
实例的地址。 - 参数addrCorrEnable
是用于确定是否将addr
参数转换为远程内核地址空间的标志。 - 参数msg
指定要发送到消息队列的IPC_Message_t
实例的地址。 - 参数block
指定是否允许函数阻塞,直到缓冲区有空闲插槽。 - 参数addrCorrEnable
参数可以取以下值: -IPC_ADDR_CORRECTION_ENABLE
: 将地址转换为远程内核的地址空间 -IPC_ADDR_CORRECTION_DISABLE
: 不修改addr
参数 - 参数block
参数可以取以下值: -IPC_BLOCKING_CALL
-IPC_NONBLOCKING_CALL
返回参数 - 参数
true
消息成功发送 - 参数false
队列已满
19. bool IPC_readMessageFromQueue(IPC_Type_t ipcType,
volatile IPC_MessageQueue_t *msgQueue,
bool addrCorrEnable, IPC_Message_t *msg, bool block);
函数说明: 从消息队列中读取消息。
此函数检查消息队列中是否有消息。如果有消息存在,它会读取消息并写入到 msg
指向的地址中。
参数说明
输入参数: - 参数
ipcType
是与使用的IPC实例对应的枚举。 - 参数msgQueue
指定IPC_MessageQueue_t
实例的地址。 - 参数addrCorrEnable
是用于确定是否将addr
参数转换为远程内核地址空间的标志。 - 参数msg
指定要发送到消息队列的IPC_Message_t
实例的地址。 - 参数addrCorrEnable
参数可以取以下值: -IPC_ADDR_CORRECTION_ENABLE
: 将地址转换为远程内核的地址空间 - 参数block
参数可以取以下值: -IPC_BLOCKING_CALL
-IPC_NONBLOCKING_CALL
返回参数 - 参数
true
消息成功发送 - 参数false
队列已满
20. bool IPC_readMessageFromQueue(IPC_Type_t ipcType,
volatile IPC_MessageQueue_t *msgQueue,
bool addrCorrEnable, IPC_Message_t *msg, bool block);
函数说明: 从消息队列中读取消息。
此函数检查消息队列中是否有消息。如果有消息存在,它会读取消息并写入到 msg
指向的地址中。
参数说明
输入参数: - 参数
ipcType
是与使用的IPC实例对应的枚举。 - 参数msgQueue
指定IPC_MessageQueue_t
实例的地址。 - 参数addrCorrEnable
是用于确定是否将addr
参数转换为远程内核地址空间的标志。 - 参数msg
指定要发送到消息队列的IPC_Message_t
实例的地址。 - 参数addrCorrEnable
参数可以取以下值: -IPC_ADDR_CORRECTION_ENABLE
: 将地址转换为远程内核的地址空间 - 参数block
参数可以取以下值: -IPC_BLOCKING_CALL
-IPC_NONBLOCKING_CALL
返回参数 - 参数
true
消息成功读取 - 参数false
队列已空