## b_mod_adchub

### 鏁版嵁缁撴瀯

```C
//鍥炶皟 ad_val锛欰DC鍊�    arg:鐢ㄦ埛鎸囧畾浼犲叆鐨勫弬鏁�
typedef void (*pAdchubCb_t)(uint32_t ad_val, uint32_t arg);

typedef struct _AdcInfo
{
    uint8_t          seq;      //搴忓彿锛屾瘡涓疄渚嬩腑搴忓彿涓嶈兘涓€鏍�
    uint8_t          filter;   //鏄惁杩涜榛樿婊ゆ尝澶勭悊
    uint8_t          flag;     //buf鏄惁濉厖婊�
    uint8_t          index;    //褰撳墠鍠傚叆鐨勬暟鎹斁鍏uf鐨勭储寮�
    pAdchubCb_t      callback; //鍥炶皟鍑芥暟
    uint32_t         arg;      //鎸囧畾鍥炶皟浼犲叆鐨勫弬鏁�
    uint32_t         buf[FILTER_BUF_SIZE];
    struct _AdcInfo *next;
    struct _AdcInfo *prev;
} bAdcInfo_t;

typedef bAdcInfo_t bAdcInstance_t;

//蹇€熷垱寤哄疄渚嬬殑瀹忥紝name:瀹炰緥鍚� ad_seq:搴忓彿 filter_en锛氭槸鍚﹂渶瑕佹护娉� cb:鍥炶皟 cb_arg:鍥炶皟鍙傛暟
#define bADC_INSTANCE(name, ad_seq, filter_en, cb, cb_arg) \
    bAdcInstance_t name = {                                \
        .seq      = ad_seq,                                \
        .filter   = filter_en,                             \
        .callback = cb,                                    \
        .arg      = cb_arg,                                \
    }
```

### 鎺ュ彛浠嬬粛

```C
//娉ㄥ唽ADCHUB瀹炰緥锛屾墍鏈夋敞鍐岀殑瀹炰緥灏嗙粍鎴愬垪琛�
int bAdchubRegist(bAdcInstance_t *pinstance);
//鍠侫DC鏁版嵁锛宎d_seq:ADC鐨勫簭鍙� ad_val:ADC鐨勫€�
int bAdchubFeedValue(uint8_t ad_seq, uint32_t ad_val);
```

### 浣跨敤渚嬪瓙

```C
//鍥炶皟鍑芥暟
void _AdcCallback(uint32_t ad_val, uint32_t arg)
{
    b_log("%d:%d\r\n", arg, ad_val);
    if (arg == 2)  //鍙互鏍规嵁arg鏉ュ垽鏂槸鍝釜瀹炰緥鐨勫洖璋�
    {
        //.....
    }
}

//姝ゅ瀹氫箟瀹炰緥锛屽簭鍙峰垎鍒~鐨勬槸10鍜�16锛屽湪鍠傛暟鎹椂鍊欒瀵瑰簲
//鐢变簬浣跨敤鍚屼竴涓洖璋冨嚱鏁帮紝閭d箞鍥炶皟甯﹀叆鐨勫弬鏁拌鍖哄垎锛屽垎鍒槸1 鍜� 2
bADC_INSTANCE(ADTest, 10, 1, _AdcCallback, 1);
bADC_INSTANCE(ADTemp, 16, 1, _AdcCallback, 2);
int main()
{
    ...
    bInit();
    //娉ㄥ唽瀹炰緥
    bAdchubRegist(&ADTest);
    bAdchubRegist(&ADTemp);
    ...
}

//鍠傛暟鎹紝涓柇閲岃幏鍙朅DC鍊硷紝鐒跺悗鍠傛暟鎹�
void ADC1_2_IRQHandler()
{
    uint32_t tmp = 0;
    if (ADC_GetITStatus(ADC1, ADC_IT_JEOC) == SET)
    {
        ADC_ClearITPendingBit(ADC1, ADC_IT_JEOC);
        tmp = ADC_GetInjectedConversionValue(ADC1, ADC_InjectedChannel_1);
        bAdchubFeedValue(10, tmp); 
        tmp = ADC_GetInjectedConversionValue(ADC1, ADC_InjectedChannel_2);
        bAdchubFeedValue(16, tmp);
    }
}

```