3440|15

213

帖子

1

TA的资源

一粒金砂(高级)

楼主
 

各位前辈,向您们求助!!C2000按键检测实验响应不正常 [复制链接]

俺是菜鸟,最近在学习C2000 launchpad 在学习按键检测时遇到如下问题:
先贴代码:
#include
#include
void main(void)
{
   InitSysCtrl();   //系统控制初始化
   //InitGpio();
   DINT;      //禁止全局中断
   InitPieCtrl();
   IER = 0x0000;  //禁止CPU中断
   IFR = 0x0000;  //清楚CPU所有中断标志
   InitPieVectTable();//位向量表中的所有中断向量配置对应的入口地址
   EALLOW;    //允许访问受保护的空间
   GpioCtrlRegs.GPADIR.bit.GPIO0=1; //配置I/O口为输出
   GpioCtrlRegs.GPADIR.bit.GPIO1=1;
   GpioCtrlRegs.GPADIR.bit.GPIO2=1;
   GpioCtrlRegs.GPADIR.bit.GPIO3=1;
   GpioCtrlRegs.GPADIR.bit.GPIO12=0;
   EDIS;      //禁止访问受保护的空间
   GpioDataRegs.GPASET.bit.GPIO12 == 0;
   for(;;)
        {
     GpioDataRegs.GPASET.bit.GPIO2 &= 0;
     GpioDataRegs.GPASET.bit.GPIO0 &= 0;
     GpioDataRegs.GPASET.bit.GPIO3 &= 0;
     GpioDataRegs.GPATOGGLE.bit.GPIO1=1;
    if(GpioDataRegs.GPADAT.bit.GPIO12 == 1)
        {
         DELAY_US(10L);
         if(GpioDataRegs.GPADAT.bit.GPIO12 == 1)
         {
          GpioDataRegs.GPASET.bit.GPIO0 |= 1;
          GpioDataRegs.GPASET.bit.GPIO1 |= 1;
          DELAY_US(100000L);
         }
        }
        }
}

设置GPIO12为输入模式,GPIO管脚在没有按下按键时是1.18V左右,按下按键后,管脚电压为3.3V能够进入if语句,LED1和LED2熄灭,但是在按着按键和停止按下按键两种情况下,在程序GpioDataRegs.GPATOGGLE.bit.GPIO1=1;处设置断点,发现GPIO0连接的LED无法点亮,管脚电压3.3V而与GPIO1连接的LED可以正常闪烁,请问给位前辈,这是什么原因啊??

QQ截图20130814173623.png (7.42 KB, 下载次数: 1)

按键电路

按键电路

QQ截图20130814173643.png (34.63 KB, 下载次数: 1)

LED电路

LED电路

最新回复

自己再看看为什么不亮好吗? 以前给你的回复你是否认真看一下,别只问。好吗?  详情 回复 发表于 2013-8-15 22:43
 
点赞 关注

回复
举报

213

帖子

1

TA的资源

一粒金砂(高级)

沙发
 
怎么没有人回答啊??!!
 
 

回复

348

帖子

16

TA的资源

纯净的硅(高级)

板凳
 
if(GpioDataRegs.GPADAT.bit.GPIO12 == 1)
        {
         DELAY_US(10L);
         if(GpioDataRegs.GPADAT.bit.GPIO12 == 1)
         {
          GpioDataRegs.GPASET.bit.GPIO0 |= 1;
          GpioDataRegs.GPASET.bit.GPIO1 |= 1;
          DELAY_US(100000L);
         }
        }
这样写的理由是??

点评

两个if延时消抖,中间是现象的改变,最后的延时是为了方便观察。开始写的程序没有交替点亮的灯,由于发现两个灯都不亮才让一个交替点亮,改了之后GPIO1的LED可以交替点亮,但是GPIO0的LED还是不亮,设置断点也不亮,  详情 回复 发表于 2013-8-14 21:53
 
 
 

回复

213

帖子

1

TA的资源

一粒金砂(高级)

4
 
两个if延时消抖,中间是现象的改变,最后的延时是为了方便观察。开始写的程序没有交替点亮的灯,由于发现两个灯都不亮才让一个交替点亮,改了之后GPIO1的LED可以交替点亮,但是GPIO0的LED还是不亮,设置断点也不亮,第一次按完按键后GPIO12管脚电压恢复1.17V左右,但程序还是能够进入if语句。将GPIO12与GND连接一下之后,程序就不会进入if语句了,但是GPIO0管脚的LED还是不亮,测得都是3.3V左右,好像这一句GpioDataRegs.GPASET.bit.GPIO0 &= 0;就没有执行
 
 
 

