原创 Blackfin的技术文章和教学视频连载11:Timer

2014-8-2 11:54 761 11 11 分类: 处理器与DSP 文集: Blackfin的技术文章和教学视频连载

    这章详细说一说Blackfin的Timer吧。定时器!

 
    定时器,无需再做什么名次解释了,我们直接来看看BF533的定时器,ADSP-BF53x 上有3 个通用定时器,每个定时器有三种模式:
 
    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,看时间吧。
 
    
dsp
PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
EE直播间
更多
我要评论
0
11
关闭 站长推荐上一条 /3 下一条