ii沙漠

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

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;

 

posted on 2014-04-02 19:41  ii沙漠  阅读(421)  评论(0编辑  收藏  举报