TI中文支持网
TI专业的中文技术问题搜集分享网站

TMS320F2027通过串口烧录后, 中断部分的代码无法执行.

最近准备基于TMS320F28027开发一套产品, 通过f28027自带的ad对电流进行采样, 每次采样完成, 触发中断, 然后进行傅立叶变换.

这几天在用TI的评估板进行软件测试, 发现一个问题, 还没有找到解决方法: 如果用jtag烧录程序到flash中, 程序可以正常运行; 如果使用c2prog1.7通过串口烧录程序到flash, 中断函数无法执行, 程序不断重新执行, 连主循环到进入不了. 请帮忙卡看是怎么回事?

主函数代码如下,  每次程序执行到 EnableInterrupts(); 就又返回InitSysCtrl();

不知道是否中断函数的地址被指到了主程序起始的地址?

void main(void)
{
 InitSysCtrl();
 InitGpio();
 InitI2CGpio();
 InitSciGpio();
 DINT;

 InitPieCtrl();
 IER = 0x0000;
 IFR = 0x0000;
 InitPieVectTable();
#ifdef _TOFLASH
 MemCopy(&RamfuncsLoadStart, &RamfuncsLoadEnd, &RamfuncsRunStart);
 MemCopy(&RamconstsLoadStart, &RamconstsLoadEnd, &RamconstsRunStart);
 InitFlash();
#endif

 InitI2C();
 InitSci();
 InitRS485();
 InitCpuTimers();

 InitAdc();
 InitEPwm();
 EnableInterrupts();

 EnableDog();

 for (;;)
 {}

}

 

YINGTAO DUAN:

ccs的版本是 6.1.0.00104 , hex文件是通过ccs生成的. ccs和hex2000生成的文件内容一样

最近准备基于TMS320F28027开发一套产品, 通过f28027自带的ad对电流进行采样, 每次采样完成, 触发中断, 然后进行傅立叶变换.

这几天在用TI的评估板进行软件测试, 发现一个问题, 还没有找到解决方法: 如果用jtag烧录程序到flash中, 程序可以正常运行; 如果使用c2prog1.7通过串口烧录程序到flash, 中断函数无法执行, 程序不断重新执行, 连主循环到进入不了. 请帮忙卡看是怎么回事?

主函数代码如下,  每次程序执行到 EnableInterrupts(); 就又返回InitSysCtrl();

不知道是否中断函数的地址被指到了主程序起始的地址?

void main(void)
{
 InitSysCtrl();
 InitGpio();
 InitI2CGpio();
 InitSciGpio();
 DINT;

 InitPieCtrl();
 IER = 0x0000;
 IFR = 0x0000;
 InitPieVectTable();
#ifdef _TOFLASH
 MemCopy(&RamfuncsLoadStart, &RamfuncsLoadEnd, &RamfuncsRunStart);
 MemCopy(&RamconstsLoadStart, &RamconstsLoadEnd, &RamconstsRunStart);
 InitFlash();
#endif

 InitI2C();
 InitSci();
 InitRS485();
 InitCpuTimers();

 InitAdc();
 InitEPwm();
 EnableInterrupts();

 EnableDog();

 for (;;)
 {}

}

 

Seven Han:

回复 YINGTAO DUAN:

你好,有没有可能使用c2prog烧录,程序没下载完成呢

最近准备基于TMS320F28027开发一套产品, 通过f28027自带的ad对电流进行采样, 每次采样完成, 触发中断, 然后进行傅立叶变换.

这几天在用TI的评估板进行软件测试, 发现一个问题, 还没有找到解决方法: 如果用jtag烧录程序到flash中, 程序可以正常运行; 如果使用c2prog1.7通过串口烧录程序到flash, 中断函数无法执行, 程序不断重新执行, 连主循环到进入不了. 请帮忙卡看是怎么回事?

主函数代码如下,  每次程序执行到 EnableInterrupts(); 就又返回InitSysCtrl();

不知道是否中断函数的地址被指到了主程序起始的地址?

void main(void)
{
 InitSysCtrl();
 InitGpio();
 InitI2CGpio();
 InitSciGpio();
 DINT;

 InitPieCtrl();
 IER = 0x0000;
 IFR = 0x0000;
 InitPieVectTable();
#ifdef _TOFLASH
 MemCopy(&RamfuncsLoadStart, &RamfuncsLoadEnd, &RamfuncsRunStart);
 MemCopy(&RamconstsLoadStart, &RamconstsLoadEnd, &RamconstsRunStart);
 InitFlash();
#endif

 InitI2C();
 InitSci();
 InitRS485();
 InitCpuTimers();

 InitAdc();
 InitEPwm();
 EnableInterrupts();

 EnableDog();

 for (;;)
 {}

}

 

