主题中讨论的其他器件: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);