
汇编 定时器DSP(精品).doc
21页汇编实验报告定时器一. 工作原理1.时钟部分1.1 C55x时钟发生器的原理和配置方法TMS320VC5509A的时钟发生器从CLKIN引脚输入,在内部修改这个信号(通过一个数字锁相环,PLL),来产生希望频率的输出时钟时钟发生器将这个输出时钟(即CPU时钟)送给CPU、外设和其他C55的内部模块也可以用可编程的时钟分频器对CPU时钟分频,在CLKOUT引脚上输出时钟发生器有一个时钟模式寄存器CLKMD,用来控制和监视时钟发生器通过修改该寄存器可以触发两种主要的操作模式:1) 旁路模式PLL被旁路掉,输出时钟的频率就等于输入时钟频率除以1、2、4因为PLL模块关闭,因此该模式可以用来降低功耗2)锁定模式输入时钟既可以乘以或除以一个系数来获得期望的输出频率,并且输入时钟相位与输入信号锁定本实验采用该模式2.定时器部分2.1通用定时器介绍及其控制方法2.1.1定时器的工作时钟l DSP内部的CPU时钟,本实验采用该方式l 引脚TIN/TOUT 利用定时器控制寄存器(TCR)中的字段FUNC可以确定时钟源和TIN/TOUT引脚的功能2.1.2控制方法介绍预定标计数寄存器(PSC)由输入时钟驱动,PSC在每个输入时钟周期减1;当其减到0时,TIM减1,当TIM减到0,定时器向CPU发送一个中断请求(TINT)或向DMA控制器发送同步事件。
定时器发送中断信号或同步事件信号的频率可用下式计算:通过设置定时器控制寄存器(TCR)中的自动重装控制位ARB,可使定时器工作于自动重装模式:当TIM减到0,重新将周期寄存器(TDDR,PRD)的内容复制到计数寄存器(PSC,TIM)中,继续定时本实验的具体设置见后面寄存器设置部分2.2定时器的使用l 初始化定时器l 停止/启动定时器l DSP复位后定时器寄存器的值3.中断部分3.1中断定义由硬件或软件驱动的信号,使DSP将当前的程序挂起,执行另一个称为中断服务子程序(ISR)的任务3.2 TMS320C55x的中断系统C55x支持32个ISR有些ISR可以由软件或硬件触发,有些只能由软件触发3.3 DSP处理中断的步骤(1)接收中断请求软件和硬件都要求DSP将当前程序挂起(2)响应中断请求CPU必须响应中断如果是可屏蔽中断,响应必须满足某些条件如果是不可屏蔽中断,则CPU立即响应3)准备进入中断服务子程序CPU要执行的主要任务有:l 完成当前指令的执行,并冲掉流水线上还未解码的指令l 自动将某些必要的寄存器的值保存到数据堆栈和系统堆栈l 从用户实现设置好的向量地址获取中断向量,该中断向量指向中断服务子程序(4)执行中断服务子程序。
CPU执行用户编写的ISRISR以一条中断返回指令结束,自动恢复步骤(3)中自动保存的寄存器值3.4中断向量表4.汇编程序4.1链接命令文件TMS320C55x链接器有两个功能强大的指令,即MEMORY和SECTIONSMEMORY指令允许用户定义一个目标系统的存储器映射,可以命名存储器的各个部分,并且指定开始地址和大小SECTIONS指令告诉链接器合成输入段为输出段,并且告诉链接器把这些输出段放在存储器的某个位置4.2中断向量表及中断程序a) 程序中应包含中断向量表,VC5509A 默认向量表从程序区0 地址开始存放,根据IPVD 和IPVH 的值确定向量表的实际地址b) 向量表中每项为8 个字,存放一个跳转指令,跳转指令中的地址为相应服务程序入口地址第一个向量表的首项为复位向量,即CPU 复位操作完成后自动进入执行的程序入口c) 服务程序在服务操作完成后,清除相应中断标志,返回,完成一次中断服务 4.3汇编源程序(见后)二. 寄存器配置1. 时钟模式寄存器(CLKMD),I/O端口地址0x1c00MOV #0x5467,PORT(#CLKMD);0101 0100 0110 0111工作在锁定模式下,输出时钟频率如下:PLLMULT/PLLDIV*输入频率=20*20M=400M;具体配置如下黑体部分: 位字 段说 明15Rsvd保留14IAI退出Idle状态后,决定PLL是否重新锁定0 PLL将使用与进入Idle状态之前相同的设置进行锁定1 PLL将重新锁定过程13IOB处理失锁0 时钟发生器不中断PLL,PLL继续输出时钟1 时钟发生器切换到旁路模式,重新开始PLL锁相过程12TEST必须保持为011~7PLL MULT锁定模式下的PLL倍频值,0~31(10100)6~5PLL DIV锁定模式下的PLL分频值,0~3(01)4PLL ENABLE使能或关闭PLL0 关闭PLL,进入旁路模式1 使能PLL,进入锁定模式3~2BYPASS DIV旁路下的分频值00 一分频01 二分频10或11 四分频1BREAKLNPLL失锁标志0 PLL已经失锁1 锁定状态或有对CLKMD寄存器的写操作0LOCK锁定模式标志0 时钟发生器处于旁路模式1 时钟发生器处于锁定模式2. 定时器包括4个寄存器2.1定时器预定标寄存器PRSCMOV #0x0002,PORT(#PRSC0);0000 0000 0000 0010位字 段数 值说 明15~10Rsvd—保留9~6PSC0h~Fh预定标计数寄存器5~4Rsvd—保留3~0TDDR0h~Fh当PSC重新装入时,将TDDR的内容复制到PSC中2.2主计数寄存器TIMMOV #0x0000,PORT(#TIM0);0位字 段数 值说 明15~0TIM0000h~FFFFh主计数寄存器2.3主周期寄存器PRDMOV #0x1fff,PORT(#PRD0);0001 1111 1111 1111PRD0=0X1FFF;TDDR=0X0010;中断信号频率:内部时钟频率:400MTINT频率=400M/(8M*5)=10hz;改变该寄存器的初始值,可以改变灯亮灭快慢。
位字 段数 值说 明15~0PRD0000h~FFFFh主周期寄存器当TIM必须重新装入时,将PRD的内容复制到TIM中2.4定时器控制寄存器TCR设置定时器寄存器前,关闭定时器MOV #0x04f0,PORT(#TCR0);0000 0100 1111 0000设置完成后,开启定时器MOV #0x00e0,PORT(#TCR0);0000 0000 1110 0000具体配置如下黑体部分:位字 段数 值说 明15IDLEEN01定时器的Idle使能位定时器不能进入idle状态如果idle状态寄存器中的PERIS=1,定时器进入idle状态14INTEXT01时钟源从内部切换到外部标志位定时器没有准备好使用外部时钟源定时器准备使用外部时钟源13ERRTIM01定时器错误标志没有监测到错误,或ERRTIM已被读取出错12~11FUNCFUNC=00bFUNC=01bFUNC=10bFUNC=11b定时器工作模式选择位TIN/TOUT为高阻态,时钟源是内部CPU时钟TIN/TOUT为定时器输出,时钟源是内部CPU时钟TIN/TOUT为通用输出,引脚电平反映的是DATOUT位的值 TIN/TOUT为定时器输入,时钟源是外部时钟10TLB01定时器装载位TIM、PSC不重新装载将PRD、TDDR分别复制到TIM、PSC中9SOFT 在调试中遇到断点时定时器的处理方法8FREE7~6PWID00011011定时器输出脉冲的宽度1个CPU时钟周期2个CPU时钟周期4个CPU时钟周期8个CPU时钟周期5ARB01自动重装控制位ARB清0每次TIM减为0,PRD装入TIM中,TDDR装入PSC中4TSS01定时器停止状态位启动定时器停止定时器3C/P01定时器输出时钟/脉冲模式选择输出脉冲。
脉冲宽度由PWID定义,极性由POLAR定义输出时钟引脚上信号的占空比为50%2POLAR01时钟输出极性位正极性负极性1DATOUT01当TIN/TOUT作为通用输出引脚,该位控制引脚上的电平低电平高电平0Rsvd0保留3.中断相关寄存器 定时器中断属于可屏蔽中断需要设置以下寄存器:因为采用定时器0中断,中断向量地址0x20h;5000系列dsp的中断向量可以重新定位但是它只能被重新定位Page0范围内的任何空间;(在cmd文件中给出)3.1 IVPD(dsp向量的中断向量指针)3.2 IVPH(主机向量的中断向量指针)3.3 IER0(中断使能寄存器)3.4 IEF0(中断标志寄存器)3.5 DBIER0(调试中断寄存器)汇编指令: MOV #0x0d00,mmap(IVPD) MOV #0x0d00,mmap(IVPH) MOV #0x10,mmap(IER0) MOV #0x10,mmap(DBIER0) MOV #0xffff,mmap(IFR0) ;中断标志寄存器清零三. 应用举例 本实验要实现的功能是:在定时器中断到来时,改变实验板上led灯的亮灭状态,同时,在中断服务程序中,设置了一个变量,可以控制亮灭的时间长短。
实现过程:(1)对处理器及一些寄存器的初始化,包括时钟,定时器,中断等 .def start .global ldbs .global ncountlbds .set 0x400001TIM0 .set 0x1000 PRD0 .set 0x1001 TCR0 .set 0x1002 PRSC0 .set 0x1003 CLKMD .set 0x1c00 ;时钟控制器地址;自定义 ncount .usect "vars",1 .sect "TimerStart"start: ;处理器初始化 BCLR C54CM BCLR AR0LC BCLR AR1LC BCLR AR2LC BCLR C54CM .C54CM_off BCLR ARMS .ARMS_off ;ncount初始化 MOV #0,*(#ncount)。
