STM_ATEM/User/ltc2508_driver.h
zhoujie 2cbd4a152d feat(main): 新增性能监控和调试输出功能
- 新增性能监控模块(performance_monitor),用于实时跟踪系统性能指标
- 添加串口调试输出功能,支持系统状态和性能统计的定期输出
- 实现双缓冲机制,提升ADC数据采集和存储的实时性
- 优化数据存储模块,支持校正后数据的存储和双缓冲管理
- 增强错误处理机制,完善中断回调函数和系统错误恢复

♻️ refactor(ltc2508): 重构ADC驱动支持双缓冲

- 将ADC数据存储从单缓冲区重构为双缓冲区结构
- 新增缓冲区状态管理和自动切换机制
- 优化DMA传输完成回调,支持多缓冲区处理
- 提供缓冲区获取和释放的API接口

📝 docs(performance): 新增性能评估报告和使用指南

- 创建STM32F405性能评估报告,详细分析系统性能指标
- 编写双缓冲机制使用指南,说明实现原理和使用方法
- 添加LTC2508驱动使用示例代码

🐛 fix(dma): 调整DMA中断优先级

- 将DMA2_Stream7中断优先级从9调整为6,优化中断响应
- 更新STM32CubeMX配置文件中的中断优先级设置

🔧 chore(config): 优化系统配置和代码结构

- 添加串口调试输出控制开关和间隔配置
- 清理中断处理文件,移除重复的回调函数定义
- 增强错误处理函数,添加系统状态恢复机制
2026-01-25 20:15:47 +08:00

81 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 2
// 缓冲区状态定义
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;
// 函数原型
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