驅(qū)動開發(fā)-ADC轉(zhuǎn)換技術(shù)_第1頁
驅(qū)動開發(fā)-ADC轉(zhuǎn)換技術(shù)_第2頁
驅(qū)動開發(fā)-ADC轉(zhuǎn)換技術(shù)_第3頁
驅(qū)動開發(fā)-ADC轉(zhuǎn)換技術(shù)_第4頁
驅(qū)動開發(fā)-ADC轉(zhuǎn)換技術(shù)_第5頁
已閱讀5頁,還剩2頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、ADC轉(zhuǎn)換技術(shù)一、 確定任務(wù)1、 掌握基本的字符設(shè)備的驅(qū)動程序設(shè)計。2、 掌握基本的文件操作。3、 掌握在操作系統(tǒng)下的AD轉(zhuǎn)換驅(qū)動程序的原理。二、 學(xué)習(xí)內(nèi)容 1、 閱讀S5PV210的數(shù)據(jù)手冊,熟悉AD轉(zhuǎn)換部分的原理。2、 編寫AD轉(zhuǎn)換的應(yīng)用程序。3、 編寫makefile文件。4、下載并調(diào)試AD轉(zhuǎn)換的應(yīng)用程序。三、基礎(chǔ)知識1、 硬件原理:a) 原理圖:由原理圖可知,本實驗使用AD通道。b) 系統(tǒng)框架圖:c) 寄存器簡介:寄存器ADCMUX設(shè)置AD轉(zhuǎn)換的analog的來源。本實驗中SEL_MUX3:0設(shè)置為0000 即選擇AIN0作為輸入。設(shè)置AD轉(zhuǎn)換器的工作模式,如位數(shù)、通道、使能等。AD轉(zhuǎn)

2、換值的存儲寄存器,當(dāng)AD轉(zhuǎn)換工作在普通模式下,XPDATA存儲的是轉(zhuǎn)換后的值。四、代碼設(shè)計 1、 AD轉(zhuǎn)換器的原理:請讀者自行查閱資料。2、 驅(qū)動原理:該驅(qū)動實現(xiàn)為一個字符設(shè)備,通過ioctl函數(shù)來設(shè)置祥光寄存器的值,通過read函數(shù)來獲取轉(zhuǎn)換之后的值。3、 驅(qū)動簡析:該驅(qū)動主要實現(xiàn)了ioctl、read函數(shù),包含頭文件與AD轉(zhuǎn)換有關(guān)部分的是mach/adc.h和/arch/arm/plat-s5pv210/include/plat/adc.h。主要驅(qū)動代碼如下(詳細(xì)代碼請讀者查看附件):static struct platform_driver s3c_adc_driver = .probe

3、 = s3c_adc_probe, .remove = s3c_adc_remove, .suspend = s3c_adc_suspend, .resume = s3c_adc_resume, .driver= .owner= THIS_MODULE,.name= "s3c-adc",;這個結(jié)構(gòu)體用于定義一個平臺資源。static const struct file_operations s3c_adc_fops = .owner= THIS_MODULE,.read= s3c_adc_read,.open= s3c_adc_open,.ioctl= s3c_adc_io

4、ctl,;static struct miscdevice s3c_adc_miscdev = .minor= ADC_MINOR,.name= "adc",.fops= &s3c_adc_fops,;這兩個結(jié)構(gòu)體用于定義AD轉(zhuǎn)換的操作方法和adc設(shè)備結(jié)構(gòu)的添加。a) 模塊探測函數(shù)static int _devinit s3c_adc_probe(struct platform_device *pdev)res = platform_get_resource(pdev, IORESOURCE_MEM, 0); /獲取平臺資源adc_mem = request_mem

5、_region(res->start, size, pdev->name); /申請內(nèi)存base_addr = ioremap(res->start, size); /映射寄存器控制基地址adc_clock = clk_get(&pdev->dev, "adc");clk_enable(adc_clock); /使能時鐘plat_data = s3c_adc_get_platdata(&pdev->dev);writel(plat_data->delay & 0xffff, base_addr + S3C_ADCD

6、LY); /設(shè)置轉(zhuǎn)換延時時間writel(readl(base_addr + S3C_ADCCON) | S3C_ADCCON_RESSEL_12BIT, base_addr + S3C_ADCCON);/設(shè)置AD轉(zhuǎn)換通道 轉(zhuǎn)換精度等writel(readl(base_addr + S3C_ADCCON) | S3C_ADCCON_STDBM) & S3C_ADCCON_PRSCEN, /設(shè)置預(yù)分頻值base_addr + S3C_ADCCON);ret = misc_register(&s3c_adc_miscdev); /注冊misc設(shè)備b) 設(shè)備讀取和控制函數(shù)static

7、 ssize_t s3c_adc_read(struct file *file, char _user *buffer, size_t size, loff_t *pos)s3c_adc_save_SFR_on_ADC(); /保存寄存器值adc_value = s3c_adc_convert(); /AD轉(zhuǎn)換s3c_adc_restore_SFR_on_ADC(); /恢復(fù)寄存器值if (copy_to_user(buffer, &adc_value, sizeof(unsigned int) /將轉(zhuǎn)換好的AD數(shù)值傳遞給用戶空間static int s3c_adc_ioctl(str

8、uct inode *inode, struct file *file,unsigned int cmd, unsigned long arg)case ADC_INPUT_PIN: adc_port = (unsigned int) arg; /設(shè)置輸入端口c) 模塊入口函數(shù)和出口函數(shù):int _init s3c_adc_init(void)return platform_driver_register(&s3c_adc_driver); /平臺設(shè)備注冊void _exit s3c_adc_exit(void)platform_driver_unregister(&s3c_a

9、dc_driver); /平臺設(shè)備注銷4、 驅(qū)動模塊makefile請仿照前幾章驅(qū)動模塊形式編寫。5、 測試程序int main(void)fprintf(stderr, "press Ctrl-C to stopn");int fd = open("/dev/adc", O_RDONLY); /打開設(shè)備if (fd < 0) perror("open ADC device:");return 1;ioctl(fd,'S',0); /選擇AD轉(zhuǎn)換的通道,由上面硬件原理圖分析得本實驗使用AIN0for(;) nsi

10、gned int i;read(fd, &i, sizeof(unsigned int); /讀取AD轉(zhuǎn)換后的值printf("adc = %dn",i);usleep(500* 1000);close(fd);測試程序請參考前面給出的通用makefile文件,并將TARGET修改為本實驗的目標(biāo)文件adc_test五、編譯代碼和運行1、 在PC機(jī)上建立目錄/gec/adc/test將上述adc_test.c與makefile文件拷貝到該目錄下,在在終端上鍵入make命令,即可生成目標(biāo)文件。將adc_test文件下載到/tmp目錄。詳細(xì)見附件目錄中的代碼。2、 在終端輸入:rootgec /tmp# chmod +x adc_test rootgec /tmp# ./adc_test 回車之后

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論