版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、. Harbin Institute of Technology實驗報告 課程名稱: 嵌入式系統(tǒng) 院 系: 電信學(xué)院 班 級: 1105301 姓 名: 張常樂 學(xué) 號: 1110530110 指導(dǎo)教師: 任廣輝 實驗時間: 2014年12月 哈爾濱工業(yè)大學(xué);第二章 非操作系統(tǒng)下的實驗2.2 GPIO接口實驗2.2.1 實驗?zāi)康?. 熟悉ADS軟件的使用2. 熟悉程序的下載和調(diào)試流程3. 熟悉GPIO的操作2.2.2 實驗原理1)GPIO的原理及寄存器操作GPIO(General Purpose I/O,通用輸入/輸出接口)也稱為并行I/O(parallel I/O),是最基本的I/O形式,由
2、一組輸入引腳、輸出引腳或輸入/輸出引腳組成,CPU對它們能夠進行存取操作。GPIO引腳能夠通過軟件編程改變輸入/輸出方向。S3C2440A共有130個多功能復(fù)用輸入輸出端口(I/O口),分為端口A端口J共9組。端口A除了作為功能口外,只能夠作為輸出口使用,其他端口都可以為輸入/輸出端口。為了滿足不同系統(tǒng)設(shè)計的需要,每個I/O口可以很容易地通過軟件對進行配置。每個引腳的功能必須在啟動主程序之前進行定義。如果一個引腳沒有使用復(fù)用功能,那么它可以配置為I/O口。與配置I/O口相關(guān)的寄存器包括:u 端口控制寄存器(GPACONGPJCON)u 端口數(shù)據(jù)寄存器(GPADATGPJDAT)u 端口上拉寄存
3、器(GPBUPGPJUP)以端口B為例,說明端口寄存器的配置方式,端口B的寄存器如下所示:端口B控制寄存器:端口B數(shù)據(jù)寄存器:端口B上拉電阻寄存器:2). LED硬件接口電路LED的硬件接口電路如圖2-1所示,LED與ARM的GPB端口連接,需要使用的寄存器有: 3). 蜂鳴器硬件接口電路蜂鳴器的硬件接口如圖2-2所示,其與ARM的GPB端口的第0位GPB0連接,對其操作涉及的寄存器有4) 按鍵硬件接口電路按鍵硬件接口如圖2-3所示,其采用的上拉的形式,按鍵沒有按下則管腳的電平為高電平,當按鍵按下后,管腳電平為低電平。四個按鍵分別跟ARM的GPF口的第0、1、2和4位連接,對其操作涉及的寄存器
4、有: 2.2.3 實驗儀器與設(shè)備1. TQ2440實驗平臺2. J-LINK 調(diào)試器2.2.4 實驗步驟1實現(xiàn)控制LED開啟關(guān)閉功能(1) 單步調(diào)試例程,也可以雙擊程序中的某一行添加斷點,則全速運行后程序會停在斷點處。并且在調(diào)試過程中觀察LED的變化。寫出控制LED開啟和關(guān)閉的程序語句和對應(yīng)LED的狀態(tài),填入下表當中序號程序現(xiàn)象1rGPFDAT=rGPFDAT&(1<<0); /PORTB0為低電平LED0點亮2rGPFDAT=rGPFDAT|(1<<0); /PORTB0為高電平LED0熄滅(2) 例程中實現(xiàn)的是對一個LED的控制,修改例程,寫出一個對所有LE
5、D控制的通用函數(shù),該函數(shù)的參數(shù)有兩個:LED的號碼和LED的開關(guān)狀態(tài)。寫出該函數(shù)并且寫出調(diào)用該函數(shù)控制4個LED狀態(tài)的語句和對應(yīng)現(xiàn)象,填入下表中:序號程序現(xiàn)象1rGPFDAT&=(1<<0)|(1<<1)|(1<<2)|(1<<3); /PORTB0至3為低電平LED0LED3全部點亮2rGPFDAT|=(1<<0)|(1<<1)|(1<<2)|(1<<3); /PORTB0至3為高電平LED0LED3全部熄滅3rGPFDAT&=(1<<0)|(1<<1)|(
6、1<<2)|(1<<3); /PORTB0至3為低電平delay(20);rGPFDAT|=(1<<0)|(1<<1)|(1<<2)|(1<<3); /PORTB0至3為高電平delay(20);LED0LED3循環(huán)點亮熄滅2. 實現(xiàn)流水燈功能(1) 利用上面編寫的通用的LED控制函數(shù),實現(xiàn)LED依次亮滅的過程(流水燈),把流水燈控制的語句填入下表中并描述LED的變化序號程序現(xiàn)象1rGPFDAT&=(1<<0); /PORTB0為低電平delay(20);rGPFDAT|=(1<<0); /
7、PORTB0為高電平delay(20);rGPFDAT&=(1<<1); /PORTB1為低電平delay(20);rGPFDAT|=(1<<1); /PORTB1為高電平delay(20);rGPFDAT&=(1<<2); /PORTB2為低電平delay(20);rGPFDAT|=(1<<2); /PORTB2為高電平delay(20);rGPFDAT&=(1<<3); /PORTB3為低電平delay(20);rGPFDAT|=(1<<3); /PORTB3為高電平delay(20);LED0
8、LED3循環(huán)點亮熄滅實現(xiàn)流水燈功能3. 實現(xiàn)控制蜂鳴器功能(1) 跟LED的控制類似,蜂鳴器的控制也是通過控制IO輸出電平來控制的。蜂鳴器使用的是GPB0,只需要對該端口操作即可(2) 寫出控制蜂鳴器鳴叫和靜音的語句,并把實驗現(xiàn)象填入下表當中序號程序現(xiàn)象1rGPBDAT=rGPBDAT&(1<<0); /PORTB0為低電平delay(10);rGPBDAT=rGPBDAT|(1<<0); /PORTB0為高電平delay(10);TX實驗板上的蜂鳴器實現(xiàn)鳴叫和靜音循環(huán)4. 實現(xiàn)按鍵控制LED功能(1) 寫出查詢按健狀態(tài)函數(shù),并根據(jù)不同的按鍵控制不同的LED亮(
9、2) 按鍵使用的是IO口是GPF0、GPF1、GPF2和GPF4。需要將其配置為輸入的模式,然后讀取數(shù)據(jù)寄存器即可(3) 把按鍵檢測的程序段和對應(yīng)的現(xiàn)象寫入下表中序號程序現(xiàn)象1For(j=0;j<4;j+) If(rGPFDAT&=(1<<j)=0) rGPFDAT&=(1<<0);ElserGPFDAT|=(1<<0);程序循環(huán)監(jiān)測4個按鍵,當按下14對應(yīng)的按鍵后14的LED對應(yīng)點亮,松開后便熄滅2.2.5 實驗思考題從程序編寫的角度,比較51單片機和SC32440的IO操作的不同之處答:51單片機可以單獨對1bit的位進行操作,而S
10、C32440必須一次性對整個IO口進行操作。2.3 中斷實驗2.3.1 實驗?zāi)康?. 熟悉ARM的中斷操作2. 掌握按鍵檢測的方法2.3.2 實驗原理1). 中斷的原理和相關(guān)寄存器S3C2440A 中的中斷控制器可以從60個中斷源接收中斷請求。這些中斷源由內(nèi)部外設(shè)提供,例如DMA控制器、UART、IIC等。當接收來自內(nèi)部外設(shè)和外部中斷請求引腳的多個中斷請求時,在仲裁過程后中斷控制器請求ARM920T的FIR或IRQ中斷。S3C2440A中與中斷相關(guān)的寄存器有:u 中斷源掛起寄存器(SRCPND)u 中斷掛起寄存器(INTPND)u 中斷模式寄存器(INTMOD)u 中斷屏蔽寄存器(INTMSK
11、)u 中斷優(yōu)先級寄存器(PRIORITY)S3C2440A中的外部中斷在上述中斷寄存器的基礎(chǔ)上增加了以下寄存器:u 外部中斷控制寄存器(EXTINT02)u 外部中斷濾波寄存器(EINTFLT03)u 外部中斷屏蔽寄存器(EINTMASK)u 外部中斷掛起寄存器(EINTPEND)本次實驗采用了外部中斷EINT0、EINT1、EINT2和EINT4。下面分析相關(guān)寄存器的意義:中斷源掛起寄存器(SRCPND)該寄存器標志哪個中斷源產(chǎn)生中斷請求,產(chǎn)生中斷請求但未必響應(yīng),該寄存器不受中斷屏蔽和優(yōu)先級的影響。中斷處理函數(shù)需要將其清零以免重復(fù)觸發(fā)。下表列出了SRCPND中部分位的意義中斷掛起寄存器(IN
12、TPND)該寄存器標志中斷源掛起寄存器(SRCPND)中非屏蔽的且優(yōu)先級最高的中斷,只有一位被標志,該中斷將產(chǎn)生IRQ。中斷處理函數(shù)中應(yīng)該將其清零以防止重復(fù)觸發(fā)。下表列出了INTPND中部分位的意義。中斷模式寄存器(INTMOD)用于選擇中斷源屬于FIQ還是IRQ,只有一個中斷源能夠配置為FIQ。下表列出了INTMOD中部分位的意義。中斷屏蔽寄存器(INTMSK)該寄存器用于用于屏蔽某些中斷。若某被屏蔽的中斷產(chǎn)生了,中斷源掛起寄存器(SRCPND)相應(yīng)的位仍然會被置1,但中斷掛起寄存器(INTPND)相應(yīng)的位不會被置1,該中斷也不會被處理。下表列出了INTMSK中部分位的意義。外部中斷控制寄存
13、器(EXTINT02)外部中斷控制寄存器(EXTINT02)主要用于配置外部中斷的觸發(fā)方式,觸發(fā)方式有:低電平觸發(fā)、高電平觸發(fā)、下降沿觸發(fā)、上升沿觸發(fā)、雙邊觸發(fā)。下表列出了EXTINT0的部分位的意義。外部中斷屏蔽寄存器(EINTMASK)外部中斷屏蔽寄存器(EINTMASK)用于屏蔽某些外部中斷,當其中的位為1時,表示屏蔽對應(yīng)的中斷源。其部分位的意義如下表所示,本實驗只用到其第4位:外部中斷掛起寄存器(EINTPEND)外部中斷掛起寄存器(EINTPEND)用于標志產(chǎn)生中斷請求的外部中斷源,其各位的意義如下所示。2.3.3 實驗儀器與設(shè)備1. TQ2440實驗平臺2. J-LINK 調(diào)試器2
14、.3.4 實驗步驟1. 打開實驗代碼文件夾中的irq_test子文件夾中的工程irq_test.mcp工程2. 閱讀代碼,單步執(zhí)行,體會void KeyScan_Test(void)函數(shù)里面對中斷相關(guān)寄存器的設(shè)置方法和意義,了解中斷服務(wù)函數(shù)static void _irq Key_ISR(void)中對相關(guān)寄存器的設(shè)置方法3. 注意:要進入中斷服務(wù)函數(shù),必須全速執(zhí)行程序,不能單步執(zhí)行。因此,可以在中斷服務(wù)函數(shù)static void _irq Key_ISR(void)添加一個斷點,然后點擊全速執(zhí)行程序。當按下按鍵后,程序就會停在斷點處4. 例程中只給出外部中斷0和外部中斷4的程序,只能實現(xiàn)對按
15、鍵K2和K4的檢測,仿照對外部中斷0的配置,完成對按鍵K1和K3的檢測,寫出對外部中斷1和2的配置代碼還有對LED的控制程序,并進行調(diào)試,把代碼和現(xiàn)象列入下表中序號程序現(xiàn)象1if(rINTPND=BIT_EINT1)ClearPending(BIT_EINT1);if(rINTPND=BIT_EINT2)ClearPending(BIT_EINT2);檢測按鍵中斷并清除相應(yīng)中斷掛起位2if(rGPFDAT&(1<<1) = 0 )LED_Control(1,ON);Delay(1000);LED_Control(1,OFF);LED1亮1s后熄滅3if(rGPFDAT&am
16、p;(1<<2) = 0 ) LED_Control(3,ON);Delay(1000);LED_Control(4,OFF);LED3亮1s后熄滅2.3.5 實驗思考題比較實驗2.2和實驗2.3,要實現(xiàn)檢測按鍵被按下的功能,采用中斷和查詢的方法哪個響應(yīng)的速度會更快?兩者有什么優(yōu)缺點?答:(1)采用中斷方式的相應(yīng)速度會更快。(2)查詢方式,就是在主函數(shù)里面不停循環(huán),查詢端口狀態(tài),明顯其弊端在于響應(yīng)速度,在處理事件多,處理流程復(fù)雜,函數(shù)嵌套執(zhí)行的情況下,由于處理不過來容易丟失事件。中斷方式,是事件觸發(fā)的,換言之只要有事件產(chǎn)生都會進入中斷,并且取得最優(yōu)運行,因此響應(yīng)更快,及時。2.4
17、定時器和PWM實驗2.4.1 實驗?zāi)康?. 熟悉ARM的定時器操作2. 熟悉ARM的PWM操作2.4.2 實驗原理3c2440A有5個16位的定時器。其內(nèi)部結(jié)構(gòu)如圖2-10所示。定時器0、1、2、3有脈寬調(diào)制功能(PWM)。定時器4有一個沒有輸出引腳的內(nèi)部定時器。定時器0和1共享一個8位的預(yù)分頻器(預(yù)定標器),定時器2,3,4共享另一個8位預(yù)分頻器(預(yù)定標器)。每個定時器有一個時鐘分頻器,其可以生成5種不同的分頻信號(1/2,1/4,1/8,1/16和TCLK)。每個定時器模塊從時鐘分頻器接收其自己的時鐘信號,其分頻器從相應(yīng)的8位預(yù)分頻器(預(yù)定標器)接收時鐘。8位的預(yù)分頻器是可編程的且根據(jù)裝載
18、的值來分頻PCLK,其值存儲在TCFG0和TCFG1寄存器中。當定時器使能,定時器計數(shù)緩存寄存器(TCNTBn)的值被裝載到遞減計數(shù)器中作為其計數(shù)初始值。定時器比較緩存寄存器(TCMPBn)有一個被裝載到比較寄存器中用來和遞減計數(shù)的值作比較。每個定時器有一個16位遞減計數(shù)器。當遞減計數(shù)器為零時,定時器中斷請求生成通知CPU定時器操作已經(jīng)完成。當定時器計數(shù)器達到0,如果使能自動重載功能,則TCNTBn的值會自動裝載到計數(shù)器中。TCMPBn用于脈寬調(diào)制(PWM)。當遞減計數(shù)器的值和定時器控制邏輯中的比較寄存器的值匹配時,定時器控制邏輯改變輸出電平。因此,比較寄存器決定了PWM輸出的占空比。與定時器
19、有關(guān)的寄存器如下:u 定時器配置寄存器(TCFG01)u 定時器控制寄存器(TCON)u 定時器計數(shù)緩沖寄存器(TCNTB04)u 定時器比較寄存器(TCMPB04)u 定時器觀察寄存器(TCNTO04)下面介紹這些寄存器的主要功能:定時器配置寄存器(TCFG01)定時器配置寄存器主要用于設(shè)置預(yù)分頻器的分頻系數(shù)和時鐘分頻其的分頻比。其各位的定義如下:定時器控制寄存器(TCON)定時器控制寄存器的第0位用于啟動和關(guān)閉定時器,如下表所示定時器計數(shù)緩沖寄存器(TCNTB04)定時器計數(shù)緩沖寄存器用于存儲計數(shù)初值,當使能自動裝載功能后,當計數(shù)值為0后,會把定時器計數(shù)緩沖寄存器的值重新裝載進計數(shù)器。定時
20、器比較寄存器(TCMPB04)當計數(shù)器的值與定時器比較寄存器的值相等時,將會導(dǎo)致輸出電平由低電平轉(zhuǎn)為高電平,通過設(shè)置改寄存器,可以調(diào)整輸出方波的占空比,從而實現(xiàn)PWM調(diào)整。定時器比較寄存器如下表所示:2.4.3 實驗儀器與設(shè)備1. TQ2440實驗平臺2. J-LINK 調(diào)試器2.4.4 實驗步驟1. 打開實驗代碼文件夾中的Song_test子文件夾中的工程song_test.mcp工程2. 單步調(diào)試程序,找出基本音符的放音語句,把響應(yīng)的語句和現(xiàn)象列入下表中序號程序現(xiàn)象1Buzzer_Freq_Set0( 260 );Delay(192*4);蜂鳴器發(fā)出音調(diào)1持續(xù)4拍2Buzzer_Freq_
21、Set0( 294 );Delay(192*4);蜂鳴器發(fā)出音調(diào)2持續(xù)4拍3Buzzer_Freq_Set0( 328 );Delay(192*4);蜂鳴器發(fā)出音調(diào)3持續(xù)4拍4Buzzer_Freq_Set0( 347 );Delay(192*4);蜂鳴器發(fā)出音調(diào)4持續(xù)4拍5Buzzer_Freq_Set0( 390 );Delay(192*4);蜂鳴器發(fā)出音調(diào)5持續(xù)4拍6Buzzer_Freq_Set0( 438 );Delay(192*4);蜂鳴器發(fā)出音調(diào)6持續(xù)4拍7Buzzer_Freq_Set0( 490 );Delay(192*4);蜂鳴器發(fā)出音調(diào)7持續(xù)4拍3. 理解蜂鳴器唱歌的過程
22、,全速運行程序,聆聽蜂鳴器唱歌4. 更改唱歌的內(nèi)容,播放另外兩首歌2.4.5 實驗思考題簡述PWM技術(shù)的其他應(yīng)用例子及其原理答:通信與控制PWM的一個優(yōu)點是從處理器到被控系統(tǒng)信號都是數(shù)字形式的,無需進行數(shù)模轉(zhuǎn)換。讓信號保持為數(shù)字形式可將噪聲影響降到最小。噪聲只有在強到足以將邏輯1改變?yōu)檫壿?或?qū)⑦壿?改變?yōu)檫壿?時,也才能對數(shù)字信號產(chǎn)生影響。對噪聲抵抗能力的增強是PWM相對于模擬控制的另外一個優(yōu)點,而且這也是在某些時候?qū)WM用于通信的主要原因。從模擬信號轉(zhuǎn)向PWM可以極大地延長通信距離。在接收端,通過適當?shù)腞C或LC網(wǎng)絡(luò)可以濾除調(diào)制高頻方波并將信號還原為模擬形式。PWM廣泛應(yīng)用在多種系統(tǒng)中。
23、作為一個具體的例子,我們來考察一種用PWM控制的制動器。簡單地說,制動器是緊夾住某種東西的一種裝置。許多制動器使用模擬輸入信號來控制夾緊壓力(或制動功率)的大小。加在制動器上的電壓或電流越大,制動器產(chǎn)生的壓力就越大??梢詫WM控制器的輸出連接到電源與制動器之間的一個開關(guān)。要產(chǎn)生更大的制動功率,只需通過軟件加大PWM輸出的占空比就可以了。如果要產(chǎn)生一個特定大小的制動壓力,需要通過測量來確定占空比和壓力之間的數(shù)學(xué)關(guān)系(所得的公式或查找表經(jīng)過變換可用于控制溫度、表面磨損等等)。例如,假設(shè)要將制動器上的壓力設(shè)定為100psi,軟件將作一次反向查找,以確定產(chǎn)生這個大小的壓力的占空比應(yīng)該是多少。然后再將
24、PWM占空比設(shè)置為這個新值,制動器就可以相應(yīng)地進行響應(yīng)了。如果系統(tǒng)中有一個傳感器,則可以通過閉環(huán)控制來調(diào)節(jié)占空比,直到精確產(chǎn)生所需的壓力。 總之,PWM既經(jīng)濟、節(jié)約空間、抗噪性能強,是一種值得廣大工程師在許多設(shè)計應(yīng)用中使用的有效技術(shù)。2.5 串口實驗2.5.1 實驗?zāi)康氖煜RM的串口操作2.5.2 實驗原理1)串行通信概述常用的數(shù)據(jù)通信方式有并行通信和串行通信兩種。當兩臺數(shù)字設(shè)備之間傳輸距離較遠時,數(shù)據(jù)往往以串行方式傳輸。串行通信的數(shù)據(jù)是一位一位地進行傳輸?shù)?,在傳輸中每一位?shù)據(jù)都占據(jù)一個固定的時間長度。與并行通信相比,如果n位并行接口傳送n位數(shù)據(jù)需時間T,則串行傳送的時間最少為nT。串行通信
25、具有傳輸線少、成本低等優(yōu)點,特別適合遠距離傳送。(1)串行數(shù)據(jù)通信模式串行數(shù)據(jù)通信模式有單工通信、半雙工通信和全雙工通信3種基本的通信模式。u 單工通信:數(shù)據(jù)僅能從設(shè)備A到設(shè)備B進行單一方向的傳輸。u 半雙工通信:數(shù)據(jù)可以從設(shè)備A到設(shè)備B進行傳輸,也可以從設(shè)備B到設(shè)備A進行傳輸,但不能在同一時刻進行雙向傳輸。u 全雙工通信:數(shù)據(jù)可以在同一時刻從設(shè)備A傳輸?shù)皆O(shè)備B,或從設(shè)備B傳輸?shù)皆O(shè)備A,即可以同時雙向傳輸(2)串行通信方式串行通信在信息格式的約定上可以分為同步通信和異步通信兩種方式。A. 異步通信方式異步通信時數(shù)據(jù)是一幀一幀傳送的,每幀數(shù)據(jù)包含有起始位(”0”)、數(shù)據(jù)位、奇偶校驗位和停止位(”
26、1”),每幀數(shù)據(jù)的傳送靠起始位來同步。一幀數(shù)據(jù)的各位代碼間的時間間隔是固定的,而相鄰兩幀的數(shù)據(jù)其時間間隔是不固定的。在異步通信的數(shù)據(jù)傳送中,傳輸線上允許空字符。異步通信對字符的格式、波特率、校驗位有確定的要求。u 字符的格式每個字符傳送時,必須前面加一起始位,后面加上1、1.5或2位停止位。例如ASCII碼傳送時,一幀數(shù)據(jù)的組成是:前面1個起始位,接著7位ASCII編碼,再接著一位奇偶校驗位,最后一位停止位,共10位。u 波特率傳送數(shù)據(jù)位的速率稱為波特率,用位秒(bit/s)來表示,稱之為波特。例如,數(shù)據(jù)傳送的速率為120字符秒,每幀包括10個數(shù)據(jù)位,則傳送波特率為:10×120=1
27、200b/s=1200波特每一位的傳送時間是波特的倒數(shù),如1/1200=0.833ms。異步通信的波特率的數(shù)值通常為:150、300、600、1200、2400、4800、9600、14400、28800、115200等,數(shù)值成倍數(shù)變化。u 校驗位在一個有8位的字節(jié)(byte)中,其中必有奇數(shù)個或偶數(shù)個的“1”狀態(tài)位。對于偶校驗就是要使字符加上校驗位有偶數(shù)個“1”;奇校驗就是要使字符加上校驗位有奇數(shù)個“1”。例如數(shù)據(jù)“00010011”,共有奇數(shù)個“1”,所以當接收器要接收偶數(shù)個“1”時(即偶校驗時),則校驗位就置為“1”,反之,接收器要接收奇數(shù)個“1”時(即奇校驗時),則校驗位就置為“0”。
28、一般校驗位的產(chǎn)生和檢查是由串行通信控制器內(nèi)部自動產(chǎn)生,除了加上校驗位以外,通信控制器還自動加上停止位,用來指明欲傳送字符的結(jié)束。停止位通常取1、1.5或2個位。對接收器而言,若未能檢測到停止位則意味著傳送過程發(fā)生了錯誤。在異步通信方式中,在發(fā)送的數(shù)據(jù)中含有起始位和停止位這兩個與實際需要傳送的數(shù)據(jù)毫無相關(guān)的位。如果在傳送1個8位的字符時,其校驗位、起始位和停止位都為1個位,則相當于要傳送11個位信號,傳送效率只有約80%。B. 同步通信方式為了提高通信效率可以采用同步通信方式。同步傳輸采用字符塊的方式,減少每一個字符的控制和錯誤檢測數(shù)據(jù)位,因而可以具有較高的傳輸速率與異步方式不同的是,同步通信方
29、式不僅在字符的本身之間是同步的,而且在字符與字符之間的時序仍然是同步的,即同步方式是將許多的字符聚集成一字符塊后,在每塊信息(常常稱之為信息幀)之前要加上12個同步字符,字符塊之后再加入適當?shù)腻e誤檢測數(shù)據(jù)才傳送出去。在同步通信時必須連續(xù)傳輸,不允許有間隙,在傳輸線上沒有字符傳輸時,要發(fā)送專用的”空閑”字符或同步字符。2)RS-232C串行接口(1)RS-232C接口規(guī)格EIA所制定的傳送電氣規(guī)格如表2-1所示。RS-232C通常以±12V的電壓來驅(qū)動信號線,TTL標準與RS-232C標準之間的電平轉(zhuǎn)換電路通常采用集成電路芯片實現(xiàn),如MAX232等(2)RS-232C接口信號EIA制定
30、的RS-232C接口與外界的相連采用25芯(DB-25)和9芯(DB-9)D型插接件,實際應(yīng)用中,并不是每只引腳信號都必須用到,25芯和9芯D型插接件引腳的定義,與信號之間的對應(yīng)關(guān)系如圖(3)RS-232C的基本連接方式計算機利用RS-232C接口進行串口通信,有簡單連接和完全連接兩種連接方式。簡單連接又稱三線連接,即只連接發(fā)送數(shù)據(jù)線、接收數(shù)據(jù)線和信號地,如圖2-12所示。如果應(yīng)用中還需要使用RS-232C的控制信號,則采用完全連接方式,如圖2-13所示。在波特率不高于9600bps的情況下進行串口通信時,通信線路的長度通常要求小于15米,否則可能出現(xiàn)數(shù)據(jù)丟失現(xiàn)象3)S3C2440A的UART
31、簡介UART(Universal Asynchronous Receiver and Transmitter,通用異步收發(fā)器)主要由數(shù)據(jù)線接口、控制邏輯、配置寄存器、波特率發(fā)生器、發(fā)送部分和接收部分組成,采用異步串行通信方式,采用RS-232C 9芯接插件(DB-9)連接,是廣泛使用的串行數(shù)據(jù)傳輸方式,UART以字符為單位進行數(shù)據(jù)傳輸,每個字符的傳輸格式如圖2-14所示,包括線路空閑狀態(tài)(高電平)、起始位(低電平)、58位數(shù)據(jù)位、校驗位(可選)和停止位(位數(shù)可以是1、1.5或2位)。這種格式通過起始位和停止位來實現(xiàn)字符的同步。UART內(nèi)部一般具有配置寄存器,通過該寄存器可以配置數(shù)據(jù)位數(shù)(58位
32、)、是否有校驗位和校驗的類型以及停止位的位數(shù)(1位、1.5位或2位)等4)S3C2410A的UART結(jié)構(gòu)S3C2410A的UART提供3個獨立的異步串行I/O口(SIO),它們都可以運行于中斷模式或DMA模式。UART可以產(chǎn)生中斷請求或DMA請求,以便在CPU和UART之間傳輸數(shù)據(jù)。在使用系統(tǒng)時鐘的情況下,UART可以支持最高230.4Kbps的傳輸速率。如果外部設(shè)備通過UEXTCLK為UART提供時鐘,那么UART的傳輸速率可以更高。每個UART通道包含兩個用于接收和發(fā)送數(shù)據(jù)的16字節(jié)的FIFO緩沖寄存器如圖2-15所示,S3C2410A的UART由波特率發(fā)生器、發(fā)送器、接收器以及控制單元組
33、成。波特率發(fā)生器的時鐘可以由PCLK或UEXTCLK提供。發(fā)送器和接收器包含16字節(jié)的FIFO緩沖寄存器和數(shù)據(jù)移位器。發(fā)送時,數(shù)據(jù)被寫入FIFO,然后拷貝到發(fā)送移位器中,接下來數(shù)據(jù)通過發(fā)送數(shù)據(jù)引腳(TxDn)被發(fā)送。接收時,接收到的數(shù)據(jù)從接收數(shù)據(jù)引腳(RxDn)移入,然后從移位器拷貝到FIFO中2.5.3 實驗儀器與設(shè)備1. TQ2440實驗平臺2. J-LINK 調(diào)試器2.5.4 實驗步驟1. 打開實驗代碼文件夾中的uart_test子文件夾中的工程uart_test.mcp工程2. 閱讀代碼,單步執(zhí)行,體會Uart0_SendByte和Uart0_Getch()函數(shù)里面對相關(guān)寄存器的設(shè)置方
34、法和意義,實現(xiàn)基本的串口收發(fā)功能,并且修改收發(fā)的數(shù)據(jù),把對應(yīng)的程序和現(xiàn)象記錄下來序號程序現(xiàn)象1Uart0_Init( 115200 );Uart0_SendByte('A');串口調(diào)試助手顯示字母A2ch=Uart0_Getch();Uart0_SendByte(ch);在串口調(diào)試助手輸入任意字符串口調(diào)試助手將再次顯示該字符4.修改程序,實現(xiàn)一個字符串的發(fā)送功能,把程序和現(xiàn)象記錄下來 序號程序現(xiàn)象1void UART0_SendString(char *pWord)while(*pWord)if(*pWord = 'n')UART0_SendChar('
35、n'); /換行UART0_SendChar('r');elseUART0_SendChar(*pWord);pWord+;串口發(fā)送字符串函數(shù)定義2UART0_SendString(“Hello,world!n”)串口調(diào)試助手顯示字符串“Hello,world!”并換行5. 修改代碼,實現(xiàn) PC 通過串口控制 LED 的功能,把程序和現(xiàn)象記錄下來序號程序現(xiàn)象1switch(ch)case '1': LED_Control(1,ON); break;case '2': LED_Control(2,ON); break;case '3
36、': LED_Control(3,ON); break;case '4': LED_Control(4,ON); break;default: LED_Control(1,OFF); LED_Control(2,OFF); LED_Control(3,OFF); LED_Control(4,OFF);break;字符判斷并控制對應(yīng)LED燈點亮2ch=Uart0_Getch();在串口調(diào)試助手中輸入字符1、2、3、4對應(yīng)LED點亮2.5.4 實驗思考題如何采用帶FIFO的串口進行數(shù)據(jù)收發(fā)答:在接受數(shù)據(jù)的時候放入FIFO中,然后發(fā)送數(shù)據(jù),把FIFO中的數(shù)據(jù)通過串口發(fā)送出去。
37、在串口助手里很容易看出來,數(shù)據(jù)是不是錯誤或者丟失。驗證了發(fā)送與接收。2.6 實時時鐘實驗2.6.1 實驗?zāi)康氖煜RM的實時時鐘的讀寫2.6.2 實驗原理實時時鐘(RTC)單元在系統(tǒng)電源關(guān)閉的情況下可以在備用電池下工作。S3C2440A的RTC模塊的結(jié)構(gòu)如圖2-18所示,其能夠以BCD碼的形式提供秒、分鐘、小時、星期、日、月、年的信息,具有閏年生成器,具有報警功能,解決2000年問題,具有獨立電源引腳(RTCVDD),支持對于實時內(nèi)核時間節(jié)拍的毫秒節(jié)拍時間中斷。與RTC相關(guān)的寄存器有:u實時時鐘控制寄存器(RTCCON)在讀取或者修改時間前,必須先把該寄存器的第 0 位 RTCEN 置 1,該
38、寄存器的位如下所示 u年寄存器 u月寄存器 u日寄存器 u時寄存器 u分寄存器 u秒寄存器2.6.3實驗設(shè)備1. TQ2440實驗平臺2. J-LINK 調(diào)試器3. 串口線2.6.4 實驗步驟1. 打開實驗代碼文件夾中的rtc_test子文件夾中的工程rtc_test.mcp工程2. 閱讀代碼,單步執(zhí)行,體會void RTC_Time_Set( void )和void RTC_Display(void)函數(shù)里面對相關(guān)秒寄存器的寫入和讀取過程,通過串口觀察到的結(jié)果。3. 增加對年、月、日、時、分寄存器的寫入和讀取功能,并通過串口觀察修改后的時間。把代碼和相應(yīng)的現(xiàn)象寫入下表序號程序現(xiàn)象1void
39、RTC_Time_Set( void )rRTCCON = 1 ;rBCDYEAR = 0x14 ;/年 閏年測試rBCDMON = 0x12 ;/月rBCDDATE = 0x26 ;/日rBCDDAY = 0x04 ;/星期rBCDHOUR = 0x14 ;/小時rBCDMIN = 0x49 ;/分rBCDSEC = 0x50 ;/秒rRTCCON &= 1 ;RTC起始時間設(shè)置位“2014年12月26日星期四14時49分50秒”2void RTC_Display(void) U16 year ;U8 month, day ;/ weekU8 hour, minute, second
40、 ;rRTCCON = 1 ;year = 0x2000+rBCDYEAR ;/年month = rBCDMON ; /月day = rBCDDATE ;/日hour = rBCDHOUR ;/小時minute = rBCDMIN ;/分second = rBCDSEC ;/秒rRTCCON &= 1 ;/RTC read and write disableUart_Printf("RTCtime : %04x-%02x-%02x %02x:%02x:%02xn", year, month, day, hour, minute, second );Delay( 90
41、0 ) ;讀取RTC當前時間在通過串口在串口調(diào)試助手中顯示4.修改工程,改變時間設(shè)置值,嘗試設(shè)置閏年和非閏年,觀察實驗結(jié)果,把把代碼和相應(yīng) 的現(xiàn)象寫入下表序號程序現(xiàn)象1RTC_Time_Set();/設(shè)置時間為2014年2月28日星期一23:59:57while(1)RTC_Display();RTC初始時間為時間為2014年2月28日星期一23:59:57;串口每秒顯示一次當前時間4秒后當前時間為2014年2月29日星期二00:00:00;2RTC_Time_Set();/設(shè)置時間為2013年2月28日星期一23:59:57while(1)RTC_Display();RTC初始時間為時間為2
42、013年2月28日星期一23:59:57;串口每秒顯示一次當前時間4秒后當前時間為2013年3月1日星期二00:00:00;2.7 看門狗實驗2.7.1 實驗?zāi)康氖煜RM的看門狗的操作2.7.2 實驗原理在程序運行過程中中,由于軟件問題或者外界的干擾,造成程序跑飛,而陷入死循環(huán),程序的正常運行被打斷,由于系統(tǒng)無法繼續(xù)工作,會造成整個系統(tǒng)的陷入停滯狀態(tài),發(fā)生不可預(yù)料的后果,所以出于對程序運行狀態(tài)進行實時監(jiān)測的考慮,便產(chǎn)生了一種專門用于監(jiān)測單片機程序運行狀態(tài)的芯片,俗稱“看門狗”(watchdog)。S3C2440A的看門狗的結(jié)構(gòu)如圖2-19所示,看門狗實際是一個計數(shù)器,當計數(shù)溢出的時候可以對系
43、統(tǒng)進行復(fù)位,因此程序在正常運行的時候應(yīng)該隔一段時間對看門狗復(fù)位,防止看門狗計數(shù)器溢出使得系統(tǒng)復(fù)位,這個過程叫做“喂狗”。S3C2440A中與看門狗相關(guān)的寄存器有:u 看門狗控制寄存器(WTCON)看門狗控制寄存器如下表所示,其用于啟動和關(guān)閉看門狗。u 看門狗計數(shù)器(WTCNT)程序中需要在器溢出之前把新的計數(shù)值賦給看門狗計數(shù)器2.7.5 實驗儀器與設(shè)備1. TQ2440實驗平臺2. J-LINK 調(diào)試器3.串口線2.7.6 實驗步驟1. 打開實驗代碼文件夾中的wd_test子文件夾中的工程wd_test.mcp工程2. 閱讀代碼,了解看門狗的啟動方式和喂狗的方法3. 修改工程,比較有喂狗和沒有
44、喂狗的實驗結(jié)果,把程序和相應(yīng)的現(xiàn)象列入下表中。注意:要觀察看門狗的復(fù)位,必須全速運行程序,不能單步執(zhí)行序號程序現(xiàn)象1for(i=5;i<=8;i+)led_con(i,ON);delay(1);led_con(i,OFF);delay(1);程序運行大約2s后停止運行并且AXD顯示:“Processor ARM79_0 raised an exception ;cause:The processor was reset”2for(i=5;i<=8;i+)led_con(i,ON);/rWTCNT=2000; /喂狗delay(1);led_con(i,OFF);/rWTCNT=20
45、00; /喂狗delay(1);程序正常運行,4個LED循環(huán)依次亮滅第三章 C/OS II操作系統(tǒng)下的實驗3.2 C/OS II多任務(wù)建立實驗3.2.1 實驗?zāi)康氖煜?C/OS II 多任務(wù)建立方法3.2.2 實驗內(nèi)容1. 運行 C/OS II 例程,熟悉任務(wù)的建立方法2. 修改例程代碼,建立兩個任務(wù),其中一個實現(xiàn)蜂鳴器唱歌,另外一個實現(xiàn)按鍵的檢測并且改變相應(yīng)的 LED 的狀態(tài)3.2.3 實驗原理人們在實際生活中處理一個大而復(fù)雜問題, 時慣用的方法就是 “分而治之” 即把一個大問題分解多個相對簡單、比較容易解決的小問題,小問題逐個被解決了,大問題也就隨之解決了。同樣,在設(shè)計一個較為復(fù)雜的應(yīng)用程
46、序時,也通常把一個大型任務(wù)分解成多個小任務(wù),然后在計算機中通過運行這些小任務(wù),最終達到完成大任務(wù)的目的,這種做法也使用應(yīng)用程序的維護變得方便起來。因此,現(xiàn)代操作系統(tǒng)幾乎都是對任務(wù)操作系統(tǒng)。 在C/OS-II 中,與上述小任務(wù)對應(yīng)的是程序?qū)嶓w就叫做“任務(wù)”(實質(zhì)是一個線程)。C/OS-II 就是一個能對這些小任務(wù)進行管理和調(diào)度的多任務(wù)操作系統(tǒng)。 從應(yīng)用程序設(shè)計的角度來看,C/OS-II 的任務(wù)就是一個線程,就是一個用來解決用戶問題的 C 語言函數(shù)和與之相關(guān)聯(lián)的一些數(shù)據(jù)結(jié)構(gòu)而構(gòu)成的一個實體。 C/OS-II 的任務(wù)有兩種:用戶任務(wù)和系統(tǒng)任務(wù)。有應(yīng)用程序設(shè)計者編寫得任務(wù),叫做用戶任務(wù);有系統(tǒng)提供的任
47、務(wù)叫做系統(tǒng)任務(wù)。用戶任務(wù)是為解決應(yīng)用問題而編寫的;系統(tǒng)任務(wù)是為應(yīng)用程序來提供某種服務(wù)的。 為了管理上的方便,C/OS-II 把每一個任務(wù)都作為一個節(jié)點。 目前,C/OS-II 最多可以對 64 個任務(wù)(包括用戶任務(wù)和系統(tǒng)任務(wù))進行管理。1) 任務(wù)的狀態(tài) 因為在嵌入式系統(tǒng)中只有一個 CPU,所以在一個具體時刻只能允許一個任務(wù)占用 CPU。 根據(jù)任務(wù)是否占用 CPU,以及是否處于被中斷、等待等情況。任務(wù)在C/OS-II 中可能處于表3-1 所列的 5 種狀態(tài)之一。任務(wù)的狀態(tài) 說明睡眠狀態(tài) 任務(wù)只是以代碼的形式駐留在程序空間(ROM 和 RAM)中,還沒有交給操作 系統(tǒng)管理時的情況叫睡眠狀態(tài)。簡單地
48、說,任務(wù)在沒有被配備任務(wù)控制塊 或被剝奪了任務(wù)控制塊時的狀態(tài)叫做任務(wù)的睡眠狀態(tài)就緒狀態(tài) 如果系統(tǒng)為任務(wù)配備了任務(wù)控制塊且在任務(wù)就緒表中進行了就緒登記,則 任務(wù)就具備了運行的充分條件,這時任務(wù)的狀態(tài)叫就緒狀態(tài)運行狀態(tài) 處于就緒狀態(tài)的任務(wù),如果經(jīng)調(diào)度器獲得了 CPU 的使用權(quán),則任務(wù)進入運 行狀態(tài),任何時刻只能有一個任務(wù)進入運行狀態(tài),就緒的任務(wù)只有當所有 優(yōu)先級高于本任務(wù)的任務(wù)都轉(zhuǎn)為等待狀態(tài)時,才能進入運行狀態(tài)等待狀態(tài) 正在運行的任務(wù), 需要等待一段時間或者需要等待一個事件發(fā)生再運行時, 該任務(wù)就會把 CPU 的使用權(quán)讓給其他任務(wù)而使任務(wù)進入等待狀態(tài)中斷服務(wù)狀態(tài) 一個正在運行的任務(wù)一旦響應(yīng)中斷申請
49、就會中止運行而去執(zhí)行中斷服務(wù)程 序,這時任務(wù)的狀態(tài)叫做中斷服務(wù)狀態(tài)任務(wù)在不同狀態(tài)之間的轉(zhuǎn)換如圖 3-1 所示2) 用戶任務(wù)代碼的一般結(jié)構(gòu)用戶任務(wù)代碼的一般結(jié)構(gòu)根據(jù)嵌入式任務(wù)的工作特點,任務(wù)的執(zhí)行代碼通常是一個無限循環(huán)結(jié)構(gòu),并且在這個循環(huán)中可以響應(yīng)中斷,這種結(jié)構(gòu)叫做超循環(huán)結(jié)構(gòu)。一個用 C 語言編寫的任務(wù)Void MyTask(void* pdata)for(;)可以被中斷的代碼;OS_ENTER_CRITICAL();/進入臨界段(關(guān)中斷)不可以被中斷的用戶代碼;OS_EXIT_CRITICAL();/退出臨界段(開中斷)可以被中斷的用戶代碼;從程序設(shè)計的角度來看,一個C/OS-II 任務(wù)的代碼
50、就是一個 C 語言函數(shù)。為了可以傳遞各種類型的數(shù)據(jù)甚至是函數(shù),任務(wù)的參數(shù)是一個 void 類型的指針。為 了 有 效 地 對 中 斷 進 行 控 制 , 在 任 務(wù) 的 代 碼 里 可 以 使 用 C/OS-II 定義的宏OS_ENTER_CRITICAL()和 OS_EXIT_CRITICAL()來控制任務(wù)何時響應(yīng)中斷,何時屏蔽中斷。在運行這兩個宏之間的代碼時是不會響應(yīng)中斷的,這種保護的代碼段叫做臨界段。在具體應(yīng)用中可以,根據(jù)實際需要在一個任務(wù)中使用這對宏設(shè)置對個臨界段。因此可以說,C/OS-II 任務(wù)是代碼結(jié)構(gòu)的一個帶有臨界段的無限循環(huán)。用戶應(yīng)用程序的一般結(jié)構(gòu)從程序代碼上來看,用戶任務(wù)似乎
51、就是一個 C 語言函數(shù),但是這個函數(shù)不是一般的 C語言函數(shù),它是一個任務(wù)(線程)。因此它不是被主函數(shù)或其他函數(shù)調(diào)用的,主函數(shù) main()只負責(zé)創(chuàng)建和啟動它們,而由操作系統(tǒng)負責(zé)來調(diào)度運行它們。用戶應(yīng)用程序結(jié)構(gòu)Void MyTask1(void* pdata) /定義用戶任務(wù) 1for(;).Void MyTask2(void* pdata) /定義用戶任務(wù) 2for(;).Void MyTask3(void* pdata) /定義用戶任務(wù) 3for(;).void main().OSIniT(); /初始化C/OS-II.OSTaskCreat(MyT ask1,.); /創(chuàng)建用戶任務(wù) 1OS
52、TaskCreat(MyTask2,.); /創(chuàng)建用戶任務(wù) 2OSTaskCreat(MyTask3,.); /創(chuàng)建用戶任務(wù) 3.OSStart(); /啟動任務(wù).3) 系統(tǒng)任務(wù) C/OS-II 預(yù)定義了兩個應(yīng)用程序服務(wù)的系統(tǒng)任務(wù):空閑任務(wù)和統(tǒng)計任務(wù)。其中空閑任務(wù)是每個應(yīng)用程序必須使用的,而統(tǒng)計任務(wù)則是應(yīng)用程序可以根據(jù)實際需要來選擇使用的。(1) 空閑任務(wù) 在多任務(wù)系統(tǒng)運行時,系統(tǒng)經(jīng)常會在某個時間內(nèi)無用戶任務(wù)可以運行而處于所謂的空閑狀態(tài)。為了使 CPU 在沒有使用用戶任務(wù)可執(zhí)行時有事可做,C/OS-II 提高了一個叫做空閑任務(wù) OSTaskIdle()的系統(tǒng)任務(wù)??臻e任務(wù)代碼如下Void OS
53、TaskIdle(void* pdata) # if OS_CRITICAL_METHOD =3OS_CPU_SR cpu_sr;# endifpdata=pdata; /防止某些編譯器報錯for(;)OS_ENTER_CRITICAL(); /關(guān)閉中斷OSdleCtr+; /計數(shù)OS_EXIT_CRITICAL(); /開放中斷C/OS-II 規(guī)定,一個用戶應(yīng)用程序必須使用這個空閑任務(wù),而且這個任務(wù)是不能用軟件來刪除的(2) .統(tǒng)計任務(wù) C/OS-II 提供的另一個系統(tǒng)任務(wù)是統(tǒng)計任務(wù) OSTaskStart()。這個統(tǒng)計任務(wù)每秒計算一次CPU 在單位時間內(nèi)被使用的時間,并把計算結(jié)果以百分比的形式存放在變量 OSCPUUsage 中,以便應(yīng)用程序通過訪問它來了解 CPU 的利用率,所以該系統(tǒng)任務(wù) OSTaskStart()叫做統(tǒng)計任務(wù)。 用戶應(yīng)用程序是否使用統(tǒng)計任務(wù),用戶可以根據(jù)應(yīng)用程序的實際需要來進行選擇。如果用戶應(yīng)用程序要使用這個統(tǒng)計任務(wù),則必須把定義的體貼頭文件 OS-CFG.H 中的系統(tǒng)配置常數(shù) OS_TASK_STAT_EN 設(shè)置為
溫馨提示
- 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 上海市靜安區(qū)2025屆高三一模語文試卷
- 2025-2030全球鐵基超塑形狀記憶合金行業(yè)調(diào)研及趨勢分析報告
- 2025-2030全球輸注穿刺耗材行業(yè)調(diào)研及趨勢分析報告
- 2025年全球及中國高純度氫氧化鈷行業(yè)頭部企業(yè)市場占有率及排名調(diào)研報告
- 二零二五年度廚師文化交流與合作合同3篇
- 游戲化學(xué)習(xí)在小學(xué)數(shù)學(xué)教育中的應(yīng)用研究
- 學(xué)生如何利用信息技術(shù)提升自我表達能力
- 2025年度個人創(chuàng)業(yè)額度借款合同范本3篇
- 2025年度個人間車輛購置借款合同3篇
- 溫州浙江溫州體育運動學(xué)校編外工作人員招聘筆試歷年參考題庫附帶答案詳解
- 道路瀝青工程施工方案
- 2025年度正規(guī)離婚協(xié)議書電子版下載服務(wù)
- 《田口方法的導(dǎo)入》課件
- 春節(jié)后安全生產(chǎn)開工第一課
- 內(nèi)陸?zhàn)B殖與水產(chǎn)品市場營銷策略考核試卷
- 電力電纜工程施工組織設(shè)計
- 醫(yī)生給病人免責(zé)協(xié)議書(2篇)
- 票據(jù)業(yè)務(wù)居間合同模板
- “網(wǎng)絡(luò)安全課件:高校教師網(wǎng)絡(luò)安全與信息化素養(yǎng)培訓(xùn)”
- 鋰離子電池健康評估及剩余使用壽命預(yù)測方法研究
- 體育文化園賽馬場項目概念規(guī)劃設(shè)計
評論
0/150
提交評論