S3C2440 AD轉(zhuǎn)換器
進(jìn)制數(shù)字編碼,最大轉(zhuǎn)換率為2.5MHz A/D轉(zhuǎn)換器時(shí)鐘下的 500 KSPS。A/D 轉(zhuǎn)換器支持片上采樣-保持功能和掉電
模式的操作。
觸摸屏在下一篇文章,ADC轉(zhuǎn)換比較簡(jiǎn)單,這里貼出一個(gè)代碼
[cpp]view plaincopy
- #include"2440addr.h"
- #include"2440lib.h"
- #include"def.h"
- //=====================================================================
- //名稱:ADC_Select(intch,U32preScaler)
- //功能:選擇轉(zhuǎn)換通道,轉(zhuǎn)換器預(yù)分頻值設(shè)置
- //參數(shù):ch:轉(zhuǎn)換通道preScaler:預(yù)分頻值
- //返回值:無(wú)
- //=======================================================================
- voidADC_Select(intch,U32preScaler)
- {
- rADCCON=(1<<14)|(preScaler<<6)|(ch<<3);
- }
- //=======================================================================
- //名稱:AD_ENABLE()
- //功能:采用置位使能方式啟動(dòng)AD轉(zhuǎn)換
- //參數(shù):無(wú)
- //返回值:轉(zhuǎn)換后的值
- //=======================================================================
- intAD_ENABLE(void)
- {
- inti;
- intval=0;
- for(i=0;i<16;i++)
- {
- rADCCON|=0x1;//使能ADC轉(zhuǎn)換
- while(rADCCON&0x1);//判斷使能ADC轉(zhuǎn)換后被清零
- while(!(rADCCON&0x8000));//等待轉(zhuǎn)換結(jié)束
- val+=(rADCDAT0&0x3ff);//讀取ADC轉(zhuǎn)換的值
- }
- val=val/16;//計(jì)算ADC轉(zhuǎn)換值
- returnval;
- }
- //=======================================================================
- //名稱:AD_READ()
- //功能:采用讀控制器的方式啟動(dòng)AD轉(zhuǎn)換
- //參數(shù):無(wú)
- //返回值:轉(zhuǎn)換后的值
- //=======================================================================
- intAD_READ(void)
- {
- inti;
- inttemp,val=0;
- rADCCON|=0x2;//ADC轉(zhuǎn)換通過(guò)讀操作來(lái)啟動(dòng)
- temp=rADCDAT0&0x3ff;//啟動(dòng)ADC
- for(i=0;i<16;i++)
- {
- rADCCON|=0x1;//使能ADC轉(zhuǎn)換
- while(rADCCON&0x1);//判斷使能ADC轉(zhuǎn)換后被清零
- while(!(rADCCON&0x8000));//等待轉(zhuǎn)換結(jié)束
- val+=(rADCDAT0&0x3ff);//讀取ADC轉(zhuǎn)換的值
- }
- val=val>>4;//計(jì)算ADC轉(zhuǎn)換值
- returnval;
- }
- voidMain(void)
- {
- inttemp_val;
- U8mode;
- SelectFclk(2);//設(shè)置系統(tǒng)時(shí)鐘400M
- ChangeClockDivider(2,1);//設(shè)置分頻1:4:8
- CalcBusClk();//計(jì)算總線頻率
- rGPHCON&=~((3<<4)|(3<<6));
- rGPHCON|=(2<<4)|(2<<6);//GPH2--TXD[0];GPH3--RXD[0]
- rGPHUP=0x00;//使能上拉功能
- Uart_Init(0,115200);
- Uart_Select(0);
- while(1)
- {
- ADC_Select(2,49);
- Uart_Printf("SelectADCMode:1.Enable2.Readn");
- mode=Uart_Getch();
- Uart_Printf("n%cnn",mode);
- if(mode!=1&&mode!=2)
- {
- Uart_Printf("youselectwrongmodel!n");
- return;
- }
- switch(mode)
- {
- case1:
- Uart_Printf("ADCEnable-ConvertModen");
- temp_val=AD_ENABLE();
- break;
- case2:
- Uart_Printf("ADCRead-ConvertModen");
- temp_val=AD_READ();
- break;
- }
- Uart_Printf("ADCval=%dn",temp_val);//發(fā)送到串口顯示
- }
- }
評(píng)論