已阅读5页,还剩21页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
实验一:CPU 定时器实验一:实验目的 1、熟悉 F2812 的 CPU 定时器; 2、掌握 F2812 的 CPU 定时器的控制方法;3、学会使用 CPU 定时器中断方式控制程序流程。二:实验设备计算机,CCS 3.1 版软件,DSP 硬件仿真器,E300 实验箱,2812CPU 板。三:实验原理样例实验是采用 CPU 定时器来定时使 LED 亮灭的。F2812 的 CPU 定时器不同于事件管理器模块(EVA、EVB)中的通用定时器(GP)。F2812 的 CPU共有三个定时器,其中,CPU 定时器 1 和 2 被保留用作实时操作系统 OS(例如 DSPBIOS),CPU 定时器0 可以供用户使用。 定时器的一般操作如下:将周期寄存器 PRDH:PRD 中的值装入 32 为计数器寄存器 TIMH:TIM。然后计数器寄存器以 F281x 的 SYSCLKOUT 速率递减。当计数器减到 0 时,就会产生一个定时器中断输出信号(一个中断脉冲)。下图为 CPU 定时器的内部结构: 四:实验步骤 1 、 F2812CPU 板的 JUMP1 的 1 和 2 脚短接,拨码开关 SW1 的第二位置 ON;其余置 OFF。 2 、 E300 底板的开关 SW4 的第 2 位置 ON,其余位置 OFF。其余开关设置为 OFF。 3 、 运行 CCS 软件,调入样例程序,装载并运行;(进入 CCS 界面后需要点“Debug-Connect”)4 、 加载“. e300_03_cpu_timerDebugExample_281x_cpu_timer.out”;5 、 单击“Debug Animate”运行,可观察到灯 LED1LED8 的变化规律:6 、单击“Debug Halt”,暂停程序运行,LED 灯停止闪烁;单击“Debug Run”,运行程序,LED 灯又开始按上述规律变化;五:实验程序及结果修改后程序如下:/*;*;* 北京达盛科技有限公司;* 研 发 部;*;* ;*/*- 文件信息 - ;* ;* 文件名称 : Example_DSP281x_e300_switch.c ;* 适用平台 : DSP E300 实验箱;;* CPU类型 : DSP TMS320F2812 ;* 软件环境 : CCS3.1 ;* 试验接线 : 1、F2812CPU板上: JUMP1的1和2脚短接, 拨码开关SW1的第二位置ON;* 2、E300底板的开关SW4的第2位置ON,其余置OFF。;* 试验现象 : 设置好CCS的环境,打开本工程,编译、下载、运行。; 观察LED1LED8灯亮灭的变化。;* 地址译码说明:基地址:0x2000,当底板片选CS1为低时,分配有效。;* CPU的数据空间: 基地址+0x2200 拨码开关 input 8位;* CPU的数据空间: 基地址+0x2200 LED灯 output 8位*/ /*头文件*/#include DSP281x_Device.h / DSP281x Headerfile Include File#include DSP281x_Examples.h / DSP281x Examples Include File/*定义函数说明*/ Prototype statements for functions found within this errupt void cpu_timer0_isr(void);void ConfigCpuTimer(struct CPUTIMER_VARS *Timer, float Freq, float Period);/*主程序*/void main(void)/ PLL, WatchDog, enable Peripheral Clocks/ This example function is found in the DSP281x_SysCtrl.c file. InitSysCtrl();/ Disable CPU interrupts DINT;/ Initialize the PIE control registers to their default state. InitPieCtrl(); / Disable CPU interrupts and clear all CPU interrupt flags: IER = 0x0000; IFR = 0x0000;/ Initialize the PIE vector table with pointers to the shell Interrupt / Service Routines (ISR). InitPieVectTable();/ Interrupts that are used in this example are re-mapped to/ ISR functions found within this file. EALLOW; / This is needed to write to EALLOW protected registers PieVectTable.TINT0 = &cpu_timer0_isr; EDIS; / This is needed to disable write to EALLOW protected registers InitCpuTimers(); / For this example, only initialize the Cpu Timers/ Configure CPU-Timer 0 to interrupt every second:/ 100MHz CPU Freq, 1 second Period (in uSeconds) ConfigCpuTimer(&CpuTimer0, 100, 1000000); StartCpuTimer0();/ Enable CPU INT1 which is connected to CPU-Timer 0: IER |= M_INT1;/ Enable TINT0 in the PIE: Group 1 interrupt 7 PieCtrlRegs.PIEIER1.bit.INTx7 = 1;/ Enable global Interrupts and higher priority real-time debug events: EINT; / Enable Global interrupt INTM ERTM; / Enable Global realtime interrupt DBGM/ IDLE loop. Just sit and loop forever (optional): for(;) if(CpuTimer0.InterruptCount1) asm( nop ); asm( nop ); *(int *)0x2200=0x00FE; else if(CpuTimer0.InterruptCount2) asm( nop ); asm( nop ); *(int *)0x2200=0x00FD; else if(CpuTimer0.InterruptCount3) asm( nop ); asm( nop ); *(int *)0x2200=0x00FB; else if(CpuTimer0.InterruptCount4) asm( nop ); asm( nop ); *(int *)0x2200=0x00F7; else if(CpuTimer0.InterruptCount5) asm( nop ); asm( nop ); *(int *)0x2200=0x00EF; else if(CpuTimer0.InterruptCount6) asm( nop ); asm( nop ); *(int *)0x2200=0x00DF; else if(CpuTimer0.InterruptCount7) asm( nop ); asm( nop ); *(int *)0x2200=0x00BF; else CpuTimer0.InterruptCount = 0; interrupt void cpu_timer0_isr(void) CpuTimer0.InterruptCount+; / Acknowledge this interrupt to receive more interrupts from group 1 PieCtrlRegs.PIEACK.all = PIEACK_GROUP1;/=/ No more./=实验图像如下图:六:总结在实验过程中,我发现只需要改动其中部分程序即可实现要求,如:其中0x2200=0x00*是按照十六进制进行控制的,0为亮灯,1为灭灯,间隔一段时间会使亮灯的状态发生改变,一个周期结束后又重新开始循环,在上面的类似几条语句中,可以根据自己的喜好进行设置,使亮灯的效果发生改变。 实验二:外部中断实验一:实验目的 1. 掌握中断技术,学会外部中断的处理方法2. 掌握中断对程序的流程控制,理解 DSP 对中断的响应时序二:实验设备计算机,CCS3.1 版本软件,DSP 仿真器,E300 实验箱,2812CPU 板(新的)三:实验原理 1. 中断在 F2812 中的应用原理介绍:( 更加详细的内容请参看 F2812 的数据手册 )中断在 F2812 中有内部中断源和外部中断源,内部中断源包括一些片上外设产生的中断和软件产生的中断。外部中断源包括经由外部中断引脚产生的中断。1) 在 F2812 中,中断有两种分类方法:第一种是按照是否可屏蔽, 第二种是按照中断产生方式。 a) 按照是否可屏蔽分类,分为可屏蔽和不可屏蔽。 所谓屏蔽是指 DSP 可以接受这个中断,但是却不作任何反映,也就是说对应的中 断服务指令被屏蔽了,从而得不到执行,这种中断就叫做可屏蔽中断,相反的,如果一个中断只要产生,那么就必须有中断服务指令相应,这种中断叫做不可屏蔽中断。 b) 按照中断产生的方式可以分为软件中断和硬件中断。软件中断是指由指令产生的中断,硬件中断是指由外部中断源产生或者片上外设产生。 c) 这两种分类方法之间有一定的联系,具体如下: 第一:凡是软件中断必定是不可以屏蔽的。原因很简单,软件中断是由软件产生,假如你想屏蔽它,那么干脆就别写这条指令,因此完全没有必要为软件中断设置是否可屏蔽机制。 第二:硬件中断中有一些是可以屏蔽的,有一些不能屏蔽。软件设计人员一般比较喜欢从可屏蔽性去考虑中断,而硬件设计人员喜欢从产生方式去考虑中断。在以下的讨论中,我们以2812 为例,介绍中断的相关细节内容。 我们首先从应用的角度提出一个简单的问题如下:当用户按下一个按键,产生一个中断,那么 DSP 是如何跳转到相应的中断服务指令,执行完中断服务指令以后,它又是如何返回正常的程序执行呢? 2) 简单的讲,DSP 的中断控制器发现一个中断以后,它就会把下一个将要执行的指令地址保存起来,然后跳到中断服务指令处执行,执行完以后,再把刚才保存的地址重新装入执行寄存器,然后正常执行。 那么,DSP 是如何知道服务指令在哪里放着呢?这就要从 DSP 的中断实现机制来讲。F2812 使用了一个叫做中断向量表的结构,里面保存着不同中断的服务指令入口地址。下表是 F2812 的中断向量表组织结构。 在该表中,编号越低,优先级越高。硬件中断中,用户可以自定义仅有 PDPINTA/B,INT1:2,其它的硬件中断都已经指定给了 DSP 的片上外设,比如编号为 INT5.1 的中断,T4PINT,它是片上定时器中断或者软件中断,当片上定时器 4 到计数点后,就会产生一个中断,相应就会执行这个地址里面的东西。 仅有中断向量表,DSP 似乎还是不能够找到中断服务指令的地址。事实上,DSP 内部有一个中断控制器,它能够识别每一个编号的中断,所以一旦中断发生后,中断控制器就可以根据编号在相应的中断向量表里面找中断服务指令的地址。 3) 现在大家比较清楚了上面我们提出问题的答案了。更进一步讲,系统对中断的处理不是这么简单,因为,系统里面有套中断处理机制,必须判别中断是否已经被屏蔽,如果屏蔽,那么就不会得到响应。在处理中断时,系统使用了两个主要的寄存器,中断标志寄存器(IFR),中断屏蔽寄存器(IMR)。对于非可屏蔽中断和复位信号,系统直接相应,没有什么判断处理,也就不设计这两个寄存器。IFR 的位描述如下图所示。这个寄存器的每一位对应一个中断,相应的中断发生后,这个位就会被置位。显然,这里面没有 NMI 和 RESET 对应的标志位。IER 的位描述如下图所示:和 IFR 是一一对应的。IER 的值完全由程序员控制,假如你想屏蔽掉某个中断,那么你就需要对 IMR 的相应中断位置位。对于可屏蔽中断的处理过程如下图所示:中断源产生一个中断请求,在这个过程中,如果是可屏蔽中断,那么它必定在 IFR 里占一席之地,此时对 IFR 相应的位置位。如果是不可屏蔽中断,直接进入中断服务程序。中断服务程序要做的事情后面会讲到。如果是可屏蔽的,那么接下来下来系统要确认是否可以执行。如下图。 在这个阶段,系统会检查如下条件:第一:检查所有同时发生的中断的优先级,高优先级首先得到相应。第二:检查 ST1 中的中断模式位(INTM),如果该位为 1,所有中断全部被屏蔽。INTM 是一种快速屏蔽所有可屏蔽中断的方法。第三:检查 IER 中相应中断的屏蔽位,如果置位,则不能得到执行。如果以上三条检查都通过,那么系统进入中断服务程序。具体内容如下。第一:把程序计数器(PC)压栈。第二:把相应中断向量的地址装入程序计数器(PC)。第三:从中断向量地址中取到跳转指令,同时对相应中断的 IFR 位清零,执行跳转指令。第四:执行中断服务指令直到一个返回语句。第五:正常返回,把栈里的内容弹出重新装入 PC。第六:继续执行正常指令。 需要注意一点,对于不可屏蔽中断在中断服务程序执行过程中,系统要检查是不是 RESET,NMI 或者 INTR 软件中断,如果是这几个中的任何一个,系统都要立即屏蔽所有可屏蔽中断,然后再继续执行。 在系统设计中要注意,有几种情况可以让程序跑飞。在程序设计中要用编程策略保证正确的程序执行顺序。第一种:如果中断服务指令的执行时间大于同一中断的最小发生周期,而在中断服务指令执行的过程中,所有中断都没有屏蔽。在这种情况下,一个中断服务指令还没有执行完而又新到达了一个中断,而新的中断又得到执行的允许,这种情况会使程序执行错误。第二种:如果同时发生的中断数超过一个固定的值,那么,就会有中断丢失。第三种:如果发生了中断,而被屏蔽掉了,那么 IFR 种的相应中断位将不会清零,这对于后来的中断处理有影响吗?整个中断执行的流图如下。4) 明确了这些问题,那么就可以自由使用中断。 F2812 支持 3 个外部可屏蔽中断,即 XINT1、XINT2、XINT13。XINT13 和一个非屏蔽中断 XNMI复用。这些外部中断中的每一个可以选择下降沿或上升沿触发,还可以使能或不使能(包括 XNMI)。可屏蔽中断还包括一个 16 位自由运行的增计数器,当一个有效的中断边沿被检测到时,复位成 0。本计数器用于给中断提供一个精确的时间标记。 下面给出的是外部中断 2 控制寄存器各位的定义: F2812DSP 的中断为低电平边沿触发。按键盘时,键盘产生的低电平脉冲,通过 CPLD 分配给 F2812 的XINT2 引脚,每按一次,产生一个低电平脉冲,用来控制实验箱上 LED 灯的亮灭。2. 实验流程框图 如下: 四:实验步骤 1. 2812CPU 板 JUMP1 的 1 和 2 脚短接,拨码开关 SW1 的第二位置 ON; 2. E300 板上的开关 SW4 的第二位置 ON,其余 OFF;SW5 开关全部置 ON;其余开关全部置 OFF。 3. 运行 Code Composer Studio (CCS)(ccs3.1 需要“DEBUGConnect” ) 4. 打开系统项目文件 e300.test normal DSP281x_examples e300_05_int e300_int.pjt; 5. 编译全部文件并装载 DebugExample_281x_int.out; 6. 单击“DebugGo Main”跳到主程序的开始; 7. 单击“DebugRUN”运行程序。 8. 点击 E300 底板上的任意键盘,观察 LED 灯的变化情:每按一次 “键盘”按键,LED1-LED8 奇偶数灯亮灭就变化一次. 9. 单击“DebugHalt”暂停程序运行,反复按 “键盘”按键,LED1-LED8 灯亮灭不变化. 10. 关闭所有窗口,本实验完毕.五:实验程序及结果 修改后实验程序如下:/*;*;* 北京达盛科技有限公司;* 研 发 部;*;* ;*/*- 文件信息 - ;* ;* 文件名称 : Example_DSP281x_int.c ;* 适用平台 : DSP E300 实验箱;;* CPU类型 : DSP TMS320F2812 ;* 软件环境 : CCS3.1 ;* 试验接线 : 1、F2812CPU板的JUMP1的1和2脚短接,拨码开关SW1的第二位置ON;* 2、E300底板的开关SW4的第2位置ON,其余置OFF。;* 3.将LED1-LED8全部拨到靠近键盘的位置,以便于LED灯能够正确指示到中断信息;* 试验现象 : 设置好CCS的环境,打开本工程,编译、下载、运行。;* 观察LED1LED8灯亮灭的变化。;* 地址译码说明:基地址:0x2000,当底板片选CS1为低时,分配有效。;* CPU的数据空间: 基地址+0x0200 拨码开关 input 8位;* CPU的数据空间: 基地址+0x0200 LED灯 output 8位;* 外部中断用XINT2,由CPLD分配,中断信号由键盘按键产生。;* 中断下降沿触发。*/ /*头文件*/#include DSP281x_Device.h / DSP281x Headerfile Include File#include DSP281x_Examples.h / DSP281x Examples Include FileUint16 show=0x00aa; /定义欲显示值Uint32 Xint1InterruptCount;/*主程序*/void init_xint2(void);interrupt void xint2_isr();void main(void) / PLL, WatchDog, enable Peripheral Clocks/ This example function is found in the DSP281x_SysCtrl.c file. InitSysCtrl(); / Disable CPU interrupts DINT;/ Initialize PIE control registers to their default state./ The default state is all PIE interrupts disabled and flags/ are cleared. InitPieCtrl(); / Disable CPU interrupts and clear all CPU interrupt flags: IER = 0x0000; IFR = 0x0000;/ Initialize the PIE vector table with pointers to the shell Interrupt / Service Routines (ISR). InitPieVectTable(); EALLOW; / This is needed to write to EALLOW protected registers PieVectTable.XINT2 = &xint2_isr; EDIS; init_xint2(); / User specific code, enable interrupts: / Initialize count values to 0 Xint1InterruptCount = 0; PieCtrlRegs.PIEIER1.all = M_INT5; IER |= M_INT1 ; EINT; / Enable Global interrupt INTM ERTM; / Enable Global realtime interrupt DBGM for(;) if(Xint1InterruptCount1) asm( nop ); *(int *)0x2200=0x0000; else if(Xint1InterruptCount4 ) * 3 / 4095; ( 4 ) * 3 / 4095;实验原始图像: 修改后图像为:六:结论ADC模块共有16个结果寄存器用来保存转换的数值。每个结果寄存器都是16位,而X281x的ADC是12位,也就是说转换后的数字值最高只有12位,即ADC转换的数值在结果寄存器中是左对齐,结果寄存器的高12位用于存放转换结果,而低4位被忽略。所以会有以下两个公式:ADResult =(VoltInput -ADCLO)/3.0 * 65520 (1)(ADResult4) =(VoltInput -ADCLO)/3.0 * 4095 (2)在本次试验中,ADCLO近似为0,要得到VoltInput ,可以把公式进行变换,即 VoltInput=(ADResult4) *3.0 /4095 实验四:PWM波产生实验一:实验目的 1 了解 TMS320F281x 芯片的 EVA、EVB 的功能; 2 理解 EVA、EVB 的工作原理; 3 掌握 EVA、EVB 产生 PWM 波的方法;二:实验设备 计算机,CCS 3.1 版软件,DSP 仿真器,E300 实验箱,示波器。三:实验原理TI 公司C2000 系列的 DSP 器件都包括两个事件管理模块 EVA 和 EVB,每个事件管理器模块包括通用定时器(GP)、比较单元、捕获单元以及正交编码脉冲电路。EVA 和 EVB 的定时器,比较单元以及捕获单元的功能都相同,只是定时器和单元的名称不同。事件管理模块的功能框图如下(以 EVA 为例):对于 TMS320F2812 DSP 每个事件管理模块可同时产生多达 8 路的 PWM 波形输出。由 3 个带可编程死区控制的比较单元产生独立的 3 对,以及由 GP 定时器比较产生的 2 个独立的 PWM 输出。PWM 的特性如下: 16 位寄存器; 为 PWM 输出对提供范围宽广的可编程死区; 可变的 PWM 载体频率,提供所需的 PWM 摇摆频率; 根据需要在 PWM 周期内或之后变化 PWM 脉冲; 外部可屏蔽功率和驱动保护中断; 脉冲方式发生器电路,用于可编程的产生对称、非对称和四维空间向量 PWM 波形; 使用自动重新装载功能的比较和周期寄存器使 CPU 的开销最小。PWM 电路 的 设 置:PWM 波形的产生及与比较单元相关的 PWM 电路由以下寄存器控制: 对于 EVA 模块:T1CON,COMCONA,ACTRA 和 DBTCONA 对于 EVB 模块:T3CON,COMCONB,ACTRB 和 DBTCONA产生 PWM 的寄存器的设置如下: 设置和装载 ACTRx 寄存器 如果使能死区,则设置和装载 DBTCONx 寄存器 设置和装载 T1PR 或 T3PR 寄存器,即规定 PWM 波形的周期 初始化 CMPRX 寄存器 设置和装载 COMCONx 寄存器 设置和装载 T1CON 或 T3CON 寄存器,来启动比较操作 更新 CMPRx 寄存器的位植,使输出的 PWM 波形的占空比发生变化四:实验步骤 1、F2812CPU 板的 JUMP1 的 1 和 2 脚短接,拨码开关 SW1 的第二位置 ON; 2、E300 底板的开关 SW4 的第 2 位置 ON,其余位置 OFF。其余开关设置为 OFF。 3、运行 CCS 软件,调入样例程序,装载并运行;(进入 CCS 界面后需要点“Debug-Connect”) 4、 打开系统项目文件e300.testnormalDSP281x_examplese e300_11_pwm Example_281x_pwm.pjt 5、 双击“Example_281x_pwm.pjt”及“Source”可查看各源程序;并加载“Example_281x_pwm. out”; 6、 单击“Debug Run”运行程序,然后用示波器观察 F2407 CPU 板上 PWM16 的输出波形(如下图)。7、 修改 EvaRegs.cmpr1、EvaRegs.cmpr2、EvaRegs.cmpr3 的值可改变相应输出的占空比。改变 EvaRegs.T1PR 的值,可以提高 PWM 波频率,占空比不变。 8、 关闭“Example
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 技术骨干转管理的6个注意事项
- 2026年节庆文旅活动安全风险评估模拟试卷及答案
- 小学一年级科学上册青岛版《纸风车》教学设计
- 2026年冷轧钢厂高温噪声岗位防护规范完整题库
- 2026年养老护理员业务培训试题(附答案)
- 气瓶防倾倒防护实施方案
- 院感核心制度落实不到位问题原因剖析及整改措施
- 乡镇地质灾害隐患点常态化排查监测工作方案
- 2026年11月国家能源综合知识考试模拟试题+答案
- 风险预判提升:理念、方法与工具
- 日喀则市2027届九年级化学第一学期期中考试试题含解析
- 新版部编人教版一年级上册道德与法治全册教案(完整版)教学设计
- 2026秋小学统编版道德与法治三年级(新教材)上册教学计划附教学进度表
- 健康教育从小做起小学主题班会课件
- GINA 2025 全球哮喘防治创议(中文版 完整原文 + 诊疗路径解析)
- 2026年秋新教材青岛版小学数学四年级上册(全册)教学设计(附目录p164)
- DB23∕T 4054-2026 黑龙江剪纸标准
- 老年多重用药护理查房
- 《英语作业分层设计策略|教师备课专用》
- (2026年)食管癌的诊断和治疗健康宣教课件
- 2026非粮生物饲料开发技术及其替代传统饲料的经济性分析
评论
0/150
提交评论