子模塊介紹ARM_第1頁(yè)
子模塊介紹ARM_第2頁(yè)
子模塊介紹ARM_第3頁(yè)
子模塊介紹ARM_第4頁(yè)
子模塊介紹ARM_第5頁(yè)
已閱讀5頁(yè),還剩56頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、3 Sept. 2008Confidential第六章第六章 基于基于UP-NETARM2410-S的各子模塊原理及編程的各子模塊原理及編程?hào)|軟人才實(shí)訓(xùn)中心Copyright 2008 By Neusoft Group. All rights reserved3 Sept. 2008Confidential第六章:基于第六章:基于UP-NETARM2410-S的各子模塊原理及編程的各子模塊原理及編程目標(biāo):本章旨在向?qū)W員介紹基于UP-NETARM2410-S實(shí)驗(yàn)臺(tái)各子模塊工作原理及編程模型,通過(guò)本章的學(xué)習(xí),學(xué)員應(yīng)該掌握如下知識(shí): LCD工作原理及編程 觸摸屏工作原理及編程 A/D工作原理及編程

2、UCOS-II的移植與編譯學(xué)時(shí):學(xué)時(shí):10.010.0學(xué)時(shí)學(xué)時(shí)教學(xué)方法:講授教學(xué)方法:講授pptppt點(diǎn)評(píng)點(diǎn)評(píng)動(dòng)手實(shí)踐動(dòng)手實(shí)踐3 Sept. 2008Confidential6.1LCD工作原理及編程工作原理及編程1LCD(Liquid Crystal Display)原理三個(gè)特性: 如果讓電流通過(guò)液晶層,這些分子將會(huì)以電流的流向方向進(jìn)行排列,如果沒(méi)有電流,它們將會(huì)彼此平行排列。 如果提供了帶有細(xì)小溝槽的外層,將液晶倒入后,液晶分子會(huì)順著槽排列,并且內(nèi)層與外層以同樣的方式進(jìn)行排列。 液晶層能使光線發(fā)生扭轉(zhuǎn)。液晶層表現(xiàn)的有些類似偏光器,這就意味著它能夠過(guò)濾除了那些從特殊方向射入之外的所有光線。此

3、外,如果液晶層發(fā)生了扭轉(zhuǎn),光線將會(huì)隨之扭轉(zhuǎn),以不同的方向從另外一個(gè)面中射出??偨Y(jié):液晶的這些特點(diǎn)使得它可以被用來(lái)當(dāng)作一種開關(guān)即可以阻礙光線,也可以允許光線通過(guò)。3 Sept. 2008Confidential2 LCD接口設(shè)計(jì)接口設(shè)計(jì)LCD顯示模塊液晶顯示是一種被動(dòng)的顯示,它不能發(fā)光,只能使用周圍環(huán)境的光。它顯示圖案或字符只需很小能量。液晶顯示所用的液晶材料是一種兼有液態(tài)和固體雙重性質(zhì)的有機(jī)物,它的棒狀結(jié)構(gòu)在液晶盒內(nèi)一般平行排列,但在電場(chǎng)作用下能改變其排列方向。3 Sept. 2008Confidential3 LCD的顯示方式的顯示方式 反射型LCD:底偏光片后面加了一塊反射板,它一般在戶外

4、和光線良好的辦公室使用。(筆記本電腦) 透射型LCD:底偏光片是透射偏光片,它需要連續(xù)使用背光源,一般在光線差的環(huán)境使用。(一般微控制器使用LCD) 透反射型LCD:是處于以上兩者之間,底偏光片能部分反光,一般也帶背光源,光線好的時(shí)候,可關(guān)掉背光源;光線差時(shí),可點(diǎn)亮背光源使用LCD。3 Sept. 2008Confidential4 LCD的驅(qū)動(dòng)方式的驅(qū)動(dòng)方式 帶有驅(qū)動(dòng)電路的LCD 顯示模塊,這種LCD 可以方便地與各種低檔單片機(jī)進(jìn)行接口,使用總線方式驅(qū)動(dòng),基本上屬于半成品。 LCD 顯示屏,沒(méi)有驅(qū)動(dòng)電路,需要與驅(qū)動(dòng)電路配合使用。特點(diǎn)是體積小,但卻需要另外的驅(qū)動(dòng)芯片。一些新型的嵌入式處理器也可