回复

213

帖子

1

TA的资源

一粒金砂(高级)

5
 

回复 板凳newofcortexm3 的帖子

两个if延时消抖,中间是现象的改变,最后的延时是为了方便观察。开始写的程序没有交替点亮的灯,由于发现两个灯都不亮才让一个交替点亮,改了之后GPIO1的LED可以交替点亮,但是GPIO0的LED还是不亮,设置断点也不亮,第一次按完按键后GPIO12管脚电压恢复1.17V左右,但程序还是能够进入if语句。将GPIO12与GND连接一下之后,程序就不会进入if语句了,但是GPIO0管脚的LED还是不亮,测得都是3.3V左右,好像这一句GpioDataRegs.GPASET.bit.GPIO0 &= 0;就没有执行

版主帮我看看吧
 
 
 

回复

1万

帖子

25

TA的资源

裸片初长成(高级)

6
 
GpioDataRegs.GPASET.bit.GPIO0 |= 1;中的“|”去掉

同样
GpioDataRegs.GPASET.bit.GPIO2 &= 0; 中的“&“去掉。,
再者
GpioDataRegs.GPASET.bit.GPIO2 &= 0;这句是没用的。

你可以看一下《TMS320F2802x/TMS320F2802xx Piccolo System
Control and Interrupts Reference Guide》这篇文档

点评

#include #include void main(void) { InitSysCtrl(); //系统控制初始化 //InitGpio(); DINT; //禁止全局中断 InitPieCtrl(); IER = 0x0000; //禁止CPU中断 IFR = 0x0000; //清  详情 回复 发表于 2013-8-15 22:21
但是LED可以熄灭,但是无法再次点亮,这个是什么原因??  详情 回复 发表于 2013-8-14 23:58
 
 
 

回复

1万

帖子

25

TA的资源

裸片初长成(高级)

7
 
建议楼主:
1、研究TI的例程。controlSuite里什么例程都有。
2、看看它各模块的 文档,

点评

好的,谢谢版主,我在试试  详情 回复 发表于 2013-8-14 23:57
 
 
 

回复

213

帖子

1

TA的资源

一粒金砂(高级)

8
 

回复 7楼dontium 的帖子

好的,谢谢版主,我在试试
 
 
 

回复

213

帖子

1

TA的资源

一粒金砂(高级)

9
 

回复 6楼dontium 的帖子

但是LED可以熄灭,但是无法再次点亮,这个是什么原因??
 
 
 

回复

1万

帖子

25

TA的资源

裸片初长成(高级)

10
 
是因为你用了没有作用的那一句,如六楼指出的。

GpioDataRegs.GPxSET.bit.GPIOx = 1才行

[ 本帖最后由 dontium 于 2013-8-15 00:15 编辑 ]
 
 
 

回复

348

帖子

16

TA的资源

纯净的硅(高级)

11
 
如dontium所说,对寄存器GPxSET,GPxCLEAR,GPxTOFFLE都是只写寄存器,写0都是无效的。
把这些语句
GpioDataRegs.GPASET.bit.GPIO2 &= 0;
GpioDataRegs.GPASET.bit.GPIO0 &= 0;
GpioDataRegs.GPASET.bit.GPIO3 &= 0;
替换成:
GpioDataRegs.GPACLEAR.bit.GPIO2 = 1;
GpioDataRegs.GPACLEAR.bit.GPIO0 = 1;
GpioDataRegs.GPACLEAR.bit.GPIO3 =1;
试试。

点评

#include #include void main(void) { InitSysCtrl(); //系统控制初始化 //InitGpio(); DINT; //禁止全局中断 InitPieCtrl(); IER = 0x0000; //禁止CPU中断 IFR = 0x0000; //清  详情 回复 发表于 2013-8-15 22:21
 
 
 

回复

213

帖子

1

TA的资源

一粒金砂(高级)

12
 

回复 6楼dontium 的帖子

