1. 脉冲宽度调制模式(PWM_OUT)
2. 脉冲宽度计数捕获模式(WDTH_CAP)
3. 外部事件模式(EXT_CLK)
来看看定时器的接口寄存器详细说明:
寄存器 功能
TIMERx_CONFIG 定时器配置寄存器,用于设置定时器工作模式
TIMERx_WIDTH 定时器宽度寄存器,设置输出波形脉冲宽度
TIMERx_PERIOD 定时器周期寄存器,设置输出波形的周期
TIMERx_COUNTER 定时器计数寄存器,读取捕获的脉冲数量
TIMER_ENABLE 定时器使能寄存器
TIMER_DISABLE 定时器关闭寄存器
TIMER_STATUS 定时器状态寄存器
看一段核心代码,详细说说:
*pTIMER0_CONFIG = 0x0019; //配置定时器为PWM 模式
*pTIMER0_PERIOD = 0x00800000; //设置周期为0x00800000 个系统时钟
*pTIMER0_WIDTH = 0x00400000; //设置脉宽为0x00400000 个系统时钟
*pTIMER_ENABLE = 0x0001; //使能Timer0
*pSIC_IAR0 = 0xffffffff;
*pSIC_IAR1 = 0xffffffff;
*pSIC_IAR2 = 0xfffffff4; //配置中断等级数据为4
register_handler(ik_ivg11, TIMER0_ISR); //注册中断等级为11,标识符为TIMER0_ISR
*pSIC_IMASK = 0x00010000;
EX_INTERRUPT_HANDLER(TIMER0_ISR) //标识符为TIMER0_ISR 的中断函数
{
*pTIMER_STATUS = 0x0001; //清除定时器中断标志
printf("timer0 interrupt !\n"); //打印信息
}
这个代码就码实现了将定时器配置为 PWM_OUT 模式,通过定时器中断来定时一个0x00800000 个系统的时间长度,定时完成后,在中断内打印信息。定时器没有单独的计时功能,所以如果计时,可以采用 PWM_OUT 模式,利用定时器中断来进行计时,同时在芯片的TIMER0 管脚上,会有PWM 波形输出。
当然这些我也是都有录制视频教程,SPI和Timer录制在了同一个章节,如果有兴趣可以看一下:
清晰版视频下载: 链接: http://pan.baidu.com/s/1c03rDfE 密码: dtod
再附上上面这个核心代码的源码供参考:
链接: http://pan.baidu.com/s/14HGWQ 密码: rjhc
下面可能还会再开个专题说一说Blackfin的uclinux或ucos,看时间吧。