關於FreeRTOS SystemTimer IRQ與MTH / IRQ Level寄存器

2020-10-12 17:18:05
2
102

我看過ECLIC Unit Introduction這份文檔了,但跟芯片的行為似乎沒辦法對起來...

首先,關於MTH的解釋,提到interrupt的LEVEL必須要高於MTH,才能夠對core順利觸發中斷...

Only when the level of the interrupt finally arbitrated by the ECLIC is higher than the value in the mth register, the interrupt can be sent to the processor core

我看到FreeRTOS內port.c內,也確實是透過"ECLIC_SetMth()"來完成"portDISABLE_INTERRUPTS()"

但我實際測試的結果卻發生我呼叫"portENTER_CRITICAL()",可以使RTOS的SystemTimer IRQ停止觸發...

但我如果自行呼叫ECLIC_SetMth(127); __RWMB();則是無法擋住SystemTimer IRQ的...

(目前 NLBITS = 4,configMAX_SYSCALL_INTERRUPT_PRIORITY= 7, uxMaxSysCallMTH = 127, SystemTimer IRQ的LVL為0)


不曉得是否我弄錯了甚麼?




用户评论 (2)
  • 華仔

    2020-10-15 18:04:38 華仔 1#

    你可以将portDISABLE_INTERRUPTS()函数中设置的mth打印出来看看,然后就是ECLIC_SetLevelIRQ函数设置的是相对的Level数值而非绝对的Level数值,你可以看对应实现代码可知。

  • 领主文

    2020-10-13 10:41:04 领主文 2#

    我看Nuclei SDK里面调用的是__disable_irq(),里面是修改寄存器实现的全局中断屏蔽,但是我没看到改MTH的方式。

关注我们

微信扫码登录 点击刷新二维码