傑理AC6926X 多通道ADC設定

2021-10-01 13:41:21 字數 4130 閱讀 3386

定義在adc_api.h

系統定義adc掃瞄的處理週期,2ms一次,每次掃瞄乙個通道。

#if !adkey_sd_mult_en

loop_detect_register

(adc_scan_detect)=;

#endif

每次掃瞄乙個通道,總共5個通道,系統預設第乙個通道為ad按鍵通道,在下面陣列變數中體現

void

adc_scan()

/* 這些是無關緊要的**塊

#if adkey_sd_mult_en

if (next_channel == r_ad_ch_key)

next_channel = channel + 1;

adc_value[channel++] = adc_res_api(ad_table[next_channel]);

adkey_sd_mult_set_sd_io();

adkey_sd_mult_sd_resume();

return;

} else

return;}}

#endif

*/ adc_value[channel++]=

adc_res_api

(ad_table[next_channel]);

//核心處理部分

// otp_printf("c=%d v=%d ",channel-1,adc_value[channel-1]);

if(channel == r_max_ad_channel)

}

ad轉換函式,輸入採集通道,返回通道採集值

u16 adc_res_api

(u32 channel)

elseif(

(channel &

0xffff

)== ad_ch_pmu)

elseif(

(channel &

0xffff

)== ad_ch_bt)

jl_adc->con |

=bit(6

);//ad start

return adc_value;

}

ac6926x一共定義了16個通道 位於jl_adc->con的bit[8-11]

//ad channel define jl_adc->con的bit[8-11]

#define ad_ch_pa3 (0x0<<8)

#define ad_ch_pa4 (0x1<<8)

#define ad_ch_pa5 (0x2<<8)

#define ad_ch_pa6 (0x3<<8)

#define ad_ch_pc4 (0x4<<8)

#define ad_ch_pa10 (0x5<<8)

#define ad_ch_pb0 (0x6<<8)

#define ad_ch_pb1 (0x7<<8)

#define ad_ch_pb4 (0x8<<8)

#define ad_ch_pb5 (0x9<<8)

#define ad_ch_pc3 (0xa<<8)

#define ad_ch_dm (0xb<<8)

#define ad_ch_rtc (0xc<<8)

#define ad_ch_pmu (0xd<<8)

#define ad_ch_bt (0xe<<8)

#define ad_ch_audio (0xf<<8)

#define adc_rtc_mux_pr1 (0x1<<16)

#define adc_rtc_mux_pr2 (0x2<<16)

#define adc_rtc_mux_rtc_hosc (0x3<<16)

#define adc_rtc_mux_rtc_losc (0x4<<16)

#define adc_rtc_mux_rtcvdd (0x5<<16)

#define adc_pmu_mux_vbg (0x0<<16)

#define adc_pmu_mux_vdd (0x1<<16)

#define adc_pmu_mux_vddda (0x2<<16)

#define adc_pmu_mux_vdc13 (0x3<<16)

#define adc_pmu_mux_vbat (0x4<<16)

#define adc_pmu_mux_ldoin (0x5<<16)

#define adc_pmu_mux_rtcldo33 (0x6<<16)

#define adc_pmu_mux_charge (0x7<<16)

#define ad_ch_pr1 (ad_ch_rtc | adc_rtc_mux_pr1)

#define ad_ch_pr2 (ad_ch_rtc | adc_rtc_mux_pr2)

#define ad_ch_rtc_hosc (ad_ch_rtc | adc_rtc_mux_rtc_hosc)

#define ad_ch_rtc_losc (ad_ch_rtc | adc_rtc_mux_rtc_losc)

#define ad_ch_rtcvdd (ad_ch_rtc | adc_rtc_mux_rtcvdd)

列舉變數用於定義每個變數的名字 例如adc_value[r_ad_ch_key] = adc_value[0]

而對應的ad_table則儲存對應通道的jl_adc->con的bit[8-11]值。

自行新增修改通道是時,需要對應2個陣列的位置,以免讀錯通道值,所有通道掃瞄一次時間2ms*最大通道數,如果通道太多,ad按鍵就需要微調,不然可能會有不靈敏的感覺

/*ad通道定義*/

enum

;

adc_api.c下定義了兩個陣列只有5個元素,adc_value

u16 adc_value[r_max_ad_channel]

;const u32 ad_table=

;

操作很簡單,只需要修改制定的通道及名稱就可以,在需要使用到的地方呼叫陣列的值即可,例如sdk的ad按鍵部分,函式體中直接取出對應的陣列值。

key_value =adc_value[r_ad_ch_key];

u8 get_adkey_value

(void){

u8 key_number;

u32 key_value;

static u8 aux_in_cnt =0;

static u8 aux_out_cnt =0;

key_value = adc_value[r_ad_ch_key]

;

後面一些特殊的adc通道不明確有什麼特殊的配置需要,普通io口的取樣直接配置陣列就可以,配置好後,在上面的的列舉和陣列中新增對應的ad通道號就行了

// pb1 配置ad輸入  adc7

jl_portb->pu |

=bit(1

);//使用內部上拉要開啟上拉

jl_portb->pd &=~

bit(1)

; jl_portb->dir |

=bit(1

);//gpio設定輸入模式

jl_portb->die &=~

bit(1)

;//gpio輸入關閉,使用adc模式

//pr1 adc12 配置ad輸入

portr_pu (portr1,1)

; portr_pd (portr1,0)

;portr_dir

(portr1,1)

;portr_die

(portr1,0)

;portr1_adcen_ctl(1

);

傑理AC692X 基本配置

ac692x系列晶元一般用來做音箱類產品。支援的功能 bt,music,aux,fm,rec,rtc,echo。下面說一下常用模式的基本配置。藍芽的後台模式,韌體過大可以關閉。define bt background en 0藍芽ble數傳功能,韌體過大可以關閉。define ble bredr m...

傑理AC692X 常用模式介紹

常用模式介紹 692x系列的sdk支援多種模式切換,以下是一些常用的模式介紹,rtc模式和錄音模式在此不講解。用的最多的應該是藍芽模式,藍芽模式主要由以下巨集定義進行協議選擇 登出掉的是ble,只選擇了我們常用的edr,即經典藍芽,用於傳輸音訊。藍芽模式主要的開發 都在一下資料夾下 大部分情況下我們...

傑理AC692X系列 RTC筆記(11)

1.如果 lowpower osc type 選擇用 bt osc,導致執行set lowpower keep 32k osc flag 0 函式語句,會導致 32.768k 不起振,導致 rtc 時鐘不跑,把形參 0 改為 1 即可。2.ac692x sdk release v2.2 程式 rtc...