这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 综合技术 » 基础知识 » 关于定时器的理解!能帮我吗?

共2条 1/1 1 跳转至

关于定时器的理解!能帮我吗?

院士
2006-09-17 18:14:16     打赏
关于定时器的理解!能帮我吗?



关键词: 关于     定时器     理解     帮我    

院士
2006-12-22 22:43:00     打赏
2楼
问 大家好,这是周公的一个例子。LPC2131 easy ARM板子。

我不理解的是:
1);    T0PR   = 0;            /* 时钟不分频*/

这个时钟分频,是说分主频吗? 那最多可以分多少呢? 如果不分频,也就是用当前的系统工作频率 对吗?

2):T0MCR  = 0x03;        /* 设置T0MR0匹配后复位T0TC,并产生中断标志    

我的理解是,定时器的计时,不断的和预定的时间值比较,也就是检查是否匹配,是这样的吗?比如他的注释里说的T0MRO匹配。时间到,此时产生中断!

3):T0MR0  = Fpclk / 2;    /* 0.5秒钟定时                                        
     预设时间值,如何计算的呢?比如上面说的0.5s如何计算呢?
总之:
我对所谓的“匹配” ,“捕获”不是很明白!希望大家给予我帮助 !多谢了~!
            

                                            
********************************************************************************************************/
#include "config.h"

#define BEEP  1 << 7    /* P0.7控制BEEP,低电平蜂鸣        */

/*
*********************************************************************************************************
** 函数名称 :IRQ_Timer0()
** 函数功能 :定时器0中断服务程序,取反LED9控制口。
** 入口参数 :无
** 出口参数 :无
*********************************************************************************************************
*/
void __irq IRQ_Timer0 (void)
{
    if ((IO0SET & BEEP) == 0)
        IO0SET = BEEP;            /* 关闭BEEP*/
                                else
        IO0CLR = BEEP;
    
    T0IR = 0x01;                /* 清除中断标志
                                        VICVectAddr = 0x00; /* 通知VIC中断处理结束
}

/*
*********************************************************************************************************
** 函数名称 :main()
** 函数功能 :使用定时器实现1秒钟定时,控制LED9闪烁。中断方式。
** 调试说明 :需要将跳线JP11连接BEEP。
*********************************************************************************************************
*/
int main (void)
{
    PINSEL1 = 0x00000000;            /* 设置管脚连接GPIO                            */
    IO0DIR  = BEEP;                    /* 设置BEEP控制口输出                        */
    
    IRQEnable();                    /* IRQ中断使能                                */
    
    /* 定时器0初始化 */
    T0TC   = 0;            /* 定时器设置为0                                        */
    T0PR   = 0;            /* 时钟不分频                                            */
    T0MCR  = 0x03;        /* 设置T0MR0匹配后复位T0TC,并产生中断标志                */
    T0MR0  = Fpclk / 2;    /* 0.5秒钟定时                                            */
    T0TCR  = 0x01;        /* 启动定时器                                            */
    
    /* 设置定时器0中断IRQ */
    VICIntSelect = 0x00;                /* 所有中断通道设置为IRQ中断            */
    VICVectCntl0 = 0x20 | 0x04;            /* 设置定时器0中断通道分配最高优先级    */
    VICVectAddr0 = (uint32)IRQ_Timer0;    /* 设置中断服务程序地址                    */
    VICIntEnable = 1 << 0x04;            /* 使能定时器0中断                        */

    
    while (1);
    return 0;
}
/*********************************************************************************************************
**                            End Of File
********************************************************************************************************/
1: 自己顶一下!自己顶一下!还是想得到你们的指点!等待~ 2: re是对Fpclk分频,要产生0.02秒定时可以让T0PR=0,T0MR0  = Fpclk / 50;即可,明白了吗? 3: 谢谢多谢了~!还有朋友继续赐教吗?

共2条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]