[资料分享] C2000LaunchPad学循环查询按键点亮LED

灞波儿奔   2020-7-6 21:48 楼主

#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原理图为

image.png

出现的现象是:

       程序开始执行后,GPIO12读到为低电平,按下按键,读到高电平,LED0熄灭。放开按键,再次按下,仿真看到仍然读到为高电平,LED无变化。

折腾了一阵子,身边两个万用表全没电了,没法看电阻R11上端电平。用导线把R11上端接地,GPIO12读到0,LED点亮。

分析原因:

        可能是C2000内部上拉电阻小于R11,导致GPIO12读到一直为高电平,但又不明白为啥按键按下前不读到高电平.....有点邪乎。

某大牛曾说,每一个莫名其妙现象的背后,都有一个知识的盲点。好吧,暂不求甚解。

解决方法:

        禁止GPIO12输入上拉后,测试OK

回复评论

暂无评论,赶紧抢沙发吧
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复