2424 * SOFTWARE.
2525 *****************************************************************************/
2626
27- #ifdef STM32F4
28-
2927/**
3028 * @file gpio.c
3129 * @brief GPIO initialization routine
3836 * GPIO devices
3937 */
4038
41- gpio_dev gpioa = {
39+ /** GPIO port A device. */
40+ const gpio_dev GPIOA = {
4241 .regs = GPIOA_BASE ,
4342 .clk_id = RCC_GPIOA ,
4443 .exti_port = AFIO_EXTI_PA ,
4544};
46- /** GPIO port A device. */
47- gpio_dev * const GPIOA = & gpioa ;
4845
49- gpio_dev gpiob = {
46+ /** GPIO port B device. */
47+ const gpio_dev GPIOB = {
5048 .regs = GPIOB_BASE ,
5149 .clk_id = RCC_GPIOB ,
5250 .exti_port = AFIO_EXTI_PB ,
5351};
54- /** GPIO port B device. */
55- gpio_dev * const GPIOB = & gpiob ;
5652
57- gpio_dev gpioc = {
53+ /** GPIO port C device. */
54+ const gpio_dev GPIOC = {
5855 .regs = GPIOC_BASE ,
5956 .clk_id = RCC_GPIOC ,
6057 .exti_port = AFIO_EXTI_PC ,
6158};
62- /** GPIO port C device. */
63- gpio_dev * const GPIOC = & gpioc ;
6459
65- gpio_dev gpiod = {
60+ /** GPIO port D device. */
61+ const gpio_dev GPIOD = {
6662 .regs = GPIOD_BASE ,
6763 .clk_id = RCC_GPIOD ,
6864 .exti_port = AFIO_EXTI_PD ,
6965};
70- /** GPIO port D device. */
71- gpio_dev * const GPIOD = & gpiod ;
7266
7367#ifdef STM32_HIGH_DENSITY
74- gpio_dev gpioe = {
68+ /** GPIO port E device. */
69+ const gpio_dev GPIOE = {
7570 .regs = GPIOE_BASE ,
7671 .clk_id = RCC_GPIOE ,
7772 .exti_port = AFIO_EXTI_PE ,
7873};
79- /** GPIO port E device. */
80- gpio_dev * const GPIOE = & gpioe ;
8174
8275 #if 0 // not available on LQFP 100 package
83- gpio_dev gpiof = {
76+ /** GPIO port F device. */
77+ const gpio_dev GPIOF = {
8478 .regs = GPIOF_BASE ,
8579 .clk_id = RCC_GPIOF ,
8680 .exti_port = AFIO_EXTI_PF ,
8781};
88- /** GPIO port F device. */
89- gpio_dev * const GPIOF = & gpiof ;
9082
91- gpio_dev gpiog = {
83+ /** GPIO port G device. */
84+ const gpio_dev GPIOG = {
9285 .regs = GPIOG_BASE ,
9386 .clk_id = RCC_GPIOG ,
9487 .exti_port = AFIO_EXTI_PG ,
9588};
96- /** GPIO port G device. */
97- gpio_dev * const GPIOG = & gpiog ;
98- #endif // not available on LQFP 100 package
89+ #endif
9990#endif
10091
10192/*
@@ -109,7 +100,7 @@ gpio_dev* const GPIOG = &gpiog;
109100 *
110101 * @param dev GPIO device to initialize.
111102 */
112- void gpio_init (gpio_dev * dev ) {
103+ void gpio_init (const gpio_dev * dev ) {
113104 rcc_clk_enable (dev -> clk_id );
114105 rcc_reset_dev (dev -> clk_id );
115106}
@@ -118,13 +109,13 @@ void gpio_init(gpio_dev *dev) {
118109 * Initialize and reset all available GPIO devices.
119110 */
120111void gpio_init_all (void ) {
121- gpio_init (GPIOA );
122- gpio_init (GPIOB );
123- gpio_init (GPIOC );
124- gpio_init (GPIOD );
112+ gpio_init (& GPIOA );
113+ gpio_init (& GPIOB );
114+ gpio_init (& GPIOC );
115+ gpio_init (& GPIOD );
125116
126117#ifdef STM32_HIGH_DENSITY
127- gpio_init (GPIOE );
118+ gpio_init (& GPIOE );
128119 #if 0 // not available on LQFP 100 package
129120 gpio_init (GPIOF );
130121 gpio_init (GPIOG );
@@ -154,7 +145,7 @@ void gpio_init_all(void) {
154145 */
155146void gpio_set_mode (uint8_t io_pin , gpio_pin_mode mode ) {
156147 gpio_reg_map * regs = (PIN_MAP [io_pin ].gpio_device )-> regs ;
157- uint8_t pin = PIN_MAP [ io_pin ]. gpio_bit ;
148+ uint8_t pin = io_pin & 0x0f ;
158149
159150 //regs->AFR[pin/8] = (regs->AFR[pin/8] & ~(15 << (4*(pin&7)))) | (((mode >> 8) & 15) << (4*(pin&7)));
160151 //gpio_set_af_mode(dev, pin, mode>>8);
@@ -175,7 +166,7 @@ void gpio_set_mode(uint8_t io_pin, gpio_pin_mode mode) {
175166 */
176167void gpio_set_af_mode (uint8_t io_pin , int mode ) {
177168 gpio_reg_map * regs = (PIN_MAP [io_pin ].gpio_device )-> regs ;
178- uint8_t pin = PIN_MAP [ io_pin ]. gpio_bit ;
169+ uint8_t pin = io_pin & 0x0F ;
179170
180171 regs -> AFR [pin >>3 ] = (regs -> AFR [pin >>3 ] & ~(15 << ((pin & 7 )<<2 ))) | (((mode >> 0 ) & 15 ) << ((pin & 7 )<<2 ));
181172}
@@ -226,5 +217,3 @@ void afio_remap(afio_remap_peripheral remapping) {
226217 }
227218}
228219#endif
229-
230- #endif
0 commit comments