5、以直接使用芯片上的內(nèi)置LCD控制器來(lái)構(gòu)造顯示模塊,比如:S3C2410X可以支持灰度LCD和彩色LCD,灰度模式下可支持單色,4級(jí)灰度和16級(jí)灰度,彩色模式下可支持256色,LCD的實(shí)際尺寸支持到640X480。3 Sept. 2008Confidential(1)總線驅(qū)動(dòng)方式總線驅(qū)動(dòng)方式驅(qū)動(dòng)模塊具有八位數(shù)據(jù)總線,外加一些電源接口和控制信號(hào)。而且自帶顯示緩存,只需要將要顯示的內(nèi)容送到顯示緩存中就可以實(shí)現(xiàn)內(nèi)容的顯示下圖為一個(gè)典型的顯示模塊(HY12864B)提供的總線接口。3 Sept. 2008Confidential(2)控制器掃描方式控制器掃描方式S3C2410X 中具有內(nèi)置的LCD 控制

6、器,它具有將顯示緩存(在系統(tǒng)存儲(chǔ)器中)中的LCD圖象數(shù)據(jù)傳輸?shù)酵獠縇CD 驅(qū)動(dòng)電路的邏輯功能。S3C2410X 中內(nèi)置的LCD 控制器可支持灰度LCD 和彩色LCD。在灰度LCD 上,使用基于時(shí)間的抖動(dòng)算法(time-based ditherinalgorithm)和FRC (Frame Rate Control)方法,可以支持單色、4 級(jí)灰度和16 級(jí)灰度模式的灰度LCD。在彩色LCD 上,可以支持256 級(jí)彩色,使用STN LCD 可以支持4096級(jí)彩色。對(duì)于不同尺寸的LCD,具有不同數(shù)量的垂直和水平象素、數(shù)據(jù)接口的數(shù)據(jù)寬度、接口時(shí)間及刷新率,而LCD 控制器可以進(jìn)行編程控制相應(yīng)的寄存器值

7、,以適應(yīng)不同的LCD 顯示板。3 Sept. 2008Confidential5 嵌入式處理器與嵌入式處理器與LCD的連接的連接嵌入嵌入式處式處理器理器LCD控制控制器器數(shù)據(jù)總線數(shù)據(jù)總線寄存器選擇寄存器選擇使能信號(hào)使能信號(hào)有有LCD控制控制器的嵌入式器的嵌入式處理器處理器LCD顯示顯示器器LCD控制信號(hào)線控制信號(hào)線LCD顯示顯示器器控制信號(hào)控制信號(hào)3 Sept. 2008Confidential6 LCD模塊的顯示控制模塊的顯示控制從系統(tǒng)結(jié)構(gòu)上來(lái)講,由于顯示器模塊中已經(jīng)有顯示存儲(chǔ)器。顯存中的每一個(gè)單元對(duì)應(yīng)LCD上的一個(gè)點(diǎn),只要顯存中的內(nèi)容改變,顯示結(jié)果便進(jìn)行刷新。于是便存在兩種刷新: 直接根據(jù)

8、系統(tǒng)要求對(duì)顯存進(jìn)行修改,一種是只需修改相應(yīng)的局部就可以,不需要判斷覆蓋等;另一種就是有覆蓋問(wèn)題,計(jì)算起來(lái)比較復(fù)雜,而且每做一點(diǎn)小的屏幕改變就進(jìn)行刷新,將增加系統(tǒng)負(fù)擔(dān)。 專門開辟顯示內(nèi)存,在需要刷新時(shí)候由程序進(jìn)行顯示更新。這樣,不但可以減輕總線負(fù)荷,而且也比較合理,在有需要的時(shí)候進(jìn)行統(tǒng)一的顯示更新,界面也可以比較美觀,不致由于無(wú)法預(yù)料的刷新動(dòng)作導(dǎo)致顯示界面閃爍。3 Sept. 2008ConfidentialS3C2410掃描方式掃描方式4位雙掃位雙掃4/8位單掃位單掃3 Sept. 2008Confidential顯示滾動(dòng)顯示滾動(dòng)3 Sept. 2008ConfidentialLCD控制器控制

