ADC驅(qū)動(dòng)程序設(shè)計(jì)
ADC:模/數(shù)轉(zhuǎn)換器。
一種將模擬信號(hào)轉(zhuǎn)換成數(shù)字信號(hào)的裝置;
DAC:數(shù)/模轉(zhuǎn)換器。
一種將數(shù)字信號(hào)轉(zhuǎn)換成模擬信號(hào)的裝置。
模擬信號(hào)轉(zhuǎn)換為數(shù)值信號(hào)的步驟:
1. 取值;
2. 量化;
3. 編碼;
S3C2440ADC
S3C2440芯片內(nèi)部共有8路A/D轉(zhuǎn)換通道AIN0~AIN7,但是轉(zhuǎn)換器只有一個(gè)。
轉(zhuǎn)換精度為10位,故轉(zhuǎn)換后的值最小時(shí)會(huì)接近0,最大時(shí)會(huì)接近1024.
最大的轉(zhuǎn)換率在2.5MHZ轉(zhuǎn)換時(shí)鐘下能達(dá)到500KSPS(每秒采樣5000千次)
在常見的設(shè)計(jì)中,如mini2440開發(fā)板,一般AIN4、AIN5、AIN6、AIN7被用作了四線電阻觸摸的YM、YP、XM、XP通道;剩余的AIN0~3被引出,其中AIN0直接和一個(gè)可調(diào)電阻W1連接。
師:AIN4、AIN5、AIN6、AIN7給觸摸屏用的;
AIN0用于可調(diào)電阻
(這樣電壓就可以作為一路模擬信號(hào)進(jìn)行轉(zhuǎn)換)
ADC驅(qū)動(dòng)流程:1.初始化à2.啟動(dòng)à3.轉(zhuǎn)換結(jié)束à4.讀取轉(zhuǎn)換值
一.ADC初始化
A.選擇轉(zhuǎn)換通道- B.設(shè)置轉(zhuǎn)換頻率
怎么判斷開始轉(zhuǎn)換了?用一個(gè)whlie循環(huán),查詢ENABLE_START是否變成0
怎么判斷轉(zhuǎn)換完成了?不斷查詢ECFLG是否為1
讀取轉(zhuǎn)換值
#define GLOBAL_CLK 1
#include #include #include 'def.h' #include 'option.h' #include '2440addr.h' #include '2440lib.h' #include '2440slib.h' #include 'mmu.h' #include 'profile.h' #include 'memtest.h' #define ADC_FREQ 2500000 //#define ADC_FREQ 1250000 volatile U32 preScaler; void adc_init(void); int ReadAdc(int channel); static void cal_cpu_bus_clk(void); void Set_Clk(void); void beep_init(void); void beep_run(void); /************************************************* Function name: delay Parameter : times Description : 延時(shí)函數(shù) Return : void Argument : void Autor & date : Daniel **************************************************/ void delay(int times) { int i,j; for(i=0;i } /************************************************* Function name: Main Parameter : void Description : 主功能函數(shù) Return : void Argument : void Autor & date : Daniel **************************************************/ void Main(void) { int a0=0,tmp; int Scom=0; Set_Clk(); Uart_Init(0,115200); Uart_Select(Scom); adc_init(); while(1) { a0=ReadAdc(0); Uart_Printf( 'AIN0: %04dn', a0); delay(1000) ; } } /************************************************* Function name: adc_init() Parameter : int channel Description : adc初始化 Return : void Argument : void Autor & date : Daniel **************************************************/ void adc_init(void) { int channel=0; //AIN0,對(duì)應(yīng)開發(fā)板上W1可調(diào)電阻 preScaler = ADC_FREQ; Uart_Printf('ADC conv,freq. = %dHzn',preScaler); preScaler = 50000000/ADC_FREQ - 1; //PCLK=50M 我們要得到ADC_FREQ=2500000 Uart_Printf('PRSCVL=PCLK/ADC_FREQ - 1=%dn',preScaler); /*AD轉(zhuǎn)換頻率設(shè)置,最大頻率為2.5MHz*/ rADCCON = (1<<14)|(preScaler<<6)|(channel<<3); //setup channel 1<<14使能預(yù)分頻器 (preScaler<<6)預(yù)分頻值 channel<<3模擬通道選擇 delay(1000); } /************************************************* Function name: ReadAdc(int channel) Parameter : int channel Description : 獲取AD 轉(zhuǎn)換后的值 Return : int Argument : void Autor & date : Daniel **************************************************/ int ReadAdc(int channel) { /*開啟AD轉(zhuǎn)換*/ rADCCON |= 0x01; //start ADC while(rADCCON & 0x1); //check if Enable_start is low while(!(rADCCON & 0x8000)); //check if EC(End of Conversion) flag is high判斷轉(zhuǎn)換是否結(jié)束 return ( (int)rADCDAT0 & 0x3ff );//讀取轉(zhuǎn)換后的值 } /************************************************* Function name: Set_Clk() Parameter : void Description : 設(shè)置CPU的時(shí)鐘頻率 Return : void Argument : void Autor & date : Daniel **************************************************/ void Set_Clk(void) { int i; U8 key; U32 mpll_val = 0 ; i = 2 ; //don't use 100M! //boot_params.cpu_clk.val = 3; switch ( i ) { case 0: //200 key = 12; mpll_val = (92<<12)|(4<<4)|(1); break; case 1: //300 key = 13; mpll_val = (67<<12)|(1<<4)|(1); break; case 2: //400 key = 14; mpll_val = (92<<12)|(1<<4)|(1); break; case 3: //440!!! key = 14; mpll_val = (102<<12)|(1<<4)|(1); break; default: key = 14; mpll_val = (92<<12)|(1<<4)|(1); break; } //init FCLK=400M, so change MPLL first ChangeMPllValue((mpll_val>>12)&0xff, (mpll_val>>4)&0x3f, mpll_val&3); //set the register--rMPLLCON ChangeClockDivider(key, 12); //the result of rCLKDIVN [0:1:0:1] 3-0 bit cal_cpu_bus_clk(); //HCLK=100M PCLK=50M } /************************************************* Function name: cal_cpu_bus_clk Parameter : void Description : 設(shè)置PCLKHCLKFCLK的頻率 Return : void Argument : void Autor & date : Daniel **************************************************/ static void cal_cpu_bus_clk(void) { static U32 cpu_freq; static U32 UPLL; U32 val; U8 m, p, s; val = rMPLLCON; m = (val>>12)&0xff; p = (val>>4)&0x3f; s = val&3; //(m+8)*FIN*2 不要超出32位數(shù)! FCLK = ((m+8)*(FIN/100)*2)/((p+2)*(1< val = rCLKDIVN; m = (val>>1)&3; p = val&1; val = rCAMDIVN; s = val>>8; switch (m) { case 0: HCLK = FCLK; break; case 1: HCLK = FCLK>>1; break; case 2: if(s&2) HCLK = FCLK>>3; else HCLK = FCLK>>2; break; case 3: if(s&1) HCLK = FCLK/6; else HCLK = FCLK/3; break; } if(p)
上一篇:s3c2440裸機(jī)開發(fā)調(diào)試環(huán)境(MDK4.72,Jlink v8,mini2440)
下一篇:移植openssh至嵌入式ARM開發(fā)板
推薦閱讀最新更新時(shí)間:2025-06-07 23:39



