TI中文支持网
TI专业的中文技术问题搜集分享网站

F28035 DELAY(A)函数问题

各位好,第一次使用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

~~~~~

请教各位!!

mangui zhang:我觉得你应该这么写
DELAY_US(1000000);GpioDataRegs.GPADAT.bit.GPIO12 =~GpioDataRegs.GPADAT.bit.GPIO12 ;

各位好,第一次使用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

~~~~~

请教各位!!

ss s:

回复 mangui zhang:

你好,我试了一下GpioDataRegs.GPADAT.bit.GPIO12 = ~GpioDataRegs.GPADAT.bit.GPIO12 ;,这样运行状态和之前的一样,不知道是不是哪里漏掉了

各位好,第一次使用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

~~~~~

请教各位!!

Seven Han:请您下载controlsuite,安装后参考例程:
:\ti\controlSUITE\device_support\f2803x\v130\DSP2803x_examples_ccsv5\flash_f28035

各位好,第一次使用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

~~~~~

请教各位!!

ss s:

回复 mangui zhang:

我把时钟配置改了一下就行了。不知道为什么配置成60m就不行???
1、
//#define DSP28_DIVSEL0 // Enable /4 for SYSCLKOUT
//#define DSP28_DIVSEL1 // Disable /4 for SYSCKOUT
#define DSP28_DIVSEL2 // Enable /2 for SYSCLKOUT
//#define DSP28_DIVSEL3 // Enable /1 for SYSCLKOUT

//#define DSP28_PLLCR12// Uncomment for 60 MHz devices [60 MHz = (10MHz * 12)/2]
//#define DSP28_PLLCR11
#define DSP28_PLLCR10
//#define DSP28_PLLCR9

2、
//#define CPU_RATE25.000L// for a 40MHz CPU clock speed(SYSCLKOUT)
#define CPU_RATE33.333L// for a 30MHz CPU clock speed(SYSCLKOUT)
//#define CPU_RATE41.667L// for a 24MHz CPU clock speed(SYSCLKOUT)
//#define CPU_RATE50.000L// for a 20MHz CPU clock speed(SYSCLKOUT)

各位好,第一次使用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

~~~~~

请教各位!!

ss s:

回复 Seven Han:

谢谢

赞(0)
未经允许不得转载:TI中文支持网 » F28035 DELAY(A)函数问题
分享到: 更多 (0)