1、DSP实验基于CCS报告DSP与嵌入式系统实验报告目录 2实验一 IO端口实验 3实验二 定时器实验 4实验三 AD实验 5实验四 DA实验 6实验五 信号过滤波器实验 7实验一 IO端口实验一、实验目的1.1 了解 ICETEK-VC5416-A板在TMS320VC5416DSP在IO空间上的扩展。1.2 了解 ICETEK-VC5416-A板上指示灯扩展原理。1.3 学习在C 语言中使用扩展的控制寄存器的方法。二、实验原理2.1 I/O 空间的扩展及使用:C54x DSP 的 I/O 空间被保留用于外部扩展。由于在程序中访问 I/O 空间的语句只有 in 和out 指令,所以在扩展时一般将
2、带有控制能的寄存器或分离地址访问的存储单元的地址映射到 I/O 空间,访问这部分的单元又称 I/O 端口访问。例如:可将控制指示灯组的寄存器或锁存器映射到一个 I/O 端口地址上;A/D、D/A 等专用芯片控制端和状态寄存器也常映射到 I/O 端口上。总之,在 I/O 空间中扩展的设备一般重点用于控制,而使用大片连续存储空间的存储器单元一般映射到数据空间。ICETEK-VC5416-A 板将指示灯、DIP 开关、A/D、D/A、异步串行通信接口和 WatchDog的控制端等映射在 I/O 空间。0001-0001h:WatchDog 控制寄存器3006-3006h:A/D 转换控制寄存器100
3、0-1001h:D/A 转换控制寄存器2000-2007h:异步串口通信控制寄存器3002-3002h: 板上指示灯控制寄存器3003-3003h: 板上 DIP 拨动开关控制寄存器ICETEK-VC5416-A 实验箱上控制模块也使用 I/O 端口控制大部分设备:8001-8001h: 读-键盘扫描值,写-液晶控制寄存器8002-8002h: 液晶控制寄存器8003-8004h: 液晶显示数据寄存器8005-8005h: 发光二极管显示阵列控制寄存器8006-8006h: 保留8007-8007h: 发光二极管显示阵列控制寄存器8008-9FFFh: 保留在程序中,访问 I/O 端口的语句较
4、为简单。对于汇编语言程序,可用 PORTR 和 PORTW指令,例如,从端口0008h读入一个字到变量 x 的指令为 portr 8,x,而向端口 000Ch 输出x变量的值的指令为 portw #0Ch,x;在 C 语言中访问 I/O 端口则必须首先声明 I/O 端口的类型,然后才能访问,以下语句仍完成上面汇编语言所完成的功能:ioport unsigned int port0008;ioport unsigned int port000C;x = port0008;1.2 指示灯扩展原理详见上图,其中 7 个指示灯是 D3D9;D10 在硬件上没做控制扩展。1.3 实验程序流程图三、实验代
5、码/ Example For ICETEK-VC5416-EDU / CTR Version : V4 / File name: LED.c / Project : LED.pjt / Version : 2.00 / Write by: Daniel Hawk / Company : Realtimedsp Co.Ltd / / All Rights opened & no Onus 2005.06 /ioport unsigned int port3002;#define LBDS port3002void Delay(int nDelay);void ShiftToLeftAndRigh
6、t(unsigned int nInit);main()unsigned int uLED4=1,2,4,8; int i; for(;) for ( i=0;i=0;i- ) LBDS=uLEDi; Delay(64); void Delay(int nDelay) int i,j,k; k=0; for ( i=0;inDelay;i+ ) for ( j=0;j1024;j+ ) k+;四、代码分析/ 为LED声明IO端口ioport unsigned int port3002;/ LED 宏定义#define LBDS port3002/ 延时和移位子函数声明void Delay(in
7、t nDelay); /延时调用函数申明void ShiftToLeftAndRight(unsigned int nInit);/移位主函数申明main() unsigned int uLED4=1,2,4,8; / 控制字,逐位置1: 0001B 0010B 0100B 1000B,分别表示第1,2,3,4盏灯点亮int i;/3位流水灯循环移位 for(;) for ( i=0;i=0;i- ) /4盏灯反向流水作业点亮 LBDS=uLEDi; / 反向顺序送控制字 Delay(64); / 调用延时函数,每次灯闪后延时的时间长度 /这里nDelay=64,延时总长=64*1024*T(
8、T指系统单脉冲周期)void Delay(int nDelay) int i,j,k; k=0; for ( i=0;inDelay;i+ ) for ( j=0;j=4 ) LED=0x55; nCount=0; 四、代码分析/宏定义#define TIM *(int *)0x24 /TIM寄存器在数据存储器中的地址是0x24 #define PRD *(int *)0x25 /PRD寄存器在数据存储器中的地址是0x25#define TCR *(int *)0x26 /TCR寄存器在数据存储器中的地址是0x26 #define IMR *(int *)0x0 /将IMR中的TINT位置1,
9、开放定时器中断#define IFR *(int *)0x1 /将IFR中的TINT位置1,清除尚未处理完的定时器中断#define PMST *(int *)0x1d / PMST 寄存器中的中断向量表基地址ioport unsigned int port3002,port3003; /访问I/O端口#define DIP port3003 /DIP开关的接口为 port3003#define LED port3002 /LED开关的接口为 port3002void interrupt time(void); /中断调用函数申明unsigned int nCount,uWork; /定时主函
10、数申明main() nCount=uWork=0; /初始状态 asm(ssbxINTM); / 关中断,进行关键设置时不许打扰 / 设置通用定时器 uWork=PMST; / 设置PMST寄存器 PMST =uWork&0xff; / 中断向量表起始地址=80H IMR = 0x8; / 使能TINT TCR = 0x41F; / 控制字为0000 0100 0001 1111B,预分频系数为8 TIM = 0; / 时钟计数器清0 PRD = 0x0f423; / 周期寄存器为0f423H TCR = 0x42f; / 控制字为0000 0100 0010 1111B,复位片内定时器、启动
11、定时器 IFR = 0x100; / 清中断标志位 asm( rsbx INTM); / 开中断 LED=0xff; while ( 1 ) void interrupt time(void) /中断调用函数 nCount+; /计数 if ( nCount=4 ) LED=0x55; / 中断4次时设置指示灯状态 nCount=0; 五、实验结果- 指示灯在定时器的定时中断中按照设计定时闪烁,改变分频计数器和时钟计数器的计数大小可以调整定时长短。- 使用定时器和中断服务程序可以完成许多需要定时完成的任务,比如 DSP 定时启动 A/D转换,日常生活中的计时器计数、空调的定时启动和关闭等。-
12、在调试程序时,有时需要指示程序工作的状态,可以利用指示灯的闪烁来达到指示灯灵活的闪烁方式可表达多种状态信息。实验三 AD实验一、实验目的1.1 掌握ADC芯片的使用方法1.2 掌握DSP控制ADC芯片以及通过端口采集数据的方法1.3 利用定时器中断控制采样的间隔二、实验原理2.1 TLV0832 模数转换模块特性带内置采样和保持的 8 位模数转换模块 ADC,最小转换时间为 500us。2 个的模拟输入通道(ADIN2ADIN3)。2.2 模数转换工作过程模数转换模块接到启动转换信号后,开始转换第一个通道的数据;经过一个采样时间的延迟后,将采样结果放入转换结果寄存器保存;转换结束,设置标志,也
13、可发出中断;如果为连续转换方式则从新开始转换过程;否则等待下一个启动信号。2.3 模数转换的程序控制模数转换相对于计算机来说是一个较为缓慢的过程。一般采用中断方式启动转换或保存结果,这样在 CPU 忙于其他工作时可以少占用处理时间。设计转换程序应首先考虑处理过程如何与模数转换的时间相匹配,根据实际需要选择适当的触发转换的手段,也要能及时地保存结果。由于 TLV0832 芯片内的 A/D 转换精度是 8 位的,转换结果为 16 位数据,中间 8 位是有效值,所以应将读回的数据右移 4 位后再将高 8 位清零。2.4 程序流程图注意:TCR 中有定时器的控制位和状态位:1512 保留11-10 s
14、oft free96 PSC 定时器预定标计数器5 TRB 定时器重新加载位,用来复位片内定时器4 TSS 定时器停止状态位,用于停止或启动定时器30 TDDR 定时器分频系数以下是 5416 的 IMR 和 IFR 寄存器的结构,其中包含了可响应的中断:三、实验代码/ Example For ICETEK-VC5416-EDU / CTR Version : V4 / Filename: ADC.c / Project : ADC.pjt / Version : 2.00 / Write by: Daniel Hawk / Company : Realtimedsp Co.Ltd / / A
15、ll Rights opened & no Onus 2005.06 /#include c5416regs.h #define TIM *(int *)0x24 #define PRD *(int *)0x25 #define TCR *(int *)0x26 #define REGISTERCLKMD *(int *)0x58 ioport unsigned int port3006; void interrupt time(void);void initMcBSP2( void );unsigned int nCount;int flage;int uWork;int inp256; i
16、nt length;int channel;main() int j; asm(ssbxINTM); *(int *)0x58=0x0; j= PMST; PMST = j&0xff; IMR = 0x8; TCR = 0x417; TIM = 8; PRD = 0x157; TCR = 0x427; IFR = 0x100; flage=0; channel=0; port3006=1; *(int *)0x58=0x2004; initMcBSP2(); asm(rsbxINTM); while ( 1 );/ 定时器中断服务程序,完成:保存转换结果、启动下次转换void interrup
17、t time(void) if(channel) DXR12=0xe000; else DXR12=0xc000; /*DXR12=0xe000;*/ uWork=DRR12; uWork=uWork4; uWork&=0xff; inplength=uWork; length+; length%=256; if(length=0) asm( nop); void initMcBSP2( void ) /*configuation the McBSP1 as SPI mode*/ SPSA2=SPCR1; SPSD2=0; SPSA2=SPCR2; SPSD2=0; SPSA2=RCR1; S
18、PSD2=0x40; SPSA2=RCR2; SPSD2=0x01; SPSA2=XCR1; SPSD2=0x40; SPSA2=XCR2; SPSD2=0x01; SPSA2=SRGR1; SPSD2=0x83; SPSA2=SRGR2; SPSD2=0x2000; SPSA2=PCR; SPSD2=0xA08; SPSA2=SPCR1; SPSD2=0x5801; SPSA2=SPCR2; SPSD2=0xc1;4、代码分析#include c5416regs.h / 使用工具包c5416regs.h/宏定义#define TIM *(int *)0x24 / TIM寄存器在数据存储器中的地址是0x24#define PRD *(int *)0x25 / PRD寄存器在数据存储器中的地址是0x25#define TCR *(int *)0x26 / TCR寄存器在数据存储器中的地址是0x26#define REGISTERCLKMD *(int *)0x58 /REGISTERCLKMD存放在地址0x58中/I/O接口接入ioport unsigned int port3006;void interrupt time(void); /中断调用函数申明void initMcBS
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1