9、器LCDCON1LCDCON2LCDCON3LCDCON4LCDCON5LCDSADDR1LCDSADDR2LCDSADDR3DITHMODEREDLUTGREENLUTBLUELUTLPCSELTPAL具體內(nèi)容可參見(jiàn)UP-NET2410X實(shí)驗(yàn)手冊(cè)的LCD驅(qū)動(dòng)試驗(yàn)部分。3 Sept. 2008Confidential嵌入式C語(yǔ)言程序編寫的構(gòu)架模型 #include預(yù)編譯指令 每個(gè)C語(yǔ)言代碼,一般要用#include編譯指令將所需要的頭文件加到該程序中,這是很有必要的,尤其是對(duì)編寫較大的程序代碼時(shí)。隨后是定義一些外部變量,并對(duì)程序中的函數(shù)進(jìn)行聲明。 主函數(shù)main()的編寫; 在每一個(gè)C語(yǔ)言代碼

10、中,一定要有一個(gè)main()函數(shù),在該函數(shù)中完成該程序文件所要完成的各個(gè)功能,一般是通過(guò)調(diào)用各個(gè)子函數(shù)來(lái)完成。當(dāng)然,它也可以調(diào)用其他文件中的函數(shù)。 完成相應(yīng)功能的各個(gè)功能函數(shù)的編寫。 各個(gè)函數(shù)之間可以相互調(diào)用。 3 Sept. 2008Confidential7 LCD編程步驟編程步驟int main(void) int i,j,k; U32 jcolor;ARMTargetInit(); /開發(fā)版初始化開發(fā)版初始化LCD_Init();/LCD初始化初始化 jcolor=0 x000000ff; for (i=0;i480;i+) /寫顯示數(shù)據(jù)到顯存寫顯示數(shù)據(jù)到顯存 if (i=160|i=

11、320) jcolor=8; for (j=576;j640;j+) LCDBufferII2ij=jcolor; LCD_Refresh() ; /刷新刷新 return 0;3 Sept. 2008Confidential8 操作步驟操作步驟1).建立工程2).定義有關(guān)常量與宏3).編寫LCD 初始化函數(shù)(lcd640.c),設(shè)置各功能寄存器。4).編寫LCD 刷新函數(shù)(lcd640.c)。此函數(shù)主要是將二級(jí)緩存LCDBuffer 的數(shù)據(jù)由32 位彩色圖形信息轉(zhuǎn)換成16 位的圖形信息,然后放到pLCDFB 指向的一級(jí)緩存。轉(zhuǎn)換公式:pixcolor=(pbuf0&0 xf8)11)|(pb

12、uf1&0 xfc)6)|(pbuf2&0 xf8)5).編寫主函數(shù)(main.c)在LCD 上顯示16 位色圖形的關(guān)鍵是填充二級(jí)顯示緩沖,將顯示象素的24 位顏色信息寫入LCDBuffer。3 Sept. 2008Confidential思考&練習(xí)1)液晶顯示的基本原理是什么?2)總線方式驅(qū)動(dòng)液晶模塊和使用控制器進(jìn)行驅(qū)動(dòng)控制有什么異同?3)LCD 顯示圖形的基本思想是什么?3 Sept. 2008Confidential6.2 觸摸屏工作原理及編程觸摸屏工作原理及編程1.工作原理分類:表面聲波屏電容屏電阻屏紅外屏3 Sept. 2008Confidential觸摸屏結(jié)構(gòu)觸摸屏結(jié)構(gòu)3 Sept

13、. 2008Confidential觸摸屏坐標(biāo)識(shí)別原理3 Sept. 2008Confidential電阻觸摸屏的有關(guān)技術(shù)電阻觸摸屏的有關(guān)技術(shù) 電阻觸摸屏的主要部分是一塊與顯示器表面非常配合的電阻薄膜屏,這是一種多層的復(fù)合薄膜,由一層玻璃或有機(jī)玻璃作為基層,表面涂有一層叫ITO 的透明導(dǎo)電層,上面再蓋有一層外表面硬化處理、光滑防刮的塑料層,它的內(nèi)表面也涂有一層導(dǎo)電層(ITO 或鎳金)。 電阻觸摸屏的兩層ITO 工作面必須是完整的,在每個(gè)工作面的兩條邊線上各涂一條銀膠,一端加5V 電壓,一端加0V,就能在工作面的一個(gè)方向上形成均勻連續(xù)的平行電壓分布。在偵測(cè)到有觸摸后,立刻AD 轉(zhuǎn)換測(cè)量接觸點(diǎn)的模

