430无线升级,是通过JTAG烧写一个自定义BSL程序,然后通过BSL程序接收应用程序(APP程序)。
接收方式多种--UART,IIC,SPI。430手册关于固件升级,也介绍了BSL协议等内容。
由于项目需要,采用无线升级,无线模块是SPI接口,也可理解为SPI接收方式。
BSL程序和APP程序需作地址空间区分,修改对应的XCL文件。
---- APP的XCL文件
关于XCL文件,由于我的程序很短,空间设置的很小。升级时,只要程序rebulid时没报错就没问题,
如果升级出问题时,可不考虑这方面的原因。也不用考虑高地址空间的问题。
---BSL的XCL文件
地址空间分配好后,然后编写对应的程序。程序中最关键的是终端向量重映射。
----APP程序,很简单,方便测试
-----BSL程序中关于定时器中断重映射
烧写BSL程序,然后通过无线发送APP程序,并烧写到对应的flash空间。最后是跳转到APP区。
单步调试,程序跳转正常。当单步执行APP程序中打开全局中断语句后,再单步,程序复位,指向0xFFFE。
复位向量里放的BSL程序的起始地址,也就是0x7000。但程序并没有执行到0x7000,而是执行到0x0000,
再单步就跳到0x0004不动了。
经过示波器观测,发现时钟引脚仍然有信号,说明程序还是运行了,中断函数没进去。所以一直考虑是中断
向量重映射的问题。
重新看官网例程,发现将所有没用的中断都做了处理,我也这样试试,
再调试,发现不再复位,而是进入84中断了。
也就是P2口中断,查看IO口配置函数,发现打开了P2口的中断使能,导致有中断,没有对应的中断服务程序。
到此问题终于解决。
|