10 #define RCC_AHB1ENR (*(volatile unsigned long *)0x40023830) 11 #define RCC_AHB1LPENR (*(volatile unsigned long *)0x40023850) 12 #define RCC_AHB1_BIT_GPIOD (1<<3) 17 typedef struct st_reg_gpio {
20 unsigned long OSPEEDR;
30 #define GPIOA_BASE (0x40020000 + 0x000) 32 #define GPIOA ((st_reg_gpio *)GPIOA_BASE) 34 #define GPIO_MODE_BIT_IN 0x00 // Input Mode 35 #define GPIO_MODE_BIT_OUT 0x01 // Output Mode 36 #define GPIO_MODE_BIT_AF 0x02 // Alternate functions Mode 37 #define GPIO_MODE_BIT_AN 0x03 // Analog Mode 38 #define GPIO_MODE_BIT_ALL 0x03 40 #define GPIO_OTYPE_BIT_PP 0x00 // push-pull 41 #define GPIO_OTYPE_BIT_OD 0x01 // open-drain 43 #define GPIO_OSPEED_BIT_ALL 0x03 44 #define GPIO_OSPEED_BIT_50MHz 0x02 45 #define GPIO_OSPEED_BIT_100MHz 0x03 47 #define GPIO_PUPDR_BIT_NOPULL 0x00 // No pull-up, pull-down 48 #define GPIO_PUPDR_BIT_PUP 0x01 // pull-up 49 #define GPIO_PUPDR_BIT_PDOWN 0x02 // pull-down 50 #define GPIO_PUPDR_BIT_ALL 0x03 52 #define GPIO_AFR_BIT_I2C123 0x04 53 #define GPIO_AFR_BIT_USART123 0x07 54 #define GPIO_AFR_BIT_ALL 0x0F 56 static void init_pin(st_reg_gpio *gpio,
int pin)
58 volatile st_reg_gpio *gpiox = gpio;
60 gpiox->MODER &= ~(((
unsigned long)GPIO_MODE_BIT_ALL) << (2*pin));
61 gpiox->MODER |= (((
unsigned long)GPIO_MODE_BIT_OUT) << (2*pin));
62 gpiox->OSPEEDR &= ~(((
unsigned long)GPIO_OSPEED_BIT_ALL) << (2*pin));
63 gpiox->OSPEEDR |= (((
unsigned long)GPIO_OSPEED_BIT_50MHz) << (2*pin));
64 gpiox->OTYPE &= ~(((
unsigned long)1) << pin);
65 gpiox->OTYPE |= (((
unsigned long)GPIO_OTYPE_BIT_PP) << pin);
66 gpiox->PUPDR &= ~(((
unsigned long)GPIO_PUPDR_BIT_ALL) << (2*pin));
67 gpiox->PUPDR |= (((
unsigned long)GPIO_PUPDR_BIT_NOPULL) << (2*pin));
71 gpiox->AFRL &= ~(((
unsigned long)GPIO_AFR_BIT_ALL) << (4*pin));
72 gpiox->AFRL |= (((
unsigned long)GPIO_AFR_BIT_I2C123) << (4*pin));
74 gpiox->AFRH &= ~(((
unsigned long)GPIO_AFR_BIT_ALL) << (4*(pin-8)));
75 gpiox->AFRH |= (((
unsigned long)GPIO_AFR_BIT_I2C123) << (4*(pin-8)));
79 #define POS_LD2 5 // Green 80 #define BIT_LD2 (1 << POS_LD2) 82 static unsigned long flg_led_on;
84 static int led_register(
struct st_device *dev,
char *param)
88 RCC_AHB1ENR |= RCC_AHB1_BIT_GPIOD;
90 init_pin(GPIOA, POS_LD2);
95 static int led_getc(
struct st_device *dev,
unsigned char *rd)
97 *rd = ((GPIOA->ODR & BIT_LD2) >> POS_LD2);
102 static int led_putc(
struct st_device *dev,
unsigned char ch)
104 flg_led_on = ((ch << POS_LD2) & BIT_LD2);
105 GPIOA->ODR = flg_led_on;
110 static int led_suspend(
struct st_device *dev)
112 GPIOA->ODR &= ~(BIT_LD2);
117 static int led_resume(
struct st_device *dev)
119 GPIOA->ODR = flg_led_on;
125 .
name = DEF_DEV_NAME_LED,
126 .explan =
"STM32L152RE-Nucleo LED",
127 .register_dev = led_register,
130 .suspend = led_suspend,
131 .resume = led_resume,
char name[MAX_DEVNAMELRN]
デバイス名文字列