预览加载中,请您耐心等待几秒...
1/4
2/4
3/4
4/4

在线预览结束,喜欢就下载吧,查找使用更方便

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

Labview上位机,IAR坏境下AVRBootLoader的编写 前段是在网上查找Iar环境下avrbootLoader,却很难找到这方面的资料。由此下定决心做一下尝试。终于功夫不负有心人,搞定Iar环境avrbootloader;上位机用Labview烧录BIN文件,效果不错,一下是经验和方法与大家分享。一下提到的IARforAVR软件版本5.30,avr单片机是MEGA64A。Labview版本是8.0,avrstudio版本4.18. 一,BootLoader交叉链接文件的配置: Mega64aBootLoader有四个段,分别是1k,2K,4K,8Kbytes空间,而在熔丝选择项里却是是用words表示,分别对应512words,1k,2k,4kwords。如下图: 本人选择的是2K的存储空间,即1024words.IARFORAVR反汇编的是地址是以字节表示的,而avrstudio是以words表示的,这个一定要注意。既然是Bootloader就系统就应该从bootLoader启动,把上面的BootRST选上。一定要记住在avrstudio仿真调试bootloader查看反汇编,确认程序是不是从0X7C00开始分布的。如下图 步入正题,Iarforavr对bootloader交叉文件的配置。在iarGeneral选项里把UserdialogForsysconfigure选项取消。如下图: 然后在Category选择Linker,然后在config标签下LinkercommandFile选项,添加自己修改的linkercommandFile如:lnkm64as.xcl。此文件可以在安装目录中找到,最好自己Copy一份到自己的Project下面。按下图修改此文件: 主要修改Codesegments的配置,默认的开始地址0x0000,其中的-D_..X_FLASH_START=F800,是自己添加的表示bootloader开始地址,对应avrstudio0x7c00;此文件单位全部是byte,avrstudio里的单位是word。后面的中断向量地址范围-Z(CODE)INTVEC=0-(_..X_INTVEC_SIZE-1),其中的零用自己定义的_..X_FLASH_START替换掉即可。 Datasegments的设置不用理会,如果自己堆栈定义太大,自己根据需要修改后面的数字就行了。但要注意在bootlooder程序的初始化函数里应做好数据的初始化工作,因为Data区是和应用程序公用的,而且在应用程序里可以加上跳转指令跳到Bootloader区,随意烧录编程。 二,页擦除,页填充,也写入函数: 此三个函数的写法可以单片机数据手册中说明中看到。 1,页擦除函数: 2,页填充函数: 3,页写入函数: 上面的R31,R30,是做Z寄存器用的,r24,r25,r16,r17,r18,r19用来传递参数的。Array_Rx_Buffer[by_loop*2+4],Array_Rx_Buffer[by_loop*2+5],其中的4,5,是受到通信协议的影响的,串行接收数字前四位分别是命令,页地址,然后是被烧录的代码,最后checksum。 在执行上述函数的时候务必一定要把中断关掉,兄弟我深有感触。 三,bootloader程序架构。 写bootloader的时候,用到一个定时器,一个串口。定时器主要可用于控制串行通讯,bootloader停留时间。 定时器可以根据通讯波特率检测什么时候一次接受的结束,然后执行处理接受数组的数据。本人使用的是38400的通讯波特率,8MH