## 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); } } ```