内容发布更新时间 : 2024/11/9 2:18:32星期一 下面是文章的全部内容请认真阅读。
DSP汇编
实验一新手上路]
初学者编写的第一个程序通常是控制XF引脚的变化,然后用示波器测量XF脚波形或观察与相接的LED。这个程序也常常用来测度一下DSP能否正常工作。
实验1.1最简单的程序:控制XF引脚周期性变化
实验目的:通过简单的程序了解DSP程序的结构,熟悉CCS开发环境。 *
*最简单的程序:TestXF1.asm
*循环对XF位置1和清0,用示波器可以在XF脚检测到电平高低周期性变化
*常用于检测DSP是否工作。 *
.mmregs;预定义的寄存器
.def CodeStart;定义程序入口标记 .text;程序区 CodeStart:;程序入口
SSBX XF;XF置1 RPT#999;重复执行1000次空指令产生延时 NOP RSBX XF;XF清0 RPT#999;重复执行1000次空指令产生延时 NOP BCodeStart;跳转到程序开头循环执行
.end NOP指令执行时间为一个时钟周期,设DSP工作频率是50MHz,可以估算出XF引脚电平的变化频率约为:50M/2000=25kHz
在没有示波器的情况下,就要将程序1.1稍作改进,增加延时,用一个延时子程序将XF脚电平变化频率降到肉眼可分辨的程度,就可以用LED来显示电平的变化,程序如下:
实验1.2子程序调用 实验目的:学习子程序的调用 *
*TestXF2.asm
*对TestXF1.asm稍作改进,用延时子程序设置较长的延时, *可以用试验板上的LED看到XF引脚电平的变化 *
.mmregs;预定义的寄存器
.def CodeStart;定义程序入口标记 .text;程序区 CodeStart:;程序入口
SSBX XF;XF置1 CALL Delay;调用延时程序 RSBX XF;XF清0 CALL Delay;调用延时程序 B CodeStart;跳转到程序开头循环执行 *
*延时子程序:Delay
*用两级减一计数器来延时。调整AR1和AR2的大小LED闪烁的频率不同 * Delay:
STM#999,AR1;循环次数1000 LOOP1:STM#4999,AR2;循环次数5000 LOOP2:BANZ LOOP2,*AR2-;如果AR2不等于0,AR2减1,再判断
BANZ LOOP1,*AR1-;如果AR1不等于0,AR1减1,跳转到LOOP1 RET .end *
*注意这种延时方法并不精确,需要精确定时必须用定时器。 *按此法延时的近似公式为:4*(AR2+1)*(AR1+1)*时钟周期 *当DSP工作在50MHz(时钟周期20ns),AR1=999,AR2=4999时 *延时约为400ms,则LED闪烁的周期为800ms,频率1.25Hz *
设计指导: 1.源代码书写格式
源代码的书写有一定的格式,初学者往往容易忽视。简单归纳如下: 1.每一行代码分为三个区:标号区、指令区和注释区。标号区必须顶格写,主要是定义变量、常量、程序标签时的名称。指令区位于标号区之后,以空格或TAB格开。如果没有标号,也必须在指令前面加上空格或TAB,不能顶格。注释区在标号区、程序区之后,以分号开始。注释区前面可以没有标号区或程序区。另外还有专门的注释行,以*打头,必须顶格开始。