|
/******************************************************************************************** * 文 件 名:PLL_Interrupt.c * 功 能:采用中断方式打开PLL,当PLL锁定成功后,蜂鸣器蜂鸣一声。 * 注 意:设置锁相环操作方法: * 1、在PLLCFG中设置倍频系数M和分频系数P的值; * 2、设置PLLCON,使能PLL(这一步和(1)可以互换); * 3、发送PLL馈送序列; * 4、等待PLL锁定(查询等待或中断方式) * 5、设置PLLCON,使能和连接PLL; * 6、发送PLL馈送序列; * 7、禁止PLL中断(若采用中断方式的话)。 * 说 明:用跳线帽短接P0.7和BEEP。 *********************************************************************************************/ #include "config.h"
#define BEEPCON ((uint32)0x01<<7) // P0.7引脚控制蜂鸣器,低电平蜂鸣 #define BEEP_ON() IO0CLR=BEEPCON // P0.7引脚输出低电平,蜂鸣器蜂鸣 #define BEEP_OFF() IO0SET=BEEPCON // P0.7引脚输出高电平,蜂鸣器不蜂鸣
/******************************************************************************************** * 函数名称:Delay() * 功 能:软件延时 * 入口参数:count 延时参数,值越大,延时越长 * 出口参数:无 *********************************************************************************************/ void Delay(uint32 count) { uint32 i; for(;count>0;count--) for(i=0;i<50000;i++); }
/******************************************************************************************** * 函数名称:PLL_Int() * 功 能:在中断中打开PLL,蜂鸣器蜂鸣一声 * 入口参数:无 * 出口参数:无 *********************************************************************************************/ void __irq PLL_Int(void) { PLLCON=3; // PLL使能和连接 PLLFEED=0xAA; // 发送PLL馈送序列 PLLFEED=0x55; /* 蜂鸣器蜂鸣一声 */ BEEP_ON(); Delay(100); BEEP_OFF(); VICIntEnClr=1<<12; // 禁止PLL中断 VICVectAddr=0; // 向量中断结束 }
/******************************************************************************************** * 函数名称:main() * 功 能:更改PLL设置,等待PLL中断 *********************************************************************************************/ int main(void) { PINSEL0&=~((uint32)0x03<<14); // 将P0.7引脚选择为GPIO功能 IO0DIR|=BEEPCON; // 设置P0.7为输出 BEEP_OFF(); // 蜂鸣器禁止蜂鸣 PLLCON=1; // 使能PLL PLLCFG=0x25; // 设置M为6,P为2 PLLFEED=0xAA; // 发送PLL馈送序列 PLLFEED=0x55; IRQEnable(); // 使能IRQ中断 /* PLL中断初始化 */ VICIntSelect=0x00000000; // 设置所有中断分配为IRQ中断 VICVectCntl0=0x20 | 12; // PLL中断分配到IRQ slot0,即最高优先级 VICVectAddr0=(uint32)PLL_Int; // 设置中断服务程序地址 VICIntEnable=1<<12; // 使能EINT0中断 while(1); // 等待中断 return 0; }
|