2024-08-08 19:59:43 +08:00

85 lines
3.3 KiB
C

#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();
}