//p2.0 pwm1.1
void ALS_Init(void) //初始化
{
LPC_SC->PCONP|=(1<<1)|(1<<2)|(1<<15);//打開時(shí)鐘
LPC_SC->PCLKSEL0&=~(3<<2); //時(shí)鐘25M
LPC_SC->PCLKSEL0&=~(3<<4);
//p2.0
LPC_PINCON->PINSEL4&=~(0X03L<<0); //GPIO
LPC_PINCON->PINMODE4&=~(0X03L<<0); //使能上拉
LPC_PINCON->PINMODE_OD2&=~(0X01<<1); //推挽正常模式
P2dir(0)=1;//輸出
LPC_TIM1->TCR|=(1<<1); //復(fù)位定時(shí)器
LPC_TIM1->CTCR=0x00; //定時(shí)器模式
LPC_TIM1->PC=0X00;
LPC_TIM1->PR=25-1; //預(yù)分頻,計(jì)數(shù)頻率1m
LPC_TIM1->MR0=20; //25*100 2500 頻率10K
LPC_TIM1->MR1=100;
LPC_TIM1->MCR|=((1<<0)|(1<<3)|(1<<4)); //MR0與TC值匹配時(shí)將產(chǎn)生復(fù)位 產(chǎn)生中斷 MR1匹配時(shí)產(chǎn)生中斷 不復(fù)位
LPC_TIM1->IR|=0XFF; //清所有中斷標(biāo)志位
LPC_TIM1->TCR=(1<<0); //啟動(dòng)定時(shí)器
NVIC_EnableIRQ(TIMER1_IRQn);
}
void ALS_Set_Duty(u8 duty) //設(shè)置占空比
{
LPC_TIM1->TCR=0; //暫停定時(shí)器
if(duty>=100)duty=99;
if(duty==0)duty=1;
LPC_TIM1->MR0=duty;
LPC_TIM1->TCR=(1<<0); //啟動(dòng)定時(shí)器
}
void ALS_Stop(void)
{
LPC_TIM1->TCR=0; //暫停定時(shí)器
P2low(0)=1; //電平恒定
}
void TIMER1_IRQHandler(void)
{
NVIC_ClearPendingIRQ(TIMER1_IRQn);
if(LPC_TIM1->IR&0x01)//mr0中斷
{
P2low(0)=1;
LPC_TIM1->IR|=(1<<0); //清中斷標(biāo)志
}
elseif(LPC_TIM1->IR&0x02)
{
P2high(0)=1;
LPC_TIM1->IR|=(1<<1); //清中斷標(biāo)志
}
}