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

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支持帮忙解答下,谢谢!

Seven Han:请参考下帖子:e2echina.ti.com/…/8020

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支持帮忙解答下,谢谢!

mangui zhang:在线调试应该是在RAM中跑的你掉电后上电复位一下看看如果可以可能是上电自复位有问题
是在不行就搬移到RAM中跑

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支持帮忙解答下,谢谢!

mangui zhang:在线调试应该是在RAM中跑的你掉电后上电复位一下看看如果可以可能是上电自复位有问题
是在不行就搬移到RAM中跑

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支持帮忙解答下,谢谢!

ke xu4:

回复 Seven Han:

您的意思是,在程序中,有未初始化赋值的变量,而造成Sci中断无法进入?

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支持帮忙解答下,谢谢!

Seven Han:

回复 ke xu4:

需要耐心排除,您可以检查下,还有楼上提到的建议。

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支持帮忙解答下,谢谢!

ke xu4:

回复 mangui zhang:

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

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

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

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

请问您有什么好建议么?

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支持帮忙解答下,谢谢!

ke xu4:

回复 Seven Han:

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

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

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

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

请问您有什么好建议么?

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支持帮忙解答下,谢谢!

ke xu4:

回复 Seven Han:

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

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

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

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

请问您有什么好建议么?

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支持帮忙解答下,谢谢!

ke xu4:

回复 Seven Han:

我仔细看了下cmd文件,
ramfuncs: LOAD = FLASHD
在cmd文件中,cinit、pinit、text都划入FLASHA这一区,
有没有可能是这个定义错误造成的?

赞(0)
未经允许不得转载:TI中文支持网 » 28069Flash运行
分享到: 更多 (0)