版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領
文檔簡介
1、【原創(chuàng)】從零入手Kinetis系統(tǒng)開發(fā)(七之ADC模塊2012-02-2922:52發(fā)表系統(tǒng)分類:嵌入式系統(tǒng)自定義分類:Kinetis標簽:Kinetis K60IAR ADC今天是2月最后一天,而且還是四年一次的2月29日,為了紀念這難得的一天還是決定寫點東西,呵呵。在連續(xù)寫了幾篇有關(guān)飛思卡爾開發(fā)環(huán)境(IDE的博客之后,覺著雖然有點新意有點小技巧在里面,不過看多了估計大家也看膩歪了也會覺著其實寫了那么多沒實際內(nèi)容(其實真有的,這些小技巧我還是花費了一些心思專研了一番的,哈哈,所以這次就再爆點實料,繼續(xù)更新從零入手系列。前一陣兒,自己的確在找狀態(tài),因為放假回來之后覺著對Kinetis生疏了不少
2、,思路有些空白,所以私底下彌補了一番,真的是臺上十分鐘,臺下十年功,當然不是在給開源者邀功頌德之類的,就是明白了為什么好多人不愿意開源,其實一方面可能的確涉及到自己的知識產(chǎn)權(quán)和核心的東西,還有就是想要開源不單單是簡單的貼出源代碼這么簡單(這點很同意AET博主說的,其實作為開源者也是,作為開源者,開源常常會拖帶一些麻煩的義務還有因為自己辛苦的勞動被別人簡單的貼出去連轉(zhuǎn)載兩個字都不加的委屈,說真的,簡單的貼出源代碼,估計沒幾個人能看懂,當然代碼風格好的就不算了,嘿嘿,所以開源需要很大的勇氣。暈,又扯偏了,呵呵,還是繼續(xù)說正事吧,哈哈又是老慣例,啰嗦了一堆,所以老朋友可以直接跳的該段了,哈哈,本篇就
3、拿Kinetis的ADC模塊開刀,其實有過網(wǎng)友說急需DMA的例程還有說寫寫細說寄存器使用方法之類的,不是不想寫,是的確我還沒用到DMA之類的,所以可能還需一些時日,不過保證肯定會有的,如果有先寫出來的還是歡迎分享出來,獨樂樂不如眾樂樂嘛,哈哈,下面進入正題:1.Kinetis的ADC模塊的一些特點(以K60為例,挑重要的說了,一些AD模塊常見的特點就不提了,呵呵:(1最高16位AD轉(zhuǎn)換精度,逐次逼近型的,所以速度沒問題,而且能做到如此精度已實屬不易了,再往高估計就該換-的了;(2最多4對差分模擬輸入通道和24個單端模擬輸入通道,對一般工業(yè)應用足夠了,其實在對AD要求不高的應用還是用內(nèi)部AD好些
4、,選外部AD的話一是操作起來麻煩,還有就是對模擬電路布局布線上還是有些技巧的;(3輸出精度可選,例如差分的話可編程16位,13位,11位和9位模式,單端的話可編程為16位, 12位,10位和8位,不明白為什么差分精度非要比單端多1位,有知道的希望不吝告訴一下,在下面留言即可,呵呵;(4輸入時鐘可選四種時鐘,即bus_clock,bus_clock/2,ALTCK,ADACK;(5內(nèi)設內(nèi)部溫度傳感器,用于監(jiān)控芯片溫度,這個還是有一定用途的,不過對他的精度不要有過高期望;(6硬件平均功能,對AD轉(zhuǎn)換結(jié)果在隊列里平均之后輸出,挺實用的,要是再能對列排列一下就好了,咳咳,有點要求太高了,哈哈;(7帶自
5、校準模式,用過外部AD的知道,這個功能是必須的但又頗有點小道道的,深入做過項目的肯定知道,呵呵;(8最高64倍PGA(programable gain Amplifier,加上這個還是讓俺們給飛思卡爾加點滿意分的,哈哈。2.Kinetis的ADC內(nèi)部結(jié)構(gòu)框圖,是我們接下來的編程的依據(jù),老套路,上圖: 可能第一眼我們的感覺都是。有點復雜哈,咳咳,所以我在圖中對重要的部分用紅線圈出來逐個分析了下,怎樣,應該初步了然了吧,圖中我圈出來的是重點抓住的,下面軟件編程的時候需要用到,其他的可以隨便看看,前提是你有足夠的耐心去看一堆英文說明了,哈哈。3.軟件編程部分,其實無非就是操作寄存器,其實按照data
6、sheet的來就可以,另外強調(diào)一下,官方例程給出的是PDB硬件觸發(fā),覺著有點麻煩,所以按照平時常用的方法(對我來說,還是習慣軟件觸發(fā)針對Tower系統(tǒng)寫了下,采用的是單端模式。如下:/*Routine:ADC_Init*input:ADC-ADC0and ADC1module selectionbits:0-8bit,1-12bit,2-10bit,3-16bitchannel:023in total of24channels in single-ended convertion modemode:INT_MODE,SEARCH_MODE(母語解釋一下吧,哈哈,這里分為中斷方式和查詢方式*/v
7、oid ADC_Init(ADC_MemMapPtr ADC,uint8bits,uint8channel,uint8modeif(ADC=ADC0_BASE_PTRSIM_SCGC6|=SIM_SCGC6_ADC0_MASK;/*turn on the ADC0clock*/else if(ADC=ADC1_BASE_PTRSIM_SCGC3|=(SIM_SCGC3_ADC1_MASK;/*turn on the ADC1clock*/ADC_CFG1_REG(ADC|=ADC_CFG1_ADIV(3/*normal power,clock rate is(inputclock/8*/ +A
8、DC_CFG1_ADLSMP_MASK/*long sample time*/+ADC_CFG1_MODE(bits/*bits range0to3(0-8bit,1-12bit,2-10bit,3-16bit*/+ADC_CFG1_ADICLK(1;/*inputclock is busclock/2*/ADC_CFG2_REG(ADC&=(ADC_CFG2_MUXSEL_MASK/*a registers is selected*/+ADC_CFG2_ADACKEN_MASK/*Asynchronous clock output disabled*/+ADC_CFG2_ADHSC_
9、MASK/*Normal conversion sequence selected*/+ADC_CFG2_ADLSTS_MASK;/*Default longest sample time.*/*set default status:Software triger(a convertion is initated following a write toSC1Acompare function disabled,DMA is disabled,default voltage reference pin (external pins VREFH and VREFL.*/ADC_SC2_REG(A
10、DC=0;ADC_SC3_REG(ADC|=ADC_SC3_ADCO_MASK/*continuous conversions*/+ADC_SC3_AVGE_MASK/*hardware averages enabled.*/+ADC_SC3_AVGS(3;/*4samples average*/-when in software triger mode,a conversion is actived after the ADC_SC1A is writed. ADC_SC1_REG(ADC,0=ADC_SC1_ADCH(channel;/*single-ended AD20channel i
11、s selected*/if(mode=INT_MODEADC_SC1_REG(ADC,0|=ADC_SC1_AIEN_MASK;/*conversion complete interrrupt enabled */if(ADC=ADC0_BASE_PTRenable_irq(adc0_isr_no;/*enable the ADC0IRQ interrupt*/else if(ADC=ADC1_BASE_PTRenable_irq(adc1_isr_no;/*enable the ADC1IRQ interrupt*/else if(mode=SEARCH_MODEADC_SC1_REG(A
12、DC,0&=ADC_SC1_AIEN_MASK;/*conversion complete interrrupt disabled*/ /* *Routine:Read_ADC *input: ADC-ADC0 and ADC1 module selection result: the pointer of the return value of the convertion result. */ void Read_ADC(ADC_MemMapPtr ADC, uint16 * result while(!(ADC_SC1_REG(ADC,0&ADC_SC1_COCO_MAS
13、K; /* wait until the selected numbers of convertion(determined by the AGVS bits */ *result = ADC_R_REG(ADC,0; /* clear the COCO flag by reading the corresponding data register. */ /* *Routine:adc0_isr *Description: the interrupt service routine of ADC0 */ void adc0_isr(void (void ADC0_RA; /* *Routin
14、e:adc1_isr *Description: the interrupt service routine of ADC1 */ void adc1_isr(void (void ADC1_RA; 在這里解釋下上面代碼,其實看英文注釋就行,我每步都做了簡單的注釋,按照步驟來即可。其實主 要分兩部分,一個就是其 AD 初始化部分,主要操作寄存器為 ADC_SC1ADC_SC3和 ADC_CFG1ADC_CFG2。輸入?yún)?shù)包括 ADC 模塊選擇(包括兩個,即 ADC0和 ADC1) ,轉(zhuǎn)換精度 選擇(8位,10位,12位,16位) ,通道號(由于是單端模式,所以范圍為023共24個通道)和輸 出
15、模式(查詢或者中斷模式) ;另外就是讀結(jié)果寄存器部分,包括了查詢方式讀和中斷方式讀(我使 用了查詢方式,所以中斷方式我設置了空讀,呵呵,其實根本沒用到) ,完整文件見附件。 4.再補充一部分,即主函數(shù)內(nèi)部的調(diào)用方法,由于本例程是根據(jù) Tower 系統(tǒng)寫的,而系統(tǒng)板上電位器 的分壓端是連在 ADC1_DM1端上的,不過對單端模式來說其實是連在了 AD20這個通道上的,如下 圖通道安排(看到 Chapter3了吧,呵呵,find it in chapter3, you can get it,哈哈) : 下面是具體在 main 函數(shù)里的調(diào)用方法,如下: void main(void /-insert your code in the following-uint16 AD_Result; /* 聲明 AD 轉(zhuǎn)換結(jié)果變量,存儲 AD 值 */ ADC_Init(ADC1, 3, 20, SEARCH_MODE; /* 初始化 AD1位單通道20輸入,轉(zhuǎn)換結(jié)果16bit, 查詢模 式 */ EnableInterrupts; while(1
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 教師職稱述職報告范文錦集8篇
- 買賣合同協(xié)議書集錦七篇
- 五星級網(wǎng)吧員工管理制度
- 培訓課件 -企業(yè)戰(zhàn)略性人力資源管理
- 酒店弱電系統(tǒng)設計方案(二)
- 佳作欣賞廣播稿3篇
- 飼料運輸合同
- 出租車間廠房合同
- 停車場出租合同范文
- 門面房租賃合同范文
- T-ISEAA 001-2020 網(wǎng)絡安全等級保護測評高風險判定指引
- 崔允漷-基于課程標準的教學
- 2023年小學五年級下冊英語期末試卷分析,菁選3篇
- DL-T 2231-2021 油紙絕緣電力設備頻域介電譜測試導則
- 員工月度績效考核管理辦法
- 2023年云南保山電力股份有限公司招聘筆試題庫及答案解析
- GB/T 41904-2022信息技術(shù)自動化基礎設施管理(AIM)系統(tǒng)要求、數(shù)據(jù)交換及應用
- GB/T 41908-2022人類糞便樣本采集與處理
- 信息系統(tǒng)運維服務方案
- 簡支梁、懸臂梁撓度計算程序(自動版)
- 統(tǒng)編版小學四年級語文上冊五六單元測試卷(附答案)
評論
0/150
提交評論