官方自带了一个延迟程序:
#define DELAY_US(A) DSP28x_usDelay(((((long double) A * 1000.0L) / (long double)CPU_RATE) - 9.0L) / 5.0L)
为什么我每次调用时,就会跳到非法指令的中断中去?
另外还有个问题:
9.0和5.0后面带个L是什么意思?
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.
在工程文件 DSP2803x_usDelay.asm 中,可以找到 DELAY_US() 的定义如下所示:
从这段代码中可以看出,DELAY_US() 是被定义在 ramfuncs 段中,如果在程序中调用该函数,则 PC 指针会跳转到相应的 RAM 存储空间内执行该函数。
所以:
(1)不需要在自己的代码中额外地将 DELAY_US() 再次声明为 ramfuncs。
(2)但是示例工程文件中并没有将 DELAY_US() 从Flash 搬移到 RAM 的相应代码,如果运行在 Flash 中的程序需要调用 DELAY_US() ,则需要在自己的代码中添加代码搬移函数 MemCopy(),并在调用 DELAY_US() 之前先执行 MemCopy()。
当然,如果工程中没有定义 Memcopy() 函数,还需要对其进行定义,并且声明所用到的全局变量。相关内容已经在之前 ”搬移到RAM中运行“ 的帖子中回复,实现方法相同,在这里就不赘述了。