TMS320VC5509总结分享

2019-07-16 16:37发布

TMS320VC5509总结分享

  TMS320VC5509工作基本条件包括电源电路、时钟电路、JTAG(调试用)接口电路等。    电源电路:模拟、数字、内核电源的纯净。一般使用TPS73HD301提供。    时钟电路:晶振要尽量靠近DSP,内部有倍频电路,外部可以使用12MHz的有源或者无源元件。    JTAG电路:对DSP通用系统来说要求不要超过6英寸,超过此距离要提高驱动能力。    对于不使用的外部中断接上拉电阻到DVDD。
    复位信号不要用简单的RC电路,用门电路或者专门的复位芯片产生。
    GPIO[0:3]的电平决定上电引导方式,需要根据自己需要设置。
    对于外部引导,建议使用串行flash,布线简单(省去很多地址与数据线)。    电路参考TI提供的EVM。TMS320VC5509的工作流程:
    5509上电复位后从0xffff00开始执行程序(因为复位后IVPD的值是0xffff),在0xffff00处是指令:.ivec 0xff8000,程序转入0xff8000处执行,从0xff8000处开始就是5509内部固化的bootloader程序,在这段程序里通过读取GPIO口的状态来转入不同的boot方式。
    假设用户的程序存片外flash中,5509内部固化的bootloader程序从片外的flash中按照一定格式读取数据并搬入片内RAM中,搬完后转入片内RAM的程序入口执行程序。    对于中断,需要自己定义一个中断向量表放入RAM中,并通过修改IVPD和IVPH的值来指向中断向量表的入口位置;寄存器IER0和IER1是各个中断的使能位,ST1的INTM位是总的中断使能位。中断向量表中应该放入中断服务程序的入口地址,也可以先不放入,在程序运行后通过调用CSL的IRQ_plug()函数在中断向量表插入中断服务程序入口。

学习DSP,当然是从一些简单的测试程序开始。使一个LED的闪亮是经常用的,但这其中有一个误区,现分析如下,以定时器控制LED灯为例:void main()
   {
    init_5509();
    init_timer();
    while(1)
         {
         asm(" NOP");
         }
   }
interrupt void int_timer0()
{
         Flag=Flag+1;
         if   (Flag>10)
              asm(" SSBX XF");         else              asm(" RSBX XF");
         if (Flag>20)
               Flag=0;
}
    这个程序不能实现控制的。使用XF的时候要注意一下,XF是ST1的一个bit,但是在中断中,首先把ST1压入堆栈,出中断前才弹出堆栈,所以在中断中改变XF没有实际的意义。所以在C/C++加如汇编要谨慎。修改后的程序如下:void main()
{
    init_5509();
    init_timer();
    while(1)
    {
           asm(" NOP");
           if (Flag>10)
              asm(" SSBX XF");          else             asm(" RSBX XF");
    }
}
interrupt void int_timer0()
{
       Flag=Flag+1;
       if (Flag>20)
       Flag=0;
}
这个程序就好使。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。