Example_28xGPIO.c

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沙漠 阅读( ...) 评论( ...) 编辑 收藏

转载于:https://www.cnblogs.com/shamoof/p/3641403.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值