西安欧亚学院本科毕业论文(设计)
5.3 系统初化设计
(1) 程序流程图
图5-2 系统初始化
(2) 程序源代码 void system_init() {
/*VPB分频系数配置*/
PLLCON=1; //PLL使能(开启)
#if((Fcclk/4)/Fpclk)==1 //VPB总线时钟为处理器时钟的1/4时 VPBDIV=0; //VPB分频器设置为0 #endif
#if((Fcclk/4)/Fpclk)==2 //VPB总线时钟为处理器时钟的1/2时 VPBDIV=2; //VPB分频器设置为2 #endif
#if((Fcclk/4)/Fpclk)==4 //VPB总线时钟与处理器时钟相同 VPBDIV=1; //VPB分频器设置为1 #endif
/*PLL 倍频/分频值自动配置*/
25
西安欧亚学院本科毕业论文(设计)
#if(Fcco/Fcclk)==2 //流控振荡频率是系统频率的2倍时 PLLCFG=((Fcclk/Fosc)-1)|(0<<5); //PLLCFG配置寄存器,4:0 PLL倍频器值,6:3 分频器值。
#endif
#if(Fcco/Fcclk)==4
PLLCFG=((Fcclk/Fosc)-1)|(1<<5); #endif
#if(Fcco/Fcclk)==8
PLLCFG=((Fcclk/Fosc)-1)|(2<<5); #endif
#if (Fcco/Fcclk)==16
PLLCFG=((Fcclk/Fosc)-1)|(3 << 5); #endif
PLLFEED=0xaa; //PLL馈送寄存器使PLLCOM/PLLCFG的值更改生效。
PLLFEED=0x55;
while((PLLSTAT&(1<<10))==0); //等待PLL锁存
PLLCON=3; //将PLL作为时钟源连接到微控制器。 PLLFEED=0xaa; PLLFEED=0x55; //存储器加速配置 MAMCR=0; #if Fcclk<20000000 MAMTIM=1; #else
#if Fcclk<40000000 MAMTIM=2; #else
MAMTIM=3; #endif #endif
MAMCR=2;
//VIC初始化 VICIntSelect=0;
26
西安欧亚学院本科毕业论文(设计)
VICIntEnClear=0xFFFFFFFF; VICSoftIntClear=0xFFFFFFFF; VICProtection=0; VICVectAddr=0; VICDefVectAddr=0; }
5.4 UARTO初始化
(1) 程序流程图
图5-3 程序流程图
(2) 程序源代码 void uart0_init() {
uint32 baud=115200;
U0LCR=0x83; //数据格式设置(字长、停止位、奇偶选择/校验位)/除数锁存器访问使能。
U0DLM=((Fpclk/16)/baud)/256; //除数锁存器高字节计算。 U0DLL=((Fpclk/16)/baud)%6; //除数锁存器低字节计算。
U0LCR=0x03; //数据格式设置/除数锁存寄存器访问禁能。
}
5.5 GPIO模块程序
27
西安欧亚学院本科毕业论文(设计)
GPIO控制蜂鸣器程序代码: void DelayNS(uint32 dly) { uint32 i; for(;dly>;dly--) for(i=0;<5000;i++) }
/******************************* 名称 main() 功能 控制蜂鸣器 蜂鸣 ******************************* int main(void) {
PINSEL0=0x00000000; IO0DIR=BEEPCON; while(1) {
IO0SET=BEEPCON; DelayNS(10); IO0CLR=BEEPCON; DelayNS(10); } return(0); }
5.6 RTC模块
实时时钟日历RTC程序代码: int main (void) {
TargetResetInit();
/* 初始化 RTC模块 */ RTCInit();
local_time.RTC_Sec = 0;
28