#include<F2802x_Device.h>
#include<DSP28x_Project.h>
void main(void)
{
// 系统控制初始化
InitSysCtrl();
InitGpio();
// 禁止全局中断
DINT;
InitPieCtrl();
// 禁止CPU中断
IER = 0x0000;
// 清楚CPU所有中断标志
IFR = 0x0000;
// 位向量表中的所有中断向量配置对应的入口地址
InitPieVectTable();
// 允许访问受保护的空间
EALLOW;
// 配置GPIO0 GPIO1 GPIO2 GPIO3为输出,GPIO12为输入
GpioCtrlRegs.GPADIR.all=0x000f;
// 禁止 GPIO12 内部上拉
GpioCtrlRegs.GPAPUD.bit.GPIO12 = 1;
//禁止访问受保护的空间
EDIS;
while(1){
if(GpioDataRegs.GPADAT.bit.GPIO12 == 1){
GpioDataRegs.GPASET.bit.GPIO0 = 1;
}else{
GpioDataRegs.GPACLEAR.bit.GPIO0 = 1;
}
}
}
总结两点:
1、原以为这个程序会很容易实现,可还是费了不少工夫。在原来InitGpio()函数中,把所有的脚配置成了上拉输入。C2000LaunchPad原理图为
出现的现象是:
程序开始执行后,GPIO12读到为低电平,按下按键,读到高电平,LED0熄灭。放开按键,再次按下,仿真看到仍然读到为高电平,LED无变化。
折腾了一阵子,身边两个万用表全没电了,没法看电阻R11上端电平。用导线把R11上端接地,GPIO12读到0,LED点亮。
分析原因:
可能是C2000内部上拉电阻小于R11,导致GPIO12读到一直为高电平,但又不明白为啥按键按下前不读到高电平.....有点邪乎。
某大牛曾说,每一个莫名其妙现象的背后,都有一个知识的盲点。好吧,暂不求甚解。
解决方法:
禁止GPIO12输入上拉后,测试OK