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.

28069Flash运行



MCU:TMS320F28069PZT

平台:CCS6.1

问题:使用Sci串口进行通讯,flash模式下在线调试皆正常,掉电重启后,sci无法进入中断,其它工作正常;

可能出现问题的原因:

1、cmd文件:

        使用Controlsuit中的F28069.cmd,FlashA区不够大将FLASHB原地址0x3F0000~0x3F4000抽取了0x002000个字节给FLASHA;

2、已将所有isr中断使用CODE_SECTION(xxx_isr, "ramfuncs"); 声明,同时在main函数前声明

extern Uint16 RamfuncsLoadStart;
extern Uint16 RamfuncsLoadEnd;
extern Uint16 RamfuncsRunStart;
extern Uint16 RamfuncsLoadSize;

3、BOOT相关管脚已用拨码器置位选择GetMode即Flash运行;

4、在调试时偶尔会出现SCIRXST置位0x00B2或0x00B0的情况;

在翻阅咱们论坛的文章,有如下两个回答:

(1)

跑不起了,copy在ram里程序 执行时间不对,  不是代码逻辑的问题,

搞定了,主要是 注意 copy到ram的函数 相应调用的子函数 要靠考虑效率, 小的函数用 static lnline 声明, 大的函数 也同样 段声明 CODE_SECTION(cpu_timer0_isr, "ramfuncs"); 

然后运行时间就对了

这个回答完全没看懂,static inline应该如何使用?在以前的项目从来没有用过。。。。

(2)My guess is that you are resetting the device in the middle of a frame causing a framing error(FE bit 3 of SCIRXST).You should check if any bits are set in this register and recover from that condition.

两个标志位,SCI break-detect flag这个标志位我猜应该是因为通讯的波特率不稳的原因,28069SCI使用90M配置出9600Hz,观察波形高低电频皆为104us,而接收的波形为高电平108us低电平102us,造成了这个标志位置位;

FE标志位如上所述是否应该理解为中断处理代码过多,造成下一个字节的传输已经过来了而我这边中断函数还没有跑完没有将中断清零?

问题有点乱有点杂,请教下论坛大神和TI支持帮忙解答下,谢谢!

  • 在线调试应该是在RAM中跑的 你掉电后上电复位一下看看 如果可以可能是上电自复位有问题
    是在不行就搬移到RAM中跑
  • 在线调试应该是在RAM中跑的 你掉电后上电复位一下看看 如果可以可能是上电自复位有问题
    是在不行就搬移到RAM中跑
  • 您的意思是,在程序中,有未初始化赋值的变量,而造成Sci中断无法进入?

  • 需要耐心排除,您可以检查下,还有楼上提到的建议。
  • 谢谢您的解答,我按照楼上说的方式对程序中所有的变量在定义时都做了初始化赋值,刚才做了下试验,有些新发现;

    在连接仿真器进行仿真的情况下,一切正常,通讯正常,scia的SCIRXST标志位为正常的0x02;

    在移除仿真器后初次上电,Scib与电脑的通讯一切正常,Scia在与模块的通讯还是不通,观察后发现Scia进入了两次中断,在判断SciaRegs.SCIFFRX.bit.RXFFST这一位是否大于0时直接不通过,也就是说进入了中断,但是FIFO的数据个数并没有置位,并且,在两次中断后,scia的SCIRXST寄存器置位0xB2错误,导致scia彻底不工作无法再次进入中断;

    移除仿真器上电后,使用复位键复位MCU,所有功能又能正常工作了。。。

    请问您有什么好建议么?

  • 谢谢您的解答,我按照您说的方式对程序中所有的变量在定义时都做了初始化赋值,刚才做了下试验,有些新发现;


    在连接仿真器进行仿真的情况下,一切正常,通讯正常,scia的SCIRXST标志位为正常的0x02;


    在移除仿真器后初次上电,Scib与电脑的通讯一切正常,Scia在与模块的通讯还是不通,观察后发现Scia进入了两次中断,在判断SciaRegs.SCIFFRX.bit.RXFFST这一位是否大于0时直接不通过,也就是说进入了中断,但是FIFO的数据个数并没有置位,并且,在两次中断后,scia的SCIRXST寄存器置位0xB2错误,导致scia彻底不工作无法再次进入中断;


    移除仿真器上电后,使用复位键复位MCU,所有功能又能正常工作了。。。


    请问您有什么好建议么?
  • 谢谢您的解答,我按照您说的方式对程序中所有的变量在定义时都做了初始化赋值,刚才做了下试验,有些新发现;

    在连接仿真器进行仿真的情况下,一切正常,通讯正常,scia的SCIRXST标志位为正常的0x02;

    在移除仿真器后初次上电,Scib与电脑的通讯一切正常,Scia在与模块的通讯还是不通,观察后发现Scia进入了两次中断,在判断SciaRegs.SCIFFRX.bit.RXFFST这一位是否大于0时直接不通过,也就是说进入了中断,但是FIFO的数据个数并没有置位,并且,在两次中断后,scia的SCIRXST寄存器置位0xB2错误,导致scia彻底不工作无法再次进入中断;

    移除仿真器上电后,使用复位键复位MCU,所有功能又能正常工作了。。。

    请问您有什么好建议么?
  • 我仔细看了下cmd文件,
    ramfuncs : LOAD = FLASHD
    在cmd文件中,cinit、pinit、text都划入FLASHA这一区,
    有没有可能是这个定义错误造成的?
  • 问题解决了,情况是蓝牙模块在使用时,初始化比28069要慢,当28069配置好串口的时候,蓝牙模块还没有,导致至少一帧的数据错误并置位sci的error位无法修复,只要在初始化时加一段延时就没问题了。。。。很小的问题造成了很大的影响。。。