Hi Team,
Can you help with the code below?
if delaytime=1, the program will delay 41us. However, in actuality it delays 1ms.
Can you please help?
Regards,
Marvin
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.
Hi Team,
Can you help with the code below?
if delaytime=1, the program will delay 41us. However, in actuality it delays 1ms.
Can you please help?
Regards,
Marvin
Marvin,
The issue is that there are several dis-assembly instruction that are "behind" the C code you have listed, which will cause the increase in time.
We have a function called us_Delay, that you should see used in the ADC examples that takes these as well as the CPU frequency into account to give an accurate microsecond delay based on an integer input to the function.
Best,
Matthew
Hi Mattew,
Thank you.
Is there an application note that I can provide to the customer as a reference for us_Delay?
Regards,
Marvin
This file can be found after installing the tool package for F281x in this path: C:\tidcs\c28\DSP281x\v111\DSP281x_common\source\
Here are the comments from the file itself DSP281x_usDelay.asm
;//########################################################################### ;// ;// FILE: DSP281x_usDelay.asm ;// ;// TITLE: Simple delay function ;// ;// DESCRIPTION: ;// ;// This is a simple delay function that can be used to insert a specified ;// delay into code. ;// ;// This function is only accurate if executed from internal zero-waitstate ;// SARAM. If it is executed from waitstate memory then the delay will be ;// longer then specified. ;// ;// To use this function: ;// ;// 1 - update the CPU clock speed in the DSP281x_Examples.h ;// file. For example: ;// #define CPU_CLOCK_SPEED 6.6667L // for a 150MHz CPU clock speed ;// ;// 2 - Call this function by using the DELAY_US(A) macro ;// that is defined in the DSP28_Device.h file. This macro ;// will convert the number of microseconds specified ;// into a loop count for use with this function. ;// This count will be based on the CPU frequency you specify. ;// ;// 3 - For the most accurate delay ;// - Execute this function in 0 waitstate RAM. ;// - Disable interrupts before calling the function ;// If you do not disable interrupts, then think of ;// this as an "at least" delay function as the actual ;// delay may be longer. ;// ;// The C assembly call from the DELAY_US(time) macro will ;// look as follows: ;// ;// extern void Delay(long LoopCount); ;// ;// MOV AL,#LowLoopCount ;// MOV AH,#HighLoopCount ;// LCR _Delay ;// ;// Or as follows (if count is less then 16-bits): ;// ;// MOV ACC,#LoopCount ;// LCR _Delay ;// ;//