@@ -28,7 +28,6 @@ int pinctrl_configure_pins(const pinctrl_soc_pin_t *pins, uint8_t pin_cnt, uintp
28
28
uint8_t bit0 = (pins -> config >> CH32V003_PINCTRL_RM_BASE_SHIFT ) & 0x1F ;
29
29
uint8_t remap = (pins -> config >> CH32V003_PINCTRL_RM_SHIFT ) & 0x3 ;
30
30
GPIO_TypeDef * regs = wch_afio_pinctrl_regs [port ];
31
- uint32_t pcfr1 = AFIO -> PCFR1 ;
32
31
uint8_t cfg = 0 ;
33
32
34
33
if (pins -> output_high || pins -> output_low ) {
@@ -62,16 +61,23 @@ int pinctrl_configure_pins(const pinctrl_soc_pin_t *pins, uint8_t pin_cnt, uintp
62
61
}
63
62
}
64
63
65
- if (bit0 == CH32V003_PINMUX_I2C1_RM ) {
66
- pcfr1 |= ((remap & 1 ) << CH32V003_PINMUX_I2C1_RM ) |
67
- (((remap >> 1 ) & 1 ) << CH32V003_PINMUX_I2C1_RM1 );
68
- } else if (bit0 == CH32V003_PINMUX_USART1_RM ) {
69
- pcfr1 |= ((remap & 1 ) << CH32V003_PINMUX_USART1_RM ) |
70
- (((remap >> 1 ) & 1 ) << CH32V003_PINMUX_USART1_RM1 );
71
- } else {
72
- pcfr1 |= remap << bit0 ;
64
+ if (remap != 0 ) {
65
+ RCC -> APB2PCENR |= RCC_AFIOEN ;
66
+
67
+ if (bit0 == CH32V003_PINMUX_I2C1_RM ) {
68
+ AFIO -> PCFR1 |= ((uint32_t )((remap >> 0 ) & 1 )
69
+ << CH32V003_PINMUX_I2C1_RM ) |
70
+ ((uint32_t )((remap >> 1 ) & 1 )
71
+ << CH32V003_PINMUX_I2C1_RM1 );
72
+ } else if (bit0 == CH32V003_PINMUX_USART1_RM ) {
73
+ AFIO -> PCFR1 |= ((uint32_t )((remap >> 0 ) & 1 )
74
+ << CH32V003_PINMUX_USART1_RM ) |
75
+ ((uint32_t )((remap >> 1 ) & 1 )
76
+ << CH32V003_PINMUX_USART1_RM1 );
77
+ } else {
78
+ AFIO -> PCFR1 |= (uint32_t )remap << bit0 ;
79
+ }
73
80
}
74
- AFIO -> PCFR1 = pcfr1 ;
75
81
}
76
82
77
83
return 0 ;
0 commit comments