共2条
1/1 1 跳转至页

问
大家好,这是周公的一个例子。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: 谢谢多谢了~!还有朋友继续赐教吗?
我不理解的是:
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 跳转至页
回复
有奖活动 | |
---|---|
【EEPW电子工程师创研计划】技术变现通道已开启~ | |
发原创文章 【每月瓜分千元赏金 凭实力攒钱买好礼~】 | |
【EEPW在线】E起听工程师的声音! | |
“我踩过的那些坑”主题活动——第001期 | |
高校联络员开始招募啦!有惊喜!! | |
【工程师专属福利】每天30秒,积分轻松拿!EEPW宠粉打卡计划启动! | |
送您一块开发板,2025年“我要开发板活动”又开始了! | |
打赏了!打赏了!打赏了! |
打赏帖 | |
---|---|
【我踩过的那些坑】结构堵孔导致的喇叭无声问题被打赏50分 | |
【我踩过的那些坑】分享一下调试一款AD芯片的遇到的“坑”被打赏50分 | |
电流检测模块MAX4080S被打赏10分 | |
【我踩过的那些坑】calloc和malloc错误使用导致跑飞问题排查被打赏50分 | |
多组DCTODC电源方案被打赏50分 | |
【我踩过的那些坑】STM32cubeMX软件的使用过程中的“坑”被打赏50分 | |
新手必看!C语言精华知识:表驱动法被打赏50分 | |
【我踩过的那些坑】杜绑线问题被打赏50分 | |
【我踩过的那些坑】STM32的硬件通讯调试过程的“坑”被打赏50分 | |
【我踩过的那些坑】晶振使用的问题被打赏100分 |