#ifndef APP_TASK_ADC_H #define APP_TASK_ADC_H #include "common.h" #include "../ctask/task.h" #include "../bsp/bsp_cs1232.h" #define D_ADC_BLUR_MID_MAX 5 enum D_TASK_ADC_CHANNEL { TS_ADC_CH_01 = 0x00, TS_ADC_CH_02 = 0x01, TS_ADC_CH_03 = 0x02, TS_ADC_CH_04 = 0x03, }; //对每一路进行采样 #define D_ADC_CH_SAMPLE_BUF_MAX 50 #define D_ADC_CH_BLUE_POOL_NUM 3 typedef struct { TS_task task; vU8 pending_ch; }TS_ADC_CH_SWITCH; typedef struct { TS_task task; vS32 adcval; vS32 pool; vS32 sum; vU8 error; vU8 ch; vU8 ch_n; vU8 n; }TS_ADC_CH_SAMPLE; //对每一路进行滤波 typedef struct { TS_task task; vU8 ch; vU8 ch_n; //平均滤波 vS32 SA_sum; vS32 SA_avg; vS32 SA_n; //移位滤波 vS32 SHA_sum; vS32 SHA_avg; vU8 n; }TS_ADC_CH_BLUR; //和值滤波 typedef struct { TS_task task; vU8 n; vS32 sum; vS32 SHA_sum_0; vS32 SHA_avg_0; vS32 SHA_pool_0[D_ADC_CH_BLUE_POOL_NUM]; vS32 SHA_sum_1; vS32 SHA_avg_1; //vS32 SHA_pool_1[D_ADC_CH_BLUE_POOL_NUM]; }TS_ADC_ALL_BLUR; //和值阈值判定(滤波方式切换)决定输出 #define D_ADC_ALL_OUT_POOL_NUM 5 typedef struct { TS_task task; vS32 val; vS32 SHA_pool[D_ADC_CH_BLUE_POOL_NUM]; vU32 SHA_diff[D_ADC_CH_BLUE_POOL_NUM-1]; vU32 SHA_ddiff[D_ADC_CH_BLUE_POOL_NUM-2]; vU8 n; vS32 sum; }TS_ADC_ALL_OUT; typedef struct { TS_task task; vS8 pool_gt; vS32 pool_val; vS32 val; vU16 u16_v; U32 diff_val; vU8 times[D_weight_show_limit_num]; }TS_ADC_SHOW; #if 0 typedef struct _TS_ADC_SampleM_ { //中值滤波 vS32 mid[D_ADC_BLUR_MID_MAX]; vS32 midv; //均值滤波 vS32 SA_sum; vS32 SA_avg; //移位滤波 vS32 SHA_sum; vS32 SHA_avg; }TS_ADC_SampleM; typedef struct { TS_task task; vU8 error; vU8 m_n; vU8 a_n; vU8 ch; vU8 ch_n; vU16 u16_v; TS_ADC_SampleM ts_sample; }TS_task_ADC_; #endif extern TS_ADC_CH_SWITCH ts_adc_ch_switch; extern TS_ADC_CH_SAMPLE ts_adc_ch_sample[D_ch_max_num]; extern TS_ADC_CH_BLUR ts_adc_ch_blur[D_ch_max_num]; extern TS_ADC_ALL_BLUR ts_adc_all_blur; extern TS_ADC_ALL_OUT ts_adc_all_out; extern TS_ADC_SHOW ts_adc_show; extern void L3_task_adc_init(void); extern void L3_task_adc_ch_sample(TS_ADC_CH_SAMPLE *s); extern void L3_task_adc_ch_blur(TS_ADC_CH_BLUR *s); extern void L3_task_adc_all_blur(TS_ADC_ALL_BLUR *s); extern void L3_task_adc_all_out(TS_ADC_ALL_OUT *s); extern void L3_task_adc_show(TS_ADC_SHOW *s); extern void L3_task_show_times_reset(); #endif