《时钟中断实验》实验报告姓名: 赵广元学号: 1428403058学院: 电子信息学院班级: 电子信息工程时钟中断实验一实验目的1.熟悉定时器初始化的步骤2.熟悉定时器控制寄存器(TCR)的含义和使用3.熟悉定时器中断的原理和使用二实验设备本实验设备包括:PC机、CCS2.1和5416DSK开发板三实验内容本实验要求编一个简单的定时器中断程序,设置一定的周期控制XF引脚输出电平周期性变化。
当定时器中断产生时可以观察到XF引脚输出电平周期性变化。
四实验原理中断处理:接受中断请求→应答中断→执行中断服务程序ISR定时器中断:19号中断当发生时钟中断时,PC值将指向时钟中断的中断向量地址中断向量地址的计算方法:(1)取PMST寄存器的IPTR的值(中断向量指针,9位);(2)查DSP的中断表得到时钟中断向量序号19;(3)将中断向量序号19左移2位(4)将IPTR值左移7位(占高9位)与(3)相加,得到中断向量地址。
中断向量表程序设计:(1)TI54系列DSP最大支持序号0~31的32个中断(存在复用)(2)根据中断向量表地址计算方法,每四个中断向量占四个字(序号左移两位),整个中断向量表共占128个字(3)硬件复位后,其中断向量表首地址为0xFF80(0号中断地址)(4)软件设置IPTR后,其中断向量表地址发生变化,为使高速响应中断,应在片内RAM中运行定时器:C54X系列的DSP都具有一个或者两个预定标的片内定时器,这种定时器是一个倒数定时器,它可以被特殊的状态位实现停止,重启动,重设置或者静止。
定时器在复位后就处于运行状态,为了降低功耗可以禁止定时器工作。
应用中可以用定时器来产生周期性的CPU中断或者脉冲输出。
定时器的功能方框图如5.1所示,其中有一个主计数器(TIM)和一个预定标计数器(PSC)。
TIM用于重装载周期寄存器(PRD)的值,PSC用来重装载周期寄存器(TDDR)的值。
图5.1 定时器的功能方框图图5.1是定时器的功能方框图, SRESET 是在器件复位时,DSP 向外围电路(包括定时器)发送的一个信号,此信号将在定时器上产生以下效果:寄存器TIM 和PRD 装载最大值(0FFFFH );TCR 的所有位清0;结果是分频值为0,定时器启动,TCR 的FREE 和SOFT 为0。
定时器实际上是有 20bit 的周期寄存器。
它对 CLKOUT 信号计数,先将 PSC (TCR 中的 D6~D9 位)减 1,知道 PSC 为 0,然后把 TDDR (TCR 中的低 4 位)重新装载入 PSC ,同时将 TIM 减 1,直到 TIM 减为 0。
这是 CPU 发出 TINT 中断,同时在 TOUT 引脚输出一个脉冲信号,脉冲宽度与 CLKOUT 一致,然后将 PRD 重新装入 TIM ,重复下去直到系统或定时器复位。
定时器产生中断的计算公式如下:)tc (1111tc 1的周期为其中的频率CLIKOUT PRD TDDR TINT +⨯+⨯=定时器有三个寄存器组成:TIM 、PRD 、TCR 。
TIM :定时器寄存器,用于装载周期寄存器数值并自减1。
PRD :周期寄存器,用于装载定时器寄存器。
TCR :定时器控制寄存器,包含定时器的控制状态位。
定时器是一个在片内减计数器,用于周期地产生CPU 中断。
定时器被预订标器驱动,后者每个CPU 时钟周期减1,每当计数器减至0时,会产生一个定时器中断,同时在下一周期计数器被定时周期值重新装载。
在正常操作模式下,当TIM 自减至0时,TIM 将被PRD 内的数值重装载。
在硬件复位或定时器单独复位(TCR 中TRB 位置1)的情况下,TIM 也会装载PRD 值。
TIM 被预定标模块定时。
每个来自预定标模块的输出时钟都将使TIM 自减1,主定时器模块的输出是定时器中断(TINT )信号。
该中断被发送至CPU ,同时由TOUT 引脚输出。
TOUT 脉冲的宽度等于CLKOUT 的时钟宽度。
预定标模块由两个类似TIM 和PRD 的单元构成。
它们是预定标计数器(PSC )和定时器分频寄存器(TDDR )。
PSC 、TDDR 是TCR 寄存器的字段。
在正常操作时PSC 自减为0,TDDR 值装入PSC ,同样在硬件复位或定时器单独复位的情况下,TDDR 也被装入PSC 。
PSC 被CPU 时钟定时,即每个CPU 时钟使PSC 自减1。
PSC 可被TCR 读取,但不能直接写入。
当TSS 置位时,定时器停止工作。
若不需要定时器,终止定时器操作,可是芯片工作与低功耗模式,并且可以使用与定时器相关的两个寄存器(TIM 和PRD )作为通用的存储器单元,可以在如意周期对它们进行读或写操作。
TIM 的当前值可被读取,PSC 也可以通过TCR 。
因为读取这两个寄存器需要花两个指令,而在两次读取之间因为自减,数值可能改变,因此,PSC 两次读的结果可能有差别,不够准确。
若要准确测量时序,在读这两个寄存器值之前可先中止定时器,对TSS 置1,清0后,可重新开始定时。
通过TOUT 信号或中断,定时器可以用于产生周边设备的采样时钟,如模拟接口。
对于有多个定时器的DSP ,在寄存器GPIOCR 中的第15位控制使用哪一个定时器产生的TOUT 信号。
定时器初始化定时器初始化步骤如下: (1)TCR 的TSS 位写1以停止定时器 (2)装载PRD(3)初始化TCR 中的TDDR ,并对TCR 中的TSS 置0,对TRB 置1来重装载定时器周期 设置定时器中断方法(INTM=1)如下:(1)FIR 中的TINT 写1,以清除挂起的定时器中断。
(2)IMR 中的TINT 值1,启动定时器中断。
(3)启动全部中断,INTM置0。
(4)在RESET后,TIM和PRD被设置为最大值(FFFFh),TCR中的TSS置0。
定时控制寄存器TCR为一个映射到片内的16位寄存器,它可以控制:(1)定时器的工作方式;(2)设定预定标计数器中的当前数值;(3)启动或停止定时器;(4)重装载定时器;(5)设置定时器的分频值;TCR 的位描述如图 5.2 所示。
图 5.2 Array TCR 寄存器第15~12位Reserved:保留位。
总是0。
第11~10位SOFT、FREE:特殊的仿真位。
高级语言调试程序中出现一个断点时,该仿真位决定定时器的状态。
如果FREE位设为1,则当遇到一个断点时,定时器继续运行(即自由运行),在这种情况下, SOFT被忽略。
但是,如果FREE为0,则SOFT有效。
在此情况下,如果SOFT=0,则定时器停止,下一次TIM的值递减;如果SOFT=1,则当TIM减到0,定时器停止工作。
第9~6位PSC:定时器预定标计数器。
这4位用来保存定时器的当前预定标计数器。
每个CLKOUT周期内,若PSC值大于0,PSC减1,在PSC减到0后的下一个CLKOUT周期内,装载TDDR的内容,并且TIM 减1。
每当软件设置了定时器重载位(TRB)时,PSC也被重新装载。
可通过TCE检测PSC,但PSC 不能直接设置,PSC值必须从TDDR中提取。
复位时,PSC设为0。
第5位TRB:定时器重载位,当TRB写入1时,TIM装载PRD中的值,并且PSC装载TDDR中的值。
TRB 位总被读为0。
第4位TSS:定时器停止状态位。
TSS停止或重新启动定时器。
复位时,TSS清零,并且立即启动定时器。
TSS=0,启动或重新启动定时器;TSS=1,停止定时。
注意,此位为只写位,读出的值永远为0。
第3~0位TDDR:定时器分频比寄存器。
每经过(TDDR+1)个CLKOUT周期,TIM减1。
复位时,TDDR 位清0。
如果想通过一个整数因子增加总的定时计数值,则将整数因子减1后写入这4位。
当PCS值为0 时,在随后的一个CLKOUT周期内,TDDR内容将被重新装入PSC,并且TIM减1,并且TIM减1。
每当TRB重载入时,TDDR也将被PSC重新装载。
定时器的应用定时器中断控制XF周期性变化的源代码详见实验程序示例。
五实验步骤1.连接好目标板,选择相应的CCS运行环境2.如实验三所示,建立时钟中断DSP程序(图片内容如实验一,不再赘述,只简要概括大概步骤)(1)选择Project→new命令新建一个工程并命名,选择file→new→source file建立源代码文件,输入程序代码后保存(2)新建源程序文件mydft,输入代码并保存(3)新建cmd文件my5416,输入代码并保存(4)保存源文件到当前工程所在的文件夹,然后在当前工程窗口选择当前工程,调用右键菜单,选择add files to project命令,打开一个文件选择对话框,选择刚保存的源文件加入到工程中之后编译文件(5)在工程名上右击选择options设置includes libraries(-1)为 rts.lib,csl5416.lib,采用分号分隔各个库名。
在complier选项卡中设置为advanced(6)在build options对话框中的compiler选项页的 Preprocessor选项中Pre-define symbol (-d)中输入CHIP_5416宏名;(7)file →load program下载程序并运行程序;(8)利用菜单view→CPU registers→CPU registers,观察累加器A数值变化。
3.主要注意以下几项内容。
(1)利用C54XREGS.h定义了访问TMS320VC5416 DSP的存储器映射寄存器的宏,在源程序中调用宏对DSP的Register进行了初始化。
(2)Timer属于片内外设,采用了DSP的片级支持库的方式对Timer的寄存器进行处理,包括定时器终端的处理,详细见程序。
(3)所谓片级支持库是TI公式设计的一个标准库文件,用于弥补利用C怨言设置DSP片内外设不方便的缺点,达到利用C编写快速高效的片内外设应用程序的目的。
在使用的时候主要要注意以下几点:①选择Project→Build Options命令,打开Build Options对话框,在Linker选项卡的 Include Libraries (-l)项输入csl5416.lib选用运行时支持库,csl5416.lib在编译时使用近调用(默认选项)。
注意如果已有其它库定义(如rts.lib),采用分号分隔各个库名。
注意:如果程序选用远调用,必须使用csl5416x.lib文件。
②由于片级支持库与芯片型号息息相关,所以在使用片级支持库的程序中必须利用宏定义芯片型号,具体方法可以在build options对话框中的compiler选项页的 Preprocessor选项中Pre-define symbol(-d)中输入CHIP_5416宏名。