添加链接描述## 一、计时器TIM1
1.简述
首先声明自己也在照着手册自学,如有错误请纠正。 LPC114的PWM输出方式很让人无语,由于我先学的STM32。在STM32里PWM输出可以用一个频道来完成,在一个通道里有比较寄存器和重装载寄存器。但是在 LPC114好像不能在一个频道同时完成定时器计数的对比和清零。要使用两个通道,一个通道pwm模式,到寄存器设置的值后开始翻转;另一个通道设置pwm的长度,到寄存器设置的值后定时器计数清零。
2.配置步骤
(1)将引脚配置
LPC_SYSCON->SYSAHBCLKCTRL |=(1<<16);
LPC_IOCON->PIO1_9 &= ~0x07;
LPC_IOCON->PIO1_9 |= 0x01;
LPC_SYSCON->SYSAHBCLKCTRL &=~(1<<16);
(2)开启定时器时钟
LPC_SYSCON->SYSAHBCLKCTRL |= (1<<8);
(3)配置寄存器 大家最好自己对着手册自己看看寄存器控制的功能。
LPC_TMR16B1->TCR = 0x02;
LPC_TMR16B1->PWMC = 0x01;
LPC_TMR16B1->PR = SystemCoreClock/1000-1;
LPC_TMR16B1->MCR = 0x02<<6;
LPC_TMR16B1->MR2 = 1000;
LPC_TMR16B1->MR0 = 0;
LPC_TMR16B1->TCR = 0x01;
二、输入中断
1.简述
这一部分就比较简单了。大体分两个部分:(1)外部中断的配置;(2)中断管理器的配置。
2.步骤
LPC_SYSCON->SYSAHBCLKCTRL |=(1<<16);
LPC_IOCON->PIO1_8 &= ~0x07;
LPC_IOCON->PIO1_8 |= 0x01;
LPC_GPIO1->DIR &= ~(1UL << 8);
LPC_SYSCON->SYSAHBCLKCTRL &=~(1<<16);
LPC_GPIO1->IEV |= (1<<8);
LPC_GPIO1->IE |= (1<<8);
三、中断服务函数
void PIOINT1_IRQHandler()
{
static int time=0;
if((LPC_GPIO1->MIS&(1<<8))==(1<<8))
{
delay_xd();
if(KEY1_UP)
{
time = time + 500;
PWM_SET(time);
}
}
LPC_GPIO1->IC = 0XFFF;
}
四、主函数
int main (void){
PWM_init();
KEY_init();
NVIC_EnableIRQ(EINT1_IRQn);
while (1){
}
return 0;
}
源码地址
|