2031|0

2015

帖子

0

TA的资源

纯净的硅(中级)

楼主
 

TMS320VC5509A的系统启动与中断系统 [复制链接]

  C55x支持32个ISR,中断分硬件和软件中断,软件中断由指令触发;硬件中断分片内外设触发和片内外设触发两种。根据该中断是否能被屏蔽可分为:可屏蔽中断(可以通过软件来加以屏蔽,所有的可屏蔽中断都是硬件中断,但硬件中断也不是全都能被屏蔽)和不可屏蔽中断(所有的软件中断及部分硬件中断)。
        C55x在中断时DSP会自动保存ST0_55、ST1_55、ST2_55三个寄存器。
        1.中断管理寄存器

图五 TMS320VC5509A终端管理寄存器




        2.中断向量和中断向量表
        中断向量:可用来存放中断服务程序的入口地址或一个跳转指令以用来转到中断服务程序的入口地址;
        中断向量地址:存放中断服务程序入口地址的内存空间地址;
        中断向量表:可重新定位的且总是一会变的形式出现。C55x复位后,此表的起始地址可由用户在程序的一开始进行设置。具体可以通过函数来给ICPD和IVPH赋值。

        C55x的中断向量地址为:中断向量指针IVPD(IVPH)(16位)+左移3位的中断向量序列号(0~31)。图六为中断向量序号排列的中断向量。可见由于复位中断向量是0,又由于在DSP复位后中断向量表的起始地址固定为0FFFFh,所以C55x是从FFFFF0h(此地址位于片上ROM段)开始执行程序,用户程序开始后,可以再进行中断向量表的重新定位。
                            图六 TMS320VC5509A中断向量表

     ISR序号   硬件中断优先级   中断名称   24位中断向量地址低八位   中断子程序功能

     0         0(最高)          RESET      0H                       复位(硬件或软件)

     1         1                NMI        8H                       外部不可屏蔽中断

     2         2                INT0       10H                      外部硬件中断0

     3         5                INT2       18H                      外部硬件中断2

     4         6                INT0       20H                      定时器0中断

     5         7                RINT0      28H                      McBSP0接收中断

     6         9                RINT1      30H                      McBSP1接收中断

     7         10               XINT1      38H                      McBSP1发送中断

     8         11               ---        40H                      软件中断8

     9         13               DMAC1      48H                      DMA通道1中断

     10        14               DSPINT     50H                      主机中断

     11        15               INT3       58H                      外部硬件中断3

     12        17               RINT2      60H                      McBSP2接收中断

     13        18               XINT2      68H                      McBSP2发送中断

     14        21               DMAC4      70H                      DMA通道4中断

     15        22               DMAC5      78H                      DMA通道5中断

     16        4                INT1       80H                      外部硬件中断1

     17        8                XINT0      88H                      McBSP0发送中断

     18        12               DMAC0      90H                      DMA通道0中断

     19        16               INT4       98H                      外部硬件中断4或RTC中断

     20        19               DMAC2      A0H                      DMA通道2中断

     21        20               DMAC3      A8H                      DMA通道3中断

     22        23               TINT1      B0H                      定时器1中断

     23        24               I2C        B8H                      I2C总线中断

     24        2                BERR       C0H                      总线出错中断

     25        25               DLOG       C8H                      数据记录中断

     26        26(最低)       RTOS       D0H                      实时操作系统中断

     27        27               ---        D8H                      软件中断27

     28        28               ---        E0H                      软件中断28

     29        29               ---        E8H                      软件中断29

     30        30               ---        F0H                      软件中断30

     31        31               ---        F8H                      软件中断31




需要重定位中断向量的时候,需要使用汇编语言(以外部中断的使用为例):
中断配置:
先配置一个空的中断向量表,再程序中利用csl的API函数来关联相应的中断函数到相应的中断向量上
*
* Copyright (C) 2003 Texas Instruments Incorporated
* All Rights Reserved
*
*
*---------vectors_dma2.s55---------
*
* Assembly file to set up interrupt vector table
*
       .sect ".vectors"

