表8-5定时器控制寄存器TCR(续2) 位 字段 数值 说明 定时器停正状态位 4 TSS 0 启动定时器 1 停止定时器 定时器输出时钟/脉冲模式选择 0 输出脉冲。脉冲宽度由PWD定义,极性由 3 C/P POLAR定义 输出时钟。引脚上信号的占空比为50%。 脉冲(时钟)输出极性位 2 POLAR 0 脉冲正极性(时钟起始低电平) 1 脉冲负极性(时钟起始高电平) 当TIN/TOUT作为通用输出引型,该位控制引 脚上的电平 1 DATOUT 0 低电平 1 高电平 0 Rsvd 0 保留 29
表8-5 定时器控制寄存器 TCR(续2) 位 字 段 数值 说 明 4 TSS 0 1 定时器停止状态位 启动定时器 停止定时器 3 C/P 0 1 定时器输出时钟/脉冲模式选择 输出脉冲。脉冲宽度由PWID定义,极性由 POLAR定义 输出时钟。引脚上信号的占空比为50%。 2 POLAR 0 1 脉冲(时钟)输出极性位 脉冲正极性(时钟起始低电平) 脉冲负极性(时钟起始高电平) 1 DATOUT 0 1 当TIN/TOUT作为通用输出引脚, 该位控制引 脚上的电平 低电平 高电平 0 Rsvd 0 保留 29 脉冲
8.2.3定时器使用要点 1.初始化定时器 (1)设置TCR,包括:停止计时TSS=1),使能定时器装载 TLB=1)等; (2)将预定标计数器周期数写入TDDR(以输入的时钟周 期为基本单位); 在PRSC中 (3)将主计数器周期数装入PRD; TLB=1时,执行定时器装载:TDDR→PSC,PRD→TIM (4)关闭定时器装载TLB=0),启动计时(TSS=O)。 2.停止/启动定时器 利用时钟控制寄存器TCR)中的TSS位可以停止 TSS=1)或启动定时器(TSS=0)。 30
8.2.3 定时器使用要点 1.初始化定时器 (1)设置 TCR, 包括:停止计时(TSS=1),使能定时器装载 (TLB=1)等; (2)将预定标计数器周期数写入TDDR (以输入的时钟周 期为基本单位) ; (3)将主计数器周期数装入PRD; (4)关闭定时器装载 (TLB=0) , 启动计时(TSS=0) 。 2.停止/启动定时器 利用时钟控制寄存器(TCR)中的TSS位可以停止 (TSS=1)或启动定时器(TSS=0)。 30 在PRSC中 TLB=1时, 执行定时器装载: TDDR→PSC, PRD→TIM
3.DSP复位后定时器寄存器的值 ◆TCR寄存器复位后是0010,除TSS=1外,其他位为0: 停止定时(TSS=1); (在TCR内) ●定时器不进行自动重装(ARB=0); ●DLE指令不能使定时器进入省电模式(DLEEN=O); 仿真时遇到软件断点定时器立即停止工作(SOFT= FREE=0); ●TIN/TOUT为高阻态,时钟源是内部时钟(FUNC=OOb时。 ◆ 预定标计数器PSC值TDDR为0;(在PRSC寄存器内) ◆主计数器TIM值及PRD值为FFFFh; 31
⚫停止定时(TSS=1); ⚫定时器不进行自动重装(ARB=0); ⚫IDLE指令不能使定时器进入省电模式(IDLEEN= 0); ⚫仿真时遇到软件断点定时器立即停止工作(SOFT= FREE = 0); ⚫TIN/TOUT为高阻态, 时钟源是内部时钟(FUNC=00b)。 3.DSP复位后定时器寄存器的值 31 (在TCR内) ◆TCR寄存器复位后是0010h, 除TSS=1外, 其他位为0: ◆ 预定标计数器PSC值TDDR为0; (在PRSC寄存器内) ◆ 主计数器TIM值及PRD值为FFFFh;
8.2.4定时器应用实例: 【例8-2】 在TN/TOUT引脚上产生一个2MHz的 (1)要点: 时钟,假定DSP的CPU时钟为200MHzo >TIN/TOUT引脚配置为定时器输出,FUNC设置为O1b; >使该引脚工作在时钟模式,CP设置为1b; >TIN/TOUT的极性为默认的Ob(起始低电平): >由于每当计数器减为0时,引脚电平就会翻转一次。在 CPU时钟为200MHz的情况下,要求定时器计数为50; >设置自动装入(ARB=1),使每次计数器减为0时,计时器 自动装入计数值,并重新开始计数; >置FREE=⊥,使计时器在遇到仿真断点时能继续工作; >令DLEEN=O,使计时器即便在外设时钟模块处于idIe 状态下仍然工作; 32
8.2.4 定时器应用实例: 【例8-2】 32 在TIN/TOUT引脚上产生一个2MHz的 (1) 要点: 时钟, 假定DSP的CPU时钟为200MHz。 ➢TIN/TOUT引脚配置为定时器输出, FUNC设置为01b; ➢使该引脚工作在时钟模式, C/P设置为1b; ➢TIN/TOUT的极性为默认的0b(起始低电平); ➢由于每当计数器减为0时, 引脚电平就会翻转一次。在 CPU时钟为200MHz的情况下, 要求定时器计数为50; ➢设置自动装入(ARB=1),使每次计数器减为0时,计时器 自动装入计数值, 并重新开始计数; ➢置FREE=1, 使计时器在遇到仿真断点时能继续工作; ➢令IDLEEN=0, 使计时器即便在外设时钟模块处于idle 状态下仍然工作;
(2)汇编语言代码: 200MHz 米米米米米米米米米米米米米米米 2MHz 输入时钟频率 ;定时器寄存器地址 输出时钟频率 米米米米米米米米米米米米米米米 2{(TDDR+I)×(PRD+1)} TIMO .set 0x1000 ;TIMERO计数寄存器地址 PRDO .set 0x1001 ,TIMERO,周期寄存器地址 TCRO .set 0x1002 ;TIMERO:控制寄存器地址 PRSCO .set 0x1003 ;TIMER0预定标寄存器地址 米米米米米米米米米米米米米米米米米米米米米米米米米米米米米米米米米米米米米米米米米米米 :定时器配置 :米米米米米米米米米米米米米米****米*米米**米*********PRD :米米米米米 TIMER PERIOD .Set9:定时器TIM的周期PRD+1为107 TIMER PRESCALE .Set4;预定标值TDDR+1为5 .text 计数次数为50 INIT: mov #TIMER_PERIOD,port(#PRDO) ;配置定时器0周期寄左器 mov #TIMER_PRESCALE,Port(#PRSCO);配置定时器O预定标寄存器 33
;****************************************** ;定时器寄存器地址 ;****************************************** TIM0 .set 0x1000 ;TIMER0计数寄存器地址 PRD0 .set 0x1001 ;TIMER0周期寄存器地址 TCR0 .set 0x1002 ;TIMER0控制寄存器地址 PRSC0 .set 0x1003 ;TIMER0预定标寄存器地址 ;******************************************* ;定时器配置 ;******************************************* TIMER_PERIOD .set 9 ;定时器TIM的周期PRD+1为10 TIMER_PRESCALE .set 4 ;预定标值TDDR+1为5 .text INIT: mov #TIMER_PERIOD,port(#PRD0) ;配置定时器0周期寄存器 mov #TIMER_PRESCALE,port(#PRSC0);配置定时器0预定标寄存器 (2)汇编语言代码: 33 计数次数为50 PRD 2(TDDR PRD 1 1 ) ( ) = + + 输 输入时钟频率 出时钟频率 200MHz 2MHz