#include "gd32e23x.h" #include "board_init.h" #include "chirp_board_config.h" #include "i2c.h" /*! \brief Init LED & IIC Pin \param[in] none \param[out] none \retval none \note LED Pin: GPIOB-01 Output - None PUPD - OD - 50MHz - Default Low \note SDA Pin: GPIOF-00 Output - PU - OD - 50MHz - Default None \note SCL Pin: GPIOF-01 Output - PU - OD - 50MHz - Default None */ void board_init_I2C(void) { /* Init LED, turned off */ rcu_periph_clock_enable(CHIRP_PIN_LED_CLK); gpio_mode_set(CHIRP_PIN_LED_PORT, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE, CHIRP_PIN_LED_PIN); gpio_output_options_set(CHIRP_PIN_LED_PORT, GPIO_OTYPE_OD, GPIO_OSPEED_50MHZ, CHIRP_PIN_LED_PIN); gpio_bit_reset(CHIRP_PIN_LED_PORT, CHIRP_PIN_LED_PIN); /* Enable clock, RCU_GPIOF RCU_I2C0 RCU_DMA */ rcu_periph_clock_enable(CHIRP_PIN_IIC_PIN_CLK); rcu_periph_clock_enable(CHIRP_PIN_IIC_CLK); rcu_periph_clock_enable(CHIRP_PIN_IIC_DMA_CLK); /* config IIC0(AF_1) GPIOF:PF0/PF1 */ gpio_af_set(CHIRP_PIN_IIC_PORT, GPIO_AF_1, CHIRP_PIN_IIC_SDA_PIN | CHIRP_PIN_IIC_SCL_PIN); gpio_mode_set(CHIRP_PIN_IIC_PORT, GPIO_MODE_AF, GPIO_PUPD_PULLUP, CHIRP_PIN_IIC_SDA_PIN | CHIRP_PIN_IIC_SCL_PIN); gpio_output_options_set(CHIRP_PIN_IIC_PORT, GPIO_OTYPE_OD, GPIO_OSPEED_50MHZ, CHIRP_PIN_IIC_SDA_PIN | CHIRP_PIN_IIC_SCL_PIN); } /*! \brief Init & Enable USART0 \param[in] none \param[out] none \retval none \note TXD Pin: GPIOA-09 Output - PU - PP - 10MHz - Default None \note RXD Pin: GPIOA-10 Output - PU - PP - 10MHz - Default None \note USART: USART0 - 115200 - 8 - N - 1 */ void configure_console(void) { /* enable GPIOA clock */ rcu_periph_clock_enable(RCU_GPIOA); /* enable USART clock */ rcu_periph_clock_enable(RCU_USART0); /* connect port to USARTx_Tx */ gpio_af_set(GPIOA, GPIO_AF_1, GPIO_PIN_9 | GPIO_PIN_10); /* configure USART Tx as alternate function push-pull */ gpio_mode_set(GPIOA, GPIO_MODE_AF, GPIO_PUPD_PULLUP, GPIO_PIN_9 | GPIO_PIN_10); gpio_output_options_set(GPIOA, GPIO_OTYPE_PP, GPIO_OSPEED_10MHZ, GPIO_PIN_9 | GPIO_PIN_10); /* USART configure */ usart_deinit(USART0); usart_baudrate_set(USART0, USART0_BAUDRATE); usart_receive_config(USART0, USART_RECEIVE_ENABLE); usart_transmit_config(USART0, USART_TRANSMIT_ENABLE); /* enable USART */ usart_enable(USART0); } /*! \brief Reset IIC0 \param[in] none \param[out] none \retval none */ void i2c_bus_reset(void) { i2c_deinit(I2C0); /* configure SDA/SCL for GPIO */ GPIO_BC(CHIRP_PIN_IIC_PORT) |= CHIRP_PIN_IIC_SDA_PIN; GPIO_BC(CHIRP_PIN_IIC_PORT) |= CHIRP_PIN_IIC_SCL_PIN; gpio_output_options_set(CHIRP_PIN_IIC_PORT, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, CHIRP_PIN_IIC_SDA_PIN); gpio_output_options_set(CHIRP_PIN_IIC_PORT, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, CHIRP_PIN_IIC_SCL_PIN); __NOP();__NOP();__NOP();__NOP();__NOP(); GPIO_BOP(CHIRP_PIN_IIC_PORT) |= CHIRP_PIN_IIC_SCL_PIN; __NOP();__NOP();__NOP();__NOP();__NOP(); GPIO_BOP(CHIRP_PIN_IIC_PORT) |= CHIRP_PIN_IIC_SDA_PIN; gpio_output_options_set(CHIRP_PIN_IIC_PORT, GPIO_OTYPE_OD, GPIO_OSPEED_50MHZ, CHIRP_PIN_IIC_SCL_PIN); gpio_output_options_set(CHIRP_PIN_IIC_PORT, GPIO_OTYPE_OD, GPIO_OSPEED_50MHZ, CHIRP_PIN_IIC_SDA_PIN); /* configure the I2CX interface */ i2c_master_init(); }