⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 bsp.c

📁 An Demo of uCGUI from SEGGER
💻 C
字号:
/*********************************************************************
*               SEGGER MICROCONTROLLER GmbH & Co. KG                 *
*       Solutions for real time microcontroller applications         *
**********************************************************************
*                                                                    *
*       (C) 2008   SEGGER Microcontroller GmbH & CO. KG              *
*                                                                    *
*       www.segger.com      Support: support@segger.com              *
*                                                                    *
**********************************************************************
*                                                                    *
*       embOS * Real time operating system for microcontrollers      *
*                                                                    *
*                                                                    *
*       Please note:                                                 *
*                                                                    *
*       Knowledge of this file may under no circumstances            *
*       be used to write a similar product or a real-time            *
*       operating system for in-house use.                           *
*                                                                    *
*       Thank you for your fairness !                                *
*                                                                    *
**********************************************************************
*                                                                    *
*       embOS version: 3.60c                                         *
*                                                                    *
**********************************************************************

----------------------------------------------------------------------
File    : BSP.c
Purpose : BSP for STM32F103 (ST MB672)
--------  END-OF-HEADER  ---------------------------------------------
*/

#define BSP_C
#include "BSP.h"
#include "RTOS.h"
#include "GUI.h"

static OS_STACKPTR int _Stack[4096];         // Task stacks
static OS_TASK         _TCB;                 // Task-control-blocks

/*********************************************************************
*
*       Defines
*
**********************************************************************
*/
#define _GPIO_PORT3                    (12)
#define _GPIO_PORT7                    (28)
#define _GPIO_PORT13                   (20)
#define _GPIO_PORT14                   (24)
#define _GPIO_PORT15                   (28)

#define _GPIO_PIN3                     (3)
#define _GPIO_PIN7                     (7)
#define _GPIO_PIN13                    (13)
#define _GPIO_PIN14                    (14)
#define _GPIO_PIN15                    (15)

#define _GPIO_PORT_JOYSTICK_SELECT     _GPIO_PORT7
#define _GPIO_PORT_JOYSTICK_DOWN       _GPIO_PORT3
#define _GPIO_PORT_JOYSTICK_LEFT       _GPIO_PORT14
#define _GPIO_PORT_JOYSTICK_RIGHT      _GPIO_PORT13
#define _GPIO_PORT_JOYSTICK_UP         _GPIO_PORT15

#define JOYSTICK_STATE_NONE            (0)
#define JOYSTICK_STATE_SELECT          (1)
#define JOYSTICK_STATE_DOWN            (2)
#define JOYSTICK_STATE_LEFT            (3)
#define JOYSTICK_STATE_RIGHT           (4)
#define JOYSTICK_STATE_UP              (5)

#if 0

#define _GPIO_IDR_BIT_JOYSTICK_DOWN    (3)
#define _GPIO_IDR_BIT_JOYSTICK_SELECT  (7)
#define _GPIO_IDR_BIT_JOYSTICK_LEFT    (14)
#define _GPIO_IDR_BIT_JOYSTICK_RIGHT   (13)
#define _GPIO_IDR_BIT_JOYSTICK_UP      (15)

#endif

#define _GPIO_IDR_BIT_JOYSTICK_SELECT  _GPIO_PIN7
#define _GPIO_IDR_BIT_JOYSTICK_DOWN    _GPIO_PIN3
#define _GPIO_IDR_BIT_JOYSTICK_LEFT    _GPIO_PIN14
#define _GPIO_IDR_BIT_JOYSTICK_RIGHT   _GPIO_PIN13
#define _GPIO_IDR_BIT_JOYSTICK_UP      _GPIO_PIN15

#define _GPIO_PORT_JOYSTICK_CONF       (0x04)

#define _GPIO_BASE_ADDR                (0x40010800)

#define _GPIODL_OFFS                   (0x0C00)
#define _GPIOGL_OFFS                   (0x1800)
#define _GPIOGH_OFFS                   (0x1804)

#define _GPIO_IDR_OFFS                 (0x08)

#define _GPIODL                        (*(volatile unsigned long*) (_GPIO_BASE_ADDR + _GPIODL_OFFS))
#define _GPIOGL                        (*(volatile unsigned long*) (_GPIO_BASE_ADDR + _GPIOGL_OFFS))
#define _GPIOGH                        (*(volatile unsigned long*) (_GPIO_BASE_ADDR + _GPIOGH_OFFS))
#define _GPIOD_IDR                     (*(volatile unsigned long*) (_GPIO_BASE_ADDR + _GPIODL_OFFS + _GPIO_IDR_OFFS))
#define _GPIOG_IDR                     (*(volatile unsigned long*) (_GPIO_BASE_ADDR + _GPIOGL_OFFS + _GPIO_IDR_OFFS))

/****** SFRs used for LED-Port **************************************/

/****** Assign LEDs to Ports ****************************************/
#define _LED0_BIT  (6)
#define _LED1_BIT  (7)
#define _LED2_BIT  (8)
#define _LED3_BIT  (9)
#define _LED_MASK_ALL ((1uL << _LED0_BIT) | (1uL << _LED1_BIT) | (1uL << _LED2_BIT) | (1uL << _LED3_BIT) )

