zynq FreeRTOS 不能進中斷

轉載:https://forums.xilinx.com/t5/嵌入式軟件開發/分享-在FreeRTOS的main-函數裏初始化設備-不能收到中斷/m-p/905506#M618

在FreeRTOS的main()函數裏初始化設備,不能收到中斷。

FreeRTOS在 void vTaskStartScheduler( void )裏調用 configSETUP_TICK_INTERRUPT(), 也就是void FreeRTOS_SetupTickInterrupt( void )。void FreeRTOS_SetupTickInterrupt( void )在文件portZynqUltrascale.c裏實現,會初始化MPSoC的中斷控制器。

所以在vTaskStartScheduler()之前,FreeRTOS的中斷沒有使能,不能響應中斷。
如果在vTaskStartScheduler()之前初始化中斷,檢測不到中斷是正常的。
把xilinx的standalone的例子加入FreeRTOS時,應該去掉XScuGic_CfgInitialize(), Xil_ExceptionRegisterHandler(),Xil_ExceptionEnable()等GIC層次的操作函數,只保留 XScuGic_Connect()和XScuGic_EnableIntr()等設備層次的操作函數。否則GIC被重複初始化,可能導致FreeRTOS工作異常。設備的初始化,也最好加在一個線程裏,而不是FreeRTOS的main()函數裏。

總結:無論使用DMA中斷還是GPIO中斷,我都遇到過進不了中斷,原因就是在freertos的vTaskStartScheduler之前初始化中斷,改爲新建線程後初始化即可。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章