141 lines
3.7 KiB
C
141 lines
3.7 KiB
C
/*
|
||
* @Author: mypx
|
||
* @Date: 2025-10-15 15:32:36
|
||
* @LastEditTime: 2025-10-16 10:26:19
|
||
* @LastEditors: mypx mypx_coder@163.com
|
||
* @Description:
|
||
*/
|
||
#include "bsp_temper_sampling.h"
|
||
#include "et_log.h"
|
||
#include "spi.h"
|
||
|
||
#if (USING_SOFT_SPI == 1)
|
||
soft_spi_t soft_spi = {
|
||
.sck_port = GPIOB,
|
||
.sck_pin = GPIO_PIN_5,
|
||
.mosi_port = GPIOB,
|
||
.mosi_pin = GPIO_PIN_6,
|
||
.miso_port = GPIOB,
|
||
.miso_pin = GPIO_PIN_4,
|
||
.cs_port = GPIOB,
|
||
.cs_pin = GPIO_PIN_7,
|
||
.mode = SOFT_SPI_MODE0,
|
||
.bit_order = SOFT_SPI_MSB_FIRST,
|
||
.lock = RT_NULL, // 使用 RT_NULL,初始化时会创建
|
||
.delay_us = 1, // 每半个 SPI 时钟周期延时 1 微秒
|
||
};
|
||
|
||
void bsp_ad7793_spi_transfer(uint8_t *tx_buf, uint8_t *rx_buf, uint16_t len)
|
||
{
|
||
soft_spi_transfer_buffer(&soft_spi, tx_buf, rx_buf, len);
|
||
}
|
||
|
||
void bsp_ad7793_spi_write(uint8_t cmd, uint8_t *data, uint16_t len)
|
||
{
|
||
soft_spi_write(&soft_spi, &cmd, 1, data, len);
|
||
}
|
||
|
||
void bsp_ad7793_spi_read(uint8_t cmd, uint8_t *rx_buf, uint16_t len)
|
||
{
|
||
soft_spi_read(&soft_spi, &cmd, 1, rx_buf, len);
|
||
}
|
||
|
||
void bsp_ad7793_gpio_set(uint8_t pin, bool state)
|
||
{
|
||
if (pin == soft_spi.cs_pin)
|
||
{
|
||
HAL_GPIO_WritePin(soft_spi.cs_port, soft_spi.cs_pin, state);
|
||
}
|
||
}
|
||
|
||
bool bsp_ad7793_gpio_get(uint8_t pin)
|
||
{
|
||
if (pin == soft_spi.miso_pin)
|
||
{
|
||
return HAL_GPIO_ReadPin(soft_spi.miso_port, soft_spi.miso_pin) == GPIO_PIN_SET;
|
||
}
|
||
return false;
|
||
}
|
||
#else
|
||
#define AD7793_CS_LOW() HAL_GPIO_WritePin(SPI3_AD7793_CS_GPIO_Port, SPI3_AD7793_CS_Pin, GPIO_PIN_RESET)
|
||
#define AD7793_CS_HIGH() HAL_GPIO_WritePin(SPI3_AD7793_CS_GPIO_Port, SPI3_AD7793_CS_Pin, GPIO_PIN_SET)
|
||
void bsp_ad7793_spi_transfer(uint8_t *tx_buf, uint8_t *rx_buf, uint16_t len)
|
||
{
|
||
HAL_StatusTypeDef status;
|
||
status = HAL_SPI_TransmitReceive(&AD7793_SPI, tx_buf, rx_buf, len, 1000);
|
||
if (status != HAL_OK)
|
||
{
|
||
ET_ERR("SPI transfer error:%d!", status);
|
||
}
|
||
}
|
||
|
||
void bsp_ad7793_spi_write(uint8_t cmd, uint8_t *data, uint16_t len)
|
||
{
|
||
uint8_t tx_buffer[256];
|
||
HAL_StatusTypeDef status;
|
||
|
||
tx_buffer[0] = cmd;
|
||
if (data && len > 0)
|
||
{
|
||
for (uint16_t i = 0; i < len; i++)
|
||
{
|
||
tx_buffer[i + 1] = data[i];
|
||
}
|
||
}
|
||
status = HAL_SPI_Transmit(&AD7793_SPI, tx_buffer, len + 1, 1000);
|
||
if (status != HAL_OK)
|
||
{
|
||
ET_ERR("SPI write error:%d!", status);
|
||
}
|
||
}
|
||
|
||
void bsp_ad7793_spi_read(uint8_t cmd, uint8_t *rx_buf, uint16_t len)
|
||
{
|
||
uint8_t tx_buffer[1] = {cmd};
|
||
HAL_StatusTypeDef status;
|
||
status = HAL_SPI_Transmit(&AD7793_SPI, tx_buffer, 1, 1000);
|
||
if (status != HAL_OK)
|
||
{
|
||
ET_ERR("SPI write error:%d!", status);
|
||
}
|
||
status = HAL_SPI_Receive(&AD7793_SPI, rx_buf, len, 1000);
|
||
if (status != HAL_OK)
|
||
{
|
||
ET_ERR("SPI read error:%d!", status);
|
||
}
|
||
}
|
||
|
||
void bsp_ad7793_gpio_set(uint8_t pin, bool state)
|
||
{
|
||
if (pin == SPI3_AD7793_CS_Pin)
|
||
{
|
||
HAL_GPIO_WritePin(SPI3_AD7793_CS_GPIO_Port, SPI3_AD7793_CS_Pin, state);
|
||
}
|
||
}
|
||
|
||
bool bsp_ad7793_gpio_get(uint8_t pin)
|
||
{
|
||
if (pin == SPI3_AD7793_MISO_Pin)
|
||
{
|
||
return HAL_GPIO_ReadPin(SPI3_AD7793_MISO_GPIO_Port, SPI3_AD7793_MISO_Pin) == GPIO_PIN_SET;
|
||
}
|
||
return false;
|
||
}
|
||
#endif
|
||
|
||
void bsp_ad7793_delay_ms(uint16_t ms)
|
||
{
|
||
rt_thread_mdelay(ms); // 使用 RT-Thread 的延时函数
|
||
}
|
||
|
||
void bsp_temper_sampling_init(void)
|
||
{
|
||
#if (USING_SOFT_SPI == 1)
|
||
soft_spi_init(&soft_spi);
|
||
soft_spi_set_mode(&soft_spi, SOFT_SPI_MODE3); // 设置 SPI 模式
|
||
soft_spi_set_bit_order(&soft_spi, SOFT_SPI_MSB_FIRST); // 设置位序
|
||
soft_spi_set_delay(&soft_spi, 1); // 设置延时为 1 微秒
|
||
soft_spi_select(&soft_spi); // 选择 SPI 设备
|
||
#endif
|
||
}
|