14、擬量電壓值,根據(jù)5V 電壓下的等比例公式就能計(jì)算出觸摸點(diǎn)在這個(gè)方向上的位置。3 Sept. 2008Confidential觸摸屏的控制觸摸屏的控制 本系統(tǒng)觸摸屏的控制是使用的S3c2410 處理器自帶的觸摸屏控制器,這部分的開發(fā)主要參考S3c2410 處理器的芯片手冊(cè)的第416 頁(yè)到第419 頁(yè),具體詳見(jiàn)流程圖。這部分的控制主要是設(shè)置觸摸屏的采樣模式,處理器提供的模式:1正常的轉(zhuǎn)換模式2手動(dòng)的x/y 位置轉(zhuǎn)換模式3自動(dòng)的x/y 位置轉(zhuǎn)換模式 在完成一次x/y 坐標(biāo)采樣的過(guò)程中需要一次模式轉(zhuǎn)換即在點(diǎn)擊觸摸屏之前是等待中斷模式,當(dāng)有觸摸動(dòng)作產(chǎn)生觸摸屏中斷以后,在x/y 的坐標(biāo)采集驅(qū)動(dòng)中設(shè)置成自動(dòng)

15、的x/y 位置轉(zhuǎn)換模式,在完成采集以后再轉(zhuǎn)換回等待中斷模式,準(zhǔn)備下一次的觸摸采樣。3 Sept. 2008Confidential2 所用到的控制器所用到的控制器 ADC控制寄存器 ADCCON ADC觸摸屏控制寄存器 ADCTSC注意:在自動(dòng)模式,ADC觸摸屏控制寄存器要在開始讀之前重新配置 ADC開始延遲寄存器 ADCDLY ADC轉(zhuǎn)換數(shù)據(jù)寄存器(ADCDAT0) ADC轉(zhuǎn)換數(shù)據(jù)寄存器(ADCDAT1)具體可參見(jiàn)UP-NET2410X的觸摸屏控制實(shí)驗(yàn)部分。3 Sept. 2008Confidential3 觸摸屏與顯示器配合觸摸屏與顯示器配合從觸摸屏控制器獲得的X 與Y 值僅是對(duì)當(dāng)前觸摸點(diǎn)

16、的電壓值的A/D 轉(zhuǎn)換值,它不具有實(shí)用價(jià)值。這個(gè)值的大小不但與觸摸屏的分辨率有關(guān),而且也與觸摸屏與LCD 貼合的情況有關(guān)。轉(zhuǎn)換LCD 坐標(biāo)的觸摸屏位置公式如下x=(x-TchScr_Xmin)*LCDWIDTH/(TchScr_Xmax-TchScr_Xmin)y=(y-TchScr_Ymin)*LCDHEIGHT/(TchScr_Ymax-TchScr_Ymin)3 Sept. 2008Confidential4 觸摸屏編程步驟觸摸屏編程步驟int main(void)ARMTargetInit(); TchScr_init(); TchScr_Test(); 3 Sept. 2008Con

17、fidential5 操作步驟操作步驟1).建立工程2).在頭文件中定義宏及常量(tchscr.c,tchscr.h)3).定義驅(qū)動(dòng)函數(shù)(tchscr.c)4).編寫測(cè)試函數(shù)(tchscr.c)將觸摸動(dòng)作及觸摸點(diǎn)坐標(biāo)在超級(jí)終端上顯示出來(lái)。5).校準(zhǔn)觸摸屏坐標(biāo)輸出,轉(zhuǎn)換坐標(biāo),與LCD 緊密配合可以使用TchScr_GetScrXY()函數(shù)來(lái)獲得液晶屏的x、y 方向的電壓范圍,分別點(diǎn)觸摸屏有效面積的左上角和右下角,得到下列參數(shù):TchScr_Xmax=997;TchScr_Xmin=38;TchScr_Ymax=974;TchScr_Ymin=23;3 Sept. 2008Confidential

