SST 单片机IAP 编程示例(C 语言).doc_第1页
SST 单片机IAP 编程示例(C 语言).doc_第2页
SST 单片机IAP 编程示例(C 语言).doc_第3页
SST 单片机IAP 编程示例(C 语言).doc_第4页
免费预览已结束,剩余1页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

SST单片机IAP编程示例 (C语言)程序说明:本程序用的单片机是SST89x564RD、SST89x554RC、SST89x58RD2、SST89x54RD2和SST89x52RD2。示例程序代码中,执行IAP指令的程序放在单片机低端程序空间,也就是BLOCK0,IAP的程序包括了扇区擦除(Sector-Erase)、字节编程(Byte-Program)和字节校验(Byte-Verify)(注:字节校验相当于读数据指令)。IAP程序做成子程序,主程序可以调用这些子程序执行IAP操作,把数据烧写到另外一块的FLASH空间中(BLOCK1)。主程序中,目标扇区先被擦除,然后把数据(0,1,2,n,n等于一个扇区的大小)写入到BLOCK1目标地址BLK1-DST-ADDR,IAP成功完成后,ErrorCode变为0,如果有错误出现时,程序保持错误功能,ErrorCode还是为1。/* demoIAP.c - SST89x564RD IAP C51示范代码* SST89x564RD、SST89x554RC、SST89x58RD2、SST89x54RD2和SST89x53RD2* MCU有两个内部FLASH存储器块,本代码是从BLOCK0执行IAP指令改写。* BLOCK1的1000H(SST89x564RD)或E000H (SST89x554RC、SST89x58RD2、SST89x54RD2* 和SST89x53RD2)的数据。* 本程序默认是SST89x564RD,如果使用SST89x554RC、SST89x58RD2、SST89x54RD2* 和SST89x53RD2,只要修改变量BLK1_DST_ADDR就可以。*/* MCU特殊功能寄存器地址*/sfr SFCF = 0xB1; /*FLASH配置位*/sfr SFCM = 0xB2; /*FLASH命令位*/sfr SFAL = 0xB3; /*FLASH地址低位*/sfr SFAH = 0xB4; /*FLASH地址高位*/sfr SFDT = 0xB5; /*FLASH数据位*/sfr SFST = 0xB6; /*FLASH状态位*/* MCU IAP命令*/#define SFCM_SE 0x0B; /*扇区擦除IAP指令*/#define SFCM_VB 0x0C; /*字节校读IAP指令*/#define SFCM_PB 0x0E; /*字节编程IAP指令*/* 全局变量定义*/const unsigned short int BLK1_DST_ADDR = 0x1000;/*SST89x564RD准备写入的目标地址(在另外一块的片内FLASH)如果是用SST89x554RC、SST89x58RD2、SST89x54RD2和SST89x53RD2,请删除这句,改为用下面一句。*/*const unsigned short int BLK1_DST_ADDR = 0x0F000; */*SST89x554RC、SST89x58RD2、SST89x54RD2和SST89x53RD2准备写入的目标地址。*/const unsigned char SECT_SIZE = 0x80; /*一个扇区的字节数*/unsigned char ErrorCode; /*标示操作的结果*/* Function Prototype*/void sector_erase(unsigned short int dataAddr);void byte_program(unsigned short int dataAddr, unsigned char dataByte);unsigned char byte_verify(unsigned short int dataAddr);int ready();void error();/* 主程序 * 改写块1一个扇区的数据(从0开始,每次加1),地址从BLK1_DST_ADDR开始。* 当IAP执行成功,ErrorCode=0,否则ErrorCode=1.*/void main()unsigned short int destAddr = BLK1_DST_ADDR;unsigned char byteCnt ; /*字节数*/unsigned char origData; /*存储IAP操作的数据*/unsigned char verifyData; /*校对数据*/sector_erase(destAddr); /*写数据前先擦除要写的扇区*/origData = 0;for(byteCnt=0; byteCnt8; /*存入地址的高位字节*/SFAL = destAddr; /*存入地址的低位字节*/SFCM = SFCM_SE; /*发出扇区擦除指令*/if(!ready()error();return;/* 字节编程子程序*/void byte_program(unsigned short int dataAddr, unsigned char dataByte)unsigned short int destAddr = dataAddr;SFCF = SFCF | 0x40; /* IAP使能*/SFAH = destAddr8; /*存入地址的高位字节*/SFAL = destAddr; /*存入地址的低位字节*/SFDT = dataByte; /*存入要编程的数据*/SFCM = SFCM_PB; /*发出字节编程指令*/if(!ready()error();return;/* 字节校读子程序*/unsigned char byte_verify(unsigned short int dataAddr)unsigned short int destAddr = dataAddr;unsigned char readByte;SFCF = SFCF | 0x40; /*IAP使能*/SFAH = destAddr8; /*存入地址的高位字节*/SFAL = destAddr; /*存入地址的低位字节*/SFCM = SFCM_VB; /*发出字节校读指令*/readByte = SFDT;SFCF = SFCF & 0xBF; /*关闭IAP*/SFDT = 0;return readByte;/* 准备子程序* 检查IAP操作是否完成。如果结束,关闭IAP。*/int ready()unsigned long int TimeOut = 0;while (TimeOut 100000)if (SFST&4) = 0) /*查IAP是否完成*/ /*IAP完成*/SFCF = SFCF & 0xBF; /*关闭IAP*/SFDT = 0;return 1; /*

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论