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.

F28035 DELAY(A)函数问题

Other Parts Discussed in Thread: CONTROLSUITE

各位好,第一次使用DSP T320F38035芯片,晶振6M,想使用DELAY(A)函数做一个精确的延时,按照网上查找的资料把DSP28x_usDelay()函数放到RAM中运行,做了一个led灯1s闪烁的程序,把程序下载后观察,led闪烁的时间有2秒多,下面是程序的设置。

1、频率设置

//#define DSP28_DIVSEL 0 // Enable /4 for SYSCLKOUT
#define DSP28_DIVSEL 1 // Disable /4 for SYSCKOUT
//#define DSP28_DIVSEL 2 // Enable /2 for SYSCLKOUT

//#define DSP28_PLLCR 12 // Uncomment for 60 MHz devices [60 MHz = (10MHz * 12)/2]
//#define DSP28_PLLCR 11
#define DSP28_PLLCR 10
//#define DSP28_PLLCR 9

-----------------------------------------------------------------------------*/

#define CPU_RATE 16.667L // for a 60MHz CPU clock speed (SYSCLKOUT)
//#define CPU_RATE 20.000L // for a 50MHz CPU clock speed (SYSCLKOUT)

2、cmd文件、MemCopy

cmd文件中:

codestart : > BEGIN PAGE = 0
ramfuncs : LOAD = FLASHD, PAGE = 0
RUN = RAML0, PAGE = 0
LOAD_START(_RamfuncsLoadStart),
LOAD_END(_RamfuncsLoadEnd),
RUN_START(_RamfuncsRunStart)

~~~~~~

main中:

extern Uint16 RamfuncsLoadStart;
extern Uint16 RamfuncsLoadEnd;
extern Uint16 RamfuncsRunStart;

~~~~~

InitSysCtrl();//系统时钟设置
//MemCopy(&RamfuncsLoadStart,&RamfuncsLoadEnd,&RamfuncsLoadStart);
MemCopy(&RamfuncsLoadStart,&RamfuncsLoadEnd,&RamfuncsRunStart);
InitFlash();
// Step 2. Initalize GPIO:

while(1)
{
DELAY_US(1000000);
GpioDataRegs.GPADAT.bit.GPIO12 = 1;
DELAY_US(1000000);
GpioDataRegs.GPADAT.bit.GPIO12 = 0;

}

~~~~

DSP2803x_usDelay.asm中:

.def _DSP28x_usDelay
.sect "ramfuncs"

.global __DSP28x_usDelay
_DSP28x_usDelay:
SUB ACC,#1
BF _DSP28x_usDelay,GEQ ;; Loop if ACC >= 0
LRETR

~~~~~

请教各位!!

  • 我觉得你应该这么写
    DELAY_US(1000000);
    GpioDataRegs.GPADAT.bit.GPIO12 = ~GpioDataRegs.GPADAT.bit.GPIO12 ;
  • 你好,我试了一下GpioDataRegs.GPADAT.bit.GPIO12 = ~GpioDataRegs.GPADAT.bit.GPIO12 ;,这样运行状态和之前的一样,不知道是不是哪里漏掉了
  • 请您下载controlsuite,安装后参考例程:
    :\ti\controlSUITE\device_support\f2803x\v130\DSP2803x_examples_ccsv5\flash_f28035
  • 我把时钟配置改了一下就行了。不知道为什么配置成60m就不行???
    1、
    //#define DSP28_DIVSEL 0 // Enable /4 for SYSCLKOUT
    //#define DSP28_DIVSEL 1 // Disable /4 for SYSCKOUT
    #define DSP28_DIVSEL 2 // Enable /2 for SYSCLKOUT
    //#define DSP28_DIVSEL 3 // Enable /1 for SYSCLKOUT


    //#define DSP28_PLLCR 12 // Uncomment for 60 MHz devices [60 MHz = (10MHz * 12)/2]
    //#define DSP28_PLLCR 11
    #define DSP28_PLLCR 10
    //#define DSP28_PLLCR 9

    2、
    //#define CPU_RATE 25.000L // for a 40MHz CPU clock speed (SYSCLKOUT)
    #define CPU_RATE 33.333L // for a 30MHz CPU clock speed (SYSCLKOUT)
    //#define CPU_RATE 41.667L // for a 24MHz CPU clock speed (SYSCLKOUT)
    //#define CPU_RATE 50.000L // for a 20MHz CPU clock speed (SYSCLKOUT)