設(shè)計(jì)資源 培訓(xùn) 開發(fā)板 精華推薦
- 意法半導(dǎo)體推出用于匹配遠(yuǎn)距離無線微控制器STM32WL33的集成的匹配濾波芯片
- ESP32開發(fā)板連接TFT顯示屏ST7789跳坑記
- 如何讓ESP32支持analogWrite函數(shù)
- LGVL配合FreeType為可變字體設(shè)置字重-ESP32篇
- 使用樹莓派進(jìn)行 ESP32 Jtag 調(diào)試
- ESP32怎么在SPIFFS里面存儲(chǔ)html,css,js文件,以及網(wǎng)頁和arduino的通訊
- ESP32 freeRTOS使用測(cè)試
- API調(diào)用小記(Touchdesigner和ESP32)
- 關(guān)于ESP32/8266使用async-mqtt-client庫的一些基本介紹
- LTM4602HV 演示板、28V、6A 降壓模塊穩(wěn)壓器
- PCB書簽 尺子 卡片
- PeanutPI
- 平衡自行車+獨(dú)輪車
- AM1DR-1209SZ 9V 1 瓦 DC-DC 轉(zhuǎn)換器的典型應(yīng)用
- NCV33074ADR2G 直流耦合反相放大器最大輸出擺幅的典型應(yīng)用
- 【明日方舟】羅德島本艦主控板V6.2
- DC795A,使用 LT5527EUF 4.5V 至 5.25V 高線性下變頻混頻器的演示板
- XL4016可調(diào)恒壓恒流實(shí)驗(yàn)電源
- 帶內(nèi)部開關(guān)的 PAM2863 2A LED 驅(qū)動(dòng)器的典型應(yīng)用
- 東芝推出TXZ+TM族高級(jí)系列基于Arm? Cortex?-M4的新款M4G組MCU
- 2021高通XR生態(tài)合作伙伴大會(huì):凝聚產(chǎn)業(yè)力量,開啟XR新視界
- 是德科技推出雷達(dá)場(chǎng)景仿真器解決方案,加快全自動(dòng)駕駛技術(shù)發(fā)展腳步
- OPPO發(fā)布首個(gè)自研NPU芯片, 陳明永:自研芯片的腳步不會(huì)停止
- 【C51自學(xué)筆記】ULN2003+蜂鳴器+繼電器+步進(jìn)電機(jī)
- 駐極體麥克風(fēng)的組成及工作原理
- 三部門加強(qiáng)用地保障 支持光伏產(chǎn)業(yè)發(fā)展
- 座椅、天窗、電動(dòng)尾門應(yīng)用 國(guó)產(chǎn)車規(guī)級(jí)高壓霍爾效應(yīng)傳感器推薦
- 突發(fā)!又一車企車機(jī)“崩了”
- 寧德時(shí)代為陳立泉院士頒發(fā)“卓越貢獻(xiàn)獎(jiǎng)”
- 一文速覽吉利雷神 AI 電混 2.0 發(fā)布會(huì)重點(diǎn)
- 2025年1-4月ADAS供應(yīng)商裝機(jī)量排行榜:頭部集中與國(guó)產(chǎn)突圍并存
- 國(guó)內(nèi)飛行汽車無線通信測(cè)試成功,通信安全新突破
- SPAD席卷車載激光雷達(dá)市場(chǎng)
- 大聯(lián)大品佳集團(tuán)推出基于Microchip和ams OSRAM產(chǎn)品的10Base-T1S萬級(jí)像素大燈方案
- 哈曼推出采用三星Neo QLED技術(shù)的全新顯示屏
- Syntiant推出超低功耗汽車AI創(chuàng)新技術(shù) 提升車輛安全性和用戶體驗(yàn)
- 華為Mate X通過3C認(rèn)證,最大可支持65W超級(jí)快充
- 郭明錤:手機(jī)零組件供貨商正在恢復(fù)與華為的商業(yè)關(guān)系
- 奧普光電擬3.91億元收購光華微電子,深交所質(zhì)疑其估值合理
- 中興宣布Axon 10 Pro 5G版登陸奧地利
- 榮耀發(fā)布6?18戰(zhàn)報(bào),獲多個(gè)冠軍
- 天太機(jī)器人深夜疑放猛料
- 中國(guó)彩電企業(yè)在國(guó)際市場(chǎng)的生存之道
- 2019年彩電市場(chǎng)或恢復(fù)增長(zhǎng) 芯片將逐漸實(shí)現(xiàn)國(guó)產(chǎn)化
- 羅杰斯公司為汽車?yán)走_(dá)傳感器應(yīng)用推出新一代層壓板材料
- 斯坦福大學(xué)研發(fā)血流傳感器 植入之后無需手術(shù)摘除