msp430单片机程序升级的方法有哪些
出处:电子发烧友 发布于:2019-06-05 14:25:47
因为在搞程序的烧写,所以看了一下430的BSL。看到里面有一段话,关于从C代码中启动BSL的方法。如下:
从一个外部应用中启动BSL
将程序计数器设定到内存为位置0x1000 来启动BSL。堆栈一直被复位,而RAM 被清空。应该注意的是,GIE 位未被禁用,所以如果不需要中断的话,这一步应该通过调用应用来完成,并且如果它们被使用的话,这一步应该从“返回BSL”返回。
由于堆栈被复位,位置0x1000 也可以被作为一个C 功能进行调用,示例代码如下:
((void (*)())0x1000)()
于是想到,既然可以从C里面跳转到0x1000,那么也可以跳转到其他地址,比如复位地址了。
以6638为例。430的复位中断矢量地址是0xFFFE,里面存储了将要跳转的物理地址。6638的代码区起始地址是0x8000,正常复位是先进入复位中断,然后PC指针导入地址0x8000,然后从0x8000开始执行代码。那么软复位则是,执行((void (*)())0x8000)(),直接PC指针被导入0x8000的地址,而这个地址正好是6638的代码区起始地址,于是软复位了。个人分析一下这个指令,如有错误敬请大神们指正。
从代码上讲,(void (*)()是一个指向空函数的指针,((void (*)())0x8000)()是将0x8000强制转换为函数指针后进行函数调用,于是0x8000便被送入了PC指针。
对于其他的430单片,去查其数据手册FLASH段,弄清其代码区的开始地址,也可以用这个方法软复位了。
实测,IAR,CCS下编译、实践通过。
上一篇:单片机最小系统开发实例
下一篇:单片机并行口结构分析
版权与免责声明
凡本网注明“出处:维库电子市场网”的所有作品,版权均属于维库电子市场网,转载请必须注明维库电子市场网,https://www.dzsc.com,违反者本网将追究相关法律责任。
本网转载并注明自其它出处的作品,目的在于传递更多信息,并不代表本网赞同其观点或证实其内容的真实性,不承担此类作品侵权行为的直接责任及连带责任。其他媒体、网站或个人从本网转载时,必须保留本网注明的作品出处,并自负版权等法律责任。
如涉及作品内容、版权等问题,请在作品发表之日起一周内与本网联系,否则视为放弃相关权利。
- 51单片机中的STC89C522024/9/5 17:57:34
- 单片机Hex文件的格式详解2024/8/22 17:28:29
- STC89C52单片机的原理及应用2024/8/20 17:40:22
- 单片机的概念/组成/分类/应用2024/7/23 17:37:27
- Microchip 发布PIC16F13145系列MCU,促进可定制逻辑的新发展2024/4/23 15:34:17