85 lines
3.3 KiB
C
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();
|
|
} |