版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
9.6A/D和D/A轉(zhuǎn)換一、一般測控系統(tǒng)組成控制對象微型計(jì)算機(jī)信號處理信號處理信號處理傳感器1傳感器2傳感器n執(zhí)行部件放大驅(qū)動(dòng)A/D轉(zhuǎn)換器D/A轉(zhuǎn)換器多路開關(guān)采樣保持放大驅(qū)動(dòng)開關(guān)量9.6A/D和D/A轉(zhuǎn)換控微型計(jì)算機(jī)信號處理信號處理信號處11.傳感器將物理量轉(zhuǎn)換為電量2.信號處理環(huán)節(jié)信號調(diào)理,一般含放大、阻抗匹配、高低通濾波等3.多路轉(zhuǎn)換開關(guān)多路選擇一路,常用的有:CD4051、AD7501(八選擇一)4.采樣保持(采保)電路可工作于采樣、保持二種狀態(tài)。采樣時(shí),輸出與輸入相同;保持時(shí)在一定時(shí)間保持不變,一般用在A/D前端,保證在A/D轉(zhuǎn)換期間輸入電壓不變,提高A/D精度。常用的有:LF3981.傳感器2(一)轉(zhuǎn)換原理1、權(quán)電阻式D/A轉(zhuǎn)換器二、D/A(數(shù)模)轉(zhuǎn)換I0D02n-1RI1D12n-2RI2D22n-3RIn-1Dn-12RRf(R/2)VREFV0_
A+權(quán)電阻D/A轉(zhuǎn)換原理VO=-IRf(一)轉(zhuǎn)換原理二、D/A(數(shù)模)轉(zhuǎn)換I0D32.T型電阻網(wǎng)絡(luò)式D/A轉(zhuǎn)換器2.T型電阻網(wǎng)絡(luò)式D/A轉(zhuǎn)換器4(二)指標(biāo)1.分辨率分辨率是指最小輸出電壓(對應(yīng)于輸入數(shù)字量最低位增1所引起的輸出電壓增量)和最大輸出電壓(對應(yīng)于輸入數(shù)字量所有有效位全為1時(shí)的輸出電壓)之比,即表示DAC所能分辨的最小模擬信號的能力。 2.轉(zhuǎn)換精度絕對轉(zhuǎn)換精度是指滿刻度數(shù)字量輸入時(shí),模擬量輸出接近理論值的程度相對轉(zhuǎn)換精度一般用絕對轉(zhuǎn)換精度相對于滿量程輸出的百分?jǐn)?shù)來表示,有時(shí)也用數(shù)字量的最小有效值(LSB)的幾分之一來表示(二)指標(biāo)53.非線性誤差D/A轉(zhuǎn)換器的非線性誤差定義為實(shí)際轉(zhuǎn)換特性曲線與理想特性曲線之間的最大偏差,并以該偏差相對于滿量程的百分?jǐn)?shù)度量4.轉(zhuǎn)換速率/建立時(shí)間轉(zhuǎn)換速率實(shí)際是由建立時(shí)間來反映的建立時(shí)間是指數(shù)字量為滿刻度值(各位全為1)時(shí),DAC的模擬輸出電壓達(dá)到某個(gè)規(guī)定值(比如90%滿量程)時(shí)所需要的時(shí)間3.非線性誤差6三、A/D(模數(shù))轉(zhuǎn)換
A/D轉(zhuǎn)換器是指通過一定的電路將模擬量轉(zhuǎn)變?yōu)閿?shù)字量。A/D轉(zhuǎn)換后,輸出的數(shù)字信號有8位、l0位、12位和16位等。類型:雙積分、逐次逼近、并行等。三、A/D(模數(shù))轉(zhuǎn)換A/D轉(zhuǎn)換器是7VoVIND7D1D0逐次逼近式A/D轉(zhuǎn)換原理_+比較器逐次逼近寄存器(SAR)控制電路輸出緩沖寄存器D/A轉(zhuǎn)換器啟動(dòng)信號CLK時(shí)鐘轉(zhuǎn)換結(jié)束(一)A/D轉(zhuǎn)換原理VoVIND78(二)A/D轉(zhuǎn)換器的主要性能參數(shù)1.分辨率分辨率是指A/D轉(zhuǎn)換器能分辨的最小模擬輸入量。通常用能轉(zhuǎn)換成的數(shù)字量的位數(shù)來表示,如8位、10位、12位、16位等。2.轉(zhuǎn)換時(shí)間轉(zhuǎn)換時(shí)間是A/D完成一次轉(zhuǎn)換所需的時(shí)間。3.量程量程是指所能轉(zhuǎn)換的輸入電壓范圍。4.精度
A/D轉(zhuǎn)換精度分為絕對精度和相對精度兩種。(二)A/D轉(zhuǎn)換器的主要性能參數(shù)1.分辨率9(1)絕對精度:是指對應(yīng)于—個(gè)給定量,A/D轉(zhuǎn)換器的誤差,其誤差大小由實(shí)際模擬量輸入值與理論值之差來度量。(2)相對精度:由相對誤差決定。相對誤差是指絕對誤差與滿刻度值之比,—般用百分?jǐn)?shù)表示。例如,對于—個(gè)8位0~5V的A/D轉(zhuǎn)換器,如果其絕對誤差為:
1/2565=19.5mV
則其相對誤差為0.39%。(1)絕對精度:是指對應(yīng)于—個(gè)給定量,A/D轉(zhuǎn)換器的誤差,其101、采樣保持電路(1)采樣:把一個(gè)時(shí)間上連續(xù)變化的模擬量轉(zhuǎn)換為一個(gè)脈沖串,脈沖的幅度取決于輸入模擬量。(2)保持:是將采樣得到的模擬量值保持下來,使之等于采樣控制脈沖存在的最后瞬間的采樣值。(3)采樣定理:理論和實(shí)踐都證明,只要滿足下列條件,采樣保持得到的輸出信號在經(jīng)過信號處理后便可還原成原來的模擬輸入信號:(三)A/D轉(zhuǎn)換的輔助電路
1、采樣保持電路(三)A/D轉(zhuǎn)換的輔助電路11V0-
Av+S(t)ViTVcCbV0-S(t)ViTVcCb12S(t)υI(t)υSH(t)T1T2T3T4T5T6T7T8tttOOO(a)采樣脈沖(b)輸入電壓(c)采樣保持S(t)υI(t)υSH(t)T1T2T3T4T5T6T7T132、多路轉(zhuǎn)換開關(guān)在實(shí)際應(yīng)用時(shí),要解決多個(gè)回路和A/D、D/A轉(zhuǎn)換器之間的切換問題。一般采用兩種方法:(1)一種方法是用獨(dú)立的多路轉(zhuǎn)換模擬開關(guān)輪流切換各回路和A/D、D/A之間的通路,對于A/D轉(zhuǎn)換來說,要用到多路輸入一路輸出的模擬開關(guān)電路,對于D/A轉(zhuǎn)換來說,要用到一路輸入,多路輸出的模擬開關(guān)電路。(2)另一種方法是選擇帶有轉(zhuǎn)換開關(guān)的A/D、D/A轉(zhuǎn)換器。2、多路轉(zhuǎn)換開關(guān)14四、S3C2410A中的A/D模塊(一)概述
具有8通道模擬輸入的10位
模數(shù)轉(zhuǎn)換器(ADC)。在2.5MHz的A/D轉(zhuǎn)換器時(shí)鐘下,最大轉(zhuǎn)化速率可達(dá)到500KSPS。A/D轉(zhuǎn)換器支持片上采樣和保持功能。S3C2410A的AIN[7]和AIN[5]可用于連接觸摸屏的模擬信號輸入。
(二)特性逐次逼近式
分辯率:10-位線性度誤差:±2.0LSB最大轉(zhuǎn)換速率:500KSPS
供電電壓:3.3V
輸入模擬電壓范圍:0~3.3V
片上采樣保持功能查詢和中斷模式四、S3C2410A中的A/D模塊15(三)ADC控制寄存器(ADCCON)地址:0x58000000,可讀寫,復(fù)位值:0x3FC4
ECFLG(位15):AD轉(zhuǎn)換結(jié)束標(biāo)志(只讀)。0=A/D轉(zhuǎn)換操作中,1=A/D轉(zhuǎn)換結(jié)束PRSCEN(位14):A/D轉(zhuǎn)換器預(yù)分頻器使能0=停止,1=使能
PRSCVL(位13:6):A/D轉(zhuǎn)換器預(yù)分頻器數(shù)值,數(shù)據(jù)值N范圍:1~255,將PCLK進(jìn)行(N+1)分頻。
如PCLK=50MHZ,N=49,則A/D轉(zhuǎn)換器頻率=50MHz/(49+1)=1MHz轉(zhuǎn)換時(shí)間=1/1MHz×5=5us注意:ADC頻率應(yīng)該設(shè)置成小于PLCK的5倍,即N應(yīng)設(shè)置為大于4。(三)ADC控制寄存器(ADCCON)16SEL_MUX(位
5:3):模擬輸入通道選擇。000=AIN0 001=AIN1010=AIN2 011=AIN3100=AIN4 101=AIN5110=AIN6 111=AIN7STDBM(位2)0=普通模式1=Standby模式,A/D停止轉(zhuǎn)換,A/D數(shù)據(jù)寄存器保持原值SEL_MUX(位5:3):模擬輸入通道選擇。17READ_START(位1):
通過讀取來啟動(dòng)A/D轉(zhuǎn)換 0=停止通過讀取啟動(dòng),1=使能通過讀取啟動(dòng)ENABLE_START(位0):通過設(shè)置該位來啟動(dòng)A/D操作。如果READ_START是使能的,此位無效。0=無操作1=A/D轉(zhuǎn)換啟動(dòng),啟動(dòng)后該位被清零。READ_START(位1): 通過讀取來啟動(dòng)A/D轉(zhuǎn)換18(四)ADC轉(zhuǎn)換數(shù)據(jù)寄存器(ADCDAT0)地址:0x5800000C,可讀寫。位9~0為A/D轉(zhuǎn)換的數(shù)字值。范圍為:0~3FFH。思考:設(shè)計(jì)A/D驅(qū)動(dòng)程序,使之能實(shí)現(xiàn)對多路模擬量的采集。(四)ADC轉(zhuǎn)換數(shù)據(jù)寄存器(ADCDAT0)19#defineDRIVER_NAME
"myDriver"staticintmyDriver_Major=0;
/*DriverMajorNumber*/staticintAD_READ(void)
{
inti,j;intval,aa;val=0;
ADCCON|=0x2;
//ADC轉(zhuǎn)換通過讀操作來啟動(dòng)aa=ADCDAT0&0x03ff;
//啟動(dòng)ADC轉(zhuǎn)換
for(i=0;i<16;i++){
while(!(ADCCON&0x8000));
//判斷ADC轉(zhuǎn)換是否結(jié)束
val+=(ADCDAT0&0x03ff);//取出ADC轉(zhuǎn)換值
for(j=0;j<500;j++);
}val=val/16;//計(jì)算ADC平均轉(zhuǎn)換值
returnval;
}#defineDRIVER_NAME
"myDriv20/*DriverOperationFunctions*/
staticintmyDriver_open(structinode*inode,structfile*filp){
MOD_INC_USE_COUNT;
PRINTK("myDriveropencalled!\n");/*進(jìn)行ADC模塊設(shè)置,其中x<<n表示第n位設(shè)置為x(若x超過一位,則向高位順延)*/
ADCCON=(0<<0)|
//ADC轉(zhuǎn)換設(shè)置
未設(shè)置
(0<<1)|//讀AD數(shù)據(jù)觸發(fā)AD轉(zhuǎn)換
未使用
(0<<2)|//StandBy模式選擇
為普通操作模式
(49<<6)|
//CLKDIV=Fpclk/(49+1)
(1<<14);
//預(yù)分頻器使能軟件預(yù)設(shè)值
PRINTK("ADCINITOK\n");
return0;}/*DriverOperationFunctions21staticintmyDriver_release(structinode*inode,structfile*filp){
MOD_DEC_USE_COUNT;
PRINTK("myDriverreleasecalled!\n");return0;}staticintmyDriver_release(st22staticssize_tmyDriver_read(structfile*filp,char*adc_value,size_tcount,loff_t*f_pos){
intadc=0;size_tread_size=count;adc=AD_READ();
copy_to_user(adc_value,&adc,sizeof(adc));
PRINTK("adc_vale=%d\n",adc);
returnread_size;}staticintmyDriver_ioctl(structinode*inode,structfile*file,unsignedintch,unsignedlongarg){
PRINTK("myDriverioctlcalled!\n");
if((ch>7)||(ch<0))
{
PRINTK("notavalidparameter,parametermustbetwween0and8\n");
return-1;
}
ADCCON|=(ch<<3);//channelset
PRINTK("ADCINITOK\n");
return0;}staticssize_tmyDriver_read(s23/*DriverOperationstructure*/
staticstructfile_operationsmyDriver_fops={owner:
THIS_MODULE,
open:
myDriver_open,ioctl:
myDriver_ioctl,
read:
myDriver_read,
release:
myDriver_release,};/*ModuleInit&Exitfunction*/#ifdefCONFIG_DEVFS_FSdevfs_handle_tdevfs_myDriver_raw;#endif
/*DriverOperationstructure24staticint__initmyModule_init(void){
/*Moduleinitcode*/PRINTK("myModule_init\n");/*Driverregister*/myDriver_Major=register_chrdev(0,DRIVER_NAME,&myDriver_fops);
if(myDriver_Major<0){PRINTK("registerchardevicefail!\n");returnmyDriver_Major;}PRINTK("registermyDriverOK!Major=%d\n",myDriver_Major);#ifdefCONFIG_DEVFS_FSdevfs_myDriver_raw=devfs_register(NULL,"myDriver",DEVFS_FL_DEFAULT,myDriver_Major,0,S_IFCHR|S_IRUSR|S_IWUSR,&myDriver_fops,NULL);PRINTK("adddevfiletodevfsOK!\n");#endif
return0;}staticint__initmyModule_ini25staticvoid__exitmyModule_exit(void){/*Moduleexitcode*/
PRINTK("myModule_exit\n");
/*Driverunregister*/
if(myDriver_Major>0)
{#ifdefCONFIG_DEVFS_FS
devfs_unregister(devfs_myDriver_raw);#endif
unregister_chrdev(myDriver_Major,DRIVER_NAME);
}
return;}MODULE_AUTHOR("myname");MODULE_LICENSE("GPL");module_init(myModule_init);module_exit(myModule_exit);staticvoid__exitmyModule_ex26第九章嵌入式Linux驅(qū)動(dòng)程序開發(fā)課件3279.6A/D和D/A轉(zhuǎn)換一、一般測控系統(tǒng)組成控制對象微型計(jì)算機(jī)信號處理信號處理信號處理傳感器1傳感器2傳感器n執(zhí)行部件放大驅(qū)動(dòng)A/D轉(zhuǎn)換器D/A轉(zhuǎn)換器多路開關(guān)采樣保持放大驅(qū)動(dòng)開關(guān)量9.6A/D和D/A轉(zhuǎn)換控微型計(jì)算機(jī)信號處理信號處理信號處281.傳感器將物理量轉(zhuǎn)換為電量2.信號處理環(huán)節(jié)信號調(diào)理,一般含放大、阻抗匹配、高低通濾波等3.多路轉(zhuǎn)換開關(guān)多路選擇一路,常用的有:CD4051、AD7501(八選擇一)4.采樣保持(采保)電路可工作于采樣、保持二種狀態(tài)。采樣時(shí),輸出與輸入相同;保持時(shí)在一定時(shí)間保持不變,一般用在A/D前端,保證在A/D轉(zhuǎn)換期間輸入電壓不變,提高A/D精度。常用的有:LF3981.傳感器29(一)轉(zhuǎn)換原理1、權(quán)電阻式D/A轉(zhuǎn)換器二、D/A(數(shù)模)轉(zhuǎn)換I0D02n-1RI1D12n-2RI2D22n-3RIn-1Dn-12RRf(R/2)VREFV0_
A+權(quán)電阻D/A轉(zhuǎn)換原理VO=-IRf(一)轉(zhuǎn)換原理二、D/A(數(shù)模)轉(zhuǎn)換I0D302.T型電阻網(wǎng)絡(luò)式D/A轉(zhuǎn)換器2.T型電阻網(wǎng)絡(luò)式D/A轉(zhuǎn)換器31(二)指標(biāo)1.分辨率分辨率是指最小輸出電壓(對應(yīng)于輸入數(shù)字量最低位增1所引起的輸出電壓增量)和最大輸出電壓(對應(yīng)于輸入數(shù)字量所有有效位全為1時(shí)的輸出電壓)之比,即表示DAC所能分辨的最小模擬信號的能力。 2.轉(zhuǎn)換精度絕對轉(zhuǎn)換精度是指滿刻度數(shù)字量輸入時(shí),模擬量輸出接近理論值的程度相對轉(zhuǎn)換精度一般用絕對轉(zhuǎn)換精度相對于滿量程輸出的百分?jǐn)?shù)來表示,有時(shí)也用數(shù)字量的最小有效值(LSB)的幾分之一來表示(二)指標(biāo)323.非線性誤差D/A轉(zhuǎn)換器的非線性誤差定義為實(shí)際轉(zhuǎn)換特性曲線與理想特性曲線之間的最大偏差,并以該偏差相對于滿量程的百分?jǐn)?shù)度量4.轉(zhuǎn)換速率/建立時(shí)間轉(zhuǎn)換速率實(shí)際是由建立時(shí)間來反映的建立時(shí)間是指數(shù)字量為滿刻度值(各位全為1)時(shí),DAC的模擬輸出電壓達(dá)到某個(gè)規(guī)定值(比如90%滿量程)時(shí)所需要的時(shí)間3.非線性誤差33三、A/D(模數(shù))轉(zhuǎn)換
A/D轉(zhuǎn)換器是指通過一定的電路將模擬量轉(zhuǎn)變?yōu)閿?shù)字量。A/D轉(zhuǎn)換后,輸出的數(shù)字信號有8位、l0位、12位和16位等。類型:雙積分、逐次逼近、并行等。三、A/D(模數(shù))轉(zhuǎn)換A/D轉(zhuǎn)換器是34VoVIND7D1D0逐次逼近式A/D轉(zhuǎn)換原理_+比較器逐次逼近寄存器(SAR)控制電路輸出緩沖寄存器D/A轉(zhuǎn)換器啟動(dòng)信號CLK時(shí)鐘轉(zhuǎn)換結(jié)束(一)A/D轉(zhuǎn)換原理VoVIND735(二)A/D轉(zhuǎn)換器的主要性能參數(shù)1.分辨率分辨率是指A/D轉(zhuǎn)換器能分辨的最小模擬輸入量。通常用能轉(zhuǎn)換成的數(shù)字量的位數(shù)來表示,如8位、10位、12位、16位等。2.轉(zhuǎn)換時(shí)間轉(zhuǎn)換時(shí)間是A/D完成一次轉(zhuǎn)換所需的時(shí)間。3.量程量程是指所能轉(zhuǎn)換的輸入電壓范圍。4.精度
A/D轉(zhuǎn)換精度分為絕對精度和相對精度兩種。(二)A/D轉(zhuǎn)換器的主要性能參數(shù)1.分辨率36(1)絕對精度:是指對應(yīng)于—個(gè)給定量,A/D轉(zhuǎn)換器的誤差,其誤差大小由實(shí)際模擬量輸入值與理論值之差來度量。(2)相對精度:由相對誤差決定。相對誤差是指絕對誤差與滿刻度值之比,—般用百分?jǐn)?shù)表示。例如,對于—個(gè)8位0~5V的A/D轉(zhuǎn)換器,如果其絕對誤差為:
1/2565=19.5mV
則其相對誤差為0.39%。(1)絕對精度:是指對應(yīng)于—個(gè)給定量,A/D轉(zhuǎn)換器的誤差,其371、采樣保持電路(1)采樣:把一個(gè)時(shí)間上連續(xù)變化的模擬量轉(zhuǎn)換為一個(gè)脈沖串,脈沖的幅度取決于輸入模擬量。(2)保持:是將采樣得到的模擬量值保持下來,使之等于采樣控制脈沖存在的最后瞬間的采樣值。(3)采樣定理:理論和實(shí)踐都證明,只要滿足下列條件,采樣保持得到的輸出信號在經(jīng)過信號處理后便可還原成原來的模擬輸入信號:(三)A/D轉(zhuǎn)換的輔助電路
1、采樣保持電路(三)A/D轉(zhuǎn)換的輔助電路38V0-
Av+S(t)ViTVcCbV0-S(t)ViTVcCb39S(t)υI(t)υSH(t)T1T2T3T4T5T6T7T8tttOOO(a)采樣脈沖(b)輸入電壓(c)采樣保持S(t)υI(t)υSH(t)T1T2T3T4T5T6T7T402、多路轉(zhuǎn)換開關(guān)在實(shí)際應(yīng)用時(shí),要解決多個(gè)回路和A/D、D/A轉(zhuǎn)換器之間的切換問題。一般采用兩種方法:(1)一種方法是用獨(dú)立的多路轉(zhuǎn)換模擬開關(guān)輪流切換各回路和A/D、D/A之間的通路,對于A/D轉(zhuǎn)換來說,要用到多路輸入一路輸出的模擬開關(guān)電路,對于D/A轉(zhuǎn)換來說,要用到一路輸入,多路輸出的模擬開關(guān)電路。(2)另一種方法是選擇帶有轉(zhuǎn)換開關(guān)的A/D、D/A轉(zhuǎn)換器。2、多路轉(zhuǎn)換開關(guān)41四、S3C2410A中的A/D模塊(一)概述
具有8通道模擬輸入的10位
模數(shù)轉(zhuǎn)換器(ADC)。在2.5MHz的A/D轉(zhuǎn)換器時(shí)鐘下,最大轉(zhuǎn)化速率可達(dá)到500KSPS。A/D轉(zhuǎn)換器支持片上采樣和保持功能。S3C2410A的AIN[7]和AIN[5]可用于連接觸摸屏的模擬信號輸入。
(二)特性逐次逼近式
分辯率:10-位線性度誤差:±2.0LSB最大轉(zhuǎn)換速率:500KSPS
供電電壓:3.3V
輸入模擬電壓范圍:0~3.3V
片上采樣保持功能查詢和中斷模式四、S3C2410A中的A/D模塊42(三)ADC控制寄存器(ADCCON)地址:0x58000000,可讀寫,復(fù)位值:0x3FC4
ECFLG(位15):AD轉(zhuǎn)換結(jié)束標(biāo)志(只讀)。0=A/D轉(zhuǎn)換操作中,1=A/D轉(zhuǎn)換結(jié)束PRSCEN(位14):A/D轉(zhuǎn)換器預(yù)分頻器使能0=停止,1=使能
PRSCVL(位13:6):A/D轉(zhuǎn)換器預(yù)分頻器數(shù)值,數(shù)據(jù)值N范圍:1~255,將PCLK進(jìn)行(N+1)分頻。
如PCLK=50MHZ,N=49,則A/D轉(zhuǎn)換器頻率=50MHz/(49+1)=1MHz轉(zhuǎn)換時(shí)間=1/1MHz×5=5us注意:ADC頻率應(yīng)該設(shè)置成小于PLCK的5倍,即N應(yīng)設(shè)置為大于4。(三)ADC控制寄存器(ADCCON)43SEL_MUX(位
5:3):模擬輸入通道選擇。000=AIN0 001=AIN1010=AIN2 011=AIN3100=AIN4 101=AIN5110=AIN6 111=AIN7STDBM(位2)0=普通模式1=Standby模式,A/D停止轉(zhuǎn)換,A/D數(shù)據(jù)寄存器保持原值SEL_MUX(位5:3):模擬輸入通道選擇。44READ_START(位1):
通過讀取來啟動(dòng)A/D轉(zhuǎn)換 0=停止通過讀取啟動(dòng),1=使能通過讀取啟動(dòng)ENABLE_START(位0):通過設(shè)置該位來啟動(dòng)A/D操作。如果READ_START是使能的,此位無效。0=無操作1=A/D轉(zhuǎn)換啟動(dòng),啟動(dòng)后該位被清零。READ_START(位1): 通過讀取來啟動(dòng)A/D轉(zhuǎn)換45(四)ADC轉(zhuǎn)換數(shù)據(jù)寄存器(ADCDAT0)地址:0x5800000C,可讀寫。位9~0為A/D轉(zhuǎn)換的數(shù)字值。范圍為:0~3FFH。思考:設(shè)計(jì)A/D驅(qū)動(dòng)程序,使之能實(shí)現(xiàn)對多路模擬量的采集。(四)ADC轉(zhuǎn)換數(shù)據(jù)寄存器(ADCDAT0)46#defineDRIVER_NAME
"myDriver"staticintmyDriver_Major=0;
/*DriverMajorNumber*/staticintAD_READ(void)
{
inti,j;intval,aa;val=0;
ADCCON|=0x2;
//ADC轉(zhuǎn)換通過讀操作來啟動(dòng)aa=ADCDAT0&0x03ff;
//啟動(dòng)ADC轉(zhuǎn)換
for(i=0;i<16;i++){
while(!(ADCCON&0x8000));
//判斷ADC轉(zhuǎn)換是否結(jié)束
val+=(ADCDAT0&0x03ff);//取出ADC轉(zhuǎn)換值
for(j=0;j<500;j++);
}val=val/16;//計(jì)算ADC平均轉(zhuǎn)換值
returnval;
}#defineDRIVER_NAME
"myDriv47/*DriverOperationFunctions*/
staticintmyDriver_open(structinode*inode,structfile*filp){
MOD_INC_USE_COUNT;
PRINTK("myDriveropencalled!\n");/*進(jìn)行ADC模塊設(shè)置,其中x<<n表示第n位設(shè)置為x(若x超過一位,則向高位順延)*/
ADCCON=(0<<0)|
//ADC轉(zhuǎn)換設(shè)置
未設(shè)置
(0<<1)|//讀AD數(shù)據(jù)觸發(fā)AD轉(zhuǎn)換
未使用
(0<<2)|//StandBy模式選擇
為普通操作模式
(49<<6)|
//CLKDIV=Fpclk/(49+1)
(1<<14);
//預(yù)分頻器使能軟件預(yù)設(shè)值
PRINTK("ADCINITOK\n");
return0;}/*DriverOperationFunctions48staticintmyDriver_release(structinode*inode,structfile*filp){
MOD_DEC_USE_COUNT;
PRINTK("myDriverreleasecalled!\n");return0;}staticintmyDriver_release(st49staticssize_tmyDriver_read(structfile*filp,char*adc_value,size_tcount,loff_t*f_pos){
intadc=0;size_tread_size=count;adc=AD_READ();
copy_to_user(adc_value,&adc,sizeof(adc));
PRINTK("adc_vale=%d\n",adc);
returnread_size;}staticintmyDriver_ioctl(structinode*inode,structfile*file,unsignedintch,unsignedlongarg){
PRINTK("myDriverioctlcalled!\n");
if((ch>7)||(ch<0))
{
PRINTK("notavalidparameter,parametermustbetwween0and8\n");
return-1;
}
ADCCON|=(ch<<3);//channelset
PRINTK("ADCINITOK\n");
return0;}staticssize_tmyDriver_rea
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年新能源電池代加工合作協(xié)議書4篇
- 二零二五版壓力罐安裝工程風(fēng)險(xiǎn)評估與管理合同2篇
- 2025年度煤礦股權(quán)轉(zhuǎn)讓與新能源項(xiàng)目合作開發(fā)合同4篇
- 科學(xué)教育的新篇章小學(xué)生實(shí)踐操作的重要性
- 提升員工安全意識安全演習(xí)不可或缺
- 科學(xué)補(bǔ)充蛋白質(zhì)助力孕期媽媽健康成長
- 2025年度二零二五版門面裝修工程環(huán)保驗(yàn)收合同范本文檔4篇
- 專利技術(shù)獨(dú)家轉(zhuǎn)讓合同 2024年版版
- 2025年環(huán)境衛(wèi)生設(shè)施建設(shè)與維護(hù)協(xié)議3篇
- 智能機(jī)器人與寵物健康管理的結(jié)合應(yīng)用研究
- 人教版(2025新版)七年級下冊數(shù)學(xué)第七章 相交線與平行線 單元測試卷(含答案)
- GB/T 44351-2024退化林修復(fù)技術(shù)規(guī)程
- 從跨文化交際的角度解析中西方酒文化(合集5篇)xiexiebang.com
- 中藥飲片培訓(xùn)課件
- 醫(yī)院護(hù)理培訓(xùn)課件:《早產(chǎn)兒姿勢管理與擺位》
- 空氣自動(dòng)站儀器運(yùn)營維護(hù)項(xiàng)目操作說明以及簡單故障處理
- 2022年12月Python-一級等級考試真題(附答案-解析)
- T-CHSA 020-2023 上頜骨缺損手術(shù)功能修復(fù)重建的專家共識
- Hypermesh lsdyna轉(zhuǎn)動(dòng)副連接課件完整版
- 小學(xué)六年級數(shù)學(xué)計(jì)算題100道(含答案)
- GB/T 7946-2015脈沖電子圍欄及其安裝和安全運(yùn)行
評論
0/150
提交評論