TMS320f2808疑问

emyhx   2012-1-12 15:56 楼主
有两个疑问:
问题1
TMS320f2808怎样实现芯片自检测?
问题2
由于软件工作在不同的工作模式,需要将部分软件屏蔽,本人采用的是调用FLASH2808 API的flash_Erase函数进行擦除不必要的程序,但是擦除不成功,后来将中断屏蔽后擦除成功了,但使能中断后,会进入非法中断,不知道什么原因?

回复评论 (12)

TI没有针对28x芯片提供self test 库;听说过段时间会提供。

FLASH API运行时不能使能中断,这在API的PDF说明文档中有详细说明。

?? Don’t execute the flash API from wait stated memory such as XINTF.
?? Don’t execute the Flash APIs from the flash or OTP. If the APIs are stored in flash or OTP memory,
they must first be copied to internal SARAM before they are executed.
?? Don’t execute any interrupt service routines (ISRs) that can occur during an erase, program or
depletion recovery API function from the flash or OTP memory blocks. Until the API function completes
and exits the flash and OTP are not available for program execution or data storage.
?? Don’t execute the API callback function from flash or OTP. When the callback function is invoked by
the API during the erase, program or depletion recovery routine the flash and OTP are not available for
program execution or data storage. Only after the API function completes and exits will the flash and
OTP be available.
?? Don’t stop the erase, program or depletion recovery functions while they are executing (for example,
don’t stop the debugger within API code, don’t reset the part, etc).
?? Do not execute code or fetch data from the flash array or OTP while the flash and/or OTP is being
erased, programmed or during depletion recovery.
点赞  2012-1-12 16:34
这样会烧坏芯片的
工程 = 数学+物理+经济
点赞  2012-1-12 16:57

这样不会烧坏芯片,会烧坏芯片的是在擦除密码区的时候强制断电,而密码区此时正好全为0,或者为随机数,导致芯片锁死。

 

非密码区可能导致芯片需要Depletion.(我也不知道这词该咋说)

 

FLASH API可以使用中断(不能使用不可屏蔽中断),但不建议使用中断。FLASHAPI在运行中会自动disable中断,使得一些实时的程序无法正常运行。

 

详细的还是看FLASH-API的PDF把,里面有说清楚: The flash/OTP is left in a safe state when interrupts are enabled and during the callback function. There is no restriction on the amount of time that can be spent in the ISR or callback function.

[ 本帖最后由 hlx3012 于 2012-1-12 23:25 编辑 ]
点赞  2012-1-12 23:24

谢谢大家帮忙,首先我掉用flash API的函数是在RAML0中运行的(从flash搬移到RAML0中),其次我在调用flash API(flash_Erase)时擦除不成功。于是我在调用flash API 之前屏蔽了所有中断(中断写在flash中),然后进行擦除操作,擦除成功了,调用flash_Erase结束后,我又使能了中断,结果就出现程序进入非法中断中。不知道怎么解决?

点赞  2012-1-13 08:13
用单步,断点,检查程序吧,是程序中有问题。
点赞  2012-1-13 10:52
建议调试擦写不要随便用单步或断点,仔细读手册
工程 = 数学+物理+经济
点赞  2012-1-13 12:05
版主说的对,调试API的时候不要随便用单步或断点,因为API是time critical程序。

emyhx,你的问题是在"调用flash_Erase结束后,使能了中断,结果就出现程序进入非法中断中".

所以你可以在"调用flash_Erase结束后",用单步,断点,检查程序吧。
点赞  2012-1-13 13:17
阿胶说的很全面。
工程 = 数学+物理+经济
点赞  2012-1-19 20:58
谢谢大家,问题已经解决了,是我擦除的程序中包括中断函数了,因此在使能中断后,擦除的中断函数值为0xFFFF,因此进入非法中断
点赞  2012-1-29 16:16
恭喜楼主,是通过什么途径找到错误原因的?
工程 = 数学+物理+经济
点赞  2012-1-31 14:30
有piccolo的IEC60730库,在controlsuite下的safty目录
点赞  2012-1-31 20:21
楼主你好,我是做工业上控制方面的维修的,需要往TMS320F2808PZS烧录程序。但是我是刚开始接触,就像个文盲。不知道你能否帮我介绍烧录的工具和方法吗?我烧录的格式是.out的。如果可以成功烧录,会给予感谢!很期待你的回复!先谢谢了!
点赞  2017-12-6 22:29
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复