18、讀取觸摸點(diǎn)讀取觸摸點(diǎn)x 軸電壓值軸電壓值3 Sept. 2008Confidential判斷觸摸動(dòng)作判斷觸摸動(dòng)作3 Sept. 2008Confidential思考&練習(xí)1)電阻型觸摸屏檢測(cè)坐標(biāo)值的原理。2)如果LCD 坐標(biāo)原點(diǎn)在右下角,分辨率為240X180,觸摸屏坐標(biāo)原點(diǎn)在右上角,請(qǐng)給出觸摸屏輸出坐標(biāo)的轉(zhuǎn)換公式,對(duì)觸摸屏的分辨率有什么影響。3 Sept. 2008Confidential6.3 A/D工作原理及編程工作原理及編程1 A/D轉(zhuǎn)換器介紹A/D 轉(zhuǎn)換器是模擬信號(hào)源和CPU 之間聯(lián)系的接口,它的任務(wù)是將連續(xù)變化的模擬信號(hào)轉(zhuǎn)換為數(shù)字信號(hào),以便計(jì)算機(jī)和數(shù)字系統(tǒng)進(jìn)行處理、存儲(chǔ)、控制和顯示

19、。類型:逐位比較型、積分型、計(jì)數(shù)型、并行比較型、電壓頻率型常用類型: 雙積分型的A/D 轉(zhuǎn)換器(抗干擾能力強(qiáng),精度高) 逐次逼近型的A/D 轉(zhuǎn)換器(轉(zhuǎn)換速度較快)3 Sept. 2008Confidential2 A/D 轉(zhuǎn)換的重要指標(biāo)轉(zhuǎn)換的重要指標(biāo)分辨率(Resolution)精度(Accuracy)轉(zhuǎn)換時(shí)間(Conversion Time)電源靈敏度(power supply sensitivity)量程輸出邏輯電平工作溫度范圍3 Sept. 2008Confidential3 ARM 自帶的十位自帶的十位A/D 轉(zhuǎn)換器轉(zhuǎn)換器ARMS3C2410X芯片自帶一個(gè)路10位A/D轉(zhuǎn)換器,最大轉(zhuǎn)換

20、率為500K,非線性度為正負(fù).5位,其轉(zhuǎn)換時(shí)間可以通過(guò)下式計(jì)算:如果A/D使用的時(shí)鐘為50MHz,預(yù)定標(biāo)器的值為49。A/D轉(zhuǎn)換頻率=50MHz/(49+1)=1MHz轉(zhuǎn)換時(shí)間=1/(1MHz/5時(shí)鐘周期)=1/200kHz=5us3 Sept. 2008ConfidentialA/D轉(zhuǎn)換和觸摸屏接口功能框圖轉(zhuǎn)換和觸摸屏接口功能框圖3 Sept. 2008Confidential編程注意事項(xiàng)編程注意事項(xiàng)1)A/D轉(zhuǎn)換的數(shù)據(jù)可以通過(guò)中斷或查詢的方式來(lái)訪問(wèn),如果是用中斷方式,全部的轉(zhuǎn)換時(shí)間(從A/D轉(zhuǎn)換的開始到數(shù)據(jù)讀出)要更長(zhǎng),因?yàn)橹袛喾?wù)程序返回和數(shù)據(jù)的訪問(wèn)的原因。如果是查詢方式則要檢測(cè)ADCC

21、ON15(轉(zhuǎn)換結(jié)束標(biāo)志位)來(lái)確定從ADCDAT寄存器讀取的數(shù)據(jù)是否是最新的轉(zhuǎn)換數(shù)據(jù)。2) A/D轉(zhuǎn)換開始的另一種方式是將ADCCON1置為1,這時(shí)只有有讀轉(zhuǎn)換數(shù)據(jù)的信號(hào)A/D轉(zhuǎn)換就會(huì)同步開始。3 Sept. 2008Confidential與與AD 相關(guān)的寄存器相關(guān)的寄存器ADCCON:A/D 轉(zhuǎn)換控制寄存器。ADCDAT0: A/D 轉(zhuǎn)換數(shù)據(jù)寄存器具體內(nèi)容請(qǐng)參考UP-NET2410S實(shí)驗(yàn)手冊(cè)的A/D接口實(shí)驗(yàn)部分3 Sept. 2008Confidential4 AD 轉(zhuǎn)換器在開發(fā)平臺(tái)的接法轉(zhuǎn)換器在開發(fā)平臺(tái)的接法(前三路通過(guò)分壓電位器接到前三路通過(guò)分壓電位器接到3.3v 電源電源)3 Sept

