久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

專注電子技術(shù)學(xué)習(xí)與研究
當(dāng)前位置:單片機(jī)教程網(wǎng) >> MCU設(shè)計(jì)實(shí)例 >> 瀏覽文章

中斷向量表放在片內(nèi)RAM中

作者:未知   來源:布冬冬 的空間   點(diǎn)擊數(shù):  更新時(shí)間:2014年08月16日   【字體:

總結(jié)一下,前段時(shí)間的工作學(xué)習(xí)算是取得一個(gè)階段性的成功了。

下面分別總結(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的中斷)。

 

首先,先記錄一下定時(shí)器0產(chǎn)生中斷的機(jī)制和相關(guān)代碼。

(1)定時(shí)器0、2、3的功能是差不多的。定時(shí)器可以分為定時(shí)器和計(jì)數(shù)器兩種,由寄存器CTCR決定哪種工作模式。

a. 作為定時(shí)器的時(shí)候,輸入為PCLK。有預(yù)分頻和PR和定時(shí)器計(jì)數(shù)器TC,還有PC是預(yù)分頻的指針。

b. 作為計(jì)數(shù)器的時(shí)候,可以選擇CAP輸入的上升沿,下降沿,以及上升沿和下降沿作為輸入。CAP可以選擇CAPn.0和CAPn.1.也就是可以選擇外部時(shí)鐘計(jì)數(shù)。但是外部計(jì)數(shù)的最大頻率<(Fpclk/2)。

(2)匹配控制寄存器TnMCR,可以選擇匹配時(shí)產(chǎn)生中斷,匹配時(shí)將TC復(fù)位,匹配時(shí)將使TC和PC停止,TCR位0清零。外部匹配寄存器TnEMR,可以選擇不執(zhí)行任何動(dòng)作,匹配輸出設(shè)置為0,匹配輸出設(shè)置為1,匹配輸出電平翻轉(zhuǎn)。

(3)當(dāng)定時(shí)器/計(jì)數(shù)器運(yùn)行時(shí),在捕獲引腳上,出現(xiàn)有效外部觸發(fā)動(dòng)作,此時(shí)定時(shí)器計(jì)數(shù)器的當(dāng)前值保存到指定捕獲寄存器中T(0~3)CRn。捕獲控制寄存器TnCCR可以選擇CAPn.0(1/2/3)上升沿捕獲,下降沿捕獲,事件中斷。

當(dāng)定時(shí)器0定時(shí)到60ms之后,產(chǎn)生一個(gè)中斷,并且開NVIC中斷嵌套,使向量表中的響應(yīng)中斷。

   *(INT8U*) PCONP |= 0x01<<1; //power on timer0
   *(INT8U*) T0TCR = 2;//counter reset
   *(INT32U*) T0IR = 0x0<<0;//clear interrupt
   *(INT32U*) T0CTCR = 0;//Timer Mode
   *(INT32U*) T0PR = 9;//PR
   *(INT32U*) T0TC = 0;//Timer Counter
   *(INT32U*) T0MR0 = ( msec*60*1000)/(*(INT32U*)T0PR+1);//TC
   *(INT32U*) T0MCR = 1;//Interrupt on MR0
   *(INT32U*) ISER0 |= 0x1<<1; //NVIC
   *(INT8U*) T0TCR = 1;//enable TIMER0

要注意幾點(diǎn)吧:1. 等全部設(shè)置好了,再enable TIMER0.2.要想有中斷響應(yīng),必須開NVIC的中斷。3.之前要先清中斷。定時(shí)器差不多介紹完了。

 

其次,中斷向量表的重映射問題。

如果要實(shí)現(xiàn)中斷向量表的重映射問題,就要對(duì)VTOR寄存器進(jìn)行設(shè)置。這里做的是重映射到0x20004000.好像設(shè)置VTOR寄存器與中斷向量拷貝并沒有一定的先后順序。

Q:這里就有一個(gè)疑問:VTOR的范圍為0x00000080-0x3FFFFF80的范圍,但是當(dāng)我將VTOR設(shè)置為0x30000000的時(shí)候,是沒有問題的。問題是將中斷向量表拷貝到0x30000000的時(shí)候,是無法復(fù)制的。0x30000000這個(gè)區(qū)域在內(nèi)存映射中是reserved。

     SCB->VTOR = 0x20004000;

TIMER0_IRQHandler

    LDR   R15, = TIMER0;這是將用戶代碼放置到ROM中,如果代碼已經(jīng)放置到SDRAM,且要在SDRAM中運(yùn)行的話,必須修改如下:

        LDR  R0, =0xA0000000
        LDR  R1, =TIMER0
        ADD  R0,R0,R1
        MOV  R15, R0  

TIMER0的程序?yàn)橄缫粋(gè)LED燈。

void TIMER0()
{
  *(INT32U*) T0IR = 0x1<<0;
  *(INT32U*) P4_22_IO = 0x00000021;
}

向量表拷貝匯編代碼:

five
        LDR    R0, =0x00000000
        LDR    R2, =0x20004000
        LDR    R3, =0x20004400
four 
        LDM    R0!,{R4-R7}
        STM    R2!,{R4-R7}
        CMP    R2,R3
        BCC    four
        BX     R14 ;;;匯編時(shí),如果BLX,BX過去的程序時(shí)C程序的話,則不用加返回指令,如果是匯編的

;話,就要BX R14

Q:調(diào)試的過程中,遇到的一些問題,還沒有解決。

   當(dāng)main函數(shù)中,不是用while(1)的時(shí)候,中斷就無法正常響應(yīng)。

關(guān)閉窗口
主站蜘蛛池模板: 欧美日韩91| 一级毛片播放 | 日本三极片| 欧美成人极品 | 亚洲欧洲视频 | 国产精品久久久久久久久 | 黄色大片在线免费观看 | 亚洲乱码一区二区 | 宅男噜噜噜66一区二区 | 美女毛片视频 | 午夜视频在线看 | 欧美日韩无 | 国产精品99久久久久久www | 免费一级片 | 亚洲精品一区二区三区在线 | 免费观看一区二区 | 中文在线观看免费网站 | 黄色草逼视频 | 91午夜精品亚洲一区二区三区 | 青青草伊人网 | av在线免费网站 | 精品视频一区二区三区四区 | 国产成人亚洲精品自产在线 | 4438成人网| 日韩在线免费播放 | 国产第四页 | 性爱视频日本 | 天天草夜夜草 | 亚洲久草 | 一区二区水蜜桃 | 亚洲高清视频在线 | 日本高潮视频 | 欧美做受喷浆在线观看 | 中文字幕免费视频 | 毛片在线观看视频 | 午夜在线视频观看 | 亚洲免费二区 | 日韩一区精品 | 男女久久久 | 亚洲免费精品 | 国产精品一级 |