1、DSP实验基于CCS报告DSP与嵌入式系统实验报告IO 端口实验一、实验目的了解 ICETEK-VC5416-徽在 TMS320VC5416DSPO 空间上的扩展。了解ICETEK-VC5416-徽上指示灯扩展原理。学习在 C 语言中使用扩展的控制寄存器的方法。二、实验原理I/O 空间的扩展及使用:C54x DSP 的 I/O 空间被保留用于外部扩展。 由于在程序中访问 I/O 空间的语句只有 in和 out 指令,所以在扩展时一般将带有控制能的寄存器或分离地址访问的存储单元的地 址映射到 I/O 空间,访问这部分的单元又称 I/O 端口访问。例如:可将控制指示灯组 的寄存器或锁存器映射到一个
2、 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-300
3、3h : 板上 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
4、 ,而向端口 000ch输 出x变量的值的指令为portw #0Ch,x ;在C语言中访问I/O 端口则必须首先声明I/O 端口的类型,然后才能访问,以下语句仍完成上面汇编语言所完成的功能:ioport unsigned int port0008;ioport unsigned int port000c;x = port0008;指示灯扩展原理详见上图,其中 7 个指示灯是 D3 D9; D10 在硬件上没做控制扩展。实验程序流程图三、实验代码. 依次类推。实验二 定时器实验一、实验目的通过实验熟悉 VC5416A 的定时器;掌握 VC5416A 定时器的控制方法;掌握 VC5416A 的中断
5、结构和对中断的处理流程;学会 C 语言中断程序设计,以及运用中断程序控制程序流程。二、实验原理 通用定时器介绍及其控制方法片内定时器是一个软件可编程定时器,可以用来产生周期的中断信号。定时器主要由 3 个寄存器所组成:定时器寄存器(TIM)、定时器周期寄存器(PRD和定时器控制寄存 器(TCR。这3个寄存器都有映象寄存器,它们在数据存储器中的地址分别为 24H、 25H和26H。TIM是一个递减计数器;PRD中存放计数值;TCR中有定时器的控制位和 状态位:15 12 保留11-10 soft free9 6 PSC 定时器预定标计数器5 TRB 定时器重新加载位,用来复位片内定时器4 TSS
6、 定时器停止状态位,用于停止或启动定时器30 TDDR 定时器分频系数在正常工作卜#况下,当TIM减到0后,PR叶的时间常数自动地加载到TIM。复位后,定时 器控制寄存器(TCR的停止状态位TSS=O,定时器启动工作,时钟信号CLKOUT至IJ预定 标计数器PSC PSCfc是一个递减计数器,每当复位或其减到 0后,自动地将定时器分频 系数TDDRt1载至IJPSC PSCECLKOUT用下,作减1计数。当PS(M到0,产生一个借位信号, 令TIM乍减1计数。TIM减到0后,产生定时器中断信号TINT,传送到CP生口定时器输出引TOUT。定时器中断白周期为:CLKOUT (TDDR+1 X (
7、 PRD+1其中,CLKOUT时钟周期,TDDROPR盼别为定时器的分频系数和时间常数对定时器初始化的步骤如下: 先将TC种的TS3&置1,关闭定时器。 加载 PRD。 重新加载TCR(使TDD初始化;令TS/ =0,以接通CLKOUTTR阶值1,以使TIM减到0 后重新加载定时器时间常数),启动定时器。- 对中断的处理: 设置 INTM=1将IFR中的TINT位置1 ,消除尚未处理完的定时器中断。将IMR中的TINT位置1 ,开放定时器中断。 将ST1中的INTMS请0 ,开放所有可屏蔽中断。.TMS320VC5416中断结构5416 的 IMR 和 IFR 寄存器的结构,其中包含了可响应的
8、中断:中断响应过程外设事件要引起 CPU 中断, 必须保证: IMR 相应位被使能 (置 1 ) , ST1 寄存器中的 INTM使能(置 0 )。当 CPU 响应中断时, PC 指针指向中断向量表中对应中断的地址,进入中断服务子程序。中断向量表是 DSP 存放中断服务程序的一段内存区域,大小为 80H。在中断向量表中,每一个中断占用 4 个字的空间,一般情况是将一条跳转或延时跳转指令存放于此。中断向量表的位置是可以改变的,修改 PMST 寄存器中的中断向量表基地址可以实现这一点。中断程序设计 程序中应包含中断向量表, 5416 默认向量表从程序区 FF80 地址开始存放。向量表中每项为 4
9、个字,存放一个跳转指令,跳转指令中的地址为相应服务程序入口地址;第一个向量表的首项为复位向量,即 CPU 复位操作完成后自动进入执行的程序入口;程序中包含相应的中断服务程序,应将其入口地址加入相应中断向量表中。 实验程序分析本实验设计的程序是在上一个实验基础上修改得来,由于上一实验控制指示灯闪烁的延时控制是用循环计算方法得到的,延时不精确也不均匀,采用中断方式可以实现指示灯的定时闪烁,时间更加准确。对于定时器的周期寄存器为计数 f423H ,分频系数定为 15 ,即 1 , 000, 000 个 CPU 时钟计数一次, 由于 DSP 工作在 8MHz 主频 ( ICETEK-VC5416-A板
10、上 DIP 开关 U2 的 CLKMD1-3 均为 OFF 时),正好是 125ms 中断一次,所以在中断服务程序中计算中断 4 次时改变指示灯状态,实现指示灯亮 秒再灭 秒,即每秒闪烁1 次。实验程序的工程中包含了两种源代码,主程序采用 C 语言编制利于控制,中断向量表在 汇编语言文件中,利于直观地控制存储区分配。在工程中只需将它们添加进来即可,编译系统会自动识别分别处理完成整合工作。实验程序的 C 语言主程序中包含了内嵌汇编语句,提供一种在需要更直接控制 DSP 状态的方法,同样的方法也能提高 C 语言部分程序的计算效率。 程序流程图主程序流程图中断服务程序流程图如下:三、实验代码mage
11、)int mix256;int kk=0;int kkk=0;#define FIRNUMBER 64#define SIGNAL1F 1000#define SIGNAL2F 4500#define SAMPLEF 10000#define PIfloat InputWave();float FIR();void initMcBSP2( void );float fHnFIRNUMBER=;float fXnFIRNUMBER= ;float fInput,fOutput;float fSignal1,fSignal2;float fStepSignal1,fStepSignal2;floa
12、t f2PI;int i;float fIn256,fOut256;int nIn,nOut;int flage=0;int uWork;int inp1256;int inp2256;int length1,length2;int channel;int www;main()int i,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=1;length1=length2=
13、0;www=0;for(i=0;i256;i+)fOuti=0;port3006=1;*(int *)0x58=0x1007;initMcBSP2();asm(rsbxINTM);nIn=0; nOut=0;f2PI=2*PI;fSignal1=;fSignal2=PI*;fStepSignal1=2*PI/30;fStepSignal2=2*PI*;while ( 1 )if(flage=1)mage)int mix256;int kk=0;int kkk=0;#define FIRNUMBER 64#define SIGNAL1F 1000#define SIGNAL2F 4500#def
14、ine SAMPLEF 10000#define PIfloat InputWave();float FIR();void initMcBSP2( void );/* 滤波器的参数 */float fHnFIRNUMBER=;float fXnFIRNUMBER= ; /float fInput,fOutput;float fSignal1,fSignal2;float fStepSignal1,fStepSignal2;float f2PI;int i;float fIn256,fOut256;int nIn,nOut;int flage=0;int uWork;int inp1256;in
15、t inp2256;int length1,length2;int channel;int www;main()int i,j;asm(ssbxINTM); / 关闭可屏蔽中断*(int *)0x58=0x0;j= PMST;/设置PMSTJ存器PMST = j&0xff; / 中断向量表起始地址 =80HIMR = 0x8;TCR = 0x417; / 计数器分频系数 =8TIM = 8; / 计数器计数为 8PRD = 0x157; / 周期寄存器为 0x157TCR = 0x427; /IFR = 0x100; / 其中,时钟周期为 8MHzflage=0;channel=1; / 打开
16、通道length1=length2=0;www=0;for(i=0;i=256 )等待延时nOut=0; /float InputWave()for ( i=FIRNUMBER-1;i0;i- )fXni=fXni-1;fXn0=mixkkk;kkk+;if ( kkk=256 )kkk=0;flage=0;return(fXn0);float FIR()float fSum;fSum=0;for ( i=0;i4;uWork&=0xff;inp2length2=uWork;length2+;elseDXR12=0xc000;uWork=DRR12;uWork=uWork4;uWork&=0x
17、ff;inp1length1=uWork;length1+;channel=1-channel;www+;www%=512;if(www=0)length1=length2=0;flage=1;for(i=0;i256;i+)mixi=inp1i+inp2i;asm( nop);void initMcBSP2( void )/* 配制 McBSP作为 SPI 模式 */SPSA2=SPCR1;SPSD2=0;SPSA2=SPCR2;SPSD2=0;SPSA2=RCR1;SPSD2=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;四、实验结果
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1