定義在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...