打印

5509的存储器、系统启动与中断、时钟

[复制链接]
1130|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
一灯大神|  楼主 | 2017-4-12 09:30 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

一、TMS320VC5509A的存储器

TMS320VC5509A的程序存储区地址和数据存储区地址使用同一物理地址。总的片上存储器是320K bytes(128K 16位RAM和32K 16位ROM)。整个内存地址为16M bytes(包括可扩展的外部存储器地址),片上存储器包括64K bytes的DARAM、192K bytes的SARAM和64K bytes的ROM。

1. 片上DARAM

TMS320VC5509A的片上DARAM地址范围为000000h-00FFFFh,总共64K bytes。DARAM被分成8个block,每块8K bytes。每块DARAM每个时钟可以执行两次读写(两次读,两次写,或者一次读和一次写)。DARAM可以被内部程序,数据,DMA总线读取。HPI只能读写DARAM的前4个blocks(32K
bytes)。DARAM的前192 bytes为Memory-Mapped Register(MMRS)预留:


TMS320VC5509A片上DARAM


2. 片上SARAM


TMS320VC5509A的片上SARAM地址范围为010000h-03FFFFh,总共192K bytes;SARAM被分成24个block,每块8K
bytes;每块SARAM每个时钟可以执行一次读写(一次读或一次写),SARAM可以被内部程序,数据,DMA总线读取:




TMS320VC5509A片上SARAM



3. 片上ROM


TMS320VC5509A的片上ROM地址范围为FF0000h-FFFFFFh,总共64K
bytes。ROM本分成1个32K bytes的块和2个16K bytes的块。片上ROM的地址空间可以用软件映射到外部存储器或内部存储器。FFC000h-FFFFFF的地址空间可以配置为secure ROM:





TMS320VC5509A片上ROM和secure ROM(SROM)




4. TMS320VC5509A内存映射







TMS320VC5509A内存映射



TMS320VC5509A的整个16M bytes(包括片外存储器地址)存储器地址分成四个CE,每个CE区4M bytes空间每个CE使用片外存储器时使用CE片选引脚信号区分。第一个CE区地址包括了64K bytes的DARAM和192K bytes的SARAM,其中DRRAM又包括了MMR,最后一个CE区包括了片上ROM地址,可以使用软件使其映射到片上ROM或是片外存储器。


二、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段)开始执行程序,用户程序开始后,可以再进行中断向量表的重新定位。
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
TMS320VC5509A中断向量表












相关帖子

沙发
一灯大神|  楼主 | 2017-4-12 09:30 | 只看该作者
需要重定位中断向量的时候,需要使用汇编语言(以外部中断的使用为例):


中断配置,先配置一个空的中断向量表,再程序中利用csl的API函数来关联相应的中断函数到相应的中断向量上:

[html] view plain copy
print?

  • *  
  • * 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  
  • *------------------------------------------------------------------------------  [url=][/url]
    ** 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_stknmi     .ivec no_isr        nop_16int0    .ivec no_isr        nop_16int1    .ivec no_isr        nop_16int2    .ivec no_isr        nop_16int3    .ivec no_isr        nop_16int4    .ivec no_isr        nop_16int5    .ivec no_isr        nop_16int6    .ivec no_isr        nop_16int7    .ivec no_isr        nop_16int8    .ivec no_isr        nop_16int9    .ivec no_isr        nop_16int10   .ivec no_isr        nop_16int11   .ivec no_isr        nop_16int12   .ivec no_isr        nop_16int13 .ivec no_isr        nop_16int14   .ivec no_isr        nop_16int15   .ivec no_isr        nop_16int16   .ivec no_isr        nop_16int17   .ivec no_isr        nop_16int18   .ivec no_isr        nop_16int19   .ivec no_isr        nop_16int20   .ivec no_isr        nop_16int21   .ivec no_isr        nop_16int22   .ivec no_isr        nop_16int23   .ivec no_isr        nop_16int24   .ivec no_isr        nop_16int25   .ivec no_isr        nop_16int26   .ivec no_isr        nop_16int27   .ivec no_isr        nop_16int28   .ivec no_isr        nop_16int29   .ivec no_isr        nop_16*------------------------------------------------------------------------------* This is a dummy interrupt service routine used to initialize the IST.*------------------------------------------------------------------------------        .text        .def no_isrno_isr:        b #no_isr*------------------------------------------------------------------------------[html] view plain copy
    print?


    • 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();      
    • }  
    [url=][/url]

    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();    }
    程序:

    [html] view plain copy
    print?

    • main()  
    • {  
    •         /*初始化CSL库*/  
    •         CSL_init();  
    •         /*EMIF为全EMIF接口*/  
    •         CHIP_RSET(XBSR,0x0a01);  
    •         /*设置系统的运行速度为144MHz*/  
    •         PLL_config(&myConfig);   
    •         //设置并使能5509A芯片的INT0中断(EXINT中断)  
    •         INTconfig();  
    •         while(1);  
    • }  
    [url=][/url]

    main(){        /*初始化CSL库*/        CSL_init();        /*EMIF为全EMIF接口*/        CHIP_RSET(XBSR,0x0a01);        /*设置系统的运行速度为144MHz*/        PLL_config(&myConfig);          //设置并使能5509A芯片的INT0中断(EXINT中断)        INTconfig();        while(1);}



    [html] view plain copy
    print?

    • //External INT0(EXINT)中断处理函数  
    • interrupt void int1()  
    • {  
    •     printf("EXINT ouccers\n");  
    • }  
    [url=][/url]

    //External INT0(EXINT)中断处理函数interrupt void int1(){    printf("EXINT ouccers\n");}


    设置好IVPD(IVPH)后,还需要在cmd文件里重新指明中断向量表存放在相应的位置。


    参考http://www.eptw.com/bbs/viewthread.php?tid=2619


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


    三、TMS320VC5509A的时钟(PLL)

    1. 时钟电路

    TMS320VC5509A的内部振荡器复位时为有效。内部振荡器需要外部晶体支持,连接到X1和X2/CLKIN引脚。如果不用内部振荡器,外部时钟连接到X2/CLKIN引脚,X1引脚悬空。当内部振荡器作为时钟源输入到PLLs时,振荡器时钟可以倍频或分频成为CPU时钟、USB时钟等。

    电路连接图如下图所示:



    各电阻电容值参考下表:




    2. PPLs


    1) Clock Generation in Bypass Mode (DPLL Disabled)


    通过时钟模式设置寄存器的BYPASS_DIV位可以设置DPLL失效。


    2) Clock Generation in Lock Mode (DPLL Synthesis Enabled)


    The frequency of the reference clock provided at the X2/CLKIN pin can be multiplied by a synthesis factor of N to generate the internal CPU clock cycle. The synthesis factor is determined by:


    N=M/D



    where: M = the multiply factor set in the PLL_MULT field of the clock mode register


    D = the divide factor set in the PLL_DIV field of the clock mode register


    Valid values for M are (multiply by) 2 to 31. Valid values for DL are (divide by) 1, 2, 3, and 4.





使用特权

评论回复
板凳
zhangmangui| | 2017-4-12 22:32 | 只看该作者
感谢分享

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

65

主题

112

帖子

2

粉丝