DSP十天速成(汇编编程)
### DSP十天速成之汇编编程基础 #### 实验一:新手上路—控制XF引脚变化 ##### 实验1.1 最简单的程序:控制XF引脚周期性变化 **实验目的:** - 通过编写一个简单的程序来了解DSP程序的基本结构。 - 熟悉Code Composer Studio (CCS) 开发环境。 **实验原理:** 在这个实验中,我们将通过编写一段简单的程序来控制DSP芯片上的XF引脚周期性地进行高低电平变化。通常情况下,这种测试是为了确保DSP能够正常工作,并且能够与外部设备(如示波器或LED)正确交互。 **程序代码:** ```asm .mmregs; 预定义的寄存器 .def CodeStart; 定义程序入口标记 .text; 程序区 CodeStart:; 程序入口 SSBX XF; XF置1 RPT #999; 重复执行1000次空指令产生延时 NOP RSBX XF; XF清0 RPT #999; 重复执行1000次空指令产生延时 NOP B CodeStart; 跳转到程序开头循环执行 .end ``` **程序解析:** - **.mmregs**:该指令用于预定义DSP中的寄存器。 - **.def CodeStart**:定义程序的入口标记。 - **.text**:指示下面的部分为程序代码段。 - **SSBX XF** 和 **RSBX XF**:分别表示将XF引脚置1和清0。 - **RPT #999** 和 **NOP**:组合起来实现延时的效果,通过重复执行NOP指令1000次来达到目的。 - **B CodeStart**:使程序无限循环执行。 **理论分析:** 假设DSP的工作频率为50MHz,则每个时钟周期的时间为20ns。考虑到每半周期的延时为2000个时钟周期(1000次NOP指令乘以2),整个周期的延时为4000个时钟周期,因此XF引脚电平的变化频率约为50MHz除以4000,即大约25kHz。 ##### 实验1.2 子程序调用 **实验目的:** - 学习如何在DSP程序中使用子程序调用功能。 - 通过增加延时来使电平变化更加明显,以便于肉眼观察。 **程序代码:** ```asm .mmregs; 预定义的寄存器 .def CodeStart; 定义程序入口标记 .text; 程序区 CodeStart:; 程序入口 SSBX XF; XF置1 CALL Delay; 调用延时程序 RSBX XF; XF清0 CALL Delay; 调用延时程序 B CodeStart; 跳转到程序开头循环执行 ... 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 ``` **程序解析:** 本实验在实验1.1的基础上增加了延时子程序`Delay`,通过调用该子程序实现了更长时间的延时效果。这使得XF引脚的电平变化周期延长到了肉眼可辨别的程度,可以通过连接LED来直观地观察电平的变化情况。 **理论分析:** - **延时计算公式**:`4*(AR2+1)*(AR1+1)*时钟周期` - **延时计算实例**:假设DSP工作频率为50MHz(时钟周期为20ns),当AR1=999,AR2=4999时,延时时间约为400ms。因此,LED闪烁的周期为800ms,频率为1.25Hz。 #### 源代码书写格式注意事项 - **格式规范**: - 每一行代码分为三个部分:标号区、指令区和注释区。 - 标号区必须顶格写,指令区与标号区之间需要以空格或TAB隔开;如果没有标号,指令区前也必须留空格或TAB。 - 注释区以分号开始,前面可以没有标号区或指令区。 - 专门的注释行以`*`开头,需顶格书写。 - **大小写敏感性**:大多数情况下,汇编语言区分大小写。 - **标点符号**:确保使用英文半角字符。 遵循这些格式规范有助于提高程序的可读性和可维护性,对于初学者来说尤为重要。
剩余23页未读,继续阅读
- duzhongyun19812012-04-18感觉还不错挺实用的就是我用的是C55x,应该注明是C54x的!
- 粉丝: 0
- 资源: 1
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助