Добавлен ADC SEQ (заготовка пока)
И небольшой рефакторинг
This commit is contained in:
99
Core/App/adc.h
Normal file
99
Core/App/adc.h
Normal file
@@ -0,0 +1,99 @@
|
||||
/*==============================================================================
|
||||
* Инициализация таймеров с использованием бибилотеки PLIB035
|
||||
*------------------------------------------------------------------------------
|
||||
* ЦНИИ СЭТ, Разваляев Алексей <wot890089@mail.ru>
|
||||
*==============================================================================
|
||||
* ЦНИИ СЭТ
|
||||
*==============================================================================
|
||||
*/
|
||||
#ifndef __ADC_H
|
||||
#define __ADC_H
|
||||
//-- Includes ------------------------------------------------------------------
|
||||
#include "plib035.h"
|
||||
#include "retarget_conf.h"
|
||||
|
||||
//-- Defines -------------------------------------------------------------------
|
||||
// Дефайны для режима АЦП
|
||||
|
||||
typedef enum
|
||||
{
|
||||
ADC_Callback_Seq,
|
||||
ADC_Callback_BuffHalf,
|
||||
ADC_Callback_BuffFull,
|
||||
ADC_Callback_DC,
|
||||
ADC_Callback_Error,
|
||||
}ADC_CallbackTypeDef;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
ADC_SEQ_Init_TypeDef SEQ_Init; /* Стандартная конфигурация из PLIB */
|
||||
FunctionalState IT; /*!< Включить прерывания */
|
||||
uint8_t ITCount; /*!< Количество запросов для генерации прерывания */
|
||||
uint32_t buffer_circular; /*!< Циклический буфер */
|
||||
|
||||
void (*SEQCpltCallback)(void); /*!< Вызывается при завершении секвенсора */
|
||||
void (*BuffHalfCallback)(void); /*!< Вызывается при заполнении половины буфера */
|
||||
void (*BuffFullCallback)(void); /*!< Вызывается при заполнении буфера */
|
||||
void (*ErrorCallback)(); /*!< Вызывается при ошибке */
|
||||
}ADC_SEQ_ExtInit_TypeDef;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
ADC_DC_Init_TypeDef DC_Init;
|
||||
FunctionalState IT; /*!< Включить прерывания */
|
||||
|
||||
void (*DC_TrigCallback); /*!< Вызывается при срабатывании компаратора */
|
||||
void (*ErrorCallback)(); /*!< Вызывается при ошибке */
|
||||
|
||||
|
||||
}ADC_DC_ExtInit_TypeDef;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
ADC_SEQ_ExtInit_TypeDef *Config; /*!< Конфигурации секвенсоров */
|
||||
uint8_t running;
|
||||
|
||||
|
||||
uint16_t *data_buffer; /*!< Указатель на буфер данных [ch][buffer_size]*/
|
||||
uint32_t buffer_size; /*!< Размер буфера (16-bit слова) */
|
||||
uint32_t buffer_count; /*!< Счетчик текущего индекса буфера */
|
||||
}ADC_SEQ_HandleTypeDef;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
ADC_DC_ExtInit_TypeDef *Config; /*!< Конфигурации компараторов */
|
||||
uint8_t running;
|
||||
}ADC_DC_HandleTypeDef;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
|
||||
ADC_TypeDef *Instance; /*!< Регистры ADC */
|
||||
|
||||
|
||||
ADC_SEQ_HandleTypeDef SEQ[ADC_SEQ_Total]; /*!< Хендл секвенсоров */
|
||||
ADC_DC_ExtInit_TypeDef DC[ADC_DC_Total]; /*!< Хендл компараторов */
|
||||
|
||||
// Буферы данных для каждого канала (актуальные значения)
|
||||
uint16_t ChannelData[ADC_CH_Total]; /*!< Текущие значения каналов */
|
||||
uint8_t ChannelValid[ADC_CH_Total]; /*!< Флаги валидности данных */
|
||||
}ADC_HandleTypeDef;
|
||||
extern ADC_HandleTypeDef hadc;
|
||||
|
||||
//-- Exported functions prototypes ---------------------------------------------
|
||||
void adc_init_first(void);
|
||||
|
||||
OperationStatus adc_seq_init(ADC_HandleTypeDef *hadc, ADC_SEQ_Num_TypeDef SEQ_Num, ADC_SEQ_ExtInit_TypeDef *NewConfig);
|
||||
OperationStatus adc_seq_set_callback(ADC_HandleTypeDef* hadc, ADC_SEQ_Num_TypeDef SEQ_Num, ADC_CallbackTypeDef cb_type, void (*Callback)(void));
|
||||
|
||||
OperationStatus adc_seq_start(ADC_HandleTypeDef *hadc, ADC_SEQ_Num_TypeDef SEQ_Num, uint16_t (*data_buffer)[], uint32_t buffer_size);
|
||||
OperationStatus adc_seq_stop(ADC_HandleTypeDef *hadc, ADC_SEQ_Num_TypeDef SEQ_Num);
|
||||
|
||||
uint16_t adc_get_channel_value(ADC_HandleTypeDef *hadc, ADC_CH_Num_TypeDef channel);
|
||||
void adc_sw_start(void);
|
||||
|
||||
|
||||
// Обработчики прерываний
|
||||
void adc_seq_handler(ADC_HandleTypeDef *hadc, ADC_SEQ_Num_TypeDef SEQ_Num);
|
||||
void adc_dc_handler(ADC_HandleTypeDef *hadc, ADC_DC_Num_TypeDef DC_Num);
|
||||
#endif /*__ADC_H*/
|
||||
Reference in New Issue
Block a user