*------------------------------------------------------------------------------
* Global symbols defined here and exported out of this file
*------------------------------------------------------------------------------
        .global _VECSTART
*------------------------------------------------------------------------------
* Global symbols referenced in this file but defined somewhere else.
* Remember that your interrupt service routines need to be referenced here.
*------------------------------------------------------------------------------
        .ref _c_int00

      .def nmi, int0, int1, int2, int3, int4, int5, int6
      .def int7, int8, int9, int10, int11, int12, int13
      .def int14, int15, int16, int17, int18, int19, int20
      .def int21, int22, int23, int24, int25, int26, int27
      .def int28, int29

_VECSTART:
        .ivec _c_int00,c54x_stk
nmi     .ivec no_isr
        nop_16
int0    .ivec no_isr
        nop_16
int1    .ivec no_isr
        nop_16
int2    .ivec no_isr
        nop_16
int3    .ivec no_isr
        nop_16
int4    .ivec no_isr
        nop_16
int5    .ivec no_isr
        nop_16
int6    .ivec no_isr
        nop_16
int7    .ivec no_isr
        nop_16
int8    .ivec no_isr
        nop_16
int9    .ivec no_isr
        nop_16
int10   .ivec no_isr
        nop_16
int11   .ivec no_isr
        nop_16
int12   .ivec no_isr
        nop_16
int13 .ivec no_isr
        nop_16
int14   .ivec no_isr
        nop_16
int15   .ivec no_isr
        nop_16
int16   .ivec no_isr
        nop_16
int17   .ivec no_isr
        nop_16
int18   .ivec no_isr
        nop_16
int19   .ivec no_isr
        nop_16
int20   .ivec no_isr
        nop_16
int21   .ivec no_isr
        nop_16
int22   .ivec no_isr
        nop_16
int23   .ivec no_isr
        nop_16
int24   .ivec no_isr
        nop_16
int25   .ivec no_isr
        nop_16
int26   .ivec no_isr
        nop_16
int27   .ivec no_isr
        nop_16
int28   .ivec no_isr
        nop_16
int29   .ivec no_isr
        nop_16

*------------------------------------------------------------------------------
* This is a dummy interrupt service routine used to initialize the IST.
*------------------------------------------------------------------------------
        .text
        .def no_isr
no_isr:
        b #no_isr
*------------------------------------------------------------------------------

void INTconfig()
{
/ Temporarily disable all maskable interrupts */
IRQ_setVecs((Uint32)(&VECSTART));
/ Temporarily disable all maskable interrupts */
old_intm = IRQ_globalDisable();
/ Get Event Id associated with External INT1(8019), for use with */
eventId0 = IRQ_EVT_INT0;
/ Clear any pending INT1 interrupts */
IRQ_clear(eventId0);
/ Place interrupt service routine address at */
/ associated vector location */
IRQ_plug(eventId0,&int1);
/ Enable INT1(8019) interrupt */
IRQ_enable(eventId0);
/ Enable all maskable interrupts */
IRQ_globalEnable();   
}
程序:
main()
{
/初始化CSL库*/
    CSL_init();
   /EMIF为全EMIF接口*/
    CHIP_RSET(XBSR,0x0a01);
/设置系统的运行速度为144MHz*/
    PLL_config(&myConfig);  
//设置并使能5509A芯片的INT0中断(EXINT中断)
INTconfig();
while(1);
}


//External INT0(EXINT)中断处理函数
interrupt void int1()
{
    printf("EXINT ouccers\n");
}
设置好IVPD(IVPH)后,还需要在cmd文件里重新指明中断向量表存放在相应的位置。

IVPD和IVPH的赋值和.CMD文件中的存储器定位有关,  BOOT    origin=8000h,length=00100h vectors:>BOOT,如上面定位是80H,则初始化IVPD和IVPH的值时就是MOV #0x80,mmap(IVPD)。


 
点赞 关注

回复
举报
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/8 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表