Step1 初始化系统InitSysCtrl();
EALLOW; SysCtrlRegs.WDCR= 0x0068;//禁止看门狗 SysCtrlRegs.PLLCR = 0xA;//初始化系统时钟 for(i= 0; i< 5000; i++){}//确保时钟初始化完成 SysCtrlRegs.HISPCP.all = 0x0001;//设置高速外设时钟 SysCtrlRegs.LOSPCP.all = 0x0002;//设置低速外设时钟 SysCtrlRegs.PCLKCR.bit.EVAENCLK=1;//使能需要用到的各外设时钟 SysCtrlRegs.PCLKCR.bit.EVBENCLK=1;//使能需要用到的各外设时钟 SysCtrlRegs.PCLKCR.bit.SCIENCLKA=1;//使能需要用到的各外设时钟 EDIS;
Step2 清除所有CPU中断和中断标志
DINT; IER = 0x0000; IFR = 0x0000;
Step3 初始化PIE控制寄存器到默认状态InitPieCtrl();
PieCtrl.PIECRTL.bit.ENPIE = 0;//禁止PIE PieCtrl.PIEIER1.all = 0;//清除所有PIE中断使能寄存器 PieCtrl.PIEIER2.all = 0;//清除所有PIE中断使能寄存器 PieCtrl.PIEIER3.all = 0;//清除所有PIE中断使能寄存器 PieCtrl.PIEIER4.all = 0;//清除所有PIE中断使能寄存器 PieCtrl.PIEIER5.all = 0;//清除所有PIE中断使能寄存器 PieCtrl.PIEIER6.all = 0;//清除所有PIE中断使能寄存器 PieCtrl.PIEIER7.all = 0;//清除所有PIE中断使能寄存器 PieCtrl.PIEIER8.all = 0;//清除所有PIE中断使能寄存器 PieCtrl.PIEIER9.all = 0;//清除所有PIE中断使能寄存器 PieCtrl.PIEIER10.all = 0;//清除所有PIE中断使能寄存器 PieCtrl.PIEIER11.all = 0;//清除所有PIE中断使能寄存器 PieCtrl.PIEIER12.all = 0;//清除所有PIE中断使能寄存器 PieCtrl.PIEIFR1.all = 0;//清除所有PIE中断标志寄存器 PieCtrl.PIEIFR2.all = 0;//清除所有PIE中断标志寄存器 PieCtrl.PIEIFR3.all = 0;//清除所有PIE中断标志寄存器 PieCtrl.PIEIFR4.all = 0;//清除所有PIE中断标志寄存器 PieCtrl.PIEIFR5.all = 0;//清除所有PIE中断标志寄存器 PieCtrl.PIEIFR6.all = 0;//清除所有PIE中断标志寄存器 PieCtrl.PIEIFR7.all = 0;//清除所有PIE中断标志寄存器 PieCtrl.PIEIFR8.all = 0;//清除所有PIE中断标志寄存器 PieCtrl.PIEIFR9.all = 0;//清除所有PIE中断标志寄存器 PieCtrl.PIEIFR10.all = 0;//清除所有PIE中断标志寄存器 PieCtrl.PIEIFR11.all = 0;//清除所有PIE中断标志寄存器 PieCtrl.PIEIFR12.all = 0;//清除所有PIE中断标志寄存器 PieCtrl.PIECRTL.bit.ENPIE = 1;//使能PIE中断 PieCtrl.PIEACK.all = 0xFFFF;//PIEACK全部写1,难道是说进入核中断吗?
Step4 初始化中断向量表InitPieVectTable();
int16 i; Uint32 *Source = (void *) &PieVectTableInit; Uint32 *Dest = (void *) &PieVectTable; EALLOW; for(i=0; i < 128; i++) *Dest++ = *Source++; EDIS; PieCtrl.PIECRTL.bit.ENPIE = 1;
Step5 用户程序
var1= 0x0000; // sets GPIO Muxs as I/Os var2= 0xFFFF; // sets GPIO DIR as outputs var3= 0x0000; // sets the Input qualifier values
用户程序Gpio_select();
EALLOW; GpioMuxRegs.GPAMUX.all=var1;//设置GPIO作为通用输入输出引脚 GpioMuxRegs.GPBMUX.all=var1;//设置GPIO作为通用输入输出引脚 GpioMuxRegs.GPDMUX.all=var1;//设置GPIO作为通用输入输出引脚 GpioMuxRegs.GPFMUX.all=var1;//设置GPIO作为通用输入输出引脚 GpioMuxRegs.GPEMUX.all=var1;//设置GPIO作为通用输入输出引脚 GpioMuxRegs.GPGMUX.all=var1;//设置GPIO作为通用输入输出引脚 GpioMuxRegs.GPADIR.all=var2;//设输GPIO端口为输出模式 GpioMuxRegs.GPBDIR.all=var2;//设输GPIO端口为输出模式 GpioMuxRegs.GPDDIR.all=var2;//设输GPIO端口为输出模式 GpioMuxRegs.GPEDIR.all=var2;//设输GPIO端口为输出模式 GpioMuxRegs.GPFDIR.all=var2;//设输GPIO端口为输出模式 GpioMuxRegs.GPGDIR.all=var2;//设输GPIO端口为输出模式 GpioMuxRegs.GPAQUAL.all=var3;//设置GPIO输入限定值 GpioMuxRegs.GPBQUAL.all=var3;//设置GPIO输入限定值 GpioMuxRegs.GPDQUAL.all=var3;//设置GPIO输入限定值 GpioMuxRegs.GPEQUAL.all=var3;//设置GPIO输入限定值 EDIS;
一个简单的通用引脚输入输出就这样设置完成哒,之后只要简单的写GPxDAT,GPxSET,GPxCLEAT,GPxTOGGLE,GPxSET,GPxCLEAR,GPxTOGGLE即可
GpioDataRegs.GPADAT.all =0x5555; GpioDataRegs.GPBDAT.all =0x5555; GpioDataRegs.GPDDAT.all =0x0041; GpioDataRegs.GPEDAT.all =0x0005; GpioDataRegs.GPFDAT.all =0x5555; GpioDataRegs.GPGDAT.all =0x0010;