资源预览内容
第1页 / 共18页
第2页 / 共18页
第3页 / 共18页
第4页 / 共18页
第5页 / 共18页
第6页 / 共18页
第7页 / 共18页
第8页 / 共18页
第9页 / 共18页
第10页 / 共18页
亲,该文档总共18页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
MC9S12XS128MC9S12XS128内存映射和内存映射和 数据数据flashflash操作操作 北京联合大学实训基地潘峰 QQ:66797490问题问题内部地址总线宽度为16位,寻址范围有多 大?MC9S12XS128的RAM,P-FLASH,D- FLASH各有多大?在程序中给出如下定义unsigned int *p;p=0x8000;data=*p;这上面这段代码中,访问的是哪一块存储 区域?解答解答16位地址,寻址范围为065536,即 64kMC9S12XS128的RAM为8K,P- FLASH为128K,D-FLASH为8K。*p=0x8000,访问的是P-FLASH?MC9S12XS128MC9S12XS128内存结构内存结构MC9S12XS128使用global adress(全局 地址)对内存划分地址空间。全局地址共 23bit,寻址能力达到8M 使用全局地址划分的内存空间如下: 0x10_00000x10_1FFF:8K d-flash 0x7E_00000x7F_FFFF:128K p-flash 0x0F_E0000x0F_FFFF:8K 非分页RAM 问题:CPU和BDM都是使用16bit local address(本地地址)我们在程序中定义 的指针变量默认都是near型,即16位地址 ,如何解决?分页地址映射分页地址映射MC9S12XS128使用分页地址映射的方法,在程序 中使用16位地址访问更大的存储空间。 访问RAM 使用地址0x2000 0x3FFF,访问8K RAM 访问D-FLASH 使用地址0x0800 0x0BFF,访问1K D-FLASH(一个D -FLASH页) 访问P-FLASH 使用地址0x8000 0xBFFF,访问16K P-FLASH(一个 P-FLASH页) 我们程序中的指针指向不同的地址范围,访问的内存空 间也不同。 问题?如何访问8k的d-flash空间和128k的p-flash空间分页地址映射分页地址映射MC9S12XS128的FLASH存储区是分页组织 的以D-FLASH为例,共分8个页面,每页1K 大小,地址如下: EEPROM_00 0x00_0800 TO 0x00_0BFF; EEPROM_01 0x01_0800 TO 0x01_0BFF; EEPROM_02 0x02_0800 TO 0x02_0BFF; EEPROM_03 0x03_0800 TO 0x03_0BFF; EEPROM_04 0x04_0800 TO 0x04_0BFF; EEPROM_05 0x05_0800 TO 0x05_0BFF; EEPROM_06 0x06_0800 TO 0x06_0BFF; EEPROM_07 0x07_0800 TO 0x07_0BFF; 访问访问D-FLASHD-FLASH当访问d-flash时,地址由页地址和页内偏移量 组成页地址由EPAGE寄存器指定页内偏移量范围0x08000x0BFF;例如,读出第0页的第一个存储单元一个字的信 息,代码如下: unsigned int data; EPAGE=0x00; data=(unsigned int)(*(volatile unsigned int *_near)(0x0800)D-FLASHD-FLASH常见操作常见操作D-FLASH是一种非易失性存储器( NVM)用于保存掉电后不会丢失的数 据常用操作有读、擦除、写入,其中读操 作可直接通过指针读取,而擦除和写入 则需要通过flash控制器完成,具体步 骤如下:1.设置flash模块时钟2.设置命令字和相关参数3.将命令字和相关参数传递给flash控制 器,启动flash操作设置设置flashflash模块时钟模块时钟初始化flash模块是必须设置fclk,且为1MHz,fclk是有晶振时钟分 频而来, Flash控制模块使用该时钟实现flash写入和擦除时的定时 ,通过设置FCLKDIV寄存器完成。76543210RFDIVLDFDIV6:0WReset00000000该寄存器每一位都可读出,但只有FDIV6:0可写入。 FDIVLD:时钟分频载入 1:从上一次复位开始,FCLKDIV寄存器已写入。 0:FCLKDIV寄存器还未写入。 当晶振频率为16M时,FDIV设置为0x0F。当晶振频率为其它值时,具体设置 参考数据手册。 *注意:1.在flash命令执行过程中,FDIV不可被写入2.只有FDIVLD=1时,才可以进行flash操作设置命令字和相关参数设置命令字和相关参数D-flash操作是通过FCCOB寄存器向存 储器控制器提供命令码和相关参数实现 的。用户首先需要初始化所需的 FCCOB寄存器。FCCOB是一个6个16位的寄存器组, 并通过FCCOBIX寄存器指示当前操作 的FCCOB寄存器地址。FCCOBFCCOB寄存器格式寄存器格式CCOBIX2:0索引值 字节 FCCOB 寄存器参数域000高8位FCMD7:0 定义flash操作命令低8位0, Global address 22:16 全局地址22-16位001高8位 Global address 15:8 全局地址15-8位低8位Global address 7:0 全局地址7-0位010高8位Data 0 15:8低8位Data 0 7:0011高8位Data 1 15:8低8位Data 1 7:0100高8位Data 2 15:8低8位Data 2 7:0101高8位Data 3 15:8低8位Data 3 7:0D-flashD-flash擦除扇区操作擦除扇区操作由于一个flash单元不能重复写入,写入之前需 要先擦除。 扇区(sector)是擦除操作的最小单位,一个 d-flash扇区大小为256个字节 擦除的命令字为0x12,并给出一个全局地址, flash控制器将擦除该地址所在的扇区中的所有 单元,擦除后所有bit都为1。FCCOBIX_CCOBIX=0x00;FCCOBHI=0x12; /高字节写入擦除命令FCCOBLO=0x10; /低字节d-flash全局地址高8位,固 定为0x10FCCOBIX_CCOBIX=0x01; FCCOB=ADDR16; /写入低16位的地址D-FALSHD-FALSH写入操作写入操作写入的命令字为0x11,并给出一个全局地址和需要写入 的字,一次最多可写入4个字。FCCOBIX_CCOBIX=0x00; FCCOB=0x1110; /写入命令和高位地址FCCOBIX_CCOBIX=0x01; /地址后16位FCCOB=ADDR16; /写入低16位地址FCCOBIX_CCOBIX=0x02; /写入第一个数据FCCOB=Buffer0;FCCOBIX_CCOBIX=0x03; /写入第二个数据FCCOB=Buffer1;FCCOBIX_CCOBIX=0x04; /写入第三个数据FCCOB=Buffer2;FCCOBIX_CCOBIX=0x05; /写入第四个数据FCCOB=Buffer3;D-FALSHD-FALSH写入操作写入操作也可以只写入一个字FCCOBIX_CCOBIX=0x00; FCCOB=0x1110; /写入命令和高位 地址FCCOBIX_CCOBIX=0x01; /地址后16 位FCCOB=ADDR16; /写入低16位地 址FCCOBIX_CCOBIX=0x02; /写入第一 个数据FCCOB=data;FlashFlash状态寄存器和状态寄存器和flashflash命令的启动命令的启动清除d-flash状态寄存器中的CCIF标志即可将 FCCOB寄存器中的flash操作命令和相关参数传递 给flash控制器并启动操作。 D-flash状态寄存器格式如下:76543210RCCIF0ACCERRFPVIOLMGBUSYRSVDMGSTATWReset10000000D-flashD-flash状态寄存器状态寄存器该寄存器主要用于查询flash操作的状态,也可启动新的flash操作,详细如下。CCIF、ACCERR、FPVIOL可读也可写入,MGBUSY、MGSTAT只可读,不可写入CCIF:命令结束中断标志位,用于指示flash命令结束。向该位写1可清0并启动一个flash命 令。在命令执行过程中该位一直保持为0直到命令结束或命令冲突。1:flash命令执行完毕0:flash命令正在执行过程中ACCERR:flash访问错误标志。该位用于指示对flash存储器的非法访问,当该位置1时, CCIF标志不可被清0并启动新的flash命令。向该位写1可清除该位,写0无效。1:检测到访问错误0:没有检测到访问错误FPVIOL:flash保护冲突标志位。该位用于指示在flash命令序列执行过程中发生了对被保护 的p-flash或d-flash区域的写入或擦除操作。向该位写1可清除该位,写0无效。当该位被置 1时,不可启动新的命令或写入操作。1:出现保护冲突错误0:未出现保护冲突错误MGBUSY:存储器控制器忙标志位。该位用于指示存储器控制器的状态。1:存储器控制器正忙0:存储器控制器空闲RSVD:保留位,一直为0MGSTAT1:0:存储器控制器命令完成状态标志。这两位用于指示在执行命令过程中或复位 时出现的错误。D-flashD-flash状态寄存器状态寄存器注意:1.开始新的FLASH命令之前必须等待上 一个命令结束,即需要查询CCIF标志 。2.在启动flash命令之前,FSTAT寄存器 中的ACCERR和FPVIOL两个标志位必 须被清除,否则无法启动新的FLASH 操作。完整的擦除操作完整的擦除操作while(FSTAT_CCIF=0);if(FSTAT_ACCERR) /判断并清除标志位;FSTAT_ACCERR=1;if(FSTAT_FPVIOL) /判断并清除标志位;FSTAT_FPVIOL=1; FCCOBIX_CCOBIX=0x00;FCCOBHI=0x12; /高字节写入擦除命令FCCOBLO=0x10; /低字节d-flash全局地址高8位,固 定为0x10FCCOBIX_CCOBIX=0x01; FCCOB=ADDR16; /写入低16位的地址FSTAT_CCIF=1; /启动执行命令while(FSTAT_CCIF=0); /等待执行完成
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号