RISC-V MCU中文社区

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

发表于 GD32VF103 MCU 2020-10-12 17:18:05
2
3602
0

我看過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)


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




喜欢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的方式。

SuperPatrick

SuperPatrick 未通过实名认证

懒的都不写签名

积分
问答
粉丝
关注
  • RV-STAR 开发板
  • RISC-V处理器设计系列课程
  • 培养RISC-V大学土壤 共建RISC-V教育生态
RV-STAR 开发板