Add full automotive RTOS project
Add kernel (Cortex-M0/M3/M4, Tricore, S32K, RISC-V ports), drivers, middleware (CAN stack, diagnostics, safety), applications, board support, build/test tooling, and documentation.
This commit is contained in:
@@ -0,0 +1,114 @@
|
||||
/**
|
||||
* @file adc_driver.h
|
||||
* @brief ADC driver interface
|
||||
*/
|
||||
|
||||
#ifndef ADC_DRIVER_H
|
||||
#define ADC_DRIVER_H
|
||||
|
||||
#include <stdint.h>
|
||||
#include <stdbool.h>
|
||||
#include "kernel.h"
|
||||
|
||||
/* ADC Configuration Constants */
|
||||
#define ADC_MAX_INSTANCES 3
|
||||
#define ADC_MAX_CHANNELS 16
|
||||
#define ADC_MAX_SEQUENCES 8
|
||||
|
||||
/* ADC Resolution */
|
||||
typedef enum {
|
||||
ADC_RESOLUTION_6BIT = 6,
|
||||
ADC_RESOLUTION_8BIT = 8,
|
||||
ADC_RESOLUTION_10BIT = 10,
|
||||
ADC_RESOLUTION_12BIT = 12,
|
||||
ADC_RESOLUTION_14BIT = 14,
|
||||
ADC_RESOLUTION_16BIT = 16
|
||||
} AdcResolution_t;
|
||||
|
||||
/* ADC Conversion Modes */
|
||||
typedef enum {
|
||||
ADC_MODE_SINGLE = 0,
|
||||
ADC_MODE_CONTINUOUS = 1,
|
||||
ADC_MODE_SCAN = 2,
|
||||
ADC_MODE_DISCONTINUOUS = 3
|
||||
} AdcConversionMode_t;
|
||||
|
||||
/* ADC Trigger Sources */
|
||||
typedef enum {
|
||||
ADC_TRIGGER_SOFTWARE = 0,
|
||||
ADC_TRIGGER_TIMER = 1,
|
||||
ADC_TRIGGER_EXTERNAL = 2
|
||||
} AdcTriggerSource_t;
|
||||
|
||||
/* ADC Reference Voltage */
|
||||
typedef enum {
|
||||
ADC_REFERENCE_INTERNAL = 0,
|
||||
ADC_REFERENCE_EXTERNAL = 1,
|
||||
ADC_REFERENCE_VDD = 2
|
||||
} AdcReference_t;
|
||||
|
||||
/* ADC Sampling Time */
|
||||
typedef enum {
|
||||
ADC_SAMPLING_1_5_CYCLES = 0,
|
||||
ADC_SAMPLING_7_5_CYCLES = 1,
|
||||
ADC_SAMPLING_13_5_CYCLES = 2,
|
||||
ADC_SAMPLING_28_5_CYCLES = 3,
|
||||
ADC_SAMPLING_41_5_CYCLES = 4,
|
||||
ADC_SAMPLING_55_5_CYCLES = 5,
|
||||
ADC_SAMPLING_71_5_CYCLES = 6,
|
||||
ADC_SAMPLING_239_5_CYCLES = 7
|
||||
} AdcSamplingTime_t;
|
||||
|
||||
/* ADC Callbacks */
|
||||
typedef void (*AdcConversionCompleteCallback_t)(uint16_t* values, uint8_t count);
|
||||
|
||||
/* ADC Channel Configuration */
|
||||
typedef struct {
|
||||
uint8_t channel;
|
||||
AdcSamplingTime_t sampling_time;
|
||||
bool enable_watchdog;
|
||||
uint16_t watchdog_high_threshold;
|
||||
uint16_t watchdog_low_threshold;
|
||||
} AdcChannelConfig_t;
|
||||
|
||||
/* ADC Configuration */
|
||||
typedef struct {
|
||||
AdcResolution_t resolution;
|
||||
AdcConversionMode_t mode;
|
||||
AdcTriggerSource_t trigger_source;
|
||||
AdcReference_t reference;
|
||||
bool enable_dma;
|
||||
uint32_t conversion_frequency;
|
||||
AdcChannelConfig_t channels[ADC_MAX_CHANNELS];
|
||||
uint8_t channel_count;
|
||||
AdcConversionCompleteCallback_t conversion_complete_callback;
|
||||
} AdcConfig_t;
|
||||
|
||||
/* ADC Statistics */
|
||||
typedef struct {
|
||||
uint32_t conversions_completed;
|
||||
uint32_t conversions_failed;
|
||||
uint32_t watchdog_events;
|
||||
uint32_t overrun_errors;
|
||||
uint32_t dma_transfers;
|
||||
uint32_t average_conversion_time_us;
|
||||
} AdcStatistics_t;
|
||||
|
||||
/* ADC Driver Interface */
|
||||
KernelStatus_t adc_init(uint8_t instance, AdcConfig_t* config);
|
||||
KernelStatus_t adc_deinit(uint8_t instance);
|
||||
KernelStatus_t adc_start_conversion(uint8_t instance);
|
||||
KernelStatus_t adc_stop_conversion(uint8_t instance);
|
||||
KernelStatus_t adc_read_channel(uint8_t instance, uint8_t channel, uint16_t* value,
|
||||
uint32_t timeout_ms);
|
||||
KernelStatus_t adc_read_channels(uint8_t instance, uint16_t* values, uint8_t count,
|
||||
uint32_t timeout_ms);
|
||||
KernelStatus_t adc_start_dma(uint8_t instance, uint16_t* buffer, uint16_t length);
|
||||
KernelStatus_t adc_stop_dma(uint8_t instance);
|
||||
KernelStatus_t adc_calibrate(uint8_t instance);
|
||||
KernelStatus_t adc_get_statistics(uint8_t instance, AdcStatistics_t* stats);
|
||||
float adc_convert_to_voltage(uint16_t adc_value, AdcResolution_t resolution,
|
||||
float reference_voltage);
|
||||
void adc_process_interrupt(uint8_t instance);
|
||||
|
||||
#endif /* ADC_DRIVER_H */
|
||||
Reference in New Issue
Block a user