我一直在試圖讓一個SysTick中斷在TM4C123GH6PM7上工作。這是一個基於皮層m4的微控制器。當使用Keil Debugger時,我可以看到Systick中斷正在掛起int NVIC,但它不會執行處理程序。沒有其他例外被啓用,我已經清除了PRIMASK寄存器。下面的代碼是我如何初始化中斷:SysTick中斷掛起但不會執行調試中斷屏蔽問題?
systck_init LDR R0,=NVIC_ST_CTRL_R
LDR R1,=NVIC_ST_RELOAD_R
LDR R2,=NVIC_ST_CURRENT_R
MOV R3,#0
STR R3,[R0]
STR R3,[R2]
MOV R3,#0x000020
STR R3,[R1]
MOV R3,#7
STR R3,[R0]
LDR R3,=NVIC_EN0_R
LDR R4,[R3]
ORR R4,#0x00008000
STR R4,[R3]
CPSIE I
MOV R3,#0x3
MSR CONTROL,R3
經過大量的搜索後,我發現它可能是調試器屏蔽所有中斷。控制該位的位在一個名爲Debug Halting Status and Control Register的寄存器中。雖然我似乎無法在調試器中查看它,也無法通過調試命令讀取/寫入它。
我使用了Keil提供的Startup.s,並且據我所知,矢量/標籤是正確的。
是的,我知道。爲什麼還要在裝配中完成這一切。
任何想法將不勝感激。第一次發佈:)
感謝您的幫助!如果systick沒有通過NVIC耦合,那麼它是一個例外,所以它不能被硬件中斷搶佔? 我很抱歉沒有發佈我的所有代碼,但有很多。但我確實在其他地方設置了PSP。我使用0x20只是爲了讓它直接跳到處理程序 今天我使用了keil模擬器,並且處理程序正確執行,但我仍然無法使它與電路調試器一起工作。 – MHilton
您可以使用'SCB'中的'SHP'寄存器來設置Systick(和其他系統中斷)的優先級。 –
我只能快速讀取代碼,因此可能是錯誤的(註釋您的代碼!),但在啓動計數器之前似乎沒有清除計數器。我認爲在啓動時計數器的值是未定義的(但模擬器可能會將其清零)。如果計數器是0x21,並且您將重載設置爲0x20,則必須等待它在發射之前環繞。也就是說,只要SysTick計數器只有24位就不會有問題。 –