问:我使用的是TI 2000系列芯片中的2812!
我使用的是汇编语言对其进行开发,目前主程序已经完成,需要烧写到FLASH中运行,但烧写过后发现在FLASH中运行的速度和在RAM中用仿真器仿真的速度差不多!这样就太慢了,我设置的PLL倍频到150MHZ,后来发现是有关FLASH的一些配置寄存器没有进行配置,我想在FLASH中运行速度过慢的原因可能是这个造成的吧!
我查看了TI的说明文档,其中关于FLASH寄存器的介绍中,有如下的一段:
Note: Flash configuration registers should not be accessed while an access is in progress in flash or OTPmemory
The flash registers should not beaccessed from code that is running from OTP or flash memory or while an accessmay be in progress. All register accesses to the flash registers should be madefrom code executing outside of flash/OTP memory and an access shouldnot be attempted until all activity on the flash/OTP has completed. Nohardware is included to protect for this.
You can read the flash registers fromcode executing in flash/OTP; however,do not write to the registers.
从上面的一段看出,如果需要配置FLASH的寄存器,必须执行FLASH以外存储空间的程序才可以实现,我又发现这些寄存器是受EALLOW和CSM保护的,所以我按照以下步骤试图重新配置寄存器:
1,在执行存放于FLASH中的主程序段时,将一段存于FLASH中的初始化flash配置寄存器的程序完全复制到片内L0SARAM中,该初始化程序如下:MOVW DP,#DP_FLASH ;指向FLASH寄存器所在的页面
EALLOW
MOV AL,#01H
MOV @FOPT,AL ;使能FLASH流水线模式
MOV AL,#03H
MOV @FPWR,AL
MOV AL,#0FFH
MOV @FSTDBYWAIT,AL
MOV AL,#0FFH
MOV @FACTIVEWAIT,AL
MOV AL,#0203H
MOV @FBANKWAIT,AL
MOV AL,#06H
MOV @FOTPWAIT,AL
EDIS
LB FLASH_RET ;FLASH_RET 是我这段程序需要返回到的地址
复制代码2,我配置了CSM模块的寄存器,使得器件不受CSM的保护
3, 用 MOVL XAR7,#8300H ;200H是初始化程序复制到RAM中的地址
LB *XAR7
从FLASH跳转到RAM中执行该段初始化FLASH的程序
4,从RAM中返回到FLASH中的主程序继续执行 但发现这段程序烧写到片子里面后,不能按照我的意图执行,FLASH寄存器没有得到重新
配置, 请问这是什么原因呢?
我上述的几个步骤对不对呢?
请问,如果在程序烧写到片内FLASH中,在执行该程想调到RAM中执行另一段程
这种情况应该如何实现呢?
应该有哪些需要注意的地方呢?
如果那位有配置FLASH寄存器的例子的话,请发给我一份做一下参考吧!
========================================================
答:在flash中怎么能运行配置属于flash的寄存器呢?自己改变自己是不行的。
要配置flash的寄存器,需要把对应的代码拷贝到RAM中运行,这样才能起作用。具体参考spra958c Running an Application fromInternal Flash Memory on the TMS320F281x DSP (Rev. C).pdf
其实在flash中也可以运行配置flash的寄存器,只不过中间要加NOP,和循环延迟。
的, 中, 寄存器, FLASH |