總結(jié)一下,前段時間的工作學習算是取得一個階段性的成功了。
下面分別總結(jié)一下:
1. 中斷向量表不發(fā)生重映射,還是放在片內(nèi)ROM中。用戶代碼放在片內(nèi)ROM中(加了TIMER0的中斷)。
2. 中斷向量表不發(fā)生重映射,還是在片內(nèi)ROM中。用戶代碼放在片外SDRAM中(加了TIMER0的中斷)。
3. 中斷向量表發(fā)生重映射,重映射的地址為0x20004000.用戶代碼放在片內(nèi)ROM中(加了TIMER0的中斷)。
4. 中斷向量表發(fā)生重映射,重映射的地址為0x20004000.用戶代碼放在片外SDRAM中(加了TIMER0的中斷)。
首先,先記錄一下定時器0產(chǎn)生中斷的機制和相關(guān)代碼。
(1)定時器0、2、3的功能是差不多的。定時器可以分為定時器和計數(shù)器兩種,由寄存器CTCR決定哪種工作模式。
a. 作為定時器的時候,輸入為PCLK。有預分頻和PR和定時器計數(shù)器TC,還有PC是預分頻的指針。
b. 作為計數(shù)器的時候,可以選擇CAP輸入的上升沿,下降沿,以及上升沿和下降沿作為輸入。CAP可以選擇CAPn.0和CAPn.1.也就是可以選擇外部時鐘計數(shù)。但是外部計數(shù)的最大頻率<(Fpclk/2)。
(2)匹配控制寄存器TnMCR,可以選擇匹配時產(chǎn)生中斷,匹配時將TC復位,匹配時將使TC和PC停止,TCR位0清零。外部匹配寄存器TnEMR,可以選擇不執(zhí)行任何動作,匹配輸出設置為0,匹配輸出設置為1,匹配輸出電平翻轉(zhuǎn)。
(3)當定時器/計數(shù)器運行時,在捕獲引腳上,出現(xiàn)有效外部觸發(fā)動作,此時定時器計數(shù)器的當前值保存到指定捕獲寄存器中T(0~3)CRn。捕獲控制寄存器TnCCR可以選擇CAPn.0(1/2/3)上升沿捕獲,下降沿捕獲,事件中斷。
當定時器0定時到60ms之后,產(chǎn)生一個中斷,并且開NVIC中斷嵌套,使向量表中的響應中斷。
要注意幾點吧:1. 等全部設置好了,再enable TIMER0.2.要想有中斷響應,必須開NVIC的中斷。3.之前要先清中斷。定時器差不多介紹完了。
其次,中斷向量表的重映射問題。
如果要實現(xiàn)中斷向量表的重映射問題,就要對VTOR寄存器進行設置。這里做的是重映射到0x20004000.好像設置VTOR寄存器與中斷向量拷貝并沒有一定的先后順序。
Q:這里就有一個疑問:VTOR的范圍為0x00000080-0x3FFFFF80的范圍,但是當我將VTOR設置為0x30000000的時候,是沒有問題的。問題是將中斷向量表拷貝到0x30000000的時候,是無法復制的。0x30000000這個區(qū)域在內(nèi)存映射中是reserved。
TIMER0_IRQHandler
TIMER0的程序為熄滅一個LED燈。
void TIMER0()
{
}
向量表拷貝匯編代碼:
five
four
;話,就要BX R14
Q:調(diào)試的過程中,遇到的一些問題,還沒有解決。