TINT的频率=
1tc??TDDR?1???PRD?1?
其中tc表示CLKOUT的周期。定时器当前的值可以通过读取TIM寄存器和TCR寄存器的PSC比特位得到。下面是本实验中初始化定时器的程序片段: stm #10h,TCR stm #2499,PRD stm #20h,TCR
;停止定时器
;设置PRD寄存器值为2499,TINT中断频率为 ; 重新装入TIM和PSC,然后启动定时器
; Foutclk /(2499+1)= 100MHz/2500 = 40 KHz (3)C54X中断的使用
在C54X中用户可以通过中断屏蔽寄存器IMR来决定开放或关闭一个中断请求。图2-1给出了C5402的IMR寄存器的各个比特位的定义。
图2-1 ‘C5402的IMR寄存器
其中,HPINT表示HPI接口中断,INT3-INT0为外部引脚产生的中断,TXINT和TRINT为TDM串口的发送和接收中断,BXINT0和BRINT0为BSP串口的发送和接收中断,TINT0为定时器0中断。在中断屏蔽寄存器IMR中,1表示允许CPU响应对应的中断,0表示禁止。当然要CPU响应中断,ST1寄存器中的INTM还应该为0(允许所有的中断)。
当DSP响应中断时,PC指针指向中断向量表中对应中断的地址,进入中断服务子程序。中断向量表是C54X存放中断服务程序的一段内存区域,大小为80H。在中断向量表中,每一个中断占用4个字的空间,一般情况是将一条跳转或延时跳转指令存放于此。当然,如果中断服务程序很短(小于或等于4个字),可以直接放入该向量表。中断向量表的位置可以通过修改基地址来改变,其基地址由PMST寄存器中的IPTR(15-7 bits)决定。中断向量表的各中断的偏移说明以及中断向量地址的形成请参考教材以及教材附录部分。例如C54x复位后其IPTR全为1,复位中断的偏移量为0,所以中断向量表起始位置在0FF80H,因而复位后程序从0FF80H开始运行。
本实验的初始化程序读取中断向量表的启始地址,然后设置PMST的高9位,以便DSP能正确响应中断,代码如下: ld #0,dp ssbx intm
;设置DP页指针 ;关闭所有中断
12
ld #vector, a ;读出中断向量(地址vector在中断向量表程序中定义)
;保留高9位(IPTR)
and #0FF80h, a or pmst, a stlm a, pmst 三、实验要求
;
andm #007Fh, pmst ;保留PMST的低7位
;设置PMST(其中包括IPTR)
基于DSP的定时器产生2KHz正弦波(采样率为40KHz或者自定义,但必须满足采样定理),采样CCS图形查看工具查看产生波形及其频谱图。 四、实验条件
PC机, DES5402PP-U实验系统 五、调试及结果测试
本实验需要使用C54X汇编语言或C语言实现数字振荡器,并通过CCS提供的图形显示窗口观察输出信号波形以及频谱。实验分下面几步完成: (1).根据确定数字振荡器的频率,计算并确定系数。
(2)启动CCS,新建工程文件,如文件名为sinewave.prj。选择Project菜单中的Add File to Project选项,将所编写的汇编源程序exer2.asm、vec_table.asm和连接命令sinewave.cmd文件依次添加到工程文件中。注意,你可以在添加文件对话框中选择显示不同的文件类型来加快文件选择速度。你也可以使用鼠标右键单击工程文件名(如sinewave.prj)并选择Add Files项来添加需要的文件。其中,exer2.asm包括初始化代码和中断服务程序,而vec_talbe.asm包含中断向量表。
(3)选择Project菜单中的Options选项,或使用鼠标右键单击工程文件名(如sinewave.prj)并选择Options项来修改或添加编译、连接中使用的参数。例如,选择Assembler窗口,选择“Enable Symbolic Debug Infomation”以便使用汇编源代码级调试(你可以在汇编源程序设置断点等等)。选择Linker窗口,在“Output Filename”栏中写入输出OUT文件的名字,如sine.out,你还可以设置生成的MAP文件名。
(4)完成编译、连接,正确生成OUT文件。然后使用File菜单的“Load Program”选项,将生成的OUT文件(如sine.out)装入DSP的片内存储器。这时CCS将显示程序的启始地址_c_int00。
(5)选View→Graph→Time/Frequency打开图形显示设置窗口。在弹出的对话框中按图2-2设置所示,主要修改“Start Address”为y0(y0为生成的正弦波输出变量);“Acquisition Buffer Size”为1,“DSP Data Type”为“16-bit signed integer”。
13
图2-2 CCS图形查看工具设置
(6)在汇编源程序的中断服务程序(_tint)中的“nop”语句处设置断点。该行被加亮为洋红色。选择Debug→Animate,运行程序,观察输出波形。数一数一个周期的正弦波有多少个点?算算频率是否是2kHz?另外,想想Run和Animate两种运行方式的区别?
(7)用右键单击图形显示窗口,并选择“Proporties”项以便修改显示属性。将“Display Type”项改为“FFT Magnitude”以便显示信号频谱。修改“Sampling Rate(Hz)”项为40000,然后退出。注意观察生成的正弦波频率。
(8)清除所有断点,关闭除波形显示窗口外的所有窗口,并关闭工程文件。 (9)下面我们使用C语言完成本实验。新建一个工程文件,如sinewave_c.prj,并添加所编写的timer.c,vec_table.asm源程序,再添加timer.cmd,再添加C使用的标准库rts.lib。该文件应该在CCS安装目录中。例如,若CCS安装在d:\\ti下,则rts.lib应该在d:\\ti\\c5400\\cgtools\\lib下。修改编译、连接选项,加入符号调试选项,修改生成的OUT文件名,如timer.out。
(10).完成编译、连接,正确生成OUT文件。然后使用File菜单的“Load Program”选项,将生成的OUT文件(如timer.out)装入DSP的片内存储器。这时CCS将显示程序的启始地址_c_int00。
(11). 打开C源程序(timer.c)窗口,在中断服务程序(函数tint())的“con_buf=0;”语句处增加一个断点。同样打开图形显示窗口,并将“Start Address”改为buf;
14
“Acquisition Buffer Size”改为128,“Display Data Size”改为128,“DSP Data Type”为“32-bit floating point”。
(12)选择Debug→Animate,运行程序,观察输出波形。数一数一个周期的正弦波有多少个点?算算频率是否是2kHz?同样用右键单击图形显示窗口,显示信号频谱。注意修改“Sampling Rate(Hz)”项为40000,然后退出。注意观察生成的正弦波频率。 六、实验报告要求
1、预习报告
分析采用数字信号处理方法产生正弦波原理,复习定时器工作原理及中断控制方法,考虑主程序、中断向量表以及CMD模块的编写。
2、实习记录
根据实习步骤,记录实验结果图形,考虑显示图形的设置。 3、实验报告
(1)汇出实验结果信号曲线图及其频谱图。 (2)进行本次实验总结。 七、思考题
(1)本实验程序产生了一个2kHz的正弦信号,请修改程序,产生一个频率相同的余弦信号。为了验证产生的COS信号,可以同时生成SIN和COS信号,然后在两个图形窗口中显示波形。它们应该正好相差?/2相位。
(1) 重新设计和实现一个数字振荡器,采样频率改为为20KHz,输出正弦信号的频率为4KHz。
(2) 使用探针工具,用文件保存产生的正弦波数据。
(4)在(1)题的基础上,新建一个工程文件,使用‘VC5402的定时器1产生COS信号,同时使用定时器0产生SIN信号。
(5)在CCS中打开连接定位文件sinewave.cmd,看看中断向量表是如何安排的?并使用MAP文件验证中断向量表的具体地址。
15
实验三: BSP串口通信实现
实验学时: 4 实验类型:综合 实验要求:必修 一、实验目的
1、本实验的主要目的是学习C54xx的McBSP串口的控制和使用,并利用‘VC5402的McBSP1串口实现数据的收发。
2、学会编写串口通信程序,包括串口的初始化和发、送中断服务程序的编写。 二、相关知识点
串口结构与工作原理、包括串口的初始化和发、送中断服务程序的编写 三、实验原理、方法和手段 (1)McBSP概述
McBSP与外设进行数据传输是通过(DX)脚来发送,(RX)脚来接收,通信的时钟与帧信号是由CLKX, CLKR, FSX, and FSR脚来控制。DSP的CPU或DMA从数据接收寄存器(DRR[1,2])读取接收数据,发送时向数据发送寄存器(DXR[1,2])写数据。数据写入(DXR[1,2])后通过传输移位寄存器(XSR[1,2]) 移位输出到DX上,同样,从DR上接收的数据移位存储到接收移位寄存器(RSR[1,2]) 并拷贝到接收缓存寄存器(RBR[1,2]) ,然后,再由(RBR[1,2])拷贝到DRR[1,2],DRR[1,2]就可以由CPU或DMA来读出。多级寄存器允许在通信时内部和外部数据同时传输。C54XX对McBSP的控制由16位的控制寄存器实现。 (2) McBSP控制寄存器
在图3-1中给出了McBSP串口的所有控制寄存器。本实验使用‘VC5402的McBSP1串口,下面的说明以McBSP1为例。McBSP每个串口实际占用6个物理地址空间,例如McBSP1串口中数据发送寄存器为两个(32bit),地址分别为0x42和0x43。本实验通过0x43发送数据(16bit)。数据接收寄存器为两个(32bit),地址分别为0x40和0x41。本实验通过0x41读取串口接收数据(16bit)。控制寄存器占用两个地址:0x48和0x49,而McBSP串口控制寄存器总共有14个,所以在访问这些控制寄存器时,先将要访问的寄存器编号(子地址)写入地址寄存器寄存器0x48,然后在将数据写入0x49或从0x49读出相应的数据。若要访问另一个控制
16