主题中讨论的其他器件:DP83869
工具与软件:
我正在验证 PRU 到 R5F 主机中断的通信。
在我的设置中、我生成一个从 PRU 到 R5F 的 INT 并测量响应时间。
这是一个非常简洁的设置、没有其他应用程序在运行(在相同的内核上):
- PRU 事件编号(事件#17)->
- -> pr0_pru_mst_intr[1]_intr_req (event#17)->
- ->通道#3 ->
- ->主机中断#3 ->
- ->主机中断2到9从 PRU_ICSSG 导出并映射到器件级中断控制器->
- -> PRU_ICSSG0_PR1_HOST_INTR_REQ_1 -> CMPEVENT_INTRTR0_IN_1 (ID#1)->
- -> PRU_ICSSG0_PR1_HOST_INTR_pend_1 (INT#121)
在 PRU 上、我在生成 INT 时切换调试 I/O、并在中断服务例程内的 R5F 上执行相同的操作。
我遇到的是460ns 至560ns 的非确定性延迟。
这种高延迟的原因可能是什么?
什么可能导致随机响应时间?
有 什么方法可以解决它?


PRU 代码:
set GPIO_OUT, GPIO_OUT, PIN_DEBUG0 ; set del pin di debug LDI INT_REQ, prk_pru_mst_intr1_intr_req ; prk_pru_mst_intr[1]_intr_req clr GPIO_OUT, GPIO_OUT, PIN_DEBUG0 ; clear del pin di debug
映射:

R5F 主机中断服务例程
/* PRU FW IRQ handler */
void pruIrqHandler(void *args)
{
GPIO_pinWriteHigh(CONFIG_GPIO23_CODE_READER_0_TRIGGER_PIN_baseAddr, CONFIG_GPIO23_CODE_READER_0_TRIGGER_PIN);
...
配置:
#define ICSSG_PRU_INT_NUM ( CSLR_R5FSS0_CORE0_INTR_PRU_ICSSG0_PR1_HOST_INTR_PEND_1 ) // VIM interrupt number (INT#121)
...
// Register & enable ICSSG PRU FW interrupt
HwiP_Params_init(&hwiParams);
hwiParams.intNum = ICSSG_PRU_INT_NUM;
hwiParams.callback = &pruIrqHandler;
hwiParams.args = 0;
hwiParams.priority = 0; // 0h = Highest priority
hwiParams.isPulse = FALSE;
hwiParams.isFIQ = FALSE;
status = HwiP_construct(&hwiObj, &hwiParams);
DebugP_assert(status == SystemP_SUCCESS);