22、. 2008Confidential5 編程步驟編程步驟int main(void)int i,j;float d; ARMTargetInit(); init_ADdevice(); while(1) for(i=0; i=2; i+) /采樣采樣03路路A/D值值 for(j=0;j=1;j+) d=GetADresult(i)*3.3/1023; / 數(shù)據(jù)數(shù)據(jù) 采集,處理采集,處理 return 0;3 Sept. 2008Confidential6 操作步驟操作步驟1)建立工程2)編寫獲取轉(zhuǎn)換結(jié)果函數(shù)(main.c)3)主函數(shù)(main.c)轉(zhuǎn)換結(jié)果函數(shù)主函數(shù)3 Sept. 2008C

23、onfidential思考&練習(xí)如何啟動(dòng)ARM 開始轉(zhuǎn)換A/D,有幾種方式?3 Sept. 2008Confidential6.4 uCOS-II 在在ARM 微處理器上的移植微處理器上的移植及編譯及編譯移植定義一個(gè)操作系統(tǒng)可以在某個(gè)微處理器或者微控制器上運(yùn)行。處理器需滿足的需求:1)處理器的C 編譯器能產(chǎn)生可重入代碼。2)在程序中可以打開或者關(guān)閉中斷。在uCOS-II 中,可以通過(guò)OS_ENTER_CRITICAL()或者OS_EXIT_CRITICAL()宏來(lái)控制系統(tǒng)關(guān)閉或者打開中斷。3)處理器支持中斷,并且能產(chǎn)生定時(shí)中斷(通常在10Hz 1000Hz 之間)。4)處理器支持能夠容納一定量

24、數(shù)據(jù)的硬件堆棧。5)處理器有將堆棧指針和其它CPU 寄存器存儲(chǔ)和讀出到堆棧(或者內(nèi)存)的指令。uCOS-II 進(jìn)行任務(wù)調(diào)度的時(shí)候,會(huì)把當(dāng)前任務(wù)的CPU 寄存器存放到此任務(wù)的堆棧中,然后,再?gòu)牧硪粋€(gè)任務(wù)的堆棧中恢復(fù)原來(lái)的工作寄存器,繼續(xù)運(yùn)行另一個(gè)任務(wù)。所以,寄存器的入棧和出棧是uCOS-II 多任務(wù)調(diào)度的基礎(chǔ)。3 Sept. 2008Confidential1 uC/OS 的結(jié)構(gòu)以及它與硬件的關(guān)系的結(jié)構(gòu)以及它與硬件的關(guān)系3 Sept. 2008Confidential2 編程編程int main(void)ARMTargetInit(); OSInit(); / needed by uC/OS-

25、II / OSTaskCreate(Task1, (void *)0, (OS_STK*)&task1_StackSTACKSIZE-1, Task1_Prio);OSTaskCreate(Task2, (void *)0, (OS_STK *)&task2_StackSTACKSIZE-1, Task2_Prio);OSAddTask_Init(0); OSStart(); / start the OS /return 0;3 Sept. 2008Confidential3 實(shí)驗(yàn)步驟實(shí)驗(yàn)步驟實(shí)驗(yàn)的文件分為兩類: 其一是STARTUP 目錄下的系統(tǒng)初始化、配置等文件。 其二是uCOS-II 的

26、全部源碼,arch 目錄下的3 個(gè)文件是和處理器架構(gòu)相關(guān)的。3 Sept. 2008Confidential工程文件目錄工程文件目錄3 Sept. 2008Confidential設(shè)置設(shè)置os_cpu.h 中與處理器和編譯器相關(guān)的代碼中與處理器和編譯器相關(guān)的代碼typedef unsigned char BOOLEAN;typedef unsigned char INT8U;typedef signed char INT8S;typedef unsigned int INT16U;typedef signed int INT16S;typedef unsigned long INT32U;ty

