最近准备基于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中,怎么才能避免这个问题呢,谢谢!