利用项目组以前废弃的电机控制板(+15V供电)做了一下DSP点亮LED的实验,板上DSP为TMS320LF2407A,调试了一个星期左右。期间遇到了很多问题,最终还是调试成功啦,
而且基本学习了该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 ");
}
文章评论(0条评论)
登录后参与讨论