Initial commit: CCU621_M firmware project with BLE debug link support.
Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -0,0 +1,145 @@
|
||||
#include "spi_if.h"
|
||||
#include <gd32h7xx_spi.h>
|
||||
#include <gd32h7xx_gpio.h>
|
||||
|
||||
|
||||
|
||||
/*!
|
||||
\brief SPIx发送数据 (私有函数)
|
||||
\param[in] spi_periph: SPIx(x=0,1,2,3,4,5)
|
||||
\param[in] data: 要发送的数据(uint8_t,一次发送1个字节!!)
|
||||
\param[out] none
|
||||
\retval none
|
||||
*/
|
||||
void spi_transmit_byte(uint32_t spi_periph, uint8_t data)
|
||||
{
|
||||
/* 等待发送缓冲区有空间 */
|
||||
while(RESET == spi_i2s_flag_get(spi_periph, SPI_FLAG_TP));
|
||||
|
||||
/* 发送数据 */
|
||||
spi_i2s_data_transmit(spi_periph, data);
|
||||
}
|
||||
|
||||
/*!
|
||||
\brief SPIx接收数据 (私有函数)
|
||||
\param[in] spi_periph: SPIx(x=0,1,2,3,4,5)
|
||||
\param[in] none
|
||||
\param[out] none
|
||||
\retval 接收到的数据(uint8_t 一次接收1个字节)
|
||||
*/
|
||||
uint8_t spi_receive_byte(uint32_t spi_periph)
|
||||
{
|
||||
/* 等待接收缓冲区非空 */
|
||||
while(RESET == spi_i2s_flag_get(spi_periph, SPI_FLAG_RP));
|
||||
|
||||
/* 接收数据 */
|
||||
return (uint8_t)spi_i2s_data_receive(spi_periph);
|
||||
}
|
||||
|
||||
/*!
|
||||
\brief SPIx发送接收数据 (私有函数)
|
||||
\param[in] spi_periph: SPIx(x=0,1,2,3,4,5)
|
||||
\param[in] tx_data: 要发送的数据
|
||||
\param[out] none
|
||||
\retval 接收到的数据
|
||||
*/
|
||||
uint8_t spi_transmit_receive_byte(uint32_t spi_periph, uint8_t tx_data)
|
||||
{
|
||||
/* 等待发送缓冲区有空间 */
|
||||
while(RESET == spi_i2s_flag_get(spi_periph, SPI_FLAG_TP));
|
||||
|
||||
/* 发送数据 */
|
||||
spi_i2s_data_transmit(spi_periph, tx_data);
|
||||
|
||||
/* 等待接收缓冲区非空 */
|
||||
while(RESET == spi_i2s_flag_get(spi_periph, SPI_FLAG_RP));
|
||||
|
||||
/* 接收数据 */
|
||||
return (uint8_t)spi_i2s_data_receive(spi_periph);
|
||||
}
|
||||
|
||||
/*!
|
||||
\brief 控制SPI设备的片选引脚
|
||||
\param[in] dev: SPI设备结构体指针
|
||||
\param[in] enable: 1-选中设备, 0-取消选中
|
||||
\param[out] none
|
||||
\retval none
|
||||
*/
|
||||
void spi_cs_control(spi_dev_t *dev, uint8_t enable)
|
||||
{
|
||||
if (dev && dev->csPort) {
|
||||
if (enable) {
|
||||
/* 拉低片选引脚,选中设备 */
|
||||
gpio_bit_reset((uint32_t)dev->csPort, dev->csPin);
|
||||
} else {
|
||||
/* 拉高片选引脚,取消选中设备 */
|
||||
gpio_bit_set((uint32_t)dev->csPort, dev->csPin);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/*!
|
||||
\brief 控制SPI设备的复位引脚
|
||||
\param[in] dev: SPI设备结构体指针
|
||||
\param[in] enable: 1-复位, 0-正常
|
||||
\param[out] none
|
||||
\retval none
|
||||
*/
|
||||
void spi_rst_control(spi_dev_t *dev, uint8_t enable)
|
||||
{
|
||||
if (dev && dev->rstPort) {
|
||||
if (enable) {
|
||||
/* 拉低复位引脚,复位设备 */
|
||||
gpio_bit_reset((uint32_t)dev->rstPort, dev->rstPin);
|
||||
} else {
|
||||
/* 拉高复位引脚,设备正常工作 */
|
||||
gpio_bit_set((uint32_t)dev->rstPort, dev->rstPin);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/*!
|
||||
\brief 初始化SPI设备
|
||||
\param[in] dev: SPI设备结构体指针
|
||||
\param[in] spi_periph: SPI外设
|
||||
\param[in] csPort: 片选GPIO端口
|
||||
\param[in] csPin: 片选GPIO引脚
|
||||
\param[in] rstPort: 复位GPIO端口
|
||||
\param[in] rstPin: 复位GPIO引脚
|
||||
\param[out] none
|
||||
\retval 0: 成功, -1: 失败
|
||||
*/
|
||||
int spi_init_dev(spi_dev_t *dev, uint32_t spi_periph, uint32_t csPort, uint16_t csPin, uint32_t rstPort, uint16_t rstPin)
|
||||
{
|
||||
if (!dev) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
/* 初始化设备结构体 */
|
||||
dev->spi = spi_periph;
|
||||
dev->csPort = csPort;
|
||||
dev->csPin = csPin;
|
||||
dev->rstPort = rstPort;
|
||||
dev->rstPin = rstPin;
|
||||
dev->initialized = 1;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*!
|
||||
\brief 去初始化SPI设备
|
||||
\param[in] dev: SPI设备结构体指针
|
||||
\param[out] none
|
||||
\retval 0: 成功, -1: 失败
|
||||
*/
|
||||
int spi_deinit_dev(spi_dev_t *dev)
|
||||
{
|
||||
if (!dev || !dev->initialized) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
dev->initialized = 0;
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user