This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

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

Other Parts Discussed in Thread: TMS320F28027

最近准备基于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 (;;)
 {}

}

 

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

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

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

    Image starts at 0x003F2000
    CRC 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.

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

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

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

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

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

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

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

    Release.rar
  • 你好,下载看着是没啥问题的,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

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

    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

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