led和开关程序故障蒂瓦C板

时间:2016-07-23 15:16:13

标签: arm embedded microcontroller

我正在尝试在TIVA C主板上运行此代码。 sw2连接到PF0sw1连接到PF4,RGB LED连接到PF1PF2PF3

当我按sw2时,它将转为蓝色,如果按下sw1,它将转为绿色,否则它应为红色。

代码无法正常运行。我希望你能指出我做错了什么。

/*************************
PORT F Addresses
*************************/

#define RCGCGPIO (*((volatile unsigned long*)0x400FE608)) //CLOCK
#define PORTFDATA (*((volatile unsigned long*)0x400253FC)) //DATA
#define PORTFDIR (*((volatile unsigned long*)0x40025400)) //DIRECTION
#define PORTFDEN (*((volatile unsigned long*)0x4002551C)) //ENABLE
#define PORTFLOCK (*((volatile unsigned long*)0x40025520)) //LOCK (lock or       unlocks PF0)
#define PORTFCR (*((volatile unsigned long*)0x40025524)) //COMMIT (uncommit PF0)
#define PORTFPUR (*((volatile unsigned long*)0x40025510)) // PULL UP resistor
#define PORTFPDR (*((volatile unsigned long*)0x40025514)) // PULL Down resistor
/*************************/
int sw1;
int sw2;
int delay;
int main (void)
{
   RCGCGPIO = 0x20; //Enable clock for PORT F
   delay = RCGCGPIO;
   PORTFLOCK = 0x4C4F434B; // unlock commit reg
   PORTFCR   = 0x01; // unlock PF0
   PORTFDEN  = 0x1F; //Enable pins 0 to 4
   PORTFDIR  = 0x0E; // pins 0 and 4 input - pins 1,2,3 output
   PORTFPUR = 0x11;

   while (1)
   {
      sw2 = PORTFDATA & 0x00000001; 
      sw1 = PORTFDATA & 0x00000010;

      if (sw1 == 1)
         PORTFDATA |= 0x00000002;

      else if (sw2 == 1)
         PORTFDATA |= 0x00000004;

      else
         PORTFDATA |=  0x00000008;
   }
}

3 个答案:

答案 0 :(得分:1)

以下是您的代码存在的两个明显问题。可能还有更多...

您设置sw1 = PORTFDATA & 0x00000010,因此唯一可能的值sw1可以是0x10或0x00。然后你测试if (sw1 == 1)。但是这个测试永远不会成立,因为sw1永远不能等于1。

您使用|=运算符设置PORTFDATA的位。但是你无处清楚PORTFDATA的位。因此,您的LED可能会打开,但它们永远不会关闭。

答案 1 :(得分:0)

您是否尝试过使用CCS的示例代码以确保硬件正常运行?

示例代码使用TI库而不是普通寄存器Read&写,但你可以通过go to defination挖掘出真实寄存器。无论如何,我有点好奇为什么你首先使用普通寄存器而不是TI库? ARM MCU不再是8051了。

答案 2 :(得分:0)

要记住以下几点: 启动板按钮是负逻辑,所以如果你的switch1 == 0x01,它就不会被按下。

尝试类似:

sed -s -n '30,40p' *

我也在学习ARM& C只是自学,所以我感到痛苦。使用按位运算符花了很多个小时来切换单个LED,只是为了了解正在发生的事情。坚持下去!!!

/ E