YINGTAO DUAN:

回复 Seven Han:

c2prog烧录过程如下, 请给判断下是否下载完成.

Image starts at 0x003F2000CRC Info added at 0x003F69A7: 0xA7CF 0x1589 0x0000

*** PLEASE RESET TARGET IN SCI BOOT-LOADER MODE ***Connecting with target (autobaud)… OK.Bootloading… OK.Please wait…Connecting with target… -Chip ID: 0xCF-Chip Rev: 0x01 OK.Unlocking target… OK.Loading… OK.Connecting with target… -Flash API version: 200 OK.Erasing flash… [ABCD] OK.Programming… OK.

You may now close this window and reset the target.

最近准备基于TMS320F28027开发一套产品, 通过f28027自带的ad对电流进行采样, 每次采样完成, 触发中断, 然后进行傅立叶变换.

这几天在用TI的评估板进行软件测试, 发现一个问题, 还没有找到解决方法: 如果用jtag烧录程序到flash中, 程序可以正常运行; 如果使用c2prog1.7通过串口烧录程序到flash, 中断函数无法执行, 程序不断重新执行, 连主循环到进入不了. 请帮忙卡看是怎么回事?

主函数代码如下,  每次程序执行到 EnableInterrupts(); 就又返回InitSysCtrl();

不知道是否中断函数的地址被指到了主程序起始的地址?

void main(void)
{
 InitSysCtrl();
 InitGpio();
 InitI2CGpio();
 InitSciGpio();
 DINT;

 InitPieCtrl();
 IER = 0x0000;
 IFR = 0x0000;
 InitPieVectTable();
#ifdef _TOFLASH
 MemCopy(&RamfuncsLoadStart, &RamfuncsLoadEnd, &RamfuncsRunStart);
 MemCopy(&RamconstsLoadStart, &RamconstsLoadEnd, &RamconstsRunStart);
 InitFlash();
#endif

 InitI2C();
 InitSci();
 InitRS485();
 InitCpuTimers();

 InitAdc();
 InitEPwm();
 EnableInterrupts();

 EnableDog();

 for (;;)
 {}

}

 

YINGTAO DUAN:

回复 Seven Han:

我也开始怀疑是否程序没有下载完了.

哪位能否帮忙在TI的F28027评估板上测试下附件的串口烧录, 正常的烧录后程序执行过程应该如下:

1. LED0闪烁后熄灭(初始化时执行)

2. LED1闪烁后熄灭(初始化时执行)

3. LED2和LED3闪烁.(LED2在主循环中闪烁, LED3在中断中闪烁)

我的板在jtag烧录后执行正常, 在串口烧录后, 在多次上电后, 只有LED0闪烁.

请帮忙给测试下, 我好判断是hex文件有问题, 还是我的串口烧录环境有问题.

最近准备基于TMS320F28027开发一套产品, 通过f28027自带的ad对电流进行采样, 每次采样完成, 触发中断, 然后进行傅立叶变换.

这几天在用TI的评估板进行软件测试, 发现一个问题, 还没有找到解决方法: 如果用jtag烧录程序到flash中, 程序可以正常运行; 如果使用c2prog1.7通过串口烧录程序到flash, 中断函数无法执行, 程序不断重新执行, 连主循环到进入不了. 请帮忙卡看是怎么回事?

主函数代码如下,  每次程序执行到 EnableInterrupts(); 就又返回InitSysCtrl();

不知道是否中断函数的地址被指到了主程序起始的地址?

void main(void)
{
 InitSysCtrl();
 InitGpio();
 InitI2CGpio();
 InitSciGpio();
 DINT;

 InitPieCtrl();
 IER = 0x0000;
 IFR = 0x0000;
 InitPieVectTable();
#ifdef _TOFLASH
 MemCopy(&RamfuncsLoadStart, &RamfuncsLoadEnd, &RamfuncsRunStart);
 MemCopy(&RamconstsLoadStart, &RamconstsLoadEnd, &RamconstsRunStart);
 InitFlash();
#endif

 InitI2C();
 InitSci();
 InitRS485();
 InitCpuTimers();

 InitAdc();
 InitEPwm();
 EnableInterrupts();

 EnableDog();

 for (;;)
 {}

}

 

Seven Han:

回复 YINGTAO DUAN:

你好,下载看着是没啥问题的,cmd文件配置为烧写flash,按照以下步骤操作:

一、设置DSP板启动模式为“SCI-A boot”,然后给DSP板上电。

二、打开C2Prog软件,选择要烧写的hex文件,

三,点击program

