一个完整的DSP程序设计

上传人:飞*** 文档编号:48595992 上传时间:2018-07-17 格式:PPT 页数:52 大小:202KB
返回 下载 相关 举报
一个完整的DSP程序设计_第1页
第1页 / 共52页
一个完整的DSP程序设计_第2页
第2页 / 共52页
一个完整的DSP程序设计_第3页
第3页 / 共52页
一个完整的DSP程序设计_第4页
第4页 / 共52页
一个完整的DSP程序设计_第5页
第5页 / 共52页
点击查看更多>>
资源描述

《一个完整的DSP程序设计》由会员分享,可在线阅读,更多相关《一个完整的DSP程序设计(52页珍藏版)》请在金锄头文库上搜索。

1、一个完整的DSP C程序设计 2004年3月11日Task本程序最终完成的结果是:通过计算 机声卡将语音信号送到SY-5402EVM板语 音信号输入端,采用播放器播放一首歌 曲,将耳机接到SY-5402EVM板的语音信 号输入端,此时可以听到十分清晰的歌 声。同时在程序中还访问了通用XF脚, 使XF控制LED灯闪烁。预备知识nCPU的设置n存储器配置文件的编写nMcBSP的硬件基础知识nVolatile关键字CPU的设置C54xTM DSP有三个状态、控制寄存器: 状态寄存器0(ST0) 状态寄存器1(ST1) 处理器模式寄存器(PMST)ST0、ST1包含了各种条件和模式的状态, PMST中

2、是存储器设置和控制信息。由于寄存器 是存储器映射的,它们可以从数据存储区存入和 加载,处理器的状态可以存入子程序和中断服务 程序(ISRs),也可以从这些程序中恢复。状态寄存器(ST0、ST1) ST0n15-13 ARP (0括号中为复位后的值) 辅助寄存器指针。在间接单操作数寻址兼容 模式下,用这三位来选择辅助寄存器。DSP在标准模式(CMPT=0),ARP必须是 零。 n12 TC (1) 测试/控制标志。TC存储算术逻辑单元(ALU)检测位的结果。 很多指令都影响TC位,TC位的状态可以决定条件分支、调用的执行与否,返回指 令是否执行。 n 11 C (1) 如果加法产生进位则置1,减

3、法产生借位则置0。 n10 OVA (0) 累加器A溢出标志。 n 9 OVB ( 0) 与OVA类似,相对与累加器B。 n 80 DP (0) 数据存储器页指针。对于单独的数据存储器操作数寻址, 这9位字段链接指令字的低7位,形成一个16位的直接的存储器地址,如果程序编 制器的模式位(在ST1中)CPL=0,则操作被执行。DP字段可以通过短立即操作 数LD指令或通过数据存储器加载。 n各位用SSBX和RSBS指令设置和清除 ST1n15 BRAF(0) 块重复活动标志位。BRAF显示一个块重复当前是否活动。 BRAF=0 块重复不活动。当块重复计数器(BRC)减到0以下时,BRAF被 清除。

4、 BRAF=1 块重复是活动的。当执行一条RPTB指令时,BRAF被自动 设置。 n14 CPL (0) 程序编制器模式位。CPL表示在相对的直接寻址中,使用哪 一个指针。CPL=0 在相关的直接寻址模式中,选择使用数据页指针(DP) CPL=1 在相关的直接寻址模式中,选择使用堆栈指针 (SP)13 XF (1) XF状态位。XF显示外部标志(XF)脚的状态,该脚是一 个 通用目的的输出脚。SSBX指令可以设置XF,RSBX指令可以复位XF。n12 HM (0) 保持模式位。HM表明当确认一个活动的信号时,处理器是 否继续内部的操作。HM=0 处理器从内部程序存储器继续执行,但设置外部接口为

5、高阻态。HM=1 处理器暂停内部运行。 n11 INTM ( 1) 中断模式位。INTM允许或屏蔽所有中断。INTM=0 所有非屏蔽中断被允许。INTM=1 所有可屏蔽中断被禁止。10 (0) 总是读为0。 9 OVM (0) 溢出模式位。8 SXM (1) 符号扩展模式位。 7 C16 (0) 双16位/双精度算术模式位。 6 FRCT (0) 小数模式位。5 CMPT (0) 兼容模式。 40 ASM (0) 累加器移位模式。 ST1处理器模式状态寄存器(PMST)n157 IPTR (1FF h) 中断矢量指针。9位IPTR字段指明128字的程序页, 页中贮存着中断矢量。用户可以再变换中

6、断矢量到RAM用于引导加载操作。复 位操作后,这些位都被设置为1。复位矢量总是驻留在程序存储空间的FF80h ,RESET指令不影响这个字段。 n 6 MP/MC ( MP/ MC脚) 微处理器/微型计算机模式位。MP/MC 允许、禁止程 序存储空间可寻址的片内ROM。MP/MC0 允许片内ROM、允许寻址MP/MC1 片内ROM不可用。MP/MC的值在复位时采集,对应于当时相应的MP/MC脚逻辑电平。该脚只在复 位时采集,之后不再采样,RESET指令不影响这一位,可以通过软件设置。 n 5 OVLY (0) RAM覆盖、重叠(overlay)。OVLY允许片内双存取数据 RAM块被映射到程序

