实验2.4 外中断
一.实验目的
1.通过实验熟悉VC5509A的中断响应过程。
2.学会C语言中断程序设计,以及运用中断程序控制程序流程。
二.实验设备
计算机,ICETEK-VC5509-A实验箱及电源。
三.实验原理
1.中断及中断处理过程:
⑴中断简介:中断是一种由硬件或软件驱动的信号,DSP在接到此信号时,将当前程序悬挂起来,转去执行另外一个任务,这个任务我们称为中断服务程序(ISR)。TMS320C55x DSP 可支持32个ISR,可由硬件或软件触发。
⑵DSP处理中断的步骤:
①接收中断请求:由软件或硬件发出。
②响应中断请求:对于可屏蔽中断,需要满足若干条件,才发生响应;而对于不可屏蔽中断,则立即响应。
③准备执行中断服务程序。
- 完成当前正在执行的指令;将进入流水线但还未解码的指令清除。
- 自动保存若干寄存器的值到数据堆栈和系统堆栈。
- 取得用户定义的中断向量表中当前中断向量,中断向量指向中断服务程序入口。
④执行中断服务程序。中断服务程序包含中断返回指令,这样返回时可以出栈以前保存的关键寄存器数据,从而恢复中断服务程序执行前的现场。
⑶中断向量表:
中断向量表的构成请参见TI的文档sprs295d.pdf之3.11节。
中断向量表的地址可以由用户指定。
⑷外中断:
TMS320C5509可以响应INT0-INT4五个外中断。
2.ICETEK-CTR板的键盘接口:
显示/控制模块ICETEK-CTR通过接口P8连接小键盘,接收小键盘传送的扫描码,并在每个扫描码结束后保存,同时向DSP的INT2发送中断信号;当DSP读键盘时将扫描码送到数据总线上。小键盘上每次按下一个键将产生2个扫描码,2次中断。
3.程序编制
由一个不含中断处理程序的工程通过改写加入中断处理程序部分大致需要如下操作(假设使用INT2):
⑴编制中断服务程序:参见实验程序,编写单独的一个函数XINT,此函数使用interrupt 修饰,没有参数和返回值。
⑵构造中断向量表:可以用汇编语言构造,编写一个汇编语言模块程序vector.asm。
⑶修改链接命令文件:在MEMORY小节中开辟单独的地址段用以存放中断向量表;在SECTIONS小节中指定.vectors段到前步开设的内存段中。
⑷主程序中进行初始化设置:定位中断向量表、使能中断、清中断等。
4.实验程序流程图:
四.实验内容
1.实验准备:
⑴连接实验设备:请参看本书第二部分,第一章、二。
⑵连接实验箱附带的键盘的PS2插头到ICETEK-CTR的“键盘接口”P8。
⑶将ICETEK-CTR板的供电电源开关拨动到“开”的位置。
(4)设置Code Composer Studio 3.3在硬件仿真(Emulator)方式下运行:
(5)启动Code Composer Studio 3.3,选择菜单Debug→Reset CPU。
2.打开工程文件:
C:\ICETEK\VC5509AES60\VC5509AE\Lab0304-XINT\v60\XINT.pjt。
实验要求:
(1)下载运行该程序,观察结果:
运行程序,按一下小键盘上任意一个键,注意观察ICETEK-CTR板上指示灯闪烁的情况。可发现:每次按下键盘均会发生2 次中断,当按下键不放时会产生连续的中断。
(2)观察中断函数的执行:
选择“Debug”菜单中“Halt”暂停运行程序,在XINT程序中的语句上加软件断点,重
新运行程序(选择Debug---Run),何时程序停留在断点上?产生外中断
实验2.5 :单路/多路模数转换(AD)
一.实验目的
1.熟悉VC5509A的定时器。
2.掌握VC5509A片内A/D的控制编程方法。
二.实验设备
计算机,ICETEK-VC5509-A实验箱及电源。
三.实验原理
1.TMS320VC5509A模数转换模块特性:
- 带内置采样和保持的10位模数转换模块ADC,最小转换时间为500ns,最大采样率为21.5kHz。
- 2个模拟输入通道(AIN0—AIN1)。
- 采样和保持获取时间窗口有单独的预定标控制。
2.模数转换工作过程:
- 模数转换模块接到启动转换信号后,开始转换第一个通道的数据。
- 经过一个采样时间的延迟后,将采样结果放入转换结果寄存器保存。
- 转换结束,设置标志。
- 等待下一个启动信号。
3.模数转换的程序控制:
模数转换相对于计算机来说是一个较为缓慢的过程,一般采用中断方式启动转换或保存结果,这样在CPU忙于其他工作时可以少占用处理时间。设计转换程序应首先考虑处理过程如何与模数转换的时间相匹配,根据实际需要选择适当的触发转换的手段,也要能及时地保存结果。
由于TMS320VC5509A DSP芯片内的A/D转换精度是10位的,转换结果的低10位为所需数值,所以在保留时应注意将结果的高6位去除,取出低10位有效数字。关于TMS320VC5509A DSP芯片内的A/D转换器的详细结构和控制方法,请参见文档spru568.pdf。
4.实验程序流程图:
四.实验内容
1.实验准备:
⑴连接实验设备:请参看本书第二部分、第一章、二。
⑵准备信号源进行AD输入。
①取出2根实验箱附带的信号线(如下图,两端均为单声道语音插头)。
②用1根信号线连接实验箱左侧信号源的波形输出A端口和“A/D输入”模块的“ADCIN2”插座注意插头要插牢、到底。则信号源波形输出A的输出波形即可送到ICETEK-VC5416-AR 板的AD输入通道0。
③用1根信号线连接实验箱左侧信号源的波形输出B端口和“A/D输入”模块的“ADCIN3”。则信号源波形输出B的输出波形即可送到ICETEK-VC5416-AR板的AD输入通道1。
④设置波形输出A:(如下图)
- 向内侧按波形频率选择旋钮,直到标有正弦波的指示灯点亮。
- 上下调节波形频率选择旋钮,直到标有100-1KHz的指示灯点亮。
- 调节幅值调整旋钮,将波形输出A的幅值调到最大。
⑤设置波形输出B:
- 向内侧按波形频率选择旋钮,直到标有正弦波的指示灯点亮。
- 上下调节波形频率选择旋钮,直到标有1K-10KHz的指示灯点亮。
- 调节幅值调整旋钮,将波形输出B的幅值调到最大。
--设置CodeComposer Studio 3.3在硬件仿真(Emulator)方式下运行:
--启动Code Composer Studio 3.3:选择菜单Debug→Reset CPU。
2.打开工程文件:
C:\ICETEK\VC5509AE\VC5509AE\Lab0305-AD\AD.pjt。
//主程序main.c 中AD转换的关键语句:
while ( 1 )
{
for ( i=0;i<256;i++ ) //采样256个值
{
ADCCTL=0x8000; // 启动AD转换,通道0
do
{
uWork=ADCDA TA;
} while ( uWork&0x8000 );
//等待直到ADC数据可用时,uWork=ADCDA TA(将采样数据存入uWork)
nADC0[i]=uWork&0x0fff;
//屏蔽无效位,将有效位的采样数据存入缓冲区nADC0
}
for ( i=0;i<256;i++ )
{
ADCCTL=0x9000; // 启动A/D转换,选通道1
do
{
uWork=ADCDA TA;
} while ( uWork&0x8000 );
nADC1[i]=uWork&0x0fff;// 屏蔽无效位,保留采样数据
}
asm( " nop"); // 方便在此设定断点
}
实验要求:
(1)下载、运行该程序,在空格处填入注释。
(2)观察图形窗口:
选择View->Graph->Time/Frequency…进行如下设置:
设置软件断点:在main.c中有“break point”注释的语句上加软件断点,按“F5”键运行到断点。
显示AD转换产生的波形:(示例)
(3)按“Alt+F5”键连续运行,并调整信号源A为方波(频率范围不变),信号源B为三角波(频率范围改为100-1KHz),
显示实时AD采样波形:
(4)选择File→workspace→save workspacs As…,输入文件名SY1.wks,保存该工程文件。
三.DSP实现外部控制实验
实验3.1 :通用输入输出管脚应用
一. 实验目的
通过实验学习使用5509A DSP的通用输入/输出管脚直接控制外围设备的方法,了解发光二极管的控制编程方法。
二.实验设备
计算机,ICETEK-VC5509-A实验箱
三.实验原理
1.TMS320C5509的通用输入/输出管脚:
TMS320C5509DSP有7个专门的通用输入输出管脚,还有1个通用输出管脚XF。这些通用输入输出管脚通过专用寄存器可以由软件控制,比如指定输入或输出值等。另外,TMS320C5509DSP的许多其他管脚,在不使用于特定功能时也能配置成通用输入/输出管脚。
2.ICETEK-CTR指示灯的控制:
GPIO与被控指示灯的连接:
通过ICETEK-VC5509-A板的扩展插座,通用输出/控制模块ICETEK-CTR板直接连接了板上的一个指示灯和DSP的一个通用输入/输出管脚。这个管脚属于McBSP1,可以设置成通用输入/输出管脚使用。扩展原理如图:
GPIO控制指示灯:如图,如果要点亮发光二极管,需要在GPIO1上输出低电平,如果输出高电平则指示灯熄灭。若定时使GPIO1上的输出改变,指示灯将会闪烁。
受控指示灯: ICETEK-CTR板上只有一个指示灯可单独受DSP的GPIO控制,它是交通灯模块“北”侧的红色指示灯。
3.实验程序流程图
四.实验内容
1.实验准备:
⑴连接实验设备:请参看本书第二部分、第一章、二。
⑵将ICETEK-CTR板的供电电源开关拨动到“开”的位置。开关位置请参见第二部分、第一章、三、“扩展模块电源开关及其指示灯”。
2.设置Code Composer Studio 3.3在硬件仿真(Emulator)方式下运行:
3.启动Code Composer Studio 3.3:
选择菜单Debug→Reset CPU。
4.打开工程文件:
C:\ICETEK\VC5509Ae\VC5509Ae\Lab0401-GPIO\V60\IOPin.pjt。
//源程序main.c中的关键语句:
main()
{
PLL_Init(20); // 初始化DSP时钟
SDRAM_init(); // 配置EMIF
InitCTR(); // ICETEK-CTR控制板初始化
InitMcBSP(); // McBSP初始化,McBsp.FSX(第15管脚)设置为GOIO
CTRGR=2; // 使能IO
while ( 1 )
{
PCR1^=8; // 对PCR1的第四位进行翻转,使指示灯闪烁
Delay(256); // 延时
}
}
5.下载运行该程序。
1.在空格中填入注释:
2.写出实验结果:
可以观察到位于交通灯模块的右侧红色发光二极管定时闪烁。