TI C64X DSP中斷向量表配置(硬體中斷)

來源:互聯網
上載者:User

1. 編寫插斷服務常式

在.c源檔案中編寫ISR函數c_intXX,用於中斷處理,如:

interrupt void c_intXX (void)

{

           …;

}

註:對於硬體中斷而言,XX = 00~15。

2.初始化中斷向量表,並在記憶體段中的中斷向量表中配置好對應的中斷向量

           首先是把中斷向量表定位到某一記憶體段中,我們可以在cmd檔案中配置中斷向量表的記憶體映射,如:

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

}

       

            然後建立一個.asm檔案,用以配置中斷向量表中的中斷向量,我們需要聲明一些全域變數,以便其他源檔案可以引用這些變數或者引用其他源檔案的變數,如:

    .global _vectors     

       .global _c_int00     

       .global _vector1  

       .global _vector2

       .global _vector3

       .global _vector4

       .global _vector5

       .global _vector6

       .global _vector7

       .global _c_int08      ; 對應main()函數的c_int08插斷服務常式(假設處理的是EDMA中斷)

       .global _vector9         

       .global _vector10

       .global _vector11   

       .global _vector12  

       .global _vector13   

       .global _vector14   

       .global _vector15   

              

         因為引用了rts的_c_int00中斷,即RESET中斷,因此需要引入這個符號:

   .ref      _c_int00

       

為了把插斷服務常式的地址,即中斷向量插入到中斷向量表中,可以定義一個宏:

VEC_ENTRY .macro addr

        STW       B0,*--B15

        MVKL      addr,B0

        MVKH      addr,B0

        B         B0

        LDW       *B15++,B0

        NOP       2

        NOP   

        NOP   

.endm         

           

       為了初始化中斷向量表中的中斷向量,可以定義一個虛擬中斷向量:

_vec_dummy:

      B        B3

      NOP      5

           

      接下來就可以配置中斷向量表了:

.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,對應於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模組來設定中斷比較方便,在設定之前,需要外部連結上面的asm程式的中斷向量表符號:

extern far void vectors();//之所以為vectors,因為C編譯器編譯後自動改名其為_vectors

引用了中斷向量表之後,就可以設定中斷了:

        IRQ_setVecs(vectors); //指向asm中定義的中斷向量表

        IRQ_nmiEnable();

        IRQ_globalEnable();

        IRQ_map(IRQ_EVT_EDMAINT, 8);        //映射事件到指定的物理中斷號

        IRQ_reset(IRQ_EVT_EDMAINT);

4.啟動中斷源,如EDMA控制器的中斷

至此,插斷服務常式c_int8就可以為EDMAINT中斷服務了,其它硬體中斷向量的配置同理。

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.