void InitFlash(void)
{
EALLOW;
//Enable Flash Pipeline mode to improve performance
//of code executed from Flash.
FlashRegs.FOPT.bit.ENPIPE = 1;
// CAUTION
//Minimum waitstates required for the flash operating
//at a given CPU rate must be characterized by TI.
//Refer to the datasheet for the latest information.
//Set the Paged Waitstate for the Flash
FlashRegs.FBANKWAIT.bit.PAGEWAIT = 2;
//Set the Random Waitstate for the Flash
FlashRegs.FBANKWAIT.bit.RANDWAIT = 2;
//Set the Waitstate for the OTP
FlashRegs.FOTPWAIT.bit.OTPWAIT = 2;
// CAUTION
//ONLY THE DEFAULT VALUE FOR THESE 2 REGISTERS SHOULD BE USED
FlashRegs.FSTDBYWAIT.bit.STDBYWAIT = 0x01FF;
FlashRegs.FACTIVEWAIT.bit.ACTIVEWAIT = 0x01FF;
EDIS;
//Force a pipeline flush to ensure that the write to
//the last register configured occurs before returning.
asm(" RPT #7 || NOP");
}
FOPT寄存器
使能Flash Pipeline Mode Bit。设置此位时,Flash流水线模式激活。流水线模式通过预取指令来提高指令获取的性能。有关更多信息,请参见第1.3.2节。
当管道模式被启用时,flash等待状态(分页和随机)必须大于零。
在flash设备上,ENPIPE影响从flash和OTP的读取。
0 Flash流水线模式未激活。(默认)
1 Flash“Pipeline”模式激活。
打开Flash Pipeline模式,以提高Flash执行代码的性能。
FBANKWAIT寄存器
Flash page读等待状态。这些寄存器位指定了在CPU时钟周期(0..15syclkout周期)到闪存银行。请参阅第1.3.1节了解更多信息。
关于page flash访问所需的最小时间,请参阅特定于设备的数据手册。
您必须将RANDWAIT设置为大于或等于PAGEWAIT设置的值。没有提供硬件来检测大于RANDWAIT的PAGEWAIT值。
0000每次分页flash访问零等待状态或每次访问一个syclkout周期
每次分页flash访问一个等待状态,或者每次访问总共有两个syclkout周期
0010每次分页flash访问有两个等待状态,或者每次访问总共有三个syclkout周期
0011每次分页flash访问有三个等待状态,或者每次访问总共有四个syclkout周期
. . . . . .
1111每次分页flash访问有15个等待状态,或者每次访问总共有16个SYSCLKOUT周期。(默认)
Flash随机读等待状态。这些寄存器位指定了CPU时钟周期(1..15)中随机读操作的等待状态的数量syclkout周期)到闪存银行。请参阅第1.3.1节了解更多信息。
关于随机闪存访问所需的最小时间,请参阅设备特定的数据手册。
RANDWAIT必须设置大于0。也就是说,必须使用至少一个随机等待状态。另外,必须将RANDWAIT设置为大于或等于PAGEWAIT设置的值。设备将不会检测并纠正大于RANDWAIT的PAGEWAIT值。
0000非法值。RANDWAIT必须设置大于0。
每次随机flash访问一个等待状态,或者每次访问总共有两个SYSCLKOUT周期。
0010每次随机flash访问有两个等待状态,或者每次访问总共有三个SYSCLKOUT周期。
0011每次随机flash访问有3个等待状态,或者每次访问总共有4个syclkout周期。
. . . . . .
1111每次随机flash访问有15个等待状态,或者每次访问总共有16个SYSCLKOUT周期。(默认)
FOTPWAIT寄存器
OTP读等待状态。这些寄存器位指定了CPU时钟周期(1..31SYSCLKOUT循环)到OTP。详细信息请参见CPU Read Or Fetch Access From flash/OTP章节。OTP中没有PAGE模式。
OTPWAIT必须设置大于0。也就是说,必须使用至少1个等待状态。关于OTP访问所需的最短时间,请参阅设备专用数据手册。
00000非法值。OTPWAIT必须设置为1或更大。
00001每次OTP访问将使用一个等待状态,每次访问总共有两个syclkout周期。
00010每次OTP访问将使用两个等待状态,每次访问总共有三个syclkout周期。
00011每次OTP访问将使用三个等待状态,每次访问总共有四个syclkout周期。
. . . . . .
11111 31个等待状态将用于一次OTP访问,每次访问总共有32个syclkout周期。
FSTDBYWAIT寄存器 (只应该使用默认值即可)
be left in保持
这个寄存器应该保持默认状态。
银行和泵睡眠备用等待计数。
111111111 511 syclkout周期(默认)
FACTIVEWAIT寄存器(这个寄存器应该保持默认值)
vClearRam():初始化cpu使用的变量
void vClearRam(void)
{
Uint16 *ram_ptr;
for (ram_ptr=(Uint16 *)0x8000; ram_ptr<(Uint16 *)0x8C00; ram_ptr++) // if release
{
*ram_ptr = 0x0000;
}
for (ram_ptr=(Uint16 *)0x0600; ram_ptr<(Uint16 *)0x0800; ram_ptr++) // if release
{
*ram_ptr = 0x0000;
}
fMpptMode = 0.0;
fVoltLimit = 373.0;
fVoltErrCoe = 1.0;
fVpiVoltMax = 4000.0;
fTestMode = 0.0;
}