瑞薩RZ/T系列MPU
基于Arm的RZ/T系列MPU通過工業以太網通信提供高性能和高速實時控制,為自動化市場構建高性能系統。RZ/T MPU和RZ/N MPU均基于類似的硬件架構開發而成,并共享相同的軟件環境,可實現可擴展產品開發。RZ/T系列MPU支持多種協議,例如EtherCAT、PROFINET、Ethernet/IP和下一代TSN。RZ/T MPU配備編碼器接口,可支持各種編碼器協議。
中斷重入的需求
一些客戶的應用程序原來是基于其它家私有核的平臺,整個程序只使用1個中斷,系統的任務全部在這一個中斷里管理,比如系統里有125us周期的任務,也有62.5us周期的任務,但是62.5us的任務優先級比125us的任務高,而且125us的任務執行時間超過62.5us。
對于這個時序要求,如果移植到ARM的MCU平臺,一般使用兩個定時器中斷,分別設置不同的優先級來實現,代碼架構更簡潔清晰。但是客戶要求在不改變原有代碼結構的前提下,移植到RZ/T2x系列芯片上,要求:使用62.5us的定時器中斷,但是當執行到125us的任務時,如果此時又產生了新的定時器中斷信號,需要能打斷當前正在執行的中斷函數。也就是說要求中斷的重入。
而對于ARM內核,雖然可以實現中斷嵌套的,但是只能是高優先級的中斷可以打斷低優先級的中斷,不能打斷同一優先級的中斷處理函數,也不能打斷自己的中斷函數。那么怎么實現這一個需求呢?
中斷重入的實現
實現的思路是:在62.5us的高優先級任務執行完后,運行125us的任務前,清除中斷控制器的標志,欺騙CPU,當前不是在中斷處理函數里,而是在普通的模式下。
下面是代碼的實現:
1在bsp_irq.h文件添加如下函數:
左右滑動查看完整內容
長按可保存查看大圖
2假設中斷使用的是CMT0的比較中斷,首先查詢手冊Interrupt Controller章第3節里的Event Table,CMT0的中斷號是53。
3在62.5us執行完后,在可以允許被打斷的代碼前面,加入如下的處理,清除當前的中斷標志,并告訴中斷控制器,當前的中斷號對應的處理已經結束。這樣有新中斷信號產生,就可以打斷后面的代碼。
左右滑動查看完整內容
R_BSP_IrqClearActive(53); // 清除當前中斷正在運行的狀態 __asm volatile ( " mov r0, # 85 // 85 (=53 + 32) /* Write INTID to EOIR. */ “mcr p15, #0, r0, c12, c12, #1 ” // 當前INT ID寫入EOIR寄存器, // 告訴CPU,當前中斷處理結束 ):
-
編碼器
+關注
關注
45文章
3592瀏覽量
134145 -
瑞薩
+關注
關注
34文章
22290瀏覽量
86063 -
中斷
+關注
關注
5文章
895瀏覽量
41391 -
MPU
+關注
關注
0文章
346瀏覽量
48735
原文標題:RZ/T2x系列的中斷重入實現
文章出處:【微信號:瑞薩MCU小百科,微信公眾號:瑞薩MCU小百科】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論