27、pedef signed long INT32S;typedef float FP32;typedef double FP64;typedef unsigned int OS_STK;typedef unsigned int OS_CPU_SR;extern int INTS_OFF(void);extern void INTS_ON(void);#define OS_ENTER_CRITICAL() cpu_sr = INTS_OFF(); #define OS_EXIT_CRITICAL() if(cpu_sr = 0) INTS_ON(); #define OS_STK_GROWTH 1

28、3 Sept. 2008Confidential設(shè)置設(shè)置os_cpu.h 中與處理器和編譯器相關(guān)的代碼中與處理器和編譯器相關(guān)的代碼1)與編譯器相關(guān)的數(shù)據(jù)類型uCOS-II 代碼從不使用C 的short,int 和long 等數(shù)據(jù)類型,因?yàn)樗鼈兪桥c編譯器相關(guān)的,不可移植。2)OS_ENTER_CRITICAL()和OS_EXIT_CRITICAL(),uCOS-II 需要先禁止中斷再訪問(wèn)代碼的臨界區(qū),并且在訪問(wèn)完畢后重新允許中斷。這就使得uCOS-II 能夠保護(hù)臨界區(qū)代碼免受多任務(wù)或中斷服務(wù)例程(ISR)的破壞。在S3C2410X 上是通過(guò)兩個(gè)函數(shù)(OS_CPU_A.S)實(shí)現(xiàn)開關(guān)中斷的。3 Se

29、pt. 2008Confidential開關(guān)中斷的匯編程序開關(guān)中斷的匯編程序INTS_OFFmrs r0, cpsr ; 當(dāng)前 CSRmov r1, r0 ; 復(fù)制屏蔽orr r1, r1, #0 xC0 ; 屏蔽中斷位msr CPSR, r1 ; 關(guān)中斷(IRQ and FIQ)and r0, r0, #0 x80 ; 從初始CSR 返回FIQ 位mov pc,lr ; 返回INTS_ONmrs r0, cpsr ; 當(dāng)前 CSRbic r0, r0, #0 xC0 ; 屏蔽中斷msr CPSR, r0 ; 開中斷 (IRQ and FIQ)mov pc,lr ; 返回3 Sept. 200

30、8Confidential設(shè)置設(shè)置os_cpu.h 中與處理器和編譯器相關(guān)的代中與處理器和編譯器相關(guān)的代碼碼3)OS_STK_GROWTH絕大多數(shù)的微處理器和微控制器的堆棧是從上往下長(zhǎng)的。但是某些處理器是用另外一種方式工作的。uCOS-II 被設(shè)計(jì)成兩種情況都可以處理,只要在結(jié)構(gòu)常量OS_STK_GROWTH 中指定堆棧的生長(zhǎng)方式就可以了。置OS_STK_GROWTH 為0 表示堆棧從下往上長(zhǎng)。置OS_STK_GROWTH 為1 表示堆棧從上往下長(zhǎng)。3 Sept. 2008Confidential用用C 語(yǔ)言編寫語(yǔ)言編寫6 個(gè)操作系統(tǒng)相關(guān)的函數(shù)個(gè)操作系統(tǒng)相關(guān)的函數(shù)(OS_CPU_C.C)1)O

31、STaskStkInit函數(shù)原型 OS_STK * OSTaskStkInit (void (*task)(void *pd), void *pdata, OS_STK *ptos,INT16U opt)3 Sept. 2008Confidential用C 語(yǔ)言編寫6 個(gè)操作系統(tǒng)相關(guān)的函數(shù)(OS_CPU_C.C)2)OSTaskCreateHook函數(shù)原型:void OSTaskCreateHook (OS_TCB *ptcb)3)OSTaskDelHook函數(shù)原型:void OSTaskDelHook (OS_TCB *ptcb)4)OSTaskSwHook函數(shù)原型:void OSTaskS

