hal_gpio.c

来自「最新版IAR FOR ARM(EWARM)5.11中的代码例子」· C语言 代码 · 共 87 行

C
87
字号
//-----------------------------------------------------------------------------
// HAL_GPIO
//-----------------------------------------------------------------------------

#include "hal_gpio.h"

//-----------------------------------------------------------------------------
void GPIO_Init (u8 dir)
{
  GPIO->DIR = dir; //1=input, 0=output
  CONFR->GLOBAL_CONTROL |= 0x1;
  LEDs(~ALL_LEDs);
}

//-----------------------------------------------------------------------------
void LEDs (u8 value)
{
  if (ValBit(value,0))
    ClrBit(GPIO->DOUT0,0);
  else
    SetBit(GPIO->DOUT0,0);

  if (ValBit(value,1))
    ClrBit(GPIO->DOUT1,0);
  else
    SetBit(GPIO->DOUT1,0);

  if (ValBit(value,2))
    ClrBit(GPIO->DOUT2,0);
  else
    SetBit(GPIO->DOUT2,0);

  if (ValBit(value,3))
    ClrBit(GPIO->DOUT3,0);
  else
    SetBit(GPIO->DOUT3,0);

  if (ValBit(value,4))
    ClrBit(GPIO->DOUT4,0);
  else
    SetBit(GPIO->DOUT4,0);

  if (ValBit(value,5))
    ClrBit(GPIO->DOUT5,0);
  else
    SetBit(GPIO->DOUT5,0);
}

//-----------------------------------------------------------------------------
void LEDs_Toggle (u8 mask)
{
  u8 nto_change = GPIO->DIN & (~mask); //not to change
  u8 to_change = mask & (~(GPIO->DIN & (mask))); //to toggle
  LEDs (~(nto_change |to_change));
}

//-----------------------------------------------------------------------------
void SnakeOnLEDs (s8 Delta, u8 ModeChange)
{
  static u8 snake = 1;
  static u8 mode = 1;

  if (Delta > 0)
  {
    snake <<= 1;
    if ((snake == 0) || (snake > 0x20))
      snake = 1;
  }

  if (Delta < 0)
  {
    snake >>= 1;
    if (snake == 0)
      snake = 0x20;
  }

  if (ModeChange != 0)
    mode ^= 1;

  if (mode == 1)
    LEDs (snake);
  else
    LEDs (snake ^ 0xFF);
}

//-----------------------------------------------------------------------------

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?