实验采用中断方式打开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--);
}