按下两个开关时,指示灯亮起

时间:2016-01-30 23:28:24

标签: c arm

我正试图在我的tiva启动板(tm4c123)中打开LED。

当前代码:

while (1)       
    {
        switch(GPIO_PORTF_DATA_R & 0x11) // 0x11 = 10001
        {
            case 0x00: //both switches are pressed
            {
                GPIO_PORTF_DATA_R = 0x02; // turn on the red led
                break;
            }
            case 0x01: //SW1 is pressed, SW2 is not pressed
            {
                GPIO_PORTF_DATA_R = 0x04; // turn on the blue led
                break;
            }
            case 0x10: //SW2 is pressed, SW1 is not pressed
            {
                GPIO_PORTF_DATA_R = 0x08; // turn on the green led
                break;
            }
            default:
                GPIO_PORTF_DATA_R = 0;
                break;
        }
    }

如果没有这两行代码,就会发生这种情况:

  • 电路板以绿色LED开启。
  • 当我同时按下两个或仅按SW2时,没有任何反应。
  • 当我按下SW1时,红色指示灯亮起。

有人可以向我解释原因吗?

GPIO_PORTF_LOCK_R = 0x4C4F434B;
GPIO_PORTF_CR_R = 0x1F;

1 个答案:

答案 0 :(得分:2)

您可以在tiva启动板上阅读开关,如下所示:

SW1 = GPIO_PORTF_DATA_R&0x10;     // read PF4 into SW1
SW2 = GPIO_PORTF_DATA_R&0x01;     // read PF0 into SW2

然后您可以检查这些输入的状态并做出决定。

if (!SW1 && !SW2) { // both pressed
    GPIO_PORTF_DATA_R = 0x04;
} else if (!SW1) { // SW1 pressed
    GPIO_PORTF_DATA_R = 0x02;
} else if (!SW2) { // SW2 pressed
    GPIO_PORTF_DATA_R = 0x08;
} else { // neither
    GPIO_PORTF_DATA_R = 0x00;
}

如果您查看TM4C123GH6PM datasheet,请参阅第205页,

  

为GPIO引脚提供保护,可用作四个引脚   JTAG / SWD引脚

如果您检查信号表(第1329页),您将看到其中一个交换机所连接的PF0就是其中之一。所以你需要解锁它。

在第684页,它说

  

将0x4C4F.434B写入GPIOLOCK寄存器可解锁GPIOCR   注册