小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

TI C64X DSP中斷向量表的配置(硬件中斷) zz

 chuanshaoke 2010-04-22
1. 編寫(xiě)中斷服務(wù)例程
在.c源文件中編寫(xiě)ISR函數(shù)c_intXX,用于中斷處理,如:
interrupt void c_intXX (void)
{
           …;
}
注:對(duì)于硬件中斷而言,XX = 00~15。
2.初始化中斷向量表,并在內(nèi)存段中的中斷向量表中配置好對(duì)應(yīng)的中斷向量
           首先是把中斷向量表定位到某一內(nèi)存段中,我們可以在cmd文件中配置中斷向量表的內(nèi)存映射,如:
MEMORY
{
           VECTORS:         org = 00000000h,       len = 00000400h
           L2SRAM:            org = 00000400h,       len = 00100000h
           SDRAM:             org = 80000000h,       len = 10000000h
}
SECTIONS
{
           .vecs                  :>            VECTORS
           .data                  :>            L2SRAM
           .text                   :>            L2SRAM
           .switch               :>            L2SRAM
           .stack                 :>            L2SRAM
           .bss                    :>            L2SRAM
           .cinit                   :>            L2SRAM
           .far                     :>            L2SRAM
           .cio                     :>            L2SRAM
           .const                 :>            L2SRAM
           .sysmem             :>            SDRAM
           .tables                :>            L2SRAM
}
      
            然后建立一個(gè).asm文件,用以配置中斷向量表中的中斷向量,我們需要聲明一些全局變量,以便其他源文件可以引用這些變量或者引用其他源文件的變量,如:
    .global _vectors    
       .global _c_int00    
       .global _vector1 
       .global _vector2
       .global _vector3
       .global _vector4
       .global _vector5
       .global _vector6
       .global _vector7
       .global _c_int08      ; 對(duì)應(yīng)main()函數(shù)的c_int08中斷服務(wù)例程(假設(shè)處理的是EDMA中斷)
       .global _vector9        
       .global _vector10
       .global _vector11  
       .global _vector12 
       .global _vector13  
       .global _vector14  
       .global _vector15  
             
         因?yàn)橐昧藃ts的_c_int00中斷,即RESET中斷,因此需要引入這個(gè)符號(hào):
   .ref      _c_int00
      
為了把中斷服務(wù)例程的地址,即中斷向量插入到中斷向量表中,可以定義一個(gè)宏:
VEC_ENTRY .macro addr
        STW       B0,*--B15
        MVKL      addr,B0
        MVKH      addr,B0
        B         B0
        LDW       *B15++,B0
        NOP       2
        NOP  
        NOP  
.endm        
          
       為了初始化中斷向量表中的中斷向量,可以定義一個(gè)虛擬的中斷向量:
_vec_dummy:
      B        B3
      NOP      5
          
      接下來(lái)就可以配置中斷向量表了:
.sect “.vecs”
.align 1024
_vectors:
_vector0:       VEC_ENTRY _c_int00          ;RESET中斷
_vector1:       VEC_ENTRY _vec_dummy ;NMI不可屏蔽中斷
_vector2:       VEC_ENTRY _vec_dummy ;保留中斷1
_vector3:       VEC_ENTRY _vec_dummy ;保留中斷2
_vector4:       VEC_ENTRY _vec_dummy ;外部中斷INT4
_vector5:       VEC_ENTRY _vec_dummy ;外部中斷INT5
_vector6:       VEC_ENTRY _vec_dummy ;外部中斷INT6
_vector7:       VEC_ENTRY _vec_dummy ;外部中斷INT7
_vector8:       VEC_ENTRY _c_int08 ; EDMA控制器中斷EDMAINT,對(duì)應(yīng)于c_int08 ISR
_vector9:       VEC_ENTRY _vec_dummy;JTAGRTDX中斷
_vector10:      VEC_ENTRY _vec_dummy;EMIF_SDRAM_Timer中斷
_vector11:      VEC_ENTRY _vec_dummy;McBSP_0_Receive中斷
_vector12:      VEC_ENTRY _vec_dummy;McBSP_1_Transmit中斷
_vector13:      VEC_ENTRY _vec_dummy;Host_Port_Host_to_DSP中斷
_vector14:      VEC_ENTRY _vec_dummy;Timer0中斷
_vector15:      VEC_ENTRY _vec_dummy;Timer1中斷
3. 在C程序中指定定義的中斷向量表,并且啟用CPU中斷功能
在C程序中,用CSL的IRQ模塊來(lái)設(shè)置中斷比較方便,在設(shè)置之前,需要外部鏈接上面的asm程序的中斷向量表符號(hào):
extern far void vectors();//之所以為vectors,因?yàn)镃編譯器編譯后自動(dòng)改名其為_(kāi)vectors
引用了中斷向量表之后,就可以設(shè)置中斷了:
        IRQ_setVecs(vectors); //指向asm中定義的中斷向量表
        IRQ_nmiEnable();
        IRQ_globalEnable();
        IRQ_map(IRQ_EVT_EDMAINT, 8);        //映射事件到指定的物理中斷號(hào)
        IRQ_reset(IRQ_EVT_EDMAINT);
4.啟動(dòng)中斷源,如EDMA控制器的中斷
至此,中斷服務(wù)例程c_int8就可以為EDMAINT中斷服務(wù)了,其它硬件中斷向量的配置同理。
在CCS里面,通過(guò)DSP/BIOS的配置,我們可以很方便的設(shè)置自己想要的對(duì)象,進(jìn)行初始化,簡(jiǎn)化了很多底層的步驟。
DSP/BIOS硬中斷創(chuàng)建的一般步驟:
1. DSP/BIOS->Scheduling->HWI->HWI_INT(x);
2. 在HWI_INT(X)屬性的function中填入你要觸發(fā)的中斷處理,如_hwiFunc,并選中Dispatcher;
3. 開(kāi)啟硬中斷對(duì)象:
       IRQ_reset(IRQ_EVT_EXTINT5);
       IRQ_enable(IRQ_EVT_EXTINT5);
4. 編寫(xiě)硬中斷處理程序hwifunc();
       void hwifunc(void){}
 
本文來(lái)自CSDN博客,轉(zhuǎn)載請(qǐng)標(biāo)明出處:http://blog.csdn.net/henhen2002/archive/2009/08/19/4464205.aspx

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買(mǎi)等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類(lèi)似文章 更多