一起来学习:TMS320F2812中FLASH寄存器的配置问题解答

2019-08-05 15:48发布

问:我使用的是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
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
5条回答
zhangmangui
1楼-- · 2019-08-05 20:35
谢谢你的分享
comeon201208
2楼-- · 2019-08-05 21:18
 精彩回答 2  元偷偷看……
zhangmangui
3楼-- · 2019-08-05 22:31
comeon201208 发表于 2013-10-11 23:35
谢谢分享的,关于STM32 的设计开发的,这里楼主讲的还是非常不错诶啊

楼主讲的是DSP2812啊   
拿起书本
4楼-- · 2019-08-06 00:30
搭车请教;在DSP/BIOS的环境下做2812的开发,如何对2812外设接口的寄存器进行设置?
tangjian8911
5楼-- · 2019-08-06 00:37
zhangmangui 发表于 2013-10-12 13:17
楼主讲的是DSP2812啊

;P

一周热门 更多>