打印

TMS320F2812中FLASH寄存器的配置问题解答汇总

[复制链接]
809|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
Violin11|  楼主 | 2017-10-12 16:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
TMS320F2812中FLASH寄存器的配置问题解答汇总


问:我使用的是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 是我这段程序需要返回到的地址

[color=rgb(51, 102, 153) !important]复制代码

2,我配置了CSM模块的寄存器,使得器件不受CSM的保护

     3, 用   MOVL  XAR7,#8300H       ;200H是初始化程序复制到RAM中的地址            

               LB    *XAR7

               从FLASH跳转到RAM中执行该段初始化FLASH的程序

     4,从RAM中返回到FLASH中的主程序继续执行  但发现这段程序烧写到片子里面后,不能按照我的意图执行,FLASH寄存器没有得到重新
配置,   请问这是什么原因呢?

        我上述的几个步骤对不对呢?

      请问,如果在程序烧写到片内FLASH中,在执行该程序时,想调到RAM中执行另一段程序,

             这种情况应该如何实现呢?

             应该有哪些需要注意的地方呢?

   
========================================================

答:在flash中怎么能运行配置属于flash的寄存器呢?自己改变自己是不行的。
要配置flash的寄存器,需要把对应的代码拷贝到RAM中运行,这样才能起作用。具体参考spra958c    Running an Application fromInternal Flash Memory on the TMS320F281x DSP (Rev. C).pdf

其实在flash中也可以运行配置flash的寄存器,只不过中间要加NOP,和循环延迟。

相关帖子

发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

717

主题

1010

帖子

3

粉丝