原创 LF2407A定时器1中断闪烁LED

2008-12-12 21:08 2739 7 7 分类: 处理器与DSP
      利用项目组以前废弃的电机控制板(+15V供电)做了一下DSP点亮LED的实验,板上DSP为TMS320LF2407A,调试了一个星期左右。期间遇到了很多问题,最终还是调试成功啦,2.gif而且基本学习了该DSP的最小系统的连接方法。

 

1、仿真器SEED-XDSUSB2.0;师兄们都讲我用的那个仿真器是坏的,可是我在做实验时,仿真器偶尔能够连接上DSP,这说明仿真器还是能用的。于是我坚持我的观点,在仿真器和DSP的连接上调试了1天,终于发现是仿真器每次用之前硬件复位一下仿真器链接到DSP的几率增大。

2.开发板;实验室废弃的电机控制板很难连接上仿真器,经我测量发现该板上RS复位引脚断路,将其连接到+3.3V电源正(注意不是+5V,我试了一下,+5V好像是不行的)。

做好上面两项工作后,仿真器可以轻松的链接到DSP,哈哈,变废为宝啦。

 

 

总结:初学者在连接仿真器和DSP时很多时候会报错说不能初始化CPU,这时候先要检查DSP是否工作正常(包括电源、复位、晶振、PLLVcca,JTAG的TCLK),其次是仿真器(,驱动程序安装正确?JTAG连接正确?JTAG各引脚信号正常?仿真器复位?),还有软件(安装补丁正确?CCS setup正确?)

 

接下来几天就是学习DSP的C编程基本格式和方法,大体有个印象。

 

控制板上LED阳极通过一2K电阻接到电源正端(+15V),阴极通过芯片ULN2003接DSP的IOPF0引脚。控制源程序如下:

 

#include "f2407.h"          /*控制寄存器定义头文件*/

void SystemInit();
void Timer1Init();

int numled = 200;

main()
{

    SystemInit();           /*系统初始化         */

    *MCRC     = *MCRC & 0x00FF; /*IOPF0-6设为IO口模式*/
    *PFDATDIR = 0xFF00;     /*IOPF0-6输出0       */

    asm(" CLRC INTM ");    /*开总中断           */

    Timer1Init();           /*定时器1初始化      */

    while(1);

}

void SystemInit()
{
    asm(" SETC INTM ");    /*关总中断           */
    asm(" CLRC SXM ");      /*禁止符号位扩展     */
    asm(" CLRC CNF ");      /*B0映射到数据空间   */
    asm(" CLRC OVM ");      /*累加器结果正常溢出 */
   
    *SCSR1 = 0x00FC;        /*系统时钟4*10M      */
                            /*使能AD,SCI,SPI,CAN,EVA,EVB*/
    *WDCR  = 0x006F;        /* 禁止看门狗        */
    *WDKEY = 0x5555;        /*复位看门狗         */
    *WDKEY = 0xAAAA;
   
    *IFR   = 0xFFFF;        /*复位中断标志       */
    *IMR   = 0x0002;        /*打开INT2           */
}

void Timer1Init()
{
    *EVAIMRA = 0x0080;      /*定时器1周期中断使能*/
    *EVAIFRA = 0xFFFF;      /*清楚中断标志       */
    *GPTCONA = 0x0000;
    *T1PR    = 2500;        /*定时器周期2500*0.4us=1ms*/
    *T1CNT   = 0;
    *T1CON   = 0xD446;      /*内部时钟源,16分频0.4us计数一次*/
}

void interrupt c_int2()     /*定时器1中断服务程序*/
{
    if ( *PIVR!=0x0027 )
    {
     asm(" CLRC INTM ");
     return;
    }
   
    *T1CNT = 0;
    numled--;
   
    if ( numled == 0 )
    {
       numled = 200;
       if ( *PFDATDIR & 0x0001 == 0x0001)
       {
         *PFDATDIR = *PFDATDIR & 0xFFFE;/*IOPF0=0*/
       }
       else
       {
         *PFDATDIR = *PFDATDIR | 0x0001;/*IOPF0=1*/
       }
    }
    *EVAIFRA = 0x0080;
    asm(" CLRC INTM ");
}

 

点击开大图

 

 

 

点击看大图

 

点击看大图

 
PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
EE直播间
更多
我要评论
0
7
关闭 站长推荐上一条 /3 下一条