仿照网友分享的C2000LaunchPad例程,写了个循环查询按键点亮LED的程序。
不得不说,CCS5.4用不习惯,也不得不说,TI自己的库做的还真不错,用起来很方便。
[cpp] view plain copy
- #include
- #include
- 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
|