内容发布更新时间 : 2024/12/26 21:44:02星期一 下面是文章的全部内容请认真阅读。
《DSP与嵌入式系统》实验报告
目录
目录 ...................................................... 实验一 IO端口实验 ....................................... 实验二 定时器实验 ........................................ 实验三 AD实验 ........................................... 实验四 DA实验 ........................................... 实验五 信号过滤波器实验 ..................................
实验一 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 指令,所以在扩展时一般将带有控制能的寄存器或分离地址访问的存储单元的地址映射到 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 转换控制寄存器 1000-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 端口的语句较为简单。对于汇编语言程序,可用 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 个指示灯是 D3-D9;D10 在硬件上没做控制扩展。 1.3 实验程序流程图
三、实验代码
/////////////////////////////////////////////////// // 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 port3002 void Delay(int nDelay);
void ShiftToLeftAndRight(unsigned int nInit); main() {
unsigned int uLED[4]={1,2,4,8}; int i;
for(;;) {
for ( i=0;i<4;i++ ) {