#include
#include
void main(void)
{
   InitSysCtrl();   //系统控制初始化
   //InitGpio();
   DINT;      //禁止全局中断
   InitPieCtrl();
   IER = 0x0000;  //禁止CPU中断
   IFR = 0x0000;  //清楚CPU所有中断标志
   InitPieVectTable();//位向量表中的所有中断向量配置对应的入口地址

   EALLOW;    //允许访问受保护的空间
   GpioCtrlRegs.GPADIR.bit.GPIO0=1; //配置I/O口为输出
   GpioCtrlRegs.GPADIR.bit.GPIO1=1;
   GpioCtrlRegs.GPADIR.bit.GPIO2=1;
   GpioCtrlRegs.GPADIR.bit.GPIO3=1;
   GpioCtrlRegs.GPADIR.bit.GPIO12=0;
   EDIS;      //禁止访问受保护的空间

   GpioDataRegs.GPASET.bit.GPIO12 == 0;
   for(;;)
        {
           if(GpioDataRegs.GPADAT.bit.GPIO12 == 0)
           {
                   GpioDataRegs.GPASET.bit.GPIO2 = 0;
                   GpioDataRegs.GPASET.bit.GPIO0 = 0;
                   GpioDataRegs.GPASET.bit.GPIO3 = 0;
                   GpioDataRegs.GPATOGGLE.bit.GPIO1=1;
                   DELAY_US(100000L);
           }
           if(GpioDataRegs.GPADAT.bit.GPIO12 == 1)
               {
                DELAY_US(10L);
                if(GpioDataRegs.GPADAT.bit.GPIO12 == 1)
                {
                 GpioDataRegs.GPASET.bit.GPIO0 = 1;
                 GpioDataRegs.GPASET.bit.GPIO1 = 1;
                 DELAY_US(100000L);
                }
               }
        }
}

改成这样依然不亮
 
 
 

回复

213

帖子

1

TA的资源

一粒金砂(高级)

13
 

回复 11楼newofcortexm3 的帖子

#include
#include
void main(void)
{
   InitSysCtrl();   //系统控制初始化
   //InitGpio();
   DINT;      //禁止全局中断
   InitPieCtrl();
   IER = 0x0000;  //禁止CPU中断
   IFR = 0x0000;  //清楚CPU所有中断标志
   InitPieVectTable();//位向量表中的所有中断向量配置对应的入口地址

   EALLOW;    //允许访问受保护的空间
   GpioCtrlRegs.GPADIR.bit.GPIO0=1; //配置I/O口为输出
   GpioCtrlRegs.GPADIR.bit.GPIO1=1;
   GpioCtrlRegs.GPADIR.bit.GPIO2=1;
   GpioCtrlRegs.GPADIR.bit.GPIO3=1;
   GpioCtrlRegs.GPADIR.bit.GPIO12=0;
   EDIS;      //禁止访问受保护的空间

   GpioDataRegs.GPASET.bit.GPIO12 == 0;
   for(;;)
        {
           if(GpioDataRegs.GPADAT.bit.GPIO12 == 0)
           {
                   GpioDataRegs.GPASET.bit.GPIO2 = 0;
                   GpioDataRegs.GPASET.bit.GPIO0 = 0;
                   GpioDataRegs.GPASET.bit.GPIO3 = 0;
                   GpioDataRegs.GPATOGGLE.bit.GPIO1=1;
                   DELAY_US(100000L);
           }
           if(GpioDataRegs.GPADAT.bit.GPIO12 == 1)
               {
                DELAY_US(10L);
                if(GpioDataRegs.GPADAT.bit.GPIO12 == 1)
                {
                 GpioDataRegs.GPASET.bit.GPIO0 = 1;
                 GpioDataRegs.GPASET.bit.GPIO1 = 1;
                 DELAY_US(100000L);
                }
               }
        }
}

改成这样依然不亮
 
 
 

回复

1万

帖子

25

TA的资源

裸片初长成(高级)

14
 


自己再看看为什么不亮好吗?

以前给你的回复你是否认真看一下,别只问。好吗?

点评

我会了,谢谢前辈哈,之前看论坛点亮LED的帖子,以为只修改GPxSET就行了,麻烦前辈了  详情 回复 发表于 2013-8-15 22:52
 
 
 

回复

213

帖子

1

TA的资源

一粒金砂(高级)

15
 
我知道原因了 GPxSET.bit=1,将管脚设置为输出并将管脚拉高,写GPxSET.bit=0对管脚没有影响;GPxCLEAR.bit=1,将管脚设置为输出并将管脚拉低,写GPxCLEAR.bit=0对管脚没有影响。所以个人认为在论坛上点亮LED的那个帖子里,最好写成GPxCLEAR.bit=1。


谢谢各位前辈帮我 ,麻烦了哈
 
 
 

回复

213

帖子

1

TA的资源

一粒金砂(高级)

16
 

回复 14楼dontium 的帖子

我会了,谢谢前辈哈,之前看论坛点亮LED的帖子,以为只修改GPxSET就行了,麻烦前辈了
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表