#define _GPIO_PF0_BASE_ADDR        (0x40011C00)
#define _LED_PORT_BASE_ADDR        (_GPIO_PF0_BASE_ADDR)
#define GPIOF_CRL                  *(volatile unsigned int*)(_LED_PORT_BASE_ADDR)
#define GPIOF_CRH                  *(volatile unsigned int*)(_LED_PORT_BASE_ADDR + 0x04)
#define GPIOF_ODR                  *(volatile unsigned int*)(_LED_PORT_BASE_ADDR + 0x0C)
#define GPIOF_BSRR                 *(volatile unsigned int*)(_LED_PORT_BASE_ADDR + 0x10)
#define GPIOF_BRR                  *(volatile unsigned int*)(_LED_PORT_BASE_ADDR + 0x14)
#define _SYSCTRL_RCC_APB2          *(volatile unsigned int*)(0x40021018)
#define _SYSCTRL_LEDPORT_BIT       (7)

/*********************************************************************
*
*       Static functions
*
**********************************************************************
*/

/*********************************************************************
*
*       _HW_InitJoystick
*
*       Purpose: Configures the GPIO interface to enable the joystick
*/
static void _HW_InitJoystick(void) {
  U32 TempReg;

  TempReg  = _GPIODL;
  TempReg &= ~0xB000;
  TempReg |= (_GPIO_PORT_JOYSTICK_CONF << _GPIO_PORT_JOYSTICK_DOWN);
  _GPIODL  = TempReg;

  TempReg  = _GPIOGL;
  TempReg &= ~0xB0000000;
  TempReg |= (_GPIO_PORT_JOYSTICK_CONF << _GPIO_PORT_JOYSTICK_SELECT);
  _GPIOGL  = TempReg;

  TempReg  = _GPIOGH;
  TempReg &= ~0xBBB00000;
  TempReg |= ((_GPIO_PORT_JOYSTICK_CONF << _GPIO_PORT_JOYSTICK_LEFT)
          |   (_GPIO_PORT_JOYSTICK_CONF << _GPIO_PORT_JOYSTICK_RIGHT)
          |   (_GPIO_PORT_JOYSTICK_CONF << _GPIO_PORT_JOYSTICK_UP))
          ;
  _GPIOGH  = TempReg;
}

/*********************************************************************
*
*       _GetJoystickStatus
*/
static U8 _GetJoystickStatus(void) {
  U32 GPIOD_IDR;
  U32 GPIOG_IDR;

  GPIOD_IDR = _GPIOD_IDR;
  if ((GPIOD_IDR & (1 << _GPIO_IDR_BIT_JOYSTICK_DOWN)) == 0) {
    return JOYSTICK_STATE_DOWN;    // Joystick down
  }
  GPIOG_IDR = _GPIOG_IDR;
  if ((GPIOG_IDR & (1 << _GPIO_IDR_BIT_JOYSTICK_SELECT)) == 0) {
    return JOYSTICK_STATE_SELECT;  // Joystick select
  }
  if ((GPIOG_IDR & (1 << _GPIO_IDR_BIT_JOYSTICK_LEFT)) == 0) {
    return JOYSTICK_STATE_LEFT;    // Joystick left
  }
  if ((GPIOG_IDR & (1 << _GPIO_IDR_BIT_JOYSTICK_RIGHT)) == 0) {
    return JOYSTICK_STATE_RIGHT;   // Joystick right
  }
  if ((GPIOG_IDR & (1 << _GPIO_IDR_BIT_JOYSTICK_UP)) == 0) {
    return JOYSTICK_STATE_UP;      // Joystick up
  }
  return JOYSTICK_STATE_NONE;      // No joystick input
}

/*********************************************************************
*
*       _JoystickTask
*/
static void _JoystickTask(void) {
  U8 Status;

  while (1) {
    GUI_PID_STATE State = {0};
    Status = _GetJoystickStatus();
    switch (Status) {
    case JOYSTICK_STATE_UP:
      State.y--;
      break;
    case JOYSTICK_STATE_DOWN:
      State.y++;
      break;
    case JOYSTICK_STATE_LEFT:
      State.x--;
      break;
    case JOYSTICK_STATE_RIGHT:
      State.x++;
      break;
    case JOYSTICK_STATE_SELECT:
      State.Pressed++;
      break;
    }
    GUI_JOYSTICK_StoreState(&State);
    OS_Delay(40);
  }
}

/*********************************************************************
*
*       Global functions
*
**********************************************************************
*/

/*********************************************************************
*
*       BSP_Init()
*/
void BSP_Init(void) {
  _SYSCTRL_RCC_APB2 |= (1 << _SYSCTRL_LEDPORT_BIT);
  GPIOF_CRL = 0x33444444;
  GPIOF_CRH = 0x44444433;
  GPIOF_BRR |= _LED_MASK_ALL;   // disable leds
}

/*********************************************************************
*
*       BSP_GUI_Init()
*/
void BSP_GUI_Init(void) {
  GUI_Init();
  _HW_InitJoystick();
  OS_CREATETASK(&_TCB, "ReadJoystickState", _JoystickTask, 101, _Stack);
}

/*********************************************************************
*
*       LED switching routines
*       LEDs are switched on with low level on port lines
*/
void BSP_SetLED(int Index) {
  GPIOF_BSRR |= (1 << (_LED0_BIT + Index));             /* Switch on LED 0  */
}

void BSP_ClrLED(int Index) {
  GPIOF_BRR  |= (1 << (_LED0_BIT + Index));             /* Switch off LED 0 */
}

void BSP_ToggleLED(int Index) {
  if ((GPIOF_ODR & (1 << (_LED0_BIT + Index))) == 0) {  /* LED is switched off */
    BSP_SetLED(Index);
  } else {
    BSP_ClrLED(Index);
  }
}

/****** EOF *********************************************************/

⌨️ 快捷键说明

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