This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

DELAY_US

  在ADC模块驱动文件DSP2803x_Adc.c中有段话:

//  *IMPORTANT*

//  IF RUNNING FROM FLASH, PLEASE COPY OVER THE SECTION "ramfuncs"  FROM FLASH

//  TO RAM PRIOR TO CALLING InitSysCtrl(). THIS PREVENTS THE MCU FROM THROWING

//  AN EXCEPTION WHEN A CALL TO DELAY_US() IS MADE.

    难道DELAY_US不能在FLASH中运行?

  • Lzh,

           首先,ramfuncs段中的内容我们都是要让它在RAM中跑的,里面包含一些flash的初始化设置函数,这些函数必须只能在RAM中运行,还有一些对时间比较敏感的函数,也是需要复制在RAM中运行的,因为RAM的速度远快于flash,我们通常讲的60MHz的执行速度,指的是去RAM的运行速度,flash一般只能跑到1/3的速度。

           DELAY_US是1us的延时,它是基于RAM的速度来实现的精确的1us延时,如果把这段代码放在flash,由于flash的初始化等待状态不同,会导致flash执行速度不同,不能精确的得到1us的延时,只能是大于1us。

    eric

  • 非常感谢

    eric

    的答案,受益良多!

  • 采用何种方式来COPY呢?

    不知道以下方法对不对

    首先在DSP2803x_Examples.h文件中开始部分加入以下一条语句

    #pragma CODE_SECTION(DSP28x_usDelay, "ramfuncs");

    然后再main里面再加以下语句

    memcpy((uint16_t *)&RamfuncsLoadStart,(uint16_t *)&RamfuncsRunStart, (unsigned long)&RamfuncsLoadSize);

    InitFlash();

  • he code,

    #pragma CODE_SECTION(DSP28x_usDelay, "ramfuncs");

    上面这条语句可以放在函数DSP28x_usDelay定义的前面。

    其他的没什么问题。主要记住要先调用memcpy就可以。

    Eric