<form id="itnzz"><noscript id="itnzz"></noscript></form>

          1. <menuitem id="itnzz"></menuitem>
          2. 成人午夜激情在线观看,国产精品一线天粉嫩av,99精品国产综合久久久久五月天 ,一卡2卡三卡4卡免费网站,国产高清在线男人的天堂,五月天国产成人AV免费观看,67194熟妇在线观看线路,成人无码潮喷在线观看
            現在位置:范文先生網>理工論文>電子通信論文>μC/OS-II實時內核下的A/D驅動程序設計

            μC/OS-II實時內核下的A/D驅動程序設計

            時間:2023-02-20 22:38:03 電子通信論文 我要投稿
            • 相關推薦

            μC/OS-II實時內核下的A/D驅動程序設計

            摘要:詳細分析在μC/OS-II實時內核下驅動程序讀取A/D的三種方法;闡述C8051F015單片機的A/D轉換器的配置、轉換特點及其驅動程序讀取A/D采用的方法;針對C8051F015單片機分析A/D驅動程序設計的方法和思想。這些方法和思想為在μC/OS-II下訪問其它類型的A/D提供了很好的借鑒。

                關鍵詞:μC/OS-II A/D 驅動程序 C8051F015

            A/D轉換是單片機數據采集系統的重要組成部分,實時內核下A/D驅動程序的實現過程主取決于A/D轉換器的轉換時間。本文首先比較和分析μC/OS-II下A/D采樣數據的三種方法;其次介紹C8051F015單片機A/D模數轉換器配置及特點;最后,在μC/OS-II內核移植到8位單片機C8051F015的基礎上,介紹編寫A/D驅動程序的一般思想和方法。

            1 μC/OS-II實時內核下的A/D讀方法

            實時內核下,驅動程序采用什么方法讀取A/D采樣數據是首先考慮的問題。許多因素將影響讀取A/D,如A/D的轉換時間、模擬值的轉換頻率、輸入通道數等,但最主要的取決于A/D的轉換時間。典型的A/D轉換典型的A/D轉換電路由模擬多路復用器(MUX)、放大器和模數轉換器(ADC)三部分組成。下面描述讀取A/D的三種方法。
            (范文先生網www.ycxgx.cn收集整理)
                圖1所示的是第1種讀取方法。假設A/D轉換器的轉換時間較慢(5ms以上)。應用程序調用圖1所示的驅動程序,并傳遞要讀取的通道。驅動程序通過MUX選擇要讀取的模擬通道(①)開始讀。有,延時幾μs以便使信號通過MUX傳遞,并之穩定下來。接著,ADC被觸發開始轉換(②)。然后驅動程序延時一段時間以完成轉換(③_。延時時間必須比ADC轉換時間長。最后驅動程序讀取ADC轉換結果(④)。并將轉換結果返回到應用程序(⑤)。

            圖2所示的是第2種讀取方法。當模擬轉換完成后,ADC產生的個中斷信號。若ADC轉換完成,ISR給信號量發一個信號(⑤),通知驅動程序,ADC已經完成轉換。如果ADC在規定的時限內沒有完成轉換。信號量超過(③),則驅動程序不再等待下去。驅動程序和中斷服務子程序(ISR)的偽代碼如下:

            ADRd(ChannelNumber)

            {

            選擇要讀取的模擬輸入通道;

            等待AMUX輸出穩定;

            啟動ADC轉換;

            等待來自ADC轉換結束中斷產生的信號量;

            if(超時){

            *eer=信號錯誤;

            return;

            }else{

            讀取ADC轉換結果并將其返回到應用程序;

            }

            }

                ADCoversion Complete ISR {

            保存全部CPU寄存器; /*將CPU的PSW、ACC、B、DPL、DPH及Rn入棧*/

            通知內核進入ISR(調用OSIntEnter()或OSIntNesting直接加1);

            發送ADC轉換完成信號; /*利用μC/OS-II內核的OSSemPost()*/

            通知內核退出ISR(調用OSIntExit());

            恢復所有CPU寄存器;/*將CPU的PSW、ACC、B、DPL、DPH及Rn出棧*/

            執行中斷返回指令(即RETI);

            }

            在這種方法里,要求ISR執行時間與調用等待信號的時間之和為A/D轉換時間。

            如果A/D轉換時間小于處理中斷時間與等待信號所需的時間之和,則可以用第三種方法。如圖3所示,前兩步(①②同以上兩種方法)結束后,驅動程序接著在一個軟件循環中等待(③)ADC直到完成轉換。在循環等待時,驅動程序檢測ADC的狀態(BUSY)信號。如果等待時間超過設定的定時值(軟件定時),則結束等待循環(循環等超時)。如果在循環等待中,檢測到ADC發出轉換結束的信號(BUSY)時,驅動程序讀取ADC轉換結果(④)并將結果返回到應用程序(⑤)。驅動程序偽代碼如下:

            ADRd(ChannelNumber){

            選擇要讀取的模擬輸入通道;

            等待AMUX輸出穩定;

            啟動ADC轉換;

            啟動超時定時器;

            while(ADC Busy & Counter 0);/*循環檢測*/

            if(Counter==0){

            *err=信號錯誤;

            return;

            }else{

            讀取ADC轉換結果并將其返回到應用程序;

            }

            }

            A、D轉換速度快,這種驅動程序的實現是最好的。

            2 C8051F015單片機的A/D轉換器

            2.1 C8051C015單片機

            C8051C015的美國Cygnal公司新推出的高速SOC型C8051Fxxx系列單片機。它的內核CIP-51與MCS-51的指令集完全兼容,CIP-51的系統時鐘頻率在0~25MHz。C8051Fxxx系列單片機采用流水線結構,與標準的8051相比,指令執行速度有很大的提高。CIP-51內核的指令執行時間是以系統時鐘為單位,70%的指令執行時間為1個或2個系統時鐘周期。C8051F015具有32KB的內存、2304B的RAM(片內256B、片外2048B)。CIP-51內核具有標準8052的所有外設部件,片上還集成有9通道10位A/D轉換接口電路、SMBus/I2C、SPI串行接口。

            2.2 C8051F015的A/D轉換電路

            C8051F015的A/D轉換電路包括1個9通道可配置模擬多路開關AMUX(8路用于外部模擬輸入、1路用于芯片環境溫度的測量)、1個可編程增益放大器PGA和1個100ksps 10位分辨率的逐次逼近型ADC。A/D中還集成了跟蹤保持電路和可編程窗口檢測器。

            ADC有4種啟動方式:軟件命令、定時器2溢出、定時器3溢出及外部信號輸入。寄存器ADC0CN是配置啟動和跟蹤方式的控制寄存器。每次轉換結束時,ADC0CH的ADBUSY(忙標志)的下降沿觸發中斷,也可用軟件查詢這個狀態位。

            2.3 ADC轉換速度

            C8051Fxxx系列單片機中ADC的速率都是可編程設置的。表1給出了所需最小分頻系數與SYSCLK(系統時鐘)的關系(ADC0CF為ADC配置寄存器)。

            表1 ADC時鐘分頻系數與SYSCLK頻率的關系

            SYSCLK頻率/MHz ADC時鐘分頻系數 ADC0CF的ADCSC2~1 時鐘頻率<2.5 1 000 2.5~5 2 001 5~10 4 010 10~20 8(復位值) 011 時鐘頻率>20 16 1xx

            在C8051F015單片機中,ADC的轉換時鐘周期至少在400ns,轉換時鐘應不大于2MHz。一般在啟動ADC之前都要處于跟蹤方式,而ADC一次轉換完成要用16個系統時鐘。另外,在轉換之前還要加上3個系統時鐘的跟蹤/保持捕獲時間,所以完成一次轉換需19個ADC轉換時鐘(9.5μs)。

            圖1中的方法簡單,轉換時間在ms級以上,一般用于變化慢的模擬輸入信號,不適用于C8051F015。圖2中的方法,為了減少μC/OS-II內核調用ISR所用時間,ISR一般都用于匯編語言編寫。從程序1中ISR偽代碼可以看出,盡管ISR用匯編語言編寫。代碼效率高,但μC/OS-II調用ISR的時間與調用等待信號時間之和大于A/D的轉換時間,所以CPU用于ISR和循環檢測的開銷大。

            圖3所示的方法顯然適合于C8051F015單片機,其優點是:可以獲得快速的轉換時間;不需要增加一個復雜的ISR;轉換時信號改變時間更短;CPU的開銷小;循環檢測程序可被中斷,為中斷信號服務。

            圖4 A/D驅動程序模塊流程圖

            3 A/D驅動程序的編寫

            外設驅動程序是實時內核和硬件之間的接口,是連接底層硬件和內核的紐帶。編寫驅動程序模塊應滿足以下主要功能:①對設備初始化;②把數據從內核傳送到硬件從硬件讀取數據;③讀取應用程序傳送給設備的數據和回送應用程序請求的數據;④監測和處理設備出現的異常。

            A/D轉換電路作為一個模擬輸入模塊,μC/OS-II內核應把它作為一個獨立的任務(以下稱為ADTask())來調用。A/D驅動程序模塊流程如圖4所示。ADInit()初始化所有的模擬輸入通道、硬件ADC以及應用程序調用A/D模塊的參量,并且ADInit()創建任務ADTask()。ADTb1[]是一個模擬輸入通道信息、ADC硬件狀態等參數配置以及轉換結果存儲表。ADUpdate()負責讀取所有模擬輸入通道,訪問ADRd()并傳遞給它一個通道數。ADRd()負責通過多路復用器選擇合適的模擬輸入,啟動并等待ADC轉換,以及返回ADC轉換結果到ADUpdate()。

            在μC/OS-II這時內核下各原型函數、數據結構和常量的定義如下:

            INT16S ADRd(INT8U ch);

            /*定義如何讀取A/D,A/D必須通過AIRd()來驅動*/

            void ADUpdate(void);

            /*一定時間內更新輸入通道*/

            void ADInit(void);

            /*A/D模塊初始化代碼,包括初始化所有內部變量(通過ADInit()初始化ADTb[]),初始化硬件A/D(通過ADInitI())及創建任務ADTask()*/

            void ADTask (void data);

            /*由ADInit()創建,負責更新輸入通道(調用ADUpdate ())*/

            void ADInitI (void);

            /*初始化硬件A/D*/

            AD_TaskPrio:設置任務ADTask()的優先級。

            AD_TaskStkSize:設置分配給任務ADTask()的堆棧大小。

            AD_MaxNummber:AMUX的輸入通道數。

            AD_TaskDly:設定更新通道的間隔時間。

            AD ADTbl[AD_MaxNummber]:AD類型的數組(AD是定義的數據結構)。

            4 結論

            對于A/D轉換器接口電路驅動程序的編寫歸納出以下幾點:

            ①在決定采用具體的驅動方案之前,分析接口電路的特點,尤其是了解A/D的轉換速度;

            ②對于轉換速度快的A/D轉換器,可能出現CPU的處理速度與A/D轉換速度不匹配,一般的A/D中不帶有FIFO緩沖區,須有內存中開辟緩沖區;

            ③在應用程序讀取設備之前,一定要初始化硬件(調用初始化函數),合理定義硬件的信息和狀態變量;

            ④不同的輸入通道采集到不同類型數據,環境、轉換精度都會影響到轉換結果,要對各個模擬輸入通道進行校準和補償(通常在應用程序中編寫通道補償函數)。


            【μC/OS-II實時內核下的A/D驅動程序設計】相關文章:

            μC/OS-II的多任務信息流與CAN總線驅動08-06

            實時操作系統μC/OS-II在MCF5272上的移植08-06

            嵌入式實時操作系統μC/OS-II與eCos的比較08-06

            實時嵌入式操作系統μC/OS-II在MPC555上的移植08-06

            電力驅動系統逆變器實時仿真08-06

            μC/OS-II在S3C44BOX處理器上的移植08-06

            試論將μC/OS-II用于單片機教學08-06

            基于μC/OS-II的光盤伺服控制系統的設計08-06

            μC/OS-II在80196KC單片機上的移植08-06

            主站蜘蛛池模板: 亚洲国产成人久久77| 国产女人18毛片水真多1| 青草午夜精品视频在线观看| 久热久热免费在线观视频| 国产成人精品2021欧美日韩| 精品国产成人网站一区在线| 亚洲永久精品一区二区三区 | 亚洲性日韩精品一区二区三区| 亚洲成人免费一级av| 国产精品午夜性视频| 亚洲精品亚洲人成人网 | 国产女人在线视频| 亚洲乱码精品久久久久..| 爱如潮水日本免费观看视频| 日韩黄色大片在线播放| 亚洲综合精品第一页| 国产免费午夜福利757| 国产剧情视频一区二区麻豆| 亚洲最大福利视频网| 东京热高清无码精品| 丰满老熟妇好大bbbbb| 亚洲情综合五月天| 亚洲男人AV天堂午夜在| 和尚伦流澡到高潮h在线观看| 一本色道久久—综合亚洲| 狠狠色综合网站久久久久久久| 在线观看国产久青草| 黄色舔女人逼一区二区三区| 国产福利酱国产一区二区| 欧美国产日韩在线三区| 饥渴少妇高潮正在播放| 亚洲成A人片在线观看无码不卡| 国产另类ts人妖一区二区| 如何看色黄视频中文字幕| 国产精品激情av在线播放 | 精品人妻无码专区中文字幕| 国模雨珍浓密毛大尺度150p| 久久精品无码一区二区APP| 九九久久人妻一区精品色| 亚洲男人在线天堂| 亚洲国产码专区在线观看|