32、wHook (void)5)OSTaskStatHook函數(shù)原型:void OSTaskStatHook (void)6)OSTimeTickHook函數(shù)原型:void OSTimeTickHook (void)后5 個(gè)函數(shù)為鉤子函數(shù),可以不加代碼。只有當(dāng)OS_CFG.H 中的OS_CPU_HOOKS_EN 被置為1 時(shí)才會(huì)產(chǎn)生這些函數(shù)的代碼。3 Sept. 2008Confidential4 用匯編語(yǔ)言編寫用匯編語(yǔ)言編寫4 個(gè)與處理器相關(guān)的函個(gè)與處理器相關(guān)的函數(shù)(數(shù)(OS_CPU.ASM)1)OSStartHighRdy ();運(yùn)行優(yōu)先級(jí)最高的就緒任務(wù)OSStartHighRdyLDR r4

33、, addr_OSTCBCur ; 得到當(dāng)前任務(wù)TCB 地址LDR r5, addr_OSTCBHighRdy ; 得到最高優(yōu)先級(jí)任務(wù)TCB 地址LDR r5, r5 ; 獲得堆棧指針LDR sp, r5 ; 轉(zhuǎn)移到新的堆棧中STR r5, r4 ; 設(shè)置新的當(dāng)前任務(wù)TCB 地址LDMFD sp!, r4 ;MSR SPSR, r4LDMFD sp!, r4 ; 從棧頂獲得新的狀態(tài)MSR CPSR, r4 ; CPSR 處于 SVC32Mode 摸式LDMFD sp!, r0-r12, lr, pc ; 運(yùn)行新的任務(wù)3 Sept. 2008Confidential4 用匯編語(yǔ)言編寫用匯編語(yǔ)言編

34、寫4 個(gè)與處理器相關(guān)的函數(shù)個(gè)與處理器相關(guān)的函數(shù)(OS_CPU.ASM)2)OS_TASK_SW (); 任務(wù)級(jí)的任務(wù)切換函數(shù)OS_TASK_SWSTMFD sp!, lr ; 保存 pcSTMFD sp!, lr ; 保存 lrSTMFD sp!, r0-r12 ; 保存寄存器和返回地址MRS r4, CPSRSTMFD sp!, r4 ; 保存當(dāng)前的PSRMRS r4, SPSRSTMFD sp!, r4 ; 保存SPSR; OSPrioCur = OSPrioHighRdyLDR r4, addr_OSPrioCurLDR r5, addr_OSPrioHighRdyLDRB r6, r5

35、523 Sept. 2008Confidential2)OS_TASK_SW ()(續(xù))STRB r6, r4; 得到當(dāng)前任務(wù)TCB 地址LDR r4, addr_OSTCBCurLDR r5, r4STR sp, r5 ; 保存sp 在被占先的任務(wù)的 TCB; 得到最高優(yōu)先級(jí)任務(wù)TCB 地址LDR r6, addr_OSTCBHighRdyLDR r6, r6LDR sp, r6 ; 得到新任務(wù)堆棧指針; OSTCBCur = OSTCBHighRdySTR r6, r4 ; 設(shè)置新的當(dāng)前任務(wù)的TCB 地址;保存任務(wù)方式寄存器LDMFD sp!, r4MSR SPSR, r4LDMFD sp

36、!, r4MSR CPSR, r4; 返回到新任務(wù)的上下文LDMFD sp!, r0-r12, lr, pc3 Sept. 2008Confidential4 用匯編語(yǔ)言編寫用匯編語(yǔ)言編寫4 個(gè)與處理器相關(guān)的函數(shù)個(gè)與處理器相關(guān)的函數(shù)(OS_CPU.ASM)3)OSIntCtxSw();中斷級(jí)的任務(wù)切換函數(shù)OSIntCtxSwadd r7, sp, #16 ; 保存寄存器指針LDR sp, =IRQStack ;FIQ_STACKmrs r1, SPSR ; 得到暫停的 PSRorr r1, r1, #0 xC0 ; 關(guān)閉 IRQ, FIQ.msr CPSR_cxsf, r1 ; 轉(zhuǎn)換模式 (應(yīng)該是 SVC_MODE)ldr r0, r7, #52 ; 從IRQ 堆棧中得到IRQs LR (任務(wù) PC)sub r0, r0, #4 ; 當(dāng)前PC 地址是(saved_LR - 4)STMFD s

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論