DSP实习报告
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1
一:开发板实验部分
1:实习目的
1.1、熟悉 DSP 编译环境,会使用开发板 1.2、掌握 DSP 程序的编写以及调试过程
2:实习要求
2.1、掌握 CCS2.0 以及 USB 口仿真器的设置 2.2、能够编写指定功能的程序
3:实验内容
3.1、CPU 定时器 0 实验 3.1.1 实验要求
采用定时器 0 将八个 LED 灯循环点亮。 3.1.2 编程思路
D S P 实习报告
学
院:
电气信息工程学院
专
业:
自动化
姓
名:
李远芳
班级学号:
自动化 10-4 班 9 号
指导教师:
吴老师
时
间 : 2013-12-16~2013-12-20
目录
一:开发板实验部分…………………………………………………….2 1:实习目的…………………………………………………………….2 2:实习要求……………………………………………………………2 3:实验内容……………………………………………………………2
}
5
interrupt void ISRTimer2(void) { //响应中断寄存器清除,写 1 清 0,进而才能接收下一外围中断
PieCtrl.PIEACK.bit.ACK7=1; //向 CPLD 控制的 LED 灯地址写数据,进而实现对灯的控制 *Led8 = LedCode[LedCount]; LedCount++; if (LedCount>=4) LedCount=0; }
IER |= M_INT1;
PieCtrl.PIEIER1.b it.IN Tx7=1; EINT; // 开放全局中断,Enable Global interrupt INTM ERTM; // 开放全局实时中断,Enable Global realtime interrupt DBGM
for(;;);
InitPeripherals();
/*受 EALLOW 保护的定时器 0 中断矢量*/
EALLOW;
//允许访问 EALLOW 保护的寄存器
PieVectTable.TINT0 = &ISRTimer0;//指向中断服务寄存器定时器 0 的地址
EDIS;
//重新 EALLOW 保护
/*设置 CPU,配置定时器 0 多长时间中断一次,这里的配置可参见课本 P61*/
3.3、EVTimer1 定时器实验 3.3.1 实验要求
采用 EVTimer1 定时器最左侧两个灯一直亮,最右侧的两个灯一直灭,中 间 4 个依次循环点亮。
3.3.2 编程思路 由上个实现可 知, LED 灯地址和 有效电平 ,这里不 再详细说明 。采用
EVTimer1 定时器最左侧两个灯一直亮,最右侧的两个灯一直灭,中间 4 个依次 循环点亮。只需要将 LED 的灯的代码修改即可,由于是中间 4 个,所以循环次 也要修改。由于使用的是 EVTimer1 定时器,所以定时器也要修改。
ConfigCpuTimer(&CpuTimer0, 10, 1000000); CpuTimer0Regs.TCR.bit.TSS = 0; ///开启 CPU 定时器 0
//StartCpuTimer0(); /*开中断,查看中断向量表可知 CPU 定时器 0 位于 INT1.7,见课本 P82*/
编程首先得考虑硬件电路,否则,无从下手,从开发板手册中可以知道 LED 灯电路。
图 1:8 个 LED 灯电路 从电路中可以看出,要想将 LED 灯,必须是低电平才可以,根据开发板的 CPLD 外围扩展电路和芯片引脚图,就可以确定 LED 灯的地址为 0x4100。
2
图 2:8 个 LED 灯与主控芯片链接图 等待这些都搞清楚之后,分析程序功能。八个 LED 灯循环点亮,可以将对 应的代码放在一个数组内,依次循环八次即可,为了保证人能看到闪烁的效果, 可采用定时器来实现。
IER |= M_INT1;
PieCtrl.PIEIER1.b it.IN Tx7=1; EINT; // 开放全局中断,Enable Global interrupt INTM ERTM; // 开放全局实时中断,Enable Global realtime interrupt DBGM
for(;;);
********************************************************************/
#include "DSP28_Device.h"
unsigned int * Led8 = (unsigned int *) 0x4100; //8 个 LED 灯的地址,由 CPLD 得知
********************************************************************/
#include "DSP28_Device.h"
unsigned int * Led8 = (unsigned int *) 0x4100; //8 个 LED 灯的地址,由 CPLD 得知
unsigned int LedCount;
//用于循环计数的
Uint16 LedCode[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f}; //LED 灯循环代码
interrupt void ISRTimer0(void);
void main(void)
{ /*初始化系统*/
1)CPU 定时器 0 实验……………………………………………….2 2)CPU 定时器 2 实验…………………………………………….....4 3)EVTimer1 实验……………………………………………………6 4)数码管显示实验…………………………………………………..8 5)外部 RAM 实验………………………………………………….10 6)直流电动机开环系统实验………………………………………13 二:基于 DSP 的直流电动机闭环调速系统的设计…………………15 1:系统硬件设计整体框图……………………………………….....15 3:驱动电路设计………………………………………………….....16 4:控制电路设计…………………………………………………….16 5:采样电路设计…………………………………………………….17 6:显示电路设计…………………………………………………….18 7:保护电路设计…………………………………………………….18 三:实习心得………………………………………………………….19 四:参考文献………………………………………………………….19
unsigned int LedCount;
//用于循环计数的
Uint16 LedCode[]={0xfe, 0xfb,0xef ,0xbf }; //LED 灯循环代码
interrupt void ISRTimer0(void);
void main(void) { /*初始化系统*/
InitSysCtrl(); /*关中断*/
InitSysCtrl(); /*关中断*/
DINT;
IER = 0x0000; IFR = 0x0000;
//清中断
LedCount = 0; /*初始化 PIE*/
InitPieCtrl();
3
/*初始化 PIE 中断矢量表*/
InitPieVectTable();
/*初始化定时器 0*/
InitCpuTimers(); /*初始化外设*/
// Global counts used in this example Uint32 EvaTimer1InterruptCount;
Uint16 LedCount = 0; void main(void) { /*初始化系统*/
InitSysCtrl();
3.2、CPU 定时器 2 实验 3.2.1 实验要求
采用定时器 2 将 LED 灯循环奇数个循环点亮,偶数个全灭。
3.2.2 编程思路 由上个实现可知,LED 灯地址和有效电平,这里不再详细说明。采用定时
器 2 将 LED 灯循环奇数个循环点亮,偶数个全灭。只需要将 LED 的灯的代码修 改即可,由于是奇数个,所以循环次也要修改。由于使用的是 CPU 定时器 2, 所以,定时器也要修改。
DINT;
IER = 0x0000; IFR = 0x0000;
//清中断
LedCount = 0; wenku.baidu.com*初始化 PIE*/
InitPieCtrl(); /*初始化 PIE 中断矢量表*/
InitPieVectTable(); /*初始化定时器 0*/
InitCpuTimers(); /*初始化外设*/
InitPeripherals();
/*受 EALLOW 保护的定时器 2 中断矢量*/
EALLOW;
//允许访问 EALLOW 保护的寄存器
PieVectTable.TINT0 = &ISRTimer2;//指向中断服务寄存器定时器 0 的地址
EDIS;
//重新 EALLOW 保护
/*设置 CPU,配置定时器 2 多长时间中断一次,这里的配置可参见课本 P61*/
}
interrupt void ISRTimer0(void)
{ //响应中断寄存器清除,写 1 清 0,进而才能接收下一外围中断
PieCtrl.PIEACK.bit.ACK7=1;
//向 CPLD 控制的 LED 灯地址写数据,进而实现对灯的控制 *Led8 = LedCode[LedCount]; LedCount++; if (LedCount>=8) LedCount=0; }
3.3.3 具体程序
/******************************************************************** * ** 实验目的:了解事件管理器的定时器的应用, ** 实验说明:这里我们只使用了 EvaTimer1 来控制 LED 灯的亮灭, 通过它来了 ** 解 EV 的定时器工作原理,对以后做电机之类的控制时可以引用部分函数 ** 实验结果: 最左侧两个灯一直亮,最右侧的两个灯一直灭,中间 4 个依次循 ** 环点亮。 *******************************************************************/ #include "DSP28_Device.h" #include "DSP28_Globalprototypes.h" unsigned int *Led8 = (unsigned int *)0x4100; //LED 控制寄存器 const Uint16 LedCode[]={0x1F,0x2F,0x37,0x3b};//中间 4 个 // Prototype statements for functions found within this file. interrupt void eva_timer1_isr(void);
4
3.2.3 具体程序
/******************************************************************** ** 实验目的:学习 DSP 内部定时器 0 的使用 ** 实验说明:本实验是通过使用 DSP 内部的定时器 0 来实现对 LED 灯的控制 ** 实验结果:可看到板上 8 个发光二极管奇数号 LED 与偶数号 LED 交替闪烁
ConfigCpuTimer(&CpuTimer2, 10, 1000000); CpuTimer0Regs.TCR.bit.TSS = 0; ///开启 CPU 定时器 0
//StartCpuTimer0(); /*开中断,查看中断向量表可知 CPU 定时器 0 位于 INT1.7,见课本 P82*/
3.1.3 具体程序
/******************************************************************** ** 实验目的:学习 DSP 内部定时器 0 的使用 ** 实验说明:本实验是通过使用 DSP 内部的定时器 0 来实现对 LED 灯的控制 ** 实验结果:可看到板上 8 个发光二极管依次点亮
一:开发板实验部分
1:实习目的
1.1、熟悉 DSP 编译环境,会使用开发板 1.2、掌握 DSP 程序的编写以及调试过程
2:实习要求
2.1、掌握 CCS2.0 以及 USB 口仿真器的设置 2.2、能够编写指定功能的程序
3:实验内容
3.1、CPU 定时器 0 实验 3.1.1 实验要求
采用定时器 0 将八个 LED 灯循环点亮。 3.1.2 编程思路
D S P 实习报告
学
院:
电气信息工程学院
专
业:
自动化
姓
名:
李远芳
班级学号:
自动化 10-4 班 9 号
指导教师:
吴老师
时
间 : 2013-12-16~2013-12-20
目录
一:开发板实验部分…………………………………………………….2 1:实习目的…………………………………………………………….2 2:实习要求……………………………………………………………2 3:实验内容……………………………………………………………2
}
5
interrupt void ISRTimer2(void) { //响应中断寄存器清除,写 1 清 0,进而才能接收下一外围中断
PieCtrl.PIEACK.bit.ACK7=1; //向 CPLD 控制的 LED 灯地址写数据,进而实现对灯的控制 *Led8 = LedCode[LedCount]; LedCount++; if (LedCount>=4) LedCount=0; }
IER |= M_INT1;
PieCtrl.PIEIER1.b it.IN Tx7=1; EINT; // 开放全局中断,Enable Global interrupt INTM ERTM; // 开放全局实时中断,Enable Global realtime interrupt DBGM
for(;;);
InitPeripherals();
/*受 EALLOW 保护的定时器 0 中断矢量*/
EALLOW;
//允许访问 EALLOW 保护的寄存器
PieVectTable.TINT0 = &ISRTimer0;//指向中断服务寄存器定时器 0 的地址
EDIS;
//重新 EALLOW 保护
/*设置 CPU,配置定时器 0 多长时间中断一次,这里的配置可参见课本 P61*/
3.3、EVTimer1 定时器实验 3.3.1 实验要求
采用 EVTimer1 定时器最左侧两个灯一直亮,最右侧的两个灯一直灭,中 间 4 个依次循环点亮。
3.3.2 编程思路 由上个实现可 知, LED 灯地址和 有效电平 ,这里不 再详细说明 。采用
EVTimer1 定时器最左侧两个灯一直亮,最右侧的两个灯一直灭,中间 4 个依次 循环点亮。只需要将 LED 的灯的代码修改即可,由于是中间 4 个,所以循环次 也要修改。由于使用的是 EVTimer1 定时器,所以定时器也要修改。
ConfigCpuTimer(&CpuTimer0, 10, 1000000); CpuTimer0Regs.TCR.bit.TSS = 0; ///开启 CPU 定时器 0
//StartCpuTimer0(); /*开中断,查看中断向量表可知 CPU 定时器 0 位于 INT1.7,见课本 P82*/
编程首先得考虑硬件电路,否则,无从下手,从开发板手册中可以知道 LED 灯电路。
图 1:8 个 LED 灯电路 从电路中可以看出,要想将 LED 灯,必须是低电平才可以,根据开发板的 CPLD 外围扩展电路和芯片引脚图,就可以确定 LED 灯的地址为 0x4100。
2
图 2:8 个 LED 灯与主控芯片链接图 等待这些都搞清楚之后,分析程序功能。八个 LED 灯循环点亮,可以将对 应的代码放在一个数组内,依次循环八次即可,为了保证人能看到闪烁的效果, 可采用定时器来实现。
IER |= M_INT1;
PieCtrl.PIEIER1.b it.IN Tx7=1; EINT; // 开放全局中断,Enable Global interrupt INTM ERTM; // 开放全局实时中断,Enable Global realtime interrupt DBGM
for(;;);
********************************************************************/
#include "DSP28_Device.h"
unsigned int * Led8 = (unsigned int *) 0x4100; //8 个 LED 灯的地址,由 CPLD 得知
********************************************************************/
#include "DSP28_Device.h"
unsigned int * Led8 = (unsigned int *) 0x4100; //8 个 LED 灯的地址,由 CPLD 得知
unsigned int LedCount;
//用于循环计数的
Uint16 LedCode[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f}; //LED 灯循环代码
interrupt void ISRTimer0(void);
void main(void)
{ /*初始化系统*/
1)CPU 定时器 0 实验……………………………………………….2 2)CPU 定时器 2 实验…………………………………………….....4 3)EVTimer1 实验……………………………………………………6 4)数码管显示实验…………………………………………………..8 5)外部 RAM 实验………………………………………………….10 6)直流电动机开环系统实验………………………………………13 二:基于 DSP 的直流电动机闭环调速系统的设计…………………15 1:系统硬件设计整体框图……………………………………….....15 3:驱动电路设计………………………………………………….....16 4:控制电路设计…………………………………………………….16 5:采样电路设计…………………………………………………….17 6:显示电路设计…………………………………………………….18 7:保护电路设计…………………………………………………….18 三:实习心得………………………………………………………….19 四:参考文献………………………………………………………….19
unsigned int LedCount;
//用于循环计数的
Uint16 LedCode[]={0xfe, 0xfb,0xef ,0xbf }; //LED 灯循环代码
interrupt void ISRTimer0(void);
void main(void) { /*初始化系统*/
InitSysCtrl(); /*关中断*/
InitSysCtrl(); /*关中断*/
DINT;
IER = 0x0000; IFR = 0x0000;
//清中断
LedCount = 0; /*初始化 PIE*/
InitPieCtrl();
3
/*初始化 PIE 中断矢量表*/
InitPieVectTable();
/*初始化定时器 0*/
InitCpuTimers(); /*初始化外设*/
// Global counts used in this example Uint32 EvaTimer1InterruptCount;
Uint16 LedCount = 0; void main(void) { /*初始化系统*/
InitSysCtrl();
3.2、CPU 定时器 2 实验 3.2.1 实验要求
采用定时器 2 将 LED 灯循环奇数个循环点亮,偶数个全灭。
3.2.2 编程思路 由上个实现可知,LED 灯地址和有效电平,这里不再详细说明。采用定时
器 2 将 LED 灯循环奇数个循环点亮,偶数个全灭。只需要将 LED 的灯的代码修 改即可,由于是奇数个,所以循环次也要修改。由于使用的是 CPU 定时器 2, 所以,定时器也要修改。
DINT;
IER = 0x0000; IFR = 0x0000;
//清中断
LedCount = 0; wenku.baidu.com*初始化 PIE*/
InitPieCtrl(); /*初始化 PIE 中断矢量表*/
InitPieVectTable(); /*初始化定时器 0*/
InitCpuTimers(); /*初始化外设*/
InitPeripherals();
/*受 EALLOW 保护的定时器 2 中断矢量*/
EALLOW;
//允许访问 EALLOW 保护的寄存器
PieVectTable.TINT0 = &ISRTimer2;//指向中断服务寄存器定时器 0 的地址
EDIS;
//重新 EALLOW 保护
/*设置 CPU,配置定时器 2 多长时间中断一次,这里的配置可参见课本 P61*/
}
interrupt void ISRTimer0(void)
{ //响应中断寄存器清除,写 1 清 0,进而才能接收下一外围中断
PieCtrl.PIEACK.bit.ACK7=1;
//向 CPLD 控制的 LED 灯地址写数据,进而实现对灯的控制 *Led8 = LedCode[LedCount]; LedCount++; if (LedCount>=8) LedCount=0; }
3.3.3 具体程序
/******************************************************************** * ** 实验目的:了解事件管理器的定时器的应用, ** 实验说明:这里我们只使用了 EvaTimer1 来控制 LED 灯的亮灭, 通过它来了 ** 解 EV 的定时器工作原理,对以后做电机之类的控制时可以引用部分函数 ** 实验结果: 最左侧两个灯一直亮,最右侧的两个灯一直灭,中间 4 个依次循 ** 环点亮。 *******************************************************************/ #include "DSP28_Device.h" #include "DSP28_Globalprototypes.h" unsigned int *Led8 = (unsigned int *)0x4100; //LED 控制寄存器 const Uint16 LedCode[]={0x1F,0x2F,0x37,0x3b};//中间 4 个 // Prototype statements for functions found within this file. interrupt void eva_timer1_isr(void);
4
3.2.3 具体程序
/******************************************************************** ** 实验目的:学习 DSP 内部定时器 0 的使用 ** 实验说明:本实验是通过使用 DSP 内部的定时器 0 来实现对 LED 灯的控制 ** 实验结果:可看到板上 8 个发光二极管奇数号 LED 与偶数号 LED 交替闪烁
ConfigCpuTimer(&CpuTimer2, 10, 1000000); CpuTimer0Regs.TCR.bit.TSS = 0; ///开启 CPU 定时器 0
//StartCpuTimer0(); /*开中断,查看中断向量表可知 CPU 定时器 0 位于 INT1.7,见课本 P82*/
3.1.3 具体程序
/******************************************************************** ** 实验目的:学习 DSP 内部定时器 0 的使用 ** 实验说明:本实验是通过使用 DSP 内部的定时器 0 来实现对 LED 灯的控制 ** 实验结果:可看到板上 8 个发光二极管依次点亮