FLASH模块
TMS320F28335片上有256K16位的FLASH存储器,FLASH存储器由8个32K16位扇区组成,用户可以对其中任何一个扇区进行擦除,编程和校验,而其他扇区不变。不能在其中一个扇区上执行程序来擦除和编写其他的扇区。
F28335的FLASH选择寄存器FOPT
位 15-1 0 名称 Reserved ENPIPE 功能描述 保留 使能FLASH流水线模式 当该位被置1时,流水线模式被激活,该模式下通过预处理指令提高了取指令的效率,在该模式下,FLASH的访问周期(页访问或随机访问)必须大于0,默认状态为0; F28335的FLASH功耗模式寄存器FPWR
位 15-2 名称 Reserved 功能描述 保留 FLASH功耗模式位,向这些位写操作会改变FLASH的BANK和PUMP当前功耗模式。 00:睡眠模式 01:等待状态 10:保留 11:激活状态,使能FLASH(高功耗)
1-0 PWR Flash控制寄存器FOPT、FPWR、FSTDBY-WAIT、FACTIVEWAIT、FBANKWAIT、FOTPWAIT的初始化代码不能从Flash存储器当中运行.否则就会有不可预料的结果出现。所以,Flash控制寄存器的初始化函数在运行时必须从Flash(它的装载地址)拷贝到
RAM(它的运行地址)。 Flash
控制寄存器由
Code SecurityModule(CSM)保护。如果CSM被保护起来了,那么必须从被保护的RAM(例如:L0或者L1SARAM)运行Flash控制寄存器
的初始化代码,否则Flash控制寄存器的初始化代码无法访问Flash控制寄存器 外扩FLASH:
FLASH初始化函数如下: void InitFlash(void) {
EALLOW;
FlashRegs.FOPT.bit.ENPIPE = 1; // 使能流水线模式FlashRegs.FBANKWAIT.bit.PAGEWAIT = 5; //页模式FLASH读取
指令周期 FlashRegs.FBANKWAIT.bit.RANDWAIT = 5;//随机模式FLASH读
取指令周期
FlashRegs.FOTPWAIT.bit.OTPWAIT = 8;
FlashRegs.FSTDBYWAIT.bit.STDBYWAIT=0x01FF; //设置从睡眠到等待的转换时间
FlashRegs.FACTIVEWAIT.bit.ACTIVEWAIT = 0x01FF; //设置从等待到激活的转换时间
FlashRegs.FPWR.bit.PWR = 3; //设置Flash为正常工作状态 FlashRegs.FSTATUS.bit.V3STAT = 1; //Clear the 3VSTAT bit EDIS;
asm(\" RPT #7 || NOP\"); ////等待流水线操作完成,保证最后一
个设置操作完成后才从该函数返回 }
FLASH的流水线模式:FLASH存储器数据掉电不丢失,所以通常用来保存应用代码。在代码执行期间,除非有中断产生,指令可以从存储器地址中连续获取,连续地址中的代码组成了主要的代码,又称为线性代码。FLASH的流水线模式默认状态下无效。
因篇幅问题不能全部显示,请点此查看更多更全内容