版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
1、會計學1理學理學 基于基于SCX處理器的嵌入式應用系統(tǒng)處理器的嵌入式應用系統(tǒng)設計設計第1頁/共106頁RTC 電路的電壓是 1.8V,實際是將電池電壓或 3.3V電壓經(jīng)過兩個 BAV99(等價于4 個二極管串聯(lián))降壓后得到的。如圖3.2所示。圖3.2 RTC 電路的電壓原理圖 第2頁/共106頁 圖3.3 系統(tǒng)的復位電路第3頁/共106頁擇外部時鐘源;擇外部時鐘源;UPLL選擇外部選擇外部振蕩器;振蕩器;nOM3:2=11時,時,MPLL和和UPLL的時鐘均選擇外部時鐘源。的時鐘均選擇外部時鐘源。第4頁/共106頁 該系統(tǒng)中選擇OM3:2均接地的方式,即采用外部振蕩器提供系統(tǒng)時鐘。外部振蕩器由
2、12MHz晶振和2個15pF的微調(diào)電容組成。如圖3.4所示, 圖3.4 晶振電路原理圖第5頁/共106頁 圖3.5所示的是S3C2410X應用系統(tǒng)所需的RTC時鐘電路圖,電路由12MHz晶振和2個15pF的電容組成,振蕩電路的輸出接到S3C2410X微處理器的XTlpll腳,輸入由XTOpll提供。12MHz的晶振頻率經(jīng)S3C2410X內(nèi)部PLL電路的倍頻后可達203MHz。 圖3.5 系統(tǒng)時鐘的選擇第6頁/共106頁3.2 存儲器系統(tǒng)設計 在嵌入式應用系統(tǒng)中,通常使用3種存儲器接口電路,Nor Flash接口、Nand Flash接口和SDRAM接口電路。引導程序既可存儲在Nor Flash
3、中,也可存儲在Nand Flash中。而SDRAM中存儲的是執(zhí)行中的程序和產(chǎn)生的數(shù)據(jù)。存儲在Nor Flash中的程序可直接執(zhí)行,與在SDRAM執(zhí)行相比速度較慢。存儲在Nand Flash中的程序,需要拷貝到RAM中去執(zhí)行。第7頁/共106頁3.2.1 8位存儲器接口設計 由于ARM微處理器的體系結(jié)構(gòu)支持8位/16位/32位的存儲器系統(tǒng),相應地可以構(gòu)建8位的存儲器系統(tǒng)、16位的存儲器系統(tǒng)或32位的存儲器系統(tǒng),在采用8位存儲器構(gòu)成8位/16位/32位的存儲器系統(tǒng)時,除數(shù)據(jù)總線的連接不同之處,其它的信號線的連接方法基本相同。第8頁/共106頁1構(gòu)建8位的存儲器系統(tǒng) 采用8位存儲器構(gòu)成8位的存儲器系
4、統(tǒng)如圖3.6 所示。此時,在初始化程序中還必須通過BWSCON寄存器中的DWn 設置為00,選擇8位的總線方式。 存儲器的nOE端接S3C2410X的nOE引腳; 存儲器的nWE端接S3C2410X的nWE引腳; 存儲器的nCE端接S3C2410X的nGCSn引腳; 存儲器的地址總線A15A0與S3C2410X的地址總線ADDR15ADDR0相連; 存儲器的8位數(shù)據(jù)總線DQ7DQ0與S3C2410X的數(shù)據(jù)總線DATA7DATA0相連。第9頁/共106頁2構(gòu)建16位的存儲器系統(tǒng) 采用兩片8位存儲器芯片以并聯(lián)方式可構(gòu)成16位的存儲器系統(tǒng),如圖3.7 所示,此時,在初始化程序中將BWSCON寄存器中
5、的DWn 設置為01,選擇16位的總線方式。 存儲器的nOE端接S3C2410X的nOE引腳; 低8位的存儲器的nWE端接S3C2410X的nWBE0引腳,高8位的存儲器的nWE端接S3C2410X的nWBE1引腳; 存儲器的nCE端接S3C2410X的nGCSn引腳; 存儲器的地址總線A15A0與S3C2410X的地址總線ADDR16ADDR1相連; 低8位的存儲器的8位數(shù)據(jù)總線DQ7DQ0與S3C2410X的數(shù)據(jù)總線DATA7DATA0相連,高8位的存儲器的8位數(shù)據(jù)總線DQ7DQ0與S3C2410X的數(shù)據(jù)總線DATA15DATA8相連。第10頁/共106頁3構(gòu)建32位的存儲器系統(tǒng)采用四片8
6、位存儲器芯片以并聯(lián)方式可構(gòu)成32位的存儲器系統(tǒng),如圖3.8 所示,此時,在初始化程序中將BWSCON寄存器中的DWn 設置為10,選擇32位的總線方式。 存儲器的nOE端接S3C2410X的nOE引腳; 低8位的存儲器的nWE端接S3C2410X的nWBE0引腳,次低8位的存儲器的nWE端接S3C2410X的nWBE1引腳,次高8位的存儲器的nWE端接S3C2410X的nWBE2引腳,高8位的存儲器的nWE端接S3C2410X的nWBE3引腳; 存儲器的nCE端接S3C2410X的nGCSn引腳; 存儲器的地址總線A15A0與S3C2410X的地址總線ADDR17ADDR2相連。第11頁/共1
7、06頁圖3.8 32位存儲器系統(tǒng) 第12頁/共106頁3.2.2 SDRAM接口電路設計 在ARM嵌入式應用系統(tǒng)中,SDRAM主要用于程序的運行空間、數(shù)據(jù)及堆棧區(qū)。當系統(tǒng)啟動時,CPU首先從復位地址0 x0處讀取啟動程序代碼,完成系統(tǒng)的初始化后,為提高系統(tǒng)的運行的速度,程序代碼通常裝入到SDRAM中運行。在S3C2410X片內(nèi)具有獨立的SDRAM刷新控制邏輯電路,可方便地與SDRAM接口。目前常用的SDRAM芯片有8位和16位的數(shù)據(jù)寬度、工作電壓一般為3.3 V。主要生產(chǎn)廠商有HYUNDAI、Winbond等,下面以K4S561632C-TC75為例說明其與S3C2410X的接口方法,構(gòu)成16
8、M x 32位的存儲系統(tǒng)。第13頁/共106頁 K4S561632C-TC75存儲器是4組 4M 16 位的動態(tài)存儲器,工作電壓為3.3 V,其封裝形式為54腳TSOP,兼容LVTTL接口,數(shù)據(jù)寬度為16位,支持自動刷新(Auto-Refresh)和自刷新(Self-Refresh)。其引腳如圖3.9所示,引腳功能如表3.1所示。 圖3.9 K4S561632C-TC75引腳圖 第14頁/共106頁引腳名 稱說 明CLK時鐘時鐘輸入CKE時鐘使能片內(nèi)時鐘信號使能CS*片選為低電平時芯片才能工作BA0、BA1組地址選擇用于片內(nèi)4個組選擇A12A0地址總線為行、列的地址線RAS*行地址鎖存低電平時
9、鎖存行地址CAS*列地址鎖存低電平時鎖存列地址WE*寫使能使能寫信號和允許列改寫,WE*和CAS*有效時鎖存數(shù)據(jù)LDQM、UDQM數(shù)據(jù)I/O屏蔽在讀模式下控制輸出緩沖,寫模式下屏蔽輸入數(shù)據(jù)DQ15DQ0數(shù)據(jù)總線數(shù)據(jù)輸入/輸出引腳VDD/VSS電源/地內(nèi)部電源及輸入緩沖電源/地VDDQ/VSSQ電源/地輸出緩沖電源/地NC空空引腳表3.1 K4S561632C-TC75引腳功能表 第15頁/共106頁 采用兩片K4S561632C-TC75存儲器芯片可組成16M 32位SDRAN存儲器系統(tǒng),其片選信號CS*接S3C2410X的nGCS6 引腳,具體連線如圖3.10所示。 圖3.10 K4S561
10、632C-TC75組成的32位SDRAM存儲器系統(tǒng) 第16頁/共106頁3.2.3 Flash接口電路設計 Flash閃存是非易失存儲器,可以對稱為塊的存儲器單元塊進行擦寫和再編程。目前所做用的Flash芯片主要有NorFlash和Nand Flash兩種。但這兩種Flash芯片在某些方面存在一定的差異,如:Nand器件執(zhí)行擦除操作簡單,而Nor則要求在進行寫入前先將目標塊內(nèi)所有的位都寫為0; Nor的讀速度比Nand稍快一些; Nand的寫入速度比Nor快很多,Nand需4ms擦除,而Nor需要5s快。Nand Flash的單元尺寸幾乎是Nor器件的一半,由于生產(chǎn)過程更為簡單,其價格低。在N
11、and閃存中每個塊的最大擦寫次數(shù)是一百萬次,而Nor的擦寫次數(shù)是十萬次。第17頁/共106頁 Nor具有XIP(eXecute In Place,芯片內(nèi)執(zhí)行)特性,應用程序可以直接在Flash閃存內(nèi)運行,不必再把代碼讀到系統(tǒng)RAM中。Nor的傳輸效率很高,在14MB的小容量時具有很高的成本效益,但是很低的寫入和擦除速度大大影響了它的性能。Nand結(jié)構(gòu)能提供極高的單元密度,可以達到高存儲密度,并且寫入和擦除的速度也很快。在接口方面,Nor Flash和Nand Flash也存在著差別。Nor Flash帶有SRAM接口,Nand器件使用復雜的I/O口來串行存取數(shù)據(jù)。第18頁/共106頁1Nor
12、Flash與S3C2410X微處理器接口設計SST39LF/VF160是1M X 16位的CMOS芯片,SST39LF160工作電壓為3.03.6V,SST39VF160工作電壓為2.73.6V,采用48腳TSOP封裝或TFBGA封裝,16位數(shù)據(jù)寬度,以字模式(16位數(shù)據(jù)寬度)的方式工作。SST39VF160的在系統(tǒng)編程和編程操作僅需3.3V電壓,通過命令可以對芯片進行編程(燒寫)、擦除(整片擦除和按扇區(qū)擦除)以及其他操作。SST39LF/VF160的引腳圖如圖3.11所示,引腳功能如表3.2所示。 第19頁/共106頁圖3.11 SST39LF/VF160的引腳圖 第20頁/共106頁表3.
13、2 SST39LF160/SST39VF160引腳功能表引腳名 稱說 明CE*片選為低電平時芯片才能工作OE*輸出使能用于片內(nèi)4個組選擇A19A0地址總線地址線WE*寫使能使能寫信號和允許列改寫DQ15DQ0數(shù)據(jù)總線數(shù)據(jù)輸入/輸出引腳VDD電源3.3V電源VSS地地NC空空引腳 表3.2 SST39LF160/SST39VF160引腳功能表第21頁/共106頁 嵌入式應用系統(tǒng)中,常見的Nor Flash存儲器芯片單片容量有1MB、2MB、4MB、8MB、16MB等。 下面以SST39VF160為例,簡述其與S3C2410X微處理器的連線,構(gòu)成1M X 16位的存儲器系統(tǒng)。SST39VF160的
14、OE*與S3C2410X的nOE相連;WE*與S3C2410X的nWE相連;地址總線A19A0與S3C2410X的地址總線ADDR20ADDR1相連(注:因為是16位的存儲器系統(tǒng),半字對齊,所以S3C2410X的A0不用連線);16位的數(shù)據(jù)總線DQ15DQ0與S3C2410X的低16位數(shù)據(jù)總線XDATA15XDATA0相連,如圖3.12所示。 第22頁/共106頁圖3.12 SST39LF/VF160的存儲系統(tǒng)電路圖 第23頁/共106頁2Nand Flash與S3C2410X微處理器接口電路設計 Nand Flash相對于Nor Flash接口復雜得多,但對于S3C2410X微處器提供了Na
15、nd Flash的接口,使其在嵌入式應用系統(tǒng)中的接口大大簡便。 例:K9F1208UDM-YCB0/K9F1208UDM-YIB0 存儲器與S3C2410X微處理器接口。K9F1208UDM-YCB0/K9F1208UDM-YIB0 存儲器是64M8位的NAND Flash存儲器,數(shù)據(jù)總線寬度為8位,工作電壓為2.7V-3.6V,采作48腳TSOP封裝,系統(tǒng)的編程和擦除電壓僅需3.3V,其引腳如圖3.13所示,引腳功能如表3.3所 第24頁/共106頁表3.3 U-K9F1208UDM引腳功能表 圖3.13 U-K9F1208UDM引腳圖 第25頁/共106頁 K9F1208UDM與S3C24
16、10X微處理器接口如圖3.14所示。 K9F1208UDM的ALE和CLE引腳分別與S3C2410X的ALE和CLE引腳相連; K9F1208UDM的WE*、RE*、CE*和R/B引腳分別與S3C2410X的Nfwe、Nfre、CLE和R/nB引腳相連; K9F1208UDM的數(shù)據(jù)輸入輸出線IO7IO0分別與S3C2410X的DATA7DATA0引腳相連。其操作模式如表3.4所示。 第26頁/共106頁第27頁/共106頁圖3.14 Nand Flash存儲系統(tǒng)電路 第28頁/共106頁3.3 S3C2410X的串行通信設計 3.3.1 串行口原理及接口技術 1異步串行IO 異步串行方式是將傳
17、輸數(shù)據(jù)的每個字符一位接一位(例如先低位、后高位)地傳送。數(shù)據(jù)的各不同位可以分時使用同一傳輸通道,因此串行IO 可以減少信號連線,最少用一對線即可進行。圖3.15 串行通信字符格式 第29頁/共106頁S3C2410X串行接口 S3C2410X提供了3個通道的UART,要使其與PC機通信,必須將其信號電平轉(zhuǎn)換為RS232C 的電平。 RS232C規(guī)定了雙極性的信號邏輯電平:-3V 到-25V 之間的電平表示邏輯“1”。+3V 到+25V 之間的電平表示邏輯“0”。因此這是一套負邏輯定義,以上標準稱為EIA 電平。第30頁/共106頁圖3.16 S3C2410X與PC機的異步通信接口圖 第31頁/
18、共106頁3.3.2 S3C2410X的UART模塊 S3C2410X與UART 有關的寄存器主要有以下幾個:(1)UART線控制寄存器包括ULCON0,ULCON1和ULCON2,主要用來選擇每幀數(shù)據(jù)位數(shù)、停止位數(shù),奇偶校驗模式及是否使用紅外模式,如表3.5和表3.6所示。第32頁/共106頁表3.5 UART寄存器設置 表3.6 UART寄存器位描述 寄存器寄存器地地 址址讀讀/寫寫描描 述述復位后值復位后值ULCON00 x50000000R/WUART通道通道0線控制寄存器線控制寄存器0 x00ULCON10 x50004000R/WUART通道通道1線控制寄存器線控制寄存器0 x00
19、ULCON20 x50008000R/WUART通道通道2線控制寄存器線控制寄存器0 x00ULCONn位位描描 述述復位后值復位后值保留保留70紅外模式紅外模式6確定是否用紅外模式:確定是否用紅外模式:0=正常模式、正常模式、1=紅外收紅外收/發(fā)模式發(fā)模式0奇偶校驗奇偶校驗 5:3收收/發(fā)過程中的奇偶校驗:發(fā)過程中的奇偶校驗: 0XX=XX=無校驗、無校驗、100=100=奇校驗、奇校驗、101=101=偶校驗偶校驗110=110=強制奇偶校驗為強制奇偶校驗為1 1、110=110=強制奇偶校驗為強制奇偶校驗為0 0000停止位停止位2收收/發(fā)每幀數(shù)據(jù)的停止位:發(fā)每幀數(shù)據(jù)的停止位:0=1位停
20、止位、位停止位、1=2位停止位位停止位0字長度字長度 1: :0收收/發(fā)數(shù)據(jù)長度:發(fā)數(shù)據(jù)長度:00=5位、位、01=6位、位、10=7位、位、11=8位位00第33頁/共106頁 (2)UART控制寄存器包括UCON0, UCON1 and UCON2,主要用來選擇時鐘,接收和發(fā)送中斷類型(即電平還是脈沖觸發(fā)類型),接收超時使能,接收錯誤狀態(tài)中斷使能,回環(huán)模式,發(fā)送接收模式等。如表3.7和表3.8所示。 圖3.7 UART控制寄存器設置 第34頁/共106頁圖3.8 UART控制寄存器器位設置 第35頁/共106頁(3)UART錯誤狀態(tài)寄存器包括 UERSTAT0, UERSTAT1 and
21、UERSTAT2,此狀態(tài)寄存器的相關位表明是否有幀錯誤或溢出錯誤發(fā)生。如表3.9和表3.10所示。第36頁/共106頁表3.9 UART錯誤狀態(tài)寄存器寄存器寄存器地地 址址讀讀/寫寫描描 述述復位后值復位后值UERSTAT00 x50000014R通道通道0接收錯誤狀態(tài)寄存器接收錯誤狀態(tài)寄存器0 x00UERSTAT10 x50004014R通道通道1接收錯誤狀態(tài)寄存器接收錯誤狀態(tài)寄存器0 x00UERSTAT20 x50008014R通道通道2接收錯誤狀態(tài)寄存器接收錯誤狀態(tài)寄存器0 x00表3.10 UART錯誤狀態(tài)寄存器位描述UERSTAT n位位描描 述述復位后值復位后值保留保留3在接收
22、時,在接收時,0=無幀錯誤、無幀錯誤、1=有幀錯誤有幀錯誤0幀錯誤幀錯誤2在接收數(shù)據(jù)時若發(fā)生幀錯誤,該位自動在接收數(shù)據(jù)時若發(fā)生幀錯誤,該位自動置置1、否則該位為、否則該位為00保留保留1在接收時,在接收時,0=無幀錯誤、無幀錯誤、1=有幀錯誤有幀錯誤0溢出錯誤溢出錯誤0在接收數(shù)據(jù)時若發(fā)生溢出錯誤,該位自在接收數(shù)據(jù)時若發(fā)生溢出錯誤,該位自動置動置1、否則該位為、否則該位為00第37頁/共106頁(4)在UART 模塊中有三個接收/發(fā)送狀態(tài)寄存器,包括: UTRSTAT0 UTRSTAT1 UTRSTAT2 如表3.11和表3.12 所示。第38頁/共106頁表3.11 UART接收/發(fā)送寄存器設
23、置寄存器寄存器地地 址址讀讀/寫寫描描 述述復位后值復位后值UTRSTAT00 x50000010R通道通道0收收/發(fā)狀態(tài)寄存器發(fā)狀態(tài)寄存器0 x00UTRSTAT10 x50004010R通道通道1收收/發(fā)狀態(tài)寄存器發(fā)狀態(tài)寄存器0 x00UTRSTAT20 x50008010R通道通道2收收/發(fā)狀態(tài)寄存器發(fā)狀態(tài)寄存器0 x00表3.12 UART接收/發(fā)送寄存器位描述UTRSTATn位位描描 述述復位后值復位后值發(fā)送器空發(fā)送器空2當發(fā)送緩沖器無有效數(shù)據(jù)發(fā)送時,當發(fā)送緩沖器無有效數(shù)據(jù)發(fā)送時,該位自動置該位自動置1、否則該位為、否則該位為00發(fā)送緩沖寄存器空發(fā)送緩沖寄存器空1當發(fā)送緩沖寄存器空時
24、,該位自動當發(fā)送緩沖寄存器空時,該位自動置置1、否則該位為、否則該位為00接收緩沖寄存器數(shù)接收緩沖寄存器數(shù)據(jù)準備就緒據(jù)準備就緒0當接收緩沖寄存器數(shù)據(jù)準備就緒時,當接收緩沖寄存器數(shù)據(jù)準備就緒時,該位自動置該位自動置1、否則該位為、否則該位為00第39頁/共106頁(2)在UART 模塊中有3 個UART 發(fā)送緩沖寄存器,包括:UTXH0,UTXH1 和UTXH2,UTXHn 有8位發(fā)送數(shù)據(jù)。如表3.13所示。第40頁/共106頁表3.13 UART發(fā)送緩沖寄存器寄存器寄存器地地 址址讀讀/寫寫描描 述述復位后值復位后值UTXH00 x50000020(L)0 x50000023(B)寫寫(字節(jié))
25、(字節(jié))UART0傳輸緩沖寄存器傳輸緩沖寄存器UTXH10 x50004020(L)0 x50004023(B)寫寫(字節(jié))(字節(jié))UART1傳輸緩沖寄存器傳輸緩沖寄存器UTXH20 x50008020(L)0 x50008023(B)寫寫(字節(jié))(字節(jié))UART2傳輸緩沖寄存器傳輸緩沖寄存器表3.14 UART發(fā)送緩沖寄存器功能UTXHn位位描描 述述復位后值復位后值UTDATAn 7:0從從UARTn發(fā)送數(shù)據(jù)發(fā)送數(shù)據(jù)第41頁/共106頁(3)在UART 模塊中有3 個UART 接收緩沖寄存器,包括URXH0,URXH1 和URXH2,URXHn 有8位接收數(shù)據(jù)。如表3.15所示。表3.15
26、 UART接收緩沖寄存器寄存器寄存器地地 址址讀讀/寫寫描描 述述復位值復位值URXH00 x50000024(L)0 x50000027(B)讀讀(字節(jié))(字節(jié))UART0接收緩沖寄存器接收緩沖寄存器URXH10 x50004024(L)0 x50004027(B)讀讀(字節(jié))(字節(jié))UART1傳輸緩沖寄存器傳輸緩沖寄存器URXH20 x50008024(L)0 x50008027(B)讀讀(字節(jié))(字節(jié))UART2傳輸緩沖寄存器傳輸緩沖寄存器表3.16 UART接收緩沖寄存器功能URXHn位位描描 述述復位后值復位后值RXDATAn 7:0從從UARTn接收數(shù)據(jù)接收數(shù)據(jù)第42頁/共106頁
27、(4)UART 波特率因子寄存器表3.17 UART波特率因子寄存器寄存器寄存器地地 址址讀讀/寫寫描描 述述復位值復位值UBRDIV00 x50000028讀讀/寫寫波特率約數(shù)寄存器波特率約數(shù)寄存器0UBRDIV10 x50004028讀讀/寫寫波特率約數(shù)寄存器波特率約數(shù)寄存器1UBRDIV20 x50008028讀讀/寫寫波特率約數(shù)寄存器波特率約數(shù)寄存器2表3.18 UART波特率因子寄存器功能UBRDIVn位位描描 述述復位后值復位后值UBRDIV 15:0波特率因子值波特率因子值UBRDIVn 0第43頁/共106頁UART包括三個波特率因子寄存器UBRDIV0, UBRDIV1 an
28、d UBRDIV2,存儲在波特率因子寄存器(UBRDIVn)中的值決定串口發(fā)送和接收的時鐘數(shù)率(波特率),計算公式如下:UBRDIVn = (int)(PCLK / (bps x 16) ) 1或UBRDIVn = (int)(UCLK / (bps x 16) ) 1例如:如果波特率是115200,PCLK or或UCLK is是40 MHz,那么UBRDIVn :UBRDIVn = (int)(40000000 / (115200 x 16) ) -1= (int)(21.7) -1= 21 -1 = 20第44頁/共106頁3.3.3 S3C2410X的UART模塊軟件設計1編寫串口驅(qū)動
29、函數(shù)基于上述的寄存器描述,即可編寫出驅(qū)動程序,其流程如圖3.17和圖3.18所示,其源程序代碼詳見本書所帶光盤,在ADS1.2下編譯調(diào)試通過。第45頁/共106頁第46頁/共106頁圖3.19 主函數(shù)框圖2在主函數(shù)中實現(xiàn)將從串口0 接收到的數(shù)據(jù)發(fā)送到串口0(main.c),圖3.19所示。第47頁/共106頁/ main.c函數(shù)/說明: C main 函數(shù),ucos-ii初始化等定義#define U8 unsigned char#include #include #define TRUE 1#define FALSE 0#pragma import(_use_no_semihosting_s
30、wi) / ensure no functions that use semihosting #define rUTRSTAT0(*(volatile unsigned *)0 x50000010)#define rUTRSTAT1(*(volatile unsigned *)0 x50004010)#define WrUTXH0(ch)(*(volatile unsigned char *)0 x50000020)=(unsigned char)(ch)#define WrUTXH1(ch)(*(volatile unsigned char *)0 x50004020)=(unsigned
31、char)(ch)#define RdURXH0()(*(volatile unsigned char *)0 x50000024)#define RdURXH1()(*(volatile unsigned char *)0 x50004024)第48頁/共106頁void Uart_SendByten(int,U8);char Uart_Getchn(char* Revdata, int Uartnum, int timeout);void ARMTargetInit(void);void hudelay(int time);int main(void) char c11; char err
32、;ARMTargetInit(); / do target (uHAL based ARM system) initialisation /while(1) Uart_SendByten(0,0 xa);/換行 Uart_SendByten(0,0 xd);/回車 err=Uart_Getchn(c1,0,0);/從串口采集數(shù)據(jù) Uart_SendByten(0,c10);/顯示采集的數(shù)據(jù) 第49頁/共106頁void Uart_SendByten(int Uartnum, U8 data)/ok eric rong if(Uartnum=0) while(!(rUTRSTAT0 & 0 x4
33、); /Wait until THR is empty.hudelay(10);WrUTXH0(data); else while(!(rUTRSTAT1 & 0 x4); /Wait until THR is empty.hudelay(10);WrUTXH1(data); 第50頁/共106頁char Uart_Getchn(char* Revdata, int Uartnum, int timeout)if(Uartnum=0)while(!(rUTRSTAT0 & 0 x1); /Receive data read*Revdata=RdURXH0();return TRUE;elsew
34、hile(!(rUTRSTAT1 & 0 x1);/Receive data read*Revdata=RdURXH1();return TRUE;第51頁/共106頁3.4 S3C2410X的鍵盤及LED驅(qū)動設計 S3C2410X的鍵盤采用AVR單片機mega8實現(xiàn),較為簡單,LED驅(qū)動采用ZLG7290進行設計,本節(jié)將針對ZLG7290進行詳細描述。3.4.1 LED驅(qū)動原理及功能 ZLG7290是一片具有串行接口的,可同時驅(qū)動8位共陰式數(shù)碼管(或64只獨立LED)的智能顯示驅(qū)動芯片,該芯片同時還可連接多達64鍵的鍵盤矩陣,單片即可完成LED顯示鍵盤接口的全部功能。 第52頁/共106頁其
35、特點如下: I2C 串行接口提供鍵盤中斷信號方便與處理器接口 可驅(qū)動8 位共陰數(shù)碼管或64 只獨立LED 和64 個按鍵 可控掃描位數(shù),可控任一數(shù)碼管閃爍 提供數(shù)據(jù)譯碼和循環(huán)移位段尋址等控制 8 個功能鍵可檢測任一鍵的連擊次數(shù) 無需外接元件即直接驅(qū)LED 可擴展驅(qū)動電流和驅(qū)動電壓 提供工業(yè)級器件多種封裝形式PDIP24 SO24 ZLG7290引腳功能如表3.19所示。第53頁/共106頁表3.19 引腳說明引腳號引腳號引腳名稱引腳名稱引腳屬性引腳屬性引腳描述引腳描述13、12、21、22、36Dig7Dig0輸入輸入/輸出輸出LED顯示位驅(qū)動及鍵盤掃描顯示位驅(qū)動及鍵盤掃描線線107、2、1、
36、24、23segHsegA輸入輸入/輸出輸出LED顯示顯示位位驅(qū)動及鍵盤掃描驅(qū)動及鍵盤掃描線線20SDA輸入輸入/輸出輸出I2C總線接口數(shù)據(jù)總線接口數(shù)據(jù)/地址線地址線19SCL輸入輸入/輸出輸出I2C總線接口時鐘線總線接口時鐘線14INT*輸出輸出中斷輸出線,低電平有效中斷輸出線,低電平有效15RES*輸入輸入復位輸入線,低電平有效復位輸入線,低電平有效17OSC1輸入輸入連接晶體以產(chǎn)生內(nèi)部時鐘連接晶體以產(chǎn)生內(nèi)部時鐘18OSC2輸出輸出16VCC電源電源電源正(電源正(3.5V5.5V)11GND地地電源地電源地第54頁/共106頁1鍵盤部分 ZLG7290 可采樣64 個按鍵或傳感器,可檢測
37、每個按鍵的連擊次數(shù),其基本功能如下:(1)鍵盤去抖動處理當鍵被按下和放開時,可能會出現(xiàn)電平狀態(tài)反復變化,稱作鍵盤抖動,若不作處理會引起按鍵盤命令錯誤,所以要進行去抖動處理,以讀取穩(wěn)定的鍵盤狀態(tài)為準。(2)雙鍵互鎖處理當有兩個以上按鍵被同時按下時,ZLG7290 只采樣優(yōu)先級高的按鍵,優(yōu)先順序為S1S2S64。如同時按下S2 和S18 時采樣到S2。第55頁/共106頁(3) 連擊鍵處理當某個按鍵按下時輸出一次鍵值后,如果該按鍵還未釋放,該鍵值連續(xù)有效就像連續(xù)壓按該鍵一樣,這種功能稱為連擊,連擊次數(shù)計數(shù)器RepeatCnt 可區(qū)別出是單擊還是連擊。同時還可以檢測被按時間,以防止某些功能誤操作。(
38、4)功能鍵處理功能鍵能實現(xiàn)2 個以上按鍵同時按下來擴展按鍵數(shù)目或?qū)崿F(xiàn)特殊功能。第56頁/共106頁2顯示部分 在每個顯示刷新周期ZLG7290 按照掃描位數(shù)寄存器ScanNum 指定的顯示位數(shù)N 把顯示緩存DpRam0 DpRamN 的內(nèi)容按先后循序送入LED 驅(qū)動器,實現(xiàn)動態(tài)顯示。減少N 值可提高每位顯示掃描時間的占空比,以提高LED 亮度顯示緩存中的內(nèi)容不受影響修改閃爍控制寄器。FlashOnOff可改變閃爍頻率和占空比亮和滅的時間。ZLG7290 提供兩種控制方式寄存器映象控制和命令解釋控制,如上述對顯示部分的控制寄存器映象控制是指直接訪問底層寄存器,實現(xiàn)基本控制功能,這些寄存器須字節(jié)操
39、作。命令解釋控制是指通過解釋命令緩沖區(qū)CmdBuf0 CmdBuf1 中的指令間接訪問底層寄存器,實現(xiàn)擴展控制功能,如實現(xiàn)寄存器的位操作、對顯示緩存循環(huán)移位、對操作數(shù)譯碼等操作請參考指令詳解部分。第57頁/共106頁3寄存器詳解 系統(tǒng)狀態(tài)部分(1)系統(tǒng)寄存器(SystemReg):地址00H 復位值11110000B, 系統(tǒng)寄存器保存ZLG7290 系統(tǒng)狀態(tài),并可對系統(tǒng)運行狀態(tài)進行配置,其功能分位描述如下: KeyAvi(SystemReg.0)置1 時表示有效的按鍵動作,普通鍵的單擊連擊和功能鍵狀態(tài)變化。INT* 引腳信號有效,為低電平時表示無按鍵動作;INT* 引腳信號無效且為高阻態(tài),有效
40、的按鍵動作消失后或讀Key 后KeyAvi 位自動清0。第58頁/共106頁 鍵盤部分(2)鍵值寄存器(Key):地址01H ,復位值00H 。Key 表示被按鍵的鍵值,當Key=0 時表示沒有鍵按下。(3)連擊次數(shù)計數(shù)器(RepeatCnt):地址02H ,復位值00H ,RepeatCnt=0 時表示單擊鍵,RepeatCnt 大于0 時,表示鍵的連擊次數(shù),用于區(qū)別出單擊鍵或連擊鍵,判斷連擊次數(shù)可以檢測被按時間。(4)功能鍵寄存器(FunctionKey):地址03H,復位值0FFH ,F(xiàn)unctionKey 對應位=0 表示對應功能鍵被壓按,F(xiàn)unctionKey.7FunctionKe
41、y.0 對應S64S57。 命令接口部分(5)命令緩沖區(qū)CmdBuf0CmdBuf1,地址07H08H ,復位值00H00H ,用于傳輸指令。第59頁/共106頁 顯示部分(6)閃爍控制寄存器(FlashOnOff):地址0CH,復位值0111B/0111B,高4 位表示閃爍時亮的時間,低4 位表示閃爍時滅的時間,改變其值同時也改變了閃爍頻率,也能改變亮和滅的占空比,F(xiàn)lashOnOff的1 個單位相當于150250ms(亮和滅的時間范圍為116 ,0000B 相當1 個時間)單位,所有象素的閃爍頻率和占空比相同。(7)掃描位數(shù)寄存器(ScanNum):地址0DH,復位值7 ,用于控制最大的掃
42、描顯示位數(shù),有效范圍為07, 對應的顯示位數(shù)為18 ,減少掃描位數(shù)可提高每位顯示掃描時間的占空比,以提高LED 亮度。不掃描顯示的顯示緩存寄存器則保持不變,如ScanNum3 時只顯示DpRam0DpRam3的內(nèi)容。第60頁/共106頁(8)顯示緩存寄存器(DpRam0DpRam7): 地址10H17H,復位值00H00H ,緩存中某一位置1表示該像素亮,DpRam7DpRam0 的顯示內(nèi)容對應Dig7Dig0 引腳。第61頁/共106頁4指令詳解 ZLG7290 提供兩種控制方式:寄存器映象控制和命令解釋控制。寄存器映象控制是指直接訪問底層寄存器(除通信緩沖區(qū)外的寄存器),實現(xiàn)基本控制功能。
43、命令解釋控制是指通過解釋命令緩沖區(qū)(CmdBuf0CmdBuf1) 中的指令,間接訪問底層寄存器,實現(xiàn)擴展控制功能。如實現(xiàn)寄存器的位操作,對顯示緩存循環(huán)移位、對操作數(shù)譯碼等操作。一個有效的指令由一字節(jié)操作碼和數(shù)個操作數(shù)組成,只有操作碼的指令稱為純指令,帶操作數(shù)的指令稱為復合指令,一個完整的指令須在一個I2C 幀中(起始信號和結(jié)束信號間)連續(xù)傳輸?shù)矫?CmdBuf0CmdBuf1) 中。否則會引起錯誤,ZLG7290的控制指令分為二大類:純指令和帶有數(shù)據(jù)的指令。第62頁/共106頁 純指令(1) 左移指令命令緩沖區(qū)命令緩沖區(qū)Bit7Bit6Bit5Bit4Bit3Bit2Bit1Bit0Cmd
44、Buf00001N3N2N1N0 該指令使與ScanNum 相對應的顯示位數(shù)和顯示屬性(閃爍),自右向左移動N 位(N3N0)+1),移動后右邊N 位無顯示,而與ScanNum 不相關的顯示數(shù)據(jù)和顯示屬性則不受影響。例 DpRamBDpRam0= “87654321”,其中4 閃爍,ScanNum =5 (“87”不顯示、即只掃描5+1=6位。 )執(zhí)行指令00010001B 后DpRamBDpRam0= “4321”。”4” 閃爍,高兩位和低兩位無顯示。第63頁/共106頁(2) 右移指令通信緩沖區(qū)通信緩沖區(qū)Bit7Bit6Bit5Bit4Bit3Bit2Bit1Bit0ComBuf00010
45、N3N2N1N0 與左移指令類似,只是移動方向為自左向右,移動后左邊N 位(N3N0)+1)無顯示。例 DpRamB DpRam0=“87654321”。其中“3” 閃爍,ScanNum=5 (“87” 不顯示),執(zhí)行指令 00100001B 后DpRamBDpRam0=“ 6543”?!?” 閃爍,高四位無顯示。第64頁/共106頁(3) 循環(huán)左移指令通信緩沖區(qū)通信緩沖區(qū)Bit7Bit6Bit5Bit4Bit3Bit2Bit1Bit0ComBuf00011N3N2N1N0 與左移指令類似,不同的是在每移動一位后,原最左位的顯示數(shù)據(jù)和屬性轉(zhuǎn)移到最右位。 例 DpRamBDpRam0= “876
46、54321”,其中“4” 閃爍,ScanNum=5(“87” 不顯示),執(zhí)行指令 00110001B 后DpRamBDpRam0= “432165”?!?”閃爍,高兩位無顯示。第65頁/共106頁(4) 循環(huán)右移指令通信緩沖區(qū)通信緩沖區(qū)Bit7Bit6Bit5Bit4Bit3Bit2Bit1Bit0ComBuf00100N3N2N1N0 與循環(huán)左移指令類似,只是移動方向相反。例 DpRamBDpRam0= “87654321”,其中”3”閃爍,ScanNum=5(”87”不顯示)。執(zhí)行指令 01000001B 后DpRamBDpRam0= “216543”。”3” 閃爍。(5) SystemR
47、eg 寄存器位尋址指令通信緩沖區(qū)通信緩沖區(qū)Bit7Bit6Bit5Bit4Bit3Bit2Bit1Bit0ComBuf00101OnS2S1S0當On=1時第S(S2S0)位置1; 當On=0 時第S 位清0。第66頁/共106頁通信緩沖區(qū)通信緩沖區(qū)Bit7Bit6Bit5Bit4Bit3Bit2Bit1Bit0ComBuf000000001ComBuf1On0S5S4S3S2S1S0 當On=1時第S(S5S0)點像素亮(置1),當On=0 時第S 點像素滅(清0),該指令用于點亮關閉數(shù)碼管中某一段或LED 矩陣中某一特定的LED,該指令受ScanNum 的內(nèi)容影響,S6S0為像素地址有效范
48、圍從00H3FH,無效的地址不會產(chǎn)生任何作用,像素位地址映象如下: 復合指令(1) 顯示像素尋址指令表3.20 顯示像素尋址指令第67頁/共106頁表3.21 像素位地址映像像素地址像素地址SaSbScSdSeSfSgShDpRam000H01H02H03H04H05H06H07HDpRam 108H09H0AH0BH0CH0DH0EH0FHDpRam738H39H3AH3BH3CH3DH3EH3FH(2) 按位下載數(shù)據(jù)且譯碼指令表3.22 譯碼指令通信緩沖區(qū)通信緩沖區(qū)Bit7Bit6Bit5Bit4Bit3Bit2Bit1Bit0CmdBuf00110A3A2A1A0CmdBuf1DPFla
49、sh0D4D3D2D1D0第68頁/共106頁 其中A3A0為顯示緩存編號(范圍為:0000B0111B對應DpRam0DpRam7,無效的編號不會產(chǎn)生任何作用),DP=1 時點亮該位小數(shù)點,F(xiàn)lash=1 時該位閃爍顯示,F(xiàn)lash=0 時該位正常顯示,D4D0為要顯示的數(shù)據(jù),按以下表規(guī)則進行譯碼。第69頁/共106頁表3.23 譯碼第70頁/共106頁(3) 閃爍控制指令表3.24 閃爍控制指令通信緩沖區(qū)通信緩沖區(qū)Bit7Bit6Bit5Bit4Bit3Bit2Bit1Bit0CmdBuf00111CmdBuf1F7F6F5F4F3F2F1F0 當Fn=1時,該位閃爍(n 的范圍為:07,
50、對應07 位),當Fn=0,時該位不閃爍,該指令會改變所有像素的閃爍屬性。例 執(zhí)行指令 01110000B,00000000B 后所有數(shù)碼管不閃爍。第71頁/共106頁5通信接口 ZLG7290 的I2C 接口傳輸速率可達32kbit/s,容易與處理器接口,并提供鍵盤中斷信號,提高主處理器時間效率,ZLG7290 的從地址 slave address 為70H(01110000B)有效的按鍵動作,普通鍵的單擊連擊和功能鍵狀態(tài)變化都會令系統(tǒng)寄存器SystemReg 的KeyAvi 位置1 ,INT* 引腳信號有效變?yōu)榈碗娖剑脩舻逆I盤處理程序可由INT* 引腳低電平中斷觸發(fā),以提高程序效率,也可
51、以不采樣INT*引腳信號,節(jié)省系統(tǒng)的I/O 數(shù)而輪詢系統(tǒng)寄存器的KeyAvi 位,要注意讀鍵值寄存器會令KeyAvi 位清0 ,并會令INT* 引腳信號無效。為確保某個有效的按鍵動作,所有參數(shù)寄存器的同步性,建議利用I2C 通信的自動增址功能連續(xù)讀RepeatCnt FunctionKey 和Key寄存器。 第72頁/共106頁 但用戶無需擔心寄存器的同步性問題,因為鍵參數(shù)寄存器變化速度較緩慢,典型為250ms,最快9ms。ZLG7290 內(nèi)可通過I2C 總線訪問的寄存器地址范圍為00H17H ,任一寄存器都可按字節(jié)直接讀寫,也可以通過命令接口間接讀寫或按位讀寫,支持自動增址功能,訪問一寄存器
52、后,寄存器子地址sub address 自動加1和地址翻轉(zhuǎn)功能,訪問最后一寄存器子地址17H 后,寄存器子地址翻轉(zhuǎn)為00H, ZLG7290 的控制和狀態(tài)查詢?nèi)慷际峭ㄟ^讀/寫寄存器實現(xiàn)的,用戶只需象讀寫24C02 內(nèi)的單元一樣,即可實現(xiàn)對ZLG7290 的控制,關于I2C 總線訪問的細節(jié)請參考I2C 總線規(guī)范。第73頁/共106頁3.4.2 鍵盤驅(qū)動 鍵盤驅(qū)動程序詳見本書所附光盤,鍵盤掃描碼是通過中斷的方式獲得的,當設置好上位機的IIC地址以后, 單片機(MEGA8)檢測到鍵盤變化時,會主動發(fā)送鍵盤掃描碼。這時ARM將產(chǎn)生IIC中斷,在中斷服務程序中獲得鍵盤掃描碼, 鍵盤按下時發(fā)送 0 x8
53、0|scancode,抬起時發(fā)送 scancode。scancode即為鍵盤掃描碼,再通過GetKey()函數(shù)映射成可以在led上顯示的數(shù)據(jù)。關于單片機(MEGA8)的使用有文檔說明,下面主要說明鍵盤中斷的流程.本實驗在中斷前進行了兩步初始化:第74頁/共106頁 首先是對中斷中用到一個結(jié)構(gòu)體的設置,結(jié)構(gòu)體中各成員變量的意義見結(jié)構(gòu)體的定義,這一步是在函數(shù)ISR_Init()中完成的,這個函數(shù)在ISR.C中,主要是對中斷中用到的寄存器進行初始化,這些寄存器包括:INTMOD,INTMSK,INTSUBMSK,SRCPND,INTPND。 其次是在主函數(shù)中完成對鍵盤中斷服務函數(shù)和中斷偏移量(INT
54、OFFSET)的關聯(lián)及對單片機(MEGA8)工作方式的設置,其中包括對IIC總線的初始化,這是在函數(shù)Key_init()中完成的,此函數(shù)在KeyBoard.c中。中斷服務函數(shù)和中斷偏移量(INTOFFSET)的關聯(lián)是通過函數(shù)SetISR_Interrupt(IRQ_KBD, Key_ISR,NULL)來完成的。有了這一步的關聯(lián)以后當查詢到中斷偏移量是IRQ_KBD時就會根據(jù)此偏移量調(diào)用鍵盤中斷服務函數(shù)Key_ISR。 第75頁/共106頁 有了上面兩步的初始化工作以后,當有鍵盤按下時就會發(fā)生IRQ中斷,過程是先跳轉(zhuǎn)到startup.s中的b IRQ_Handler處,然后保存寄存器r0-r12
55、,lr跳轉(zhuǎn)到函數(shù)ISR_IrqHandler中,在這個函數(shù)中查詢中斷向量的偏移量,根據(jù)這個偏移量調(diào)用相應的中斷服務函數(shù)。執(zhí)行完中斷服務函數(shù)后再跳轉(zhuǎn)回startup.s中的LDMFD sp!,r0-r12, lr處,恢復執(zhí)行中斷服務函數(shù)之前的狀態(tài),繼續(xù)執(zhí)行發(fā)生中斷服務前的下一條指令.至此中斷過程結(jié)束,在中斷服務函數(shù)中獲得鍵盤的掃描碼,再通過GetKey()函數(shù)映射成led可以顯示的數(shù)據(jù)。第76頁/共106頁3.4.3 鍵盤及LED驅(qū)動軟件設計(KeyBoard.c)1定義鍵盤映射表:#include ./inc/reg2410.h#include ./inc/lib.h#include ./in
56、c/macro.h#include ./inc/isr.h#include ./inc/KeyBoard.h#include ./inc/iic.h#include ./inc/Uart.h#include inc/lcd.h#include #include 第77頁/共106頁#define KBDTYPE_ZLG72901#define KBDTYPE_MCUIIC2#define KEYBOARD_TYPE KBDTYPE_MCUIIC#define KEY_DOWN(1ul31)#include ./inc/i2c-tomega8.h#define IRQ_KBDIRQ_IIC#de
57、fine MCU_IICCON(IICCON_ACKEN | IICCON_INTR | IICCON_CLKPRE(7)unsigned short mcukey,tempmcukey,up,count;第78頁/共106頁static void Key_ISR(int vector, void* data) static int framecnt=0; U8 status ,kdata; status = rIICSTAT ; if( (status & IICSTAT_MODE_MSK) != IICSTAT_MODE_SR) return; kdata = rIICDS; switch
58、(framecnt) case 0: if(status & IICSTAT_SLAVEADDR)framecnt+; break;第79頁/共106頁case 1:if(GetI2C_Devtype(kdata) != DTYPE_MKEYB)framecnt=0;framecnt+;break;case 2:mcukey = kdata;if(mcukey&0 x80) framecnt=0; break; 第80頁/共106頁else if(!(mcukey&0 x80) up=1; count=1; tempmcukey=mcukey; framecnt=0;break;rIICCON
59、 &= IICCON_INTPEND;第81頁/共106頁void Key_init(void)I2C_control i2c_ctrl;IIC_init();Set_IIC_mode(MCU_IICCON, NULL);i2c_ctrl.cmd=CMD_MST_ADDR;i2c_ctrl.ctrl=I2COWNER_ADDRESS;IIC_Send(MEGA8_I2CADDRESS, (const char*)&i2c_ctrl, sizeof(i2c_ctrl);i2c_ctrl.cmd=CMD_CTRL;i2c_ctrl.ctrl = CTRL_MKEn;IIC_Send(MEGA8_I
60、2CADDRESS, (const char*)&i2c_ctrl, sizeof(i2c_ctrl); INTS_OFF();SetISR_Interrupt(IRQ_KBD, Key_ISR, NULL);INTS_ON();第82頁/共106頁void Key_init_restor(void)IIC_init();Set_IIC_mode(MCU_IICCON, NULL);第83頁/共106頁unsigned char GetKey() unsigned char scankey;unsigned char KeyBoard_Map=0,0,0 x9e,0,0,0 xe0,0 x66
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年度年福建省高校教師資格證之高等教育法規(guī)綜合檢測試卷B卷含答案
- 2024年垃圾焚燒發(fā)電設備項目資金申請報告代可行性研究報告
- 四年級數(shù)學(簡便運算)計算題專項練習與答案
- 2024年期貨船租賃協(xié)議條款匯編
- 2024年醫(yī)生招聘協(xié)議樣本下載
- 學習先進教師心得體會
- 2024年車輛信用擔保服務正式協(xié)議
- 2024專項水穩(wěn)層鋪設項目協(xié)議樣本
- 2024采購部常用商品買賣協(xié)議模板
- 2024年商鋪租賃協(xié)議模板范例
- 煤礦瓦斯超限分析及預防措施
- 壓力容器風險評估報告樣板
- 涂層工安全操作規(guī)程
- 含砷硫化銅精礦的氧化焙燒
- 維修電工高級實操題庫
- 風電場安全性評價
- 2023年全國統(tǒng)一高考英語試卷(甲卷)及答案解析
- 新生兒科品管圈成果匯報模板成品-降低新生兒紅臀發(fā)生率課件
- 飼料公司總經(jīng)理崗位職責
- 體育課少年拳(第一套)教案
- 新編簡明英語語言學教程戴煒棟第1-3章課后練習題答案
評論
0/150
提交評論