Mini2440裸機開發之模數轉換開發
一、硬體介紹
1.1 S3C2440 ADC概述
模數轉換器即A/D轉換器,或簡稱ADC,通常是指一個將模擬訊號轉變為數字訊號的電子元件。S3C2440集成了8通道10位CMOS A/D轉換器,最大轉換率為2.5MHz A/D轉換器時鐘下的500KSPS。A/D轉換器支援片上取樣-保持功能和掉電模式的操作。
對於數字訊號我們需要得到它的2個屬性:
1) 轉換精度:
用多少位來儲存這個資料。
2) 取樣/轉換速度。
S3C2440 ADC具有以下特性:
- 解析度:10 位
- 差分線性誤差:± 1.0 LSB
- 積分線性誤差:± 2.0 LSB
- 最大轉換率:500 KSPS
- 功耗低
- 供電電壓:3.3V
- 模擬輸入範圍:0 至3.3V
- 片上取樣-保持功能
- 普通轉換模式;
- 分離的X/Y方向轉換模式 ;
- 自動(順序)X/Y方向轉換模式
- 等待中斷觸發;
從上圖可以看出AD converter前有一個多路選擇器,用來選擇模擬輸入源,這裡選擇A[3:0]作為模擬輸入源。這裡的XP、XM、YP、YM引腳是適用於電阻屏的觸控式螢幕觸控檢測、
1.2 A/D轉換時間
當PCLK 頻率在50MHz 並且預分頻器的值為49 時,共10 位的轉換時間如下:
$$A/D轉換器速率=\frac{50MHZ}{(49+1}=1MHZ$$
$$轉換時間=\frac{1}{1MHZ/5週期}=\frac{1}{200kHz=5us}$$
註釋: 此A/D 轉換器被設計為最高工作在2.5MHz 時鐘下,因此轉換率可以達到500 KSPS。
1.3 Mini2440 ADC電路
Mini2440開發板引出4路A/D(模數轉換)轉換通道,它們位於板上的CON4-GPIO介面。為了方便測試, AIN0連線到了開發板上的可調電阻W1,原理圖如下所示:
如圖,是把可變電阻上的電壓值變換的模擬訊號通過ADC轉換,輸出數字訊號。
二、暫存器
2.1 ADC控制暫存器(ADCCON)
暫存器資訊:
暫存器 | 地址 | R/W | 描述 | 復位值 |
ADCCON | 0x5800000 | R/W | ADC 控制暫存器 | 0x3FC4 |
暫存器位資訊:
ADCCON | 位 | 描述 | 初始狀態 |
ECFLG | [15] |
轉換結束標誌位(只讀) 0 = A/D 正在轉換 1 = A/D 轉換已結束 |
0 |
PRSCEN | [14] |
A/D 轉換器預分頻器使能 0 = 禁止 1 = 使能 |
0 |
PRSCVL | [13:6] |
A/D 轉換器預分頻值 數值範圍: 0 至255 注意:ADC 頻率應該設定為低於PCLK 的1/5。(例如PCLK=10MHz, |
0xFF |
SEL_MUX | [5:3] |
模擬輸入通道選擇 000 = AIN0 001 = AIN1 010 = AIN2 011 = AIN3 |
0 |
STDBM | [2] |
待機模式選擇 0 = 正常工作模式 1 = 待機模式 |
1 |
READ_ START | [1] |
讀啟動A/D 轉換 0 = 禁止讀啟動操作 1 = 使能讀啟動操作 |
0 |
ENABLE_START |
[0] |
使能A/D 轉換啟動。如果READ_START 為使能,則此值無效 0 = 無操作 1 = A/D 轉換啟動且此位在啟動後被清零 |
0 |
注意:
- 當觸控式螢幕引腳(YM、YP、XM 和XP)為禁止時,這些埠可以被用於ADC 的模擬輸入埠(AIN4、AIN5、AIN6 和AIN7)。
- 當從待機模式中變換到正常工作模式時,ADC 的預分頻器必須在最後的3 個ADC 時鐘前使能。
- 注意位[1]這一位, 這說明轉換完成讀取的時候還可以觸發轉換,也就是相當於連續轉換.
這裡我們設定預分頻器使能,PCLCK=50MHZ,設定預分頻器值為49:
$$A/D轉換器速率=\frac{50MHZ}{(49+1}=1MHZ$$
模擬輸入通道選擇AIN0:
ADCCON = (1<<14) | (49<<6) | (0<<3); //設定輸入源AIN0, ADC時鐘為1Mhz
位0用來使能A/D轉換功能,A/D轉換成功後ECFLG會設定為1.
2.2ADC 啟動延時暫存器(ADCDLY)
暫存器資訊:
暫存器 | 地址 | R/W | 描述 | 復位值 |
ADCDLY | 0x5800008 | R/W | ADC 啟動或初始化延時暫存器 | 0x00ff |
暫存器位資訊:
ADCDLY | 位 | 描述 | 初始狀態 |
DELAY | [15:0] |
正常轉換模式、XY 方向模式、自動方向模式 |
0x00ff |
2.3ADC 轉換資料暫存器(ADCDAT0)
暫存器資訊:
暫存器 | 地址 | R/W | 描述 | 復位值 |
ADCDAT0 | 0x580000C | R/W | ADC 轉換資料暫存器 | - |
暫存器位資訊:
ADCDAT0 | 位 | 描述 | 初始狀態 |
UPDOWN | [15] |
等待中斷模式中筆尖的起落狀態 0 = 筆尖落下態 1 = 筆尖抬起態 |
- |
AUTO_PST | [14] |
自動順序X 方向和Y 方向轉換 0 = 正常ADC轉換 1 = 順序X 方向、Y 方向測量 |
- |
XY_PST | [13:12] |
手動X 方向或Y 方向測量 00 = 無操作模式 01 = X方向測量 |
- |
保留 | [11:10] |
保留 |
- |
XPDATA |
[9:0] |
X 方向轉換數值(包括正常ADC轉換數值) |
- |
等到A/D轉換完成,讀取XPDATA[9:0]可以獲取到轉換的資料。
2.4 ADC 轉換資料暫存器(ADCDAT1)
暫存器資訊:
暫存器 | 地址 | R/W | 描述 | 復位值 |
ADCDAT1 | 0x5800010 | R/W | ADC 轉換資料暫存器 | - |
暫存器位資訊:
ADCDAT1 | 位 | 描述 | 初始狀態 |
UPDOWN | [15] |
等待中斷模式中筆尖的起落狀態 0 = 筆尖落下態 1 = 筆尖抬起態 |
- |
AUTO_PST | [14] |
自動順序X 方向和Y 方向轉換 0 = 正常ADC 轉換 1 = 順序X 方向、Y 方向測量 |
- |
XY_PST | [13:12] |
手動X 方向或Y 方向測量 00 = 無操作模式 01 = X方向測量 |
- |
保留 | [11:10] |
保留 |
- |
XPDATA |
[9:0] |
Y 方向轉換數值 |
- |
三、ADC程式碼
3.1 ADC初始化步驟
- GPIO設定,設定為模擬輸入;
- 使能分頻器,設定分頻係數;
- 選擇模擬輸入通道;
- 使能A/D轉換;
- 等待轉換完成,讀取資料(為了得到準確的資料,可以多次轉換取平均)
3.2 程式碼
參考文章