- 新增VSCode编辑器配置,启用保存时自动格式化 - 新增DMA2_Stream5和USART1中断处理函数,优化SPI传输性能 - 移除TIM1相关配置和性能监控模块,简化系统架构 - 优化GPIO配置,将ADC_SYNC和PA8引脚合并配置 - 简化系统监控模块,仅保留采样计数和数据溢出统计 - 优化SPI配置,使用16位数据宽度并提高DMA优先级 - 提高USART波特率(USART1:2Mbps, USART3:921600bps) - 优化LTC2508驱动,增加初始化状态检查和缓冲区大小 - 修正数据存储模块,使用校正数据包而非校正结果结构体 - 优化RS485驱动,使用中断传输并添加传输完成回调 - 更新IOC配置文件,移除TIM1并调整中断优先级配置 - 新增系统监控简化说明文档,详细记录架构变更
83 lines
2.5 KiB
C
83 lines
2.5 KiB
C
#ifndef LTC2508_DRIVER_H
|
|
#define LTC2508_DRIVER_H
|
|
|
|
#include "main.h" // 包含 main.h 以获取 SPI 和 GPIO 等的句柄
|
|
|
|
// 定义每个 ADC 采样的数据长度 (32-bit)
|
|
#define LTC2508_DATA_LEN 2 // 2个 16bit 数据
|
|
|
|
// 假设我们有3个 LTC2508
|
|
#define NUM_LTC2508 3
|
|
|
|
// 双缓冲区定义
|
|
#define LTC2508_BUFFER_COUNT 128
|
|
|
|
// 缓冲区状态定义
|
|
typedef enum {
|
|
LTC2508_BUFFER_EMPTY = 0,
|
|
LTC2508_BUFFER_FILLING,
|
|
LTC2508_BUFFER_READY,
|
|
LTC2508_BUFFER_PROCESSING
|
|
} LTC2508_BufferStateTypeDef;
|
|
|
|
// LTC2508错误状态定义
|
|
typedef enum {
|
|
LTC2508_OK = 0,
|
|
LTC2508_ERROR_INIT,
|
|
LTC2508_ERROR_SPI,
|
|
LTC2508_ERROR_DMA,
|
|
LTC2508_ERROR_TIMEOUT,
|
|
LTC2508_ERROR_DATA_INVALID,
|
|
LTC2508_ERROR_BUFFER_OVERFLOW
|
|
} LTC2508_StatusTypeDef;
|
|
|
|
// LTC2508统计信息
|
|
typedef struct {
|
|
uint32_t total_samples;
|
|
uint32_t error_count;
|
|
uint32_t timeout_count;
|
|
uint32_t dma_error_count;
|
|
uint32_t buffer_overflow_count;
|
|
uint8_t last_error;
|
|
uint8_t current_buffer_index;
|
|
} LTC2508_StatsTypeDef;
|
|
|
|
// 双缓冲区数据结构
|
|
typedef struct {
|
|
uint16_t data[NUM_LTC2508][LTC2508_DATA_LEN];
|
|
uint32_t timestamp;
|
|
LTC2508_BufferStateTypeDef state;
|
|
uint8_t dma_complete_count; // 记录完成的DMA传输数量
|
|
} LTC2508_BufferTypeDef;
|
|
|
|
// 用于存储三路 ADC 数据的双缓冲区
|
|
extern volatile LTC2508_BufferTypeDef g_adc_buffers[LTC2508_BUFFER_COUNT];
|
|
// ADC 数据准备就绪标志
|
|
extern volatile uint8_t g_adc_data_ready_flag;
|
|
// 当前写入缓冲区索引
|
|
extern volatile uint8_t g_current_write_buffer;
|
|
// 当前读取缓冲区索引
|
|
extern volatile uint8_t g_current_read_buffer;
|
|
// 错误统计信息
|
|
extern LTC2508_StatsTypeDef g_ltc2508_stats;
|
|
|
|
// 函数原型
|
|
uint32_t LTC2508_IsInited();
|
|
LTC2508_StatusTypeDef LTC2508_Init(SPI_HandleTypeDef *hspi1, SPI_HandleTypeDef *hspi2, SPI_HandleTypeDef *hspi3);
|
|
LTC2508_StatusTypeDef LTC2508_TriggerDmaRead(void);
|
|
void LTC2508_DmaComplete_Callback(SPI_HandleTypeDef *hspi);
|
|
void LTC2508_ErrorCallback(SPI_HandleTypeDef *hspi);
|
|
LTC2508_StatusTypeDef LTC2508_ValidateData(LTC2508_BufferTypeDef *buffer, uint8_t channel);
|
|
void LTC2508_GetStats(LTC2508_StatsTypeDef *stats);
|
|
void LTC2508_ResetStats(void);
|
|
|
|
// 双缓冲区相关函数
|
|
LTC2508_StatusTypeDef LTC2508_GetReadyBuffer(LTC2508_BufferTypeDef **buffer);
|
|
void LTC2508_ReleaseBuffer(uint8_t buffer_index);
|
|
LTC2508_StatusTypeDef LTC2508_SwapBuffers(void);
|
|
uint8_t LTC2508_GetCurrentWriteBuffer(void);
|
|
uint8_t LTC2508_GetCurrentReadBuffer(void);
|
|
LTC2508_StatusTypeDef LTC2508_IsBufferReady(uint8_t buffer_index);
|
|
|
|
#endif // LTC2508_DRIVER_H
|