3.写出定时器0在时钟不分频的情况下,完成定时器0上升沿捕获时产生中断的初始化程序。
时间: 2024-02-26 16:59:17 浏览: 58
以下是定时器0在时钟不分频的情况下,完成定时器0上升沿捕获时产生中断的初始化程序:
```c
#include "LPC214x.h"
void Timer0_Init(void)
{
T0CTCR = 0x00; // 设置定时器模式
T0CCR = (1 << 0); // 设置上升沿捕获
T0TCR = (1 << 1); // 复位计数器
T0TCR = 0x01; // 启动定时器
T0IR = (1 << 4); // 清除捕获标志
T0MCR = (1 << 4); // 设置捕获中断
VICVectAddr2 = (unsigned int)TIMER0_IRQHandler; // 设置中断服务函数地址
VICVectCntl2 = (1 << 5) | 4; // 设置中断优先级和中断向量号
VICIntEnable = (1 << 4); // 使能定时器0中断
}
int main(void)
{
Pin_Init(); // 初始化引脚
Timer0_Init(); // 初始化定时器0
while(1)
{
// 程序运行在中断中,不需要额外的代码
}
return 0;
}
void TIMER0_IRQHandler(void)
{
if(T0IR & (1 << 4)) // 检查是否捕获中断
{
unsigned int capture_value = T0CR0; // 读取捕获值
T0IR = (1 << 4); // 清除捕获标志
}
}
```
在以上程序中,`T0CCR`的值为`0x01`,表示设置上升沿捕获;`T0MCR`的值为`0x10`,表示设置捕获中断;`VICVectCntl2`的值为`(1 << 5) | 4`,表示设置中断优先级为5,中断向量号为4。在中断服务函数`TIMER0_IRQHandler`中,通过读取`T0CR0`的值可以得到捕获值。
阅读全文