资源描述
东南大学自动化学院
实 验 报 告
课程名称: D SP 原理及C 程序开发
第二次试验
试验名称:基于DSP 系统试验——指示灯、拨码开关和定时器 院(系):自动化专业:自动化
姓名:学号:
试验室:试验组别:
同组人员:试验时间: 年 4 月 18日
评定成绩:审阅老师:
第一部分试验:基于DSP 系统试验——指示灯和拨码开关
一.试验目标
1. 了解ICETEK –F28335-A 评定板在TMS320F28335DSP 外部扩展存放空间上扩展。
2. 了解ICETEK –F28335-A 评定板上指示灯和拨码开关扩展原理。
3. 学习在C 语言中使用扩展控制寄存器方法。
二.试验设备
计算机,ICETEK –F28335-A 试验箱(或ICETEK 仿真器+ICETEK–F28335-A 评定板+相关连线及电源)。
三.试验原理
1.TMS320F28335DSP 存放器扩展接口
存放器扩展接口是DSP 扩展片外资源关键接口,它提供了一组控制信号和地址、数据线,能够扩展各类存放器和存放器、寄存器映射外设。
-ICETEK –F28335-A 评定板在扩展接口上除了扩展了片外SRAM 外,还扩展了指示灯、DIP 开关和D/A 设备。具体扩展地址以下:
0x180004- 0x180005:D/A 转换控制寄存器
0x180001:板上DIP 开关控制寄存器
0x180000:板上指示灯控制寄存器
-和ICETEK –F28335-A 评定板连接ICETEK-CTR 显示控制模块也使用扩展空间控制关键设备:
20h :读-键盘扫描值,写-液晶控制寄存器
20h :液晶辅助控制寄存器
20h :液晶显示数据寄存器
2.指示灯和拨码开关扩展原理
图1指示灯扩展原理
图2拨码开关扩展原理
四.试验步骤
LED 程序以下:
#define LED (*(unsigned short int *0x180000
for(;;
{
LED=0x01; Delay(1000; LED=0x02;
Delay(1000;
LED=0x04;
Delay(1000;
LED=0x08;
Delay(1000;
}
开关程序以下;
#define SW (*(unsigned short int *0x180001
for(;;
{
LED=SW;
}
五.试验结果
可知:映射在扩展存放器空间地址上指示灯寄存器在设置时是低4位有效,数据最低位对应指示灯D1,次低位对应D2,... 依次类推。LED 灯以流水灯形式闪灭。
可知:映射在扩展存放器空间地址上拨码开关控制寄存器在回读时是低4位有效,数据最低位对应拨码开关1,次低位对应2,... 依次类推。拨动开关对应LED 灯随开关闪灭。
程序二中led 灯和拨码开关不是正向对应,而是相反。
六. 问题和思索
ICETEK –F28335-A 评定板上指示灯控制寄存器是可读可写,请问用什么措施能够回读指示灯状态?
答:能够将指示灯控制寄存器数据传输给一个参数,将参数输出,能够依据二进制数据后四位知道指示灯状态。
第二部分试验:基于DSP 系统试验——定时器
一.试验目标
1.经过试验熟悉F28335A 定时器;
2.掌握F28335A 定时器控制方法;
3.掌握F28335A 中止结构和对中止处理步骤;
4.学会C 语言中止程序设计,和利用中止程序控制程序步骤。
二.试验设备
计算机,ICETEK-F28335-A 试验箱(或ICETEK 仿真器+ICETEK–F28335-A 系统板
+
相关连线及电源)。
三.试验原理
1.通用定时器介绍及其控制方法
TMS320F28335A 内部有三个32 位通用定时器(TIMER0/1/2),定时器1 和2 被保留给实时操作系统(DSPBIOS )用,只有定时器0 能够提供给用户使用。
2.中止响应过程
a .接收中止请求。必需由软件中止(从程序代码)或硬件中止(从一个引脚或一个基于芯片设备)提出请求去暂停目前主程序实施。
b .响应中止。必需能够响应中止请求。假如中止是可屏蔽,则必需满足一定条件,根据一定次序去实施。而对于非可屏蔽中止和软件中止,会立即作出响应。
c .准备实施中止服务程序并保留寄存器值。 d .实施中止服务子程序。调用对应得中止服务程序ISR ,进入预先要求向量地址,而且实施已写好ISR 。
3.中止类别
可屏蔽中止:这些中止能够用软件加以屏蔽或解除屏蔽。
不可屏蔽中止:这些中止不能够被屏蔽,将立即响应该类中止并转入对应子程序去实施。全部软件调用中止全部属于该类中止。
4.中止优先级
假如多个中止被同时激发,将根据她们中止优先级来提供服务。中止优先级是芯片内部已定义好,不可修改。
四.试验步骤
打开工程文件Lab303-Timer 目录中“Timer.pjt ”。编译下载运行,观察指示灯在定时器定时中止中根据设计定时闪烁(流水)。改变CpuTimer0Regs.PRD. all = 0xffff函数里值,观察试验现象。
初始化LED =0,m=0;
修改中止服务程序以下:
interrupt void cpu_timer0_isr(void
{
CpuTimer0.InterruptCount++;
m++;
// Acknowledge this interrupt to receive more interrupts from group 1
PieCtrlRegs.PIEACK.all = PIEACK_GROUP1;
CpuTimer0Regs.TCR.bit.TIF=1;
CpuTimer0Regs.TCR.bit.TRB=1;
if(m >100
{
m=0
LED=(~ LED;
}
}
五.试验结果 程序实现LED定时亮灭, 不过因为定时器本身设定周期比较小, 所以在100个中止过程 后才实施一次具体任务,,使得指示灯改变。改变CpuTimer0Regs.PRD. all函数值会改 变定时器周期,使得指示灯闪烁速度产生改变。
展开阅读全文