四,烧写完成后boot mode改成Flash启动,复位dsp或者重新上电

请参考帖子:http://www.deyisupport.com/question_answer/microcontrollers/c2000/f/56/t/9864.aspx?pi239031348=1

最近准备基于TMS320F28027开发一套产品, 通过f28027自带的ad对电流进行采样, 每次采样完成, 触发中断, 然后进行傅立叶变换.

这几天在用TI的评估板进行软件测试, 发现一个问题, 还没有找到解决方法: 如果用jtag烧录程序到flash中, 程序可以正常运行; 如果使用c2prog1.7通过串口烧录程序到flash, 中断函数无法执行, 程序不断重新执行, 连主循环到进入不了. 请帮忙卡看是怎么回事?

主函数代码如下,  每次程序执行到 EnableInterrupts(); 就又返回InitSysCtrl();

不知道是否中断函数的地址被指到了主程序起始的地址?

void main(void)
{
 InitSysCtrl();
 InitGpio();
 InitI2CGpio();
 InitSciGpio();
 DINT;

 InitPieCtrl();
 IER = 0x0000;
 IFR = 0x0000;
 InitPieVectTable();
#ifdef _TOFLASH
 MemCopy(&RamfuncsLoadStart, &RamfuncsLoadEnd, &RamfuncsRunStart);
 MemCopy(&RamconstsLoadStart, &RamconstsLoadEnd, &RamconstsRunStart);
 InitFlash();
#endif

 InitI2C();
 InitSci();
 InitRS485();
 InitCpuTimers();

 InitAdc();
 InitEPwm();
 EnableInterrupts();

 EnableDog();

 for (;;)
 {}

}

 

YINGTAO DUAN:

回复 Seven Han:

我的串口烧写过程是成功的, 只是程序运行不是预期结果. 根据你前面程序没有下载完成的提示, 我现在发现了导致问题的代码. 还有两个问题跟你确认下: 

1.  下面这段代码的正确顺序是什么? 我的代码中, 如果InitPieVectTable();写在Memcpy()之前, 串口烧写时,程序会卡在InitPieVectTable()中, 不知道什么原因? jtag烧写时, 则不会卡住.

InitSysCtrl(); InitGpio(); DINT; InitPieCtrl(); IER = 0x0000; IFR = 0x0000; InitPieVectTable();#ifdef _TOFLASH    MemCopy(&RamfuncsLoadStart, &RamfuncsLoadEnd, &RamfuncsRunStart);    InitFlash();

#endif

2. 常量是否无法通过串口烧写到PAGE1? 而jtag可以.

我发现我的问题,主要就是把常量PieVectTableInit定义到PAGE1的FLASH中, 而PAGE1中的数据没有被串口烧些, 导致中断函数的地址无效.

.econst             : > FLASHB       PAGE = 1

最近准备基于TMS320F28027开发一套产品, 通过f28027自带的ad对电流进行采样, 每次采样完成, 触发中断, 然后进行傅立叶变换.

这几天在用TI的评估板进行软件测试, 发现一个问题, 还没有找到解决方法: 如果用jtag烧录程序到flash中, 程序可以正常运行; 如果使用c2prog1.7通过串口烧录程序到flash, 中断函数无法执行, 程序不断重新执行, 连主循环到进入不了. 请帮忙卡看是怎么回事?

主函数代码如下,  每次程序执行到 EnableInterrupts(); 就又返回InitSysCtrl();

不知道是否中断函数的地址被指到了主程序起始的地址?

void main(void)
{
 InitSysCtrl();
 InitGpio();
 InitI2CGpio();
 InitSciGpio();
 DINT;

 InitPieCtrl();
 IER = 0x0000;
 IFR = 0x0000;
 InitPieVectTable();
#ifdef _TOFLASH
 MemCopy(&RamfuncsLoadStart, &RamfuncsLoadEnd, &RamfuncsRunStart);
 MemCopy(&RamconstsLoadStart, &RamconstsLoadEnd, &RamconstsRunStart);
 InitFlash();
#endif

 InitI2C();
 InitSci();
 InitRS485();
 InitCpuTimers();

 InitAdc();
 InitEPwm();
 EnableInterrupts();

 EnableDog();

 for (;;)
 {}

}

 

shook xu:

回复 YINGTAO DUAN:

c2prog好像就是不能烧写page1中的内容使用jtag也不行,请问你解决这个问题没有,现在我遇到的问题就是我有一个cla的表格必须放在page1中,怎么才能避免这个问题呢,谢谢!

赞(0)
未经允许不得转载:TI中文支持网 » TMS320F2027通过串口烧录后, 中断部分的代码无法执行.
分享到: 更多 (0)