实验采用中断方式打开PLL,。添加蜂鸣器用于指示PLL锁定。
当PLL锁定成功后,蜂鸣器蜂鸣一声。实验程序如下所示,我是在IAR下面进行的调试,出现了两个警告,但不影响程序的运行。
#include <NXP/iolpc2148.h>
typedef unsigned char uint32;
void PLL_INT(void);
void Delayn(unsigned long n);
IRQEnable(void);
//PLL中断函数
void PLL_INT(void)
{
PINSEL0=0x00000000; //设置所有引脚连接GPIO
IO0DIR_bit.P0_22 = 1;
PLLCON=3; //PLL使能和连接
PLLFEED=0xAA; //发送PLL馈送序列
PLLFEED=0x55;
IO0SET_bit.P0_22=1; //打开BEEP
Delayn(1000000); //延时
IO0CLR_bit.P0_22=1; //关闭BEEP
Delayn(1000000); //延时
VICIntEnClear=1<<12; //禁止PLL_INT中断
VICVectAddr=0x00; //向量中断处理结果
}
//IRQ中断
IRQEnable(void) //使能IRQ中断
{
VICIntSelect=0x00000000; //使能所有的通道为IRQ中断
VICVectCntl0=0x20|12; //PLL_INT分配到IRQ slot0,即最高优先级
VICVectAddr=(uint32)PLL_INT; //设置PLL_INT向量地址
VICIntEnable=1<<12; //使能PLL_INT中断
}
main(void)
{
PINSEL0=0x00000000; //设置引脚连接GPIO功能
/*配置IO接口*/
PINSEL0 =1<<22;
PLLCON=1; //使能PLL
PLLCFG=0x25; //设置M为6,P为2
PLLFEED=0xAA; //发送PLL馈送序列
PLLFEED=0x55;
IRQEnable(); //使能IRQ中断
PLL_INT();
while(1);
}
//延时函数
void Delayn(unsigned long n)
{
while(n--);
}