7、空间。OVLY=0 片内RAM在数据空间寻址,但不能在程序空间寻址OVLY1 片内RAM被映射到程序和数据空间。然而,数据0页 ( 0h7Fh)不能映射到程序空间n4 AVIS (0) 地址可见模式。AVIS位允许/禁止在地址脚上是否可见内 部程序地址。AVIS=0 外部地址线不随内部程序地址变化,控制和数据线也不受影 响,地址总线仍然由前一次的地址驱动。AVIS=1 该模式允许内部程序地址出现在器件的地址脚上,因此可以 跟踪内部程序地址。当中断向量驻留片内存储器时,该模式允许中断矢量 和信号一起译码。 n3 DROM (0) 数据ROM位。DROM位允许片内ROM映射到数据空间。 DROM=

8、0 片内ROM不映射到数据空间。DROM=1 片内ROM的一部分被映射到数据空间。 n 2 CLKOFF (0) 时钟输出关闭(CLOCKOUT)。当CLOCKOFF位为1时,CLOCKOUT输出被禁止,保持高电平。 n1 SMUL (N/A) 乘法饱和。当SMUL=1时,在执行MAC累加操作前,会出 现乘结果的饱和处理,只有当OVM=1(溢出)、以及FRCT=1(小数)时,SMUL才起作用。 n0 SST ( N/A) 饱和存储。当SST=1时,在存储到存储器之前,来自累 加器的数据允许饱和处理。n在今天的例子程序中:PMST=0x00A0; n那么:IPTR=0000 0000 1 b;

9、MP/MC=0; OVLY=1;DROM=CLKOFF=SMUL=SST=0; Memory Maps for the C5402nCPU配置已OK!探讨空间n管脚数目:n208个n电源:n3.3V(I/O)n2.5V(内核)n速度n250MHzn内部资源n4992个逻辑单元n10万个逻辑门n49152 bit的RAM存储器配置文件的编写n以下就是今天例子程序的 user_audio.cmd文件:-c /*ROM自动初始化模式*/ -h -o user_audio.out /*输出文件名*/ -m user_audio.map /*编译连接时产生MAP表*/ user_audio.OBJ /*

10、第一个C模块*/ vectors.OBJ /*汇编语言模块*/ /*-lrts.lib*/ /*运行支持库*/ -lmatrix.lib /*目标库*/ MEMORY PAGE 0: PROG: origin=0x180, length=0x3000VECS: origin=0x80, length=0x100 PAGE 1: DATA: origin=0x3000,length=0xD80 /* 上面为存储器的分配,下面为段的分配*/ SECTIONS .text PROG PAGE 0.cinit PROG PAGE 0.pinit PROG PAGE 0.vectors VECS PAG

11、E 0 .symbol PROG PAGE 0.stack DATA PAGE 1.bss DATA PAGE 1.const DATA PAGE 1.switch DATA PAGE 1.system DATA PAGE 1.cio DATA PAGE 1.far DATA PAGE 1 SECTIONS .text PROG PAGE 0;.text是汇编指示关键字,它的含义为将程序 段放入PAGE0的PROG区域cinit PROG PAGE 0;.cinit是将C语言初始化数据存入PROG区域中.pinit PROG PAGE 0;指示将C+程序初始化分配在PROG区域.vectors

12、 VECS PAGE 0;为中断响亮表在PROG区域分配一个段.symbol PROG PAGE 0;.stack DATA PAGE 1;表示在PAGE 1的DATA区域开辟堆栈.bss DATA PAGE 1;指示将未初始化的变量分配在DATA区域.const DATA PAGE 1;指示将常量分配在DATA区域.switch DATA PAGE 1;指示将C语言的switch语句分配到DATA区域.sysmem DATA PAGE 1;指示将C语句(如malloc,realloc或alloc)开辟的存储分配到DATA区域.cio DATA PAGE 1;.far DATA PAGE 1;

13、 DR DXCLKXCLKRFSXFSRCLKSMcBSP内部结构图各引脚功能nDX:发送引脚,与McBSP相连发送数据nDR:接收引脚,与接收数据总线相连nCLKX:发送时钟引脚nCLKR:接收时钟引脚nFSX:发送帧同步引脚nFSR:接收帧同步引脚1514, 1312, 1110 8765,43210DLBRJU STCLK STP保留DXE NAABISRIN TMRSY NCE RRRFU LLRRD YRRS T00000000000串口接收控制寄存器SPCR1结构RRDY:接收准备位。RRDY=0,接收没有准备好; RRDY=1,接收器准备好从DRR1,2读数据volatile关键

14、字Const a=5; a为常量 Volatile 变量neg:#define PMST 0x001D*(volatile unsigned int *)PMST=0x00A0;volatile关键字的作用是什么? n以volatile unsigned short *IO_PORT为例 n表示这个指针所指地址的值是“易变”的,也就是说它可能 会被其他的程序或硬件所改变。 当你的程序向该地址先写入了一个值,紧接着再读取该地址 时。如果你用了volatile关键字,编译器就不会认为后面 的读操作是多余的而将后面的读取给优化掉,而是给予保留。因此: volatile的作用是防止编译器优化 对volatile的变量来说 :编译器保证每次访问 此变量时都从存储器中取值 !补充(ioport 的介绍)ioport是定义访问I/O空间的关键字。 对于访问I/O

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 行业资料 > 其它行业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号