PWM定时器timer0学习笔记

时间:2021-10-18 23:35:07

PWM定时器timer0学习笔记:

一、定时器timer0代码中用到的寄存器有哪些?这些寄存器功能是什么?初始化中涉及到这些寄存器的位的含义是什么?:
TCFG0
功能是:定时器的配置寄存器,可以设置第一个预分频器和第二个预分频器的预分频系数。定时器0,1使用第一个预分频器;定时器2,3,4使用第二个预分频器。
设置:第 0-7位。
含义是 :65= 01000001,设置第一个预分频系数为65,把PCLK=1M作为定时器0,1的时钟源。由于只使用定时器0,故没有设置第二个预分频系数。
TCFG1
功能是:配置定时器的时钟选择器(MUX)。用于定时器选择时钟源是几分频的。
设置:设置了第200000100
含义:定时器0选择16分频,此时定时器0的时钟源频率为1/16Mhz
TCON
功能:用于控制定时器0,1,2,3,4的起始、自动加载、更新TCNTBn
设置:第01,3位。
含义:第1位为1,则把TCNTB0TCMPB0的值“手动”更新寄存器TCNT0,TCMP0,用于设置定时器0的初始计数值和比较值,更新之后把第1位置0。第0位置1,表示打开定时器的“开关”,让定时器0工作。第3位置1,表示计数寄存器TCNT0中的数值自减到0时,自动的把TCNTB0寄存器中的值加载到TCNT0
TCNTB0
功能:定时器0的计数缓冲寄存器。
设置:第0-31位,设置为62500
含义:该寄存器保存用户设置的初始计数值,该数值加载到TCNT0中做自减1操作,由于时钟源为1/16MHZ= 62500HZ,故62500自减10即为1s
TCMPB0
功能:定时器0的比较寄存器。
设置:未设置。
含义:主要用于输出PWM脉宽可调制的时钟信号。
TCNTO0
功能:定时器0的计数值寄存器。
设置:未设置
含义:读取该寄存器可以得到此时TCNT0中的数值。
TINT_CSTAT:
功能:设置定时器0,1,2,3,4的中断是否使能和中断状态。
设置:第0
含义:第0位置1,表示定时器0允许中断。
二、请具体描述一下定时器timer0的工作时钟频率是如何产生的?
CPU通过XXTI引脚外部引入时钟源,经过倍频和一系列的分频得到PCLK=66MTCFG0设置了第一个预分频器的分频系数为66PCLK经过第一个预分频器后变成1M;设置TCFG1的第二位让定时器0选择时钟选择开关的16分频,即得到timer0工作频率为1/16M= 62500Hz
三、定时器timer0的中断是如何产生的?
设置寄存器TINT_CSTAT的第0位,允许timer0触发中断。timer0TCNT0计数寄存器中的值自减到0则触发timer0中断,timer0中断是VIC0中的中断信号。设置VIC0INTENABLE的第21位使能timer0中断;设置VIC0INTSELECT21位使timer0IRQ中断;设置timer0中断的中断处理函数的入口地址VIC0VECTADDR21=(int)asm_IRQ_handler。综上,timer0中断经过:定时器使能中断——>中断控制器使能中断——>设置中断为IRQ——>定时器0触发中断——>中断处理函数——>跳回自动加载TCNT0继续执行。
四、简单描述一下我们这个定时器的示例代码运行时会做什么事情?
在终端上打印字符a-z,当timer0触发中断后打印“+”号(中间有空格),同时蜂鸣器响一下,如此循环。
五、实现一个arm代码,它能在运行跑马灯(只用到头3个灯)的同时,精确地以每2秒为时间间隔让蜂鸣器响,并且如果按下K4按键就让跑马灯未使用的第4个灯亮。