版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、主題:ARM開(kāi)發(fā)流程,6.2 最小系統(tǒng)設(shè)計(jì),6.2.1 最小系統(tǒng)概述6.2.2 電源設(shè)計(jì)6.2.3 時(shí)鐘電路設(shè)計(jì)6.2.4 復(fù)位電路設(shè)計(jì)6.2.5 調(diào)試接口設(shè)計(jì)6.2.6 存儲(chǔ)系統(tǒng)設(shè)計(jì)6.2.7 最小系統(tǒng)示例,6.2.1 最小系統(tǒng)概述,設(shè)計(jì)一個(gè)最小系統(tǒng)是學(xué)習(xí)ARM的好方法 一個(gè)嵌入式處理器自己是不能獨(dú)立工作的,必須給它供電、加上時(shí)鐘信號(hào)、提供復(fù)位信號(hào),如果芯片沒(méi)有片內(nèi)程序存儲(chǔ)器,則還要加上存儲(chǔ)器系統(tǒng),然后
2、嵌入式處理器芯片才可能工作。這些提供嵌入式處理器運(yùn)行所必須的條件的電路與嵌入式處理器共同構(gòu)成了這個(gè)嵌入式處理器的最小系統(tǒng)。而大多數(shù)基于ARM7處理器核的微控制器都有調(diào)試接口,這部分在芯片實(shí)際工作時(shí)不是必需的,但因?yàn)檫@部分在開(kāi)發(fā)時(shí)很重要,所以也把這部分也歸入最小系統(tǒng)中。,6.2.1 最小系統(tǒng)概述,最小系統(tǒng)框圖,可選,因?yàn)樵S多面向嵌入式領(lǐng)域的微控制器內(nèi)部集成了程序和數(shù)據(jù)存儲(chǔ)器,可選,但是在樣品階段通常都會(huì)設(shè)計(jì)這部分電路,供電系統(tǒng)(電源)
3、,電源系統(tǒng)為整個(gè)系統(tǒng)提供能量,是整個(gè)系統(tǒng)工作的基礎(chǔ),具有極其重要的地位,但卻往往被忽略。如果電源系統(tǒng)處理得好,整個(gè)系統(tǒng)的故障往往減少了一大半。,6.2.2 電源設(shè)計(jì),設(shè)計(jì)電源時(shí)要考慮的因素:1.輸出的電壓、電流、功率;2.輸入的電壓、電流;3.安全因素;4.輸出紋波;5.電磁兼容和電磁干擾;6.體積限制;7.功耗限制;8.成本限制。,6.2.2 電源設(shè)計(jì),1.分析需求,6.2.2 電源設(shè)計(jì),(1)LPC2000系列
4、微控制所需要的電源類(lèi)型,1.分析需求,6.2.2 電源設(shè)計(jì),(2)系統(tǒng)需求,主要考慮是否需要將數(shù)字電源和模擬電源分開(kāi)。(1)如果不使用芯片的A/D或者D/A功能,可以不區(qū)分?jǐn)?shù)字電源和模擬電源。(2)如果使用了A/D或者D/A,還需考慮參考電源設(shè)計(jì)。,1.分析需求,6.2.2 電源設(shè)計(jì),(3)電源電路的前級(jí)和末級(jí),,,電源前級(jí),電源末級(jí),2.設(shè)計(jì)末級(jí)電源電路,6.2.2 電源設(shè)計(jì),LPC2000系列微控制1.8V消耗電流的極限
5、值為70mA。為了保證可靠性并為以后升級(jí)留下余量,則電源系統(tǒng)1.8V能夠提供的電流應(yīng)當(dāng)大于300mA。 整個(gè)系統(tǒng)在3.3V上消耗的電流與外部條件有很大的關(guān)系,這里假設(shè)電流不超過(guò)200mA,這樣,電源系統(tǒng)3.3V能夠提供600mA電流即可。 分析得到以下參數(shù):3.3V電源設(shè)計(jì)最大電流:600mA;1.8V電源設(shè)計(jì)最大電流:300mA。,因?yàn)橄到y(tǒng)對(duì)這兩組電壓的要求比較高,且其功耗不是很大,所以不適合用開(kāi)關(guān)電
6、源,應(yīng)當(dāng)用低壓差模擬電源(LDO)。合乎技術(shù)參數(shù)的LDO芯片很多,Sipex 半導(dǎo)體SPX1117是一個(gè)較好的選擇,它的性?xún)r(jià)比高,且有一些產(chǎn)品可以與它直接替換,減少采購(gòu)風(fēng)險(xiǎn)。,2.設(shè)計(jì)末級(jí)電源電路,6.2.2 電源設(shè)計(jì),SPX1117主要特點(diǎn):0.8A穩(wěn)定輸出電流;1A穩(wěn)定峰值電流;3V可調(diào)節(jié);低靜態(tài)電流;0.8A時(shí)低壓差為1.1V;0.1%線形調(diào)整率;0.2%負(fù)載調(diào)整率;過(guò)流及溫度保護(hù);多種封裝供
7、選擇。,6.2.2 電源設(shè)計(jì),6.2.2 電源設(shè)計(jì),末級(jí)電源電路實(shí)例,6.2.2 電源設(shè)計(jì),模數(shù)隔離實(shí)例,,盡管SPX1117允許的輸入電壓可達(dá)20V(參考芯片數(shù)據(jù)手冊(cè)),但太高的電壓使芯片的發(fā)熱量上升,散熱系統(tǒng)不好設(shè)計(jì),同時(shí)影響芯片的性能。這樣,就需要前級(jí)電路調(diào)整一下。如果系統(tǒng)可能使用多種電源(如交流電和電池),各種電源的電壓輸出不一樣,就更需要前級(jí)調(diào)整以適應(yīng)末級(jí)的輸入。通過(guò)之前的分析,前級(jí)的輸出選擇為5V。選擇5V作為前級(jí)的
8、輸出有兩個(gè)原因:這個(gè)電壓滿足SPX1117的要求;目前很多器件還是需要5V供電的,這個(gè)5V可以兼做前級(jí)和末級(jí)了。,6.2.2 電源設(shè)計(jì),3.設(shè)計(jì)前級(jí)電源電路,根據(jù)系統(tǒng)在5V上消耗的電流和體積、成本等方面的考慮,前級(jí)電路可以使用開(kāi)關(guān)電源,也可以使用模擬電源。 它們的特別如下:開(kāi)關(guān)電源:效率較高,可以減少發(fā)熱量,因而在功率較大時(shí)可以減小電源模塊的體積;模擬電源:電路簡(jiǎn)單,輸出電壓紋波較小,并且干擾較開(kāi)關(guān)電源小得多。,6.2.2
9、電源設(shè)計(jì),3.設(shè)計(jì)前級(jí)電源電路,6.2.2 電源設(shè)計(jì),模擬電源,開(kāi)關(guān)電源,,,前級(jí)電源電路實(shí)例,目前所有的微控制器均為時(shí)序電路,需要一個(gè)時(shí)鐘信號(hào)才能工作,大多數(shù)微控制器具有晶體振蕩器。簡(jiǎn)單的方法是利用微控制器內(nèi)部的晶體振蕩器,但有些場(chǎng)合(如減少功耗、需要嚴(yán)格同步等情況)需要使用外部振蕩源提供時(shí)鐘信號(hào)。,時(shí)鐘系統(tǒng),6.2.3 時(shí)鐘電路設(shè)計(jì),6.2.3 時(shí)鐘電路設(shè)計(jì),目前所有的微控制器均為時(shí)序電路,需要一個(gè)時(shí)鐘信號(hào)才能工作,大多數(shù)微
10、控制器具有晶體振蕩器。簡(jiǎn)單的方法是利用微控制器內(nèi)部的晶體振蕩器,但有些場(chǎng)合(如減少功耗、需要嚴(yán)格同步等情況)需要使用外部振蕩源提供時(shí)鐘信號(hào)。,使用內(nèi)部振蕩器,使用外部時(shí)鐘源,可以使用穩(wěn)定的時(shí)鐘信號(hào)源,如有源晶振等。,微控制器在上電時(shí)狀態(tài)并不確定,這造成微控制器不能正確工作。為解決這個(gè)問(wèn)題,所有微控制器均有一個(gè)復(fù)位邏輯,它負(fù)責(zé)將微控制器初始化為某個(gè)確定的狀態(tài)。這個(gè)復(fù)位邏輯需要一個(gè)復(fù)位信號(hào)才能工作。一些微控制器自己在上電時(shí)會(huì)產(chǎn)生復(fù)位信號(hào),但
11、大多數(shù)微控制器需要外部輸入這個(gè)信號(hào)。這個(gè)信號(hào)的穩(wěn)定性和可靠性對(duì)微控制器的正常工作有重大影響。,復(fù)位及其配置系統(tǒng),6.2.4 復(fù)位電路設(shè)計(jì),復(fù)位電路可以使用簡(jiǎn)單的阻容復(fù)位,這個(gè)電路成本低廉,但不能保證任何情況產(chǎn)生穩(wěn)定可靠的復(fù)位信號(hào),所以一般場(chǎng)合需要使用專(zhuān)門(mén)的復(fù)位芯片。,阻容復(fù)位,6.2.4 復(fù)位電路設(shè)計(jì),最好避免使用!,常用的復(fù)位專(zhuān)用芯片有CATALYST公司的CAT800系列,Sipex公司的SP700系列和SP800系列。為了適
12、應(yīng)嵌入式系統(tǒng)的應(yīng)用,這些公司還推出帶有EEPROM存儲(chǔ)器和看門(mén)狗的復(fù)位芯片,這可以降低系統(tǒng)成本和縮小產(chǎn)品體積,減少元件數(shù)量也有利于系統(tǒng)的穩(wěn)定性。 如果系統(tǒng)不需要手動(dòng)復(fù)位功能,可以選擇CAT809。如果需要手動(dòng)復(fù)位功能,可以選擇SP705/706、SP708SCN。 種類(lèi)繁多的復(fù)位芯片可以滿足不同工作電壓和不同復(fù)位方式的系統(tǒng),這里僅介紹其中部分。 注意:復(fù)位芯片的復(fù)位門(mén)檻的選擇至關(guān)重要,一般
13、應(yīng)當(dāng)選擇微控制器的IO口供電電壓范圍為標(biāo)準(zhǔn)。LPC2000這個(gè)范圍為:3.0V~3.6V,所以選擇復(fù)位門(mén)檻電壓為2.93V,即電源電壓低于2.93V時(shí)產(chǎn)生復(fù)位信號(hào)。,6.2.4 復(fù)位電路設(shè)計(jì),6.2.4 復(fù)位電路設(shè)計(jì),復(fù)位電路實(shí)例CAT809 低有效復(fù)位; 在工業(yè)級(jí)溫度范圍的應(yīng)用中可直接代替MAX809; Vcc低至1.0V時(shí),復(fù)位信號(hào)仍然有效; 6uA的電源電流; 抗電源的瞬態(tài)干擾; 緊湊的3腳
14、SOT23和SC70封裝; 工業(yè)級(jí)溫度范圍:-40℃~+85℃ 。,6.2.4 復(fù)位電路設(shè)計(jì),復(fù)位電路實(shí)例SP708/R/S/T 2.63V:SP708R;2.93V:SP708S;3.08V:SP708T; 復(fù)位脈沖寬度-200ms; 最大電源電流40uA; 支持開(kāi)關(guān)式TTL/CMOS手動(dòng)復(fù)位輸入; Vcc下降至1V時(shí),nRESET信號(hào)仍然有效; SP708/R/S/T支持高/低電平兩種方式
15、。,6.2.4 復(fù)位電路設(shè)計(jì),復(fù)位電路實(shí)例SP6200/6201 適用于要求高精度、快速操作和方便使用的應(yīng)用; 極低的關(guān)斷電流:最大為1uA; 低壓差:160mV@100mA。輸出電壓高精度: 2% ; 邏輯控制的電子使能; 復(fù)位輸出(VOUT良好); 1uF的陶瓷電容就可保持器件無(wú)條件穩(wěn)定工作。,,電壓輸出使能,復(fù)位輸出,6.2.4 復(fù)位電路設(shè)計(jì),復(fù)位電路實(shí)例CAT1024/1025
16、 具有2K字節(jié)EEPROM存儲(chǔ)器,數(shù)據(jù)保存時(shí)間長(zhǎng)達(dá)100年; 存儲(chǔ)器采用400KHz的I2C總線接口,16字節(jié)的頁(yè)寫(xiě)緩沖區(qū); CAT1025具有高、低電平復(fù)位信號(hào),CAT1024具有低電平復(fù)位信號(hào)。Vcc低至1V時(shí)復(fù)位仍有效; 工作電壓范圍:2.7V~5.5V; 手動(dòng)復(fù)位輸入。,6.2.4 復(fù)位電路設(shè)計(jì),微控制器在復(fù)位后可能有多種初始狀態(tài),具體復(fù)位到哪種初始狀態(tài)是在復(fù)位的過(guò)程中決定的。復(fù)位邏輯可能通過(guò)片內(nèi)只讀
17、存儲(chǔ)器中的數(shù)據(jù)決定具體的初始狀態(tài),但更多的是通過(guò)復(fù)位期間的引腳狀態(tài)決定,也可能通過(guò)兩者共同決定。用引腳狀態(tài)配置復(fù)位后的初始狀態(tài)沒(méi)有統(tǒng)一的方法,需要根據(jù)相關(guān)芯片的手冊(cè)決定。,P2.26和P2.27決定復(fù)位后存儲(chǔ)器的來(lái)源以及存儲(chǔ)器的寬度,P1.26決定復(fù)位后是否使用P1.31~P1.26作為調(diào)試端口,P1. 20決定復(fù)位后是否使用P1.25~P1.16作為跟蹤端口,P0.14決定復(fù)位后是否進(jìn)入ISP狀態(tài),調(diào)試與測(cè)試接口不是系統(tǒng)運(yùn)行必須的,但
18、現(xiàn)代系統(tǒng)越來(lái)越強(qiáng)調(diào)可測(cè)性,調(diào)試、測(cè)試接口的設(shè)計(jì)也要重視了。LPC2000有一個(gè)內(nèi)置JTAG調(diào)試接口,通過(guò)這個(gè)接口可以控制芯片的運(yùn)行并獲取內(nèi)部信息。,調(diào)試測(cè)試接口,6.2.5 調(diào)試接口設(shè)計(jì),調(diào)試接口電路一,,ETM功能僅在高級(jí)仿真器中具有,用戶(hù)如果沒(méi)有使用,可以將其省略,同時(shí)把TRACESYNC信號(hào)上的電阻也去掉。,6.2.5 調(diào)試接口設(shè)計(jì),,RTCK必須接4.7K下拉電阻。,標(biāo)準(zhǔn)20針JTAG,調(diào)試接口電路一,在該電路中,復(fù)位電路與
19、前面介紹電路有所不同。它在復(fù)位信號(hào)和CPU之間插入了三態(tài)門(mén)74HC125。使用三態(tài)門(mén)主要是為了復(fù)位芯片和JTAG(ETM)仿真器都可以復(fù)位芯片。如果沒(méi)有74HC125,當(dāng)復(fù)位芯片輸出高電平時(shí),JTAG(ETM)仿真器就不可能把它拉低,這不但不能實(shí)現(xiàn)需要的功能,還可能損壞復(fù)位芯片或JTAG(ETM)仿真器。,,,6.2.5 調(diào)試接口設(shè)計(jì),因?yàn)檫@種電路JTAG(ETM)仿真器對(duì)LPC2000有完全的控制,其仿真性能最好。不過(guò),由于74HC
20、125工作的電壓范圍低于復(fù)位芯片的工作電壓范圍,所以此電路一般用于樣機(jī)。正式產(chǎn)品中可以不需要這部分電路。,,,6.2.5 調(diào)試接口設(shè)計(jì),調(diào)試接口電路二,6.2.5 調(diào)試接口設(shè)計(jì),,RTCK必須接4.7K下拉電阻。,ETM跟蹤接口,標(biāo)準(zhǔn)20針JTAG,,大部分LPC2000芯片都有片內(nèi)Flash,可以不用再設(shè)計(jì)額外的存儲(chǔ)器系統(tǒng)。如果微控制器沒(méi)有片內(nèi)存儲(chǔ)器,就必須設(shè)計(jì)存儲(chǔ)器系統(tǒng),這一般通過(guò)微控制器的外部總線接口實(shí)現(xiàn)。,存儲(chǔ)器系統(tǒng),6.2
21、.6 存儲(chǔ)系統(tǒng),如果需要外擴(kuò)存儲(chǔ)系統(tǒng),需要考慮:(1)總線寬度(2)總線速度 盡量避免使用8位總線,推薦使用16和32位總線,器件選型盡量選擇高速存儲(chǔ)器。 如果使用16位總線,使用Thumb指令集可獲得更高的性能。,6.2.6 存儲(chǔ)系統(tǒng),示例:LPC2210存儲(chǔ)器系統(tǒng),6.2.6 存儲(chǔ)系統(tǒng),,復(fù)位后使用外部16位寬度存儲(chǔ)器,16位SRAM,16位FLASH,LPC2100系列沒(méi)有外部總線接口的最小系
22、統(tǒng);LPC2130系列沒(méi)有外部總線接口的最小系統(tǒng);LPC2200系列使用內(nèi)部存儲(chǔ)器的最小系統(tǒng);LPC2200系列使用外部存儲(chǔ)器的最小系統(tǒng)。,6.2.7 最小系統(tǒng)實(shí)例,完整的最小系統(tǒng)LPC2100系列,,決定是否進(jìn)入ISP狀態(tài),如果該引腳懸空將影響程序脫機(jī)運(yùn)行,6.2.7 最小系統(tǒng)實(shí)例,3.3V電源,1.8V電源,復(fù)位電路,時(shí)鐘電路,完整的最小系統(tǒng)LPC2130系列,6.2.7 最小系統(tǒng)實(shí)例,3.3V電源,復(fù)位電路,時(shí)鐘電路,
23、,決定是否進(jìn)入ISP狀態(tài),如果該引腳懸空將影響程序脫機(jī)運(yùn)行,6.2.7 最小系統(tǒng)實(shí)例,完整的最小系統(tǒng)LPC2200不使用外部存儲(chǔ)器,,復(fù)位后使用內(nèi)部存儲(chǔ)器,3.3V電源,1.8V電源,復(fù)位電路,時(shí)鐘電路,,決定是否進(jìn)入ISP狀態(tài),如果該引腳懸空將影響程序脫機(jī)運(yùn)行,6.2.7 最小系統(tǒng)實(shí)例,完整的最小系統(tǒng)LPC2200使用外部存儲(chǔ)器,,復(fù)位后使用外部16位寬度存儲(chǔ)器,3.3V電源,1.8V電源,復(fù)位電路,時(shí)鐘電路,,決定是否進(jìn)入ISP
24、狀態(tài),如果該引腳懸空將影響程序脫機(jī)運(yùn)行,SRAM,FLASH,6.3 軟件開(kāi)發(fā)平臺(tái),6.3.1 ISP下載軟件6.3.2 ADS集成開(kāi)發(fā)環(huán)境6.3.3 EasyJTAG使用6.3.4 LPC2000工程模板,6.3.1 ISP下載軟件,簡(jiǎn)介,ISP下載軟件是Philips為L(zhǎng)PC2000系列芯片編寫(xiě)的一款程序下載軟件,全稱(chēng)是LPC2000 Flash Utility,最新版本為V2.2.2,支持LPC2000所有芯片。
25、 常用于批量生產(chǎn)時(shí)下載程序,亦可用于檢測(cè)最小系統(tǒng)。,6.3.1 ISP下載軟件,界面,6.3.1 ISP下載軟件,設(shè)置,設(shè)定晶振,設(shè)定串口波特率,6.3.1 ISP下載軟件,操作,下載 校驗(yàn),查空 擦除,讀取ID,芯片型號(hào),6.3.1 ISP下載軟件,重點(diǎn)提示,設(shè)計(jì)好最小系統(tǒng)后,最好先用ISP軟件對(duì)最小系統(tǒng)進(jìn)行測(cè)試,如果能進(jìn)行ISP連接操作(如讀取ID),則才能進(jìn)行下一步的工作,如
26、JTAG調(diào)試。如果ISP測(cè)試不能工作,則需要先檢查最小系統(tǒng)硬件電路。 系統(tǒng)可以沒(méi)有JTAG調(diào)試電路,但不能沒(méi)有UART0電路/接口。,UART0電路(ISP電路),,6.3.1 ISP下載軟件,,6.3.1 ISP下載軟件,ISP不成功常見(jiàn)原因和解決辦法,(1)確保各路電源正常(2)確保UART0電路正常,可用PC檢測(cè)(3)確保晶振正常(4)確保復(fù)位電路正常(5)檢測(cè)PCB是否存在短路/斷路,6.3.2 ADS集成
27、開(kāi)發(fā)環(huán)境,簡(jiǎn)介,ADS是目前國(guó)內(nèi)使用最廣泛的ARM開(kāi)發(fā)環(huán)境。 ADS為ARM公司所有,全稱(chēng)為ARM Developer Suite,成熟版本為ADS1.2,支持ARM10之前的所有ARM控制器,支持軟件調(diào)試和JTAG硬件仿真調(diào)試,支持匯編、C、C++源程序;編譯效率高、系統(tǒng)功能強(qiáng),可以在Win98/2000/XP和RedHat上運(yùn)行。,6.3.2 ADS集成開(kāi)發(fā)環(huán)境,簡(jiǎn)介,ADS1.2 集成開(kāi)發(fā)環(huán)境組成部分,6.3.2
28、ADS集成開(kāi)發(fā)環(huán)境,Code Worriar IDE界面,源程序編輯窗口,工程管理窗口,6.3.2 ADS集成開(kāi)發(fā)環(huán)境,AXD調(diào)試器界面,源代碼查看區(qū),,調(diào)試控制快捷圖標(biāo),,6.3.2 ADS集成開(kāi)發(fā)環(huán)境,ADS使用注意:最好不要將ADS工程放在有中文的路徑下。,6.4 啟動(dòng)代碼,6.4.1 啟動(dòng)代碼內(nèi)容6.4.2 啟動(dòng)代碼工作流程,6.4.1 啟動(dòng)代碼內(nèi)容,(1)啟動(dòng)代碼簡(jiǎn)介,廣州致遠(yuǎn)電子有限公司為L(zhǎng)PC2000系列芯片編寫(xiě)的啟
29、動(dòng)代碼由3個(gè)文件組成。,(1)startup.s-異常向量表定義、各模式堆棧初始化、跳轉(zhuǎn)到C程序main入口等。 (2)target.c-目標(biāo)板初始化,如時(shí)鐘分頻、PLL設(shè)置、VIC設(shè)置等。 (3)irq.s-用于管理中斷嵌套。,6.4.1 啟動(dòng)代碼內(nèi)容,(1)startup.s,CODE32 AREA vectors,CODE,READONLY ENTRY;中斷向量表
30、Reset LDR PC, ResetAddr LDR PC, UndefinedAddr LDR PC, SWI_Addr LDR PC, PrefetchAddr LDR PC, DataAbortAddr DCD 0xb9205f80 LDR PC, [PC, #
31、-0xff0] LDR PC, FIQ_AddrResetAddr DCD ResetInitUndefinedAddr DCD UndefinedSWI_Addr DCD SoftwareInterruptPrefetchAddr DCD PrefetchAbortDataAbortAddr DCD DataAbort
32、Nouse DCD 0IRQ_Addr DCD 0FIQ_Addr DCD FIQ_Handler,匯編入口,,,異常向量表,,,地址跳轉(zhuǎn)表,,,6.4.1 啟動(dòng)代碼內(nèi)容,(1)startup.s,;未定義指令Undefined B Undefined;軟中斷SoftwareInterrupt B
33、SoftwareInterrupt ;取指令中止PrefetchAbort B PrefetchAbort;取數(shù)據(jù)中止DataAbort B DataAbort;快速中斷FIQ_Handler STMFD SP!, {R0-R3, LR} BL FIQ_Exception LDMFD SP
34、!, {R0-R3, LR} SUBS PC, LR, #4,異常處理程序,,FIQ處理程序,在target.c中實(shí)現(xiàn),,,6.4.1 啟動(dòng)代碼內(nèi)容,(1)startup.s,InitStack MOV R0, LR MSR CPSR_c, #0xd3 ;設(shè)置管理模式堆棧 LDR SP, StackSvc MSR CPSR_c, #0xd2 ;
35、設(shè)置中斷模式堆棧 LDR SP, StackIrq MSR CPSR_c, #0xd1 ;設(shè)置快速中斷模式堆棧 LDR SP, StackFiq MSR CPSR_c, #0xd7 ;設(shè)置中止模式堆棧 LDR SP, StackAbt MSR CPSR_c, #0xdb ;設(shè)置未定義模式堆棧 LDR SP, StackUnd
36、MSR CPSR_c, #0xdf ;設(shè)置系統(tǒng)模式堆棧 LDR SP, =StackUsr MOV PC, R0ResetInit BL InitStack ;初始化堆棧 BL TargetResetInit ;目標(biāo)板基本初始化 B __main ;跳轉(zhuǎn)
37、到c語(yǔ)言入口,設(shè)置各模式堆棧,,,,,,,,,,6.4.1 啟動(dòng)代碼內(nèi)容,(1)startup.s,SVC_STACK_LEGTHEQU 0FIQ_STACK_LEGTH EQU 0IRQ_STACK_LEGTH EQU 256ABT_STACK_LEGTH EQU 0UND_STACK_LEGTH EQU
38、 0 AREA MyStacks, DATA, NOINIT, ALIGN=2SvcStackSpace SPACE SVC_STACK_LEGTH * 4 ;管理模式??臻gIrqStackSpace SPACE IRQ_STACK_LEGTH * 4 ;中斷模式??臻gFiqStackSpace SPACE FIQ_STACK_LEGTH * 4 ;快速中斷模式棧空間AbtSta
39、ckSpace SPACE ABT_STACK_LEGTH * 4 ;中止義模式??臻gUndtStackSpace SPACE UND_STACK_LEGTH * 4 ;未定義模式棧StackSvc DCD SvcStackSpace + (SVC_STACK_LEGTH - 1)* 4StackIrq DCD IrqStackSpace + (IRQ_STACK_LEGTH - 1)* 4StackFiq D
40、CD FiqStackSpace + (FIQ_STACK_LEGTH - 1)* 4StackAbt DCD AbtStackSpace + (ABT_STACK_LEGTH - 1)* 4StackUnd DCD UndtStackSpace + (UND_STACK_LEGTH - 1)* 4 AREA Heap, DATA, NOINITbottom_of_heap SPACE 1
41、 AREA Stacks, DATA, NOINITStackUsr,定義各模式堆大小,計(jì)算并分配各模式棧空間 分散加載,文字池: 各模式棧起點(diǎn),堆空間,分散加載,用戶(hù)堆棧空間,分散加載,6.3.4 LPC2000工程模板,(1)mem_a.scf
42、 mem_c.scf,ROM_LOAD 0x00000000{ ROM_EXEC 0x00000000 { Startup.o (vectors, +First) * (+RO) } IRAM 0x40000000 { Startup.o (MyStacks) * (+RW,+ZI) } HEAP +0 UNI
43、NIT { Startup.o (Heap) } STACKS 0x40002000 UNINIT { Startup.o (Stacks) }},6.4.1 啟動(dòng)代碼內(nèi)容,(2)target.c,void FIQ_Exception(void){ while(1); // 這一句替換為自己的代碼}void TargetResetInit
44、(void){#ifdef __DEBUG_RAM MEMMAP = 0x2; //remap#endif#ifdef __DEBUG_FLASH MEMMAP = 0x1; //remap#endif#ifdef __IN_CHIP MEMMAP = 0x1; //remap#endif/* 設(shè)置系統(tǒng)各部分時(shí)鐘 */ PLLCO
45、N = 1;#if (Fpclk / (Fcclk / 4)) == 1 VPBDIV = 0;#endif,FIQ處理程序,,,調(diào)試時(shí),根據(jù)用戶(hù)選擇的目標(biāo)設(shè)置Remap,,,根據(jù)config.h用戶(hù)定義的時(shí)鐘自動(dòng)設(shè)定VPB分頻值,,,6.4.1 啟動(dòng)代碼內(nèi)容,(2)target.c,/* 設(shè)置系統(tǒng)各部分時(shí)鐘 */ PLLCON = 1;#if (Fpclk / (Fcclk / 4)) == 1 VPBD
46、IV = 0;#endif#if (Fpclk / (Fcclk / 4)) == 2 VPBDIV = 2;#endif#if (Fpclk / (Fcclk / 4)) == 4 VPBDIV = 1;#endif#if (Fcco / Fcclk) == 2 PLLCFG = ((Fcclk / Fosc) - 1) | (0 << 5);#endif#if (Fcco / F
47、cclk) == 4 PLLCFG = ((Fcclk / Fosc) - 1) | (1 << 5);#endif#if (Fcco / Fcclk) == 8 PLLCFG = ((Fcclk / Fosc) - 1) | (2 << 5);#endif#if (Fcco / Fcclk) == 16 PLLCFG = ((Fcclk / Fosc) - 1) | (3 <
48、;< 5);#endif,根據(jù)config.h用戶(hù)定義的時(shí)鐘自動(dòng)設(shè)定PLL的P和M,,,根據(jù)config.h用戶(hù)定義的時(shí)鐘自動(dòng)設(shè)定VPB分頻值,,,6.4.1 啟動(dòng)代碼內(nèi)容,(2)target.c,/* 設(shè)置存儲(chǔ)器加速模塊 */ MAMCR = 0;#if Fcclk < 20000000 MAMTIM = 1;#else#if Fcclk < 40000000 MAMTIM = 2;
49、#else MAMTIM = 3;#endif#endif MAMCR = 2; /* 初始化VIC */ VICIntEnClr = 0xffffffff; VICVectAddr = 0; VICIntSelect = 0; /* 添加自己的代碼 */ /* …… */},設(shè)定MAM,,,設(shè)定VIC,,,留給用戶(hù)使用,,,6.4.2 啟動(dòng)代碼工作流程
50、,復(fù)位后,啟動(dòng)代碼工作及內(nèi)容:,(1)復(fù)位后,PC=0,根據(jù)異常向量表,跳轉(zhuǎn)到復(fù)位處理程序。 (2)執(zhí)行復(fù)位程序。 -堆棧初始化 -目標(biāo)板初始化 -跳到C程序main入。 (3)執(zhí)行用戶(hù)程序。,,復(fù)位,,,,(1)ResetInit的地址轉(zhuǎn)入PC,(2)程序跳轉(zhuǎn)到ResetInit,,(3)各模式堆棧初始化,,,,,6.4.2 啟動(dòng)代
51、碼工作流程,(1)ResetInit的地址轉(zhuǎn)入PC,(2)程序跳轉(zhuǎn)到ResetInit,,(3)各模式堆棧初始化,(4)進(jìn)行目標(biāo)板初始化,,,,6.4.2 啟動(dòng)代碼工作流程,(1)ResetInit的地址轉(zhuǎn)入PC,(2)程序跳轉(zhuǎn)到ResetInit,,(3)各模式堆棧初始化,(4)進(jìn)行目標(biāo)板初始化,,(5)跳轉(zhuǎn)到main入口,6.4.2 啟動(dòng)代碼工作流程,參考資料,,啟動(dòng)代碼和分散加載在《深入淺出ARM7-LPC213x/ LPC214
52、x(上冊(cè))》中有詳細(xì)描述。詳見(jiàn)3.9《啟動(dòng)代碼綜述》一節(jié)。,ARM之旅,當(dāng)前位置,6.5 GPIO模塊,(一)特性,LPC2000的GPIO具有如下的特性:可以獨(dú)立控制每個(gè)GPIO口的方向(輸入/輸出模式)可以獨(dú)立設(shè)置每個(gè)GPIO的輸出狀態(tài)(高/低電平)所有GPIO口在復(fù)位后默認(rèn)為輸入狀態(tài)部分GPIO有快速GPIO特性,6.5 GPIO模塊,(二)應(yīng)用,檢測(cè)數(shù)字輸入,如鍵盤(pán)或開(kāi)關(guān)信號(hào),驅(qū)動(dòng)LED或其它指示器,控制片外器件
53、,6.5 GPIO模塊,(三)引腳描述,LPC2114/2124微控制器具有兩個(gè)端口——P0和P1,可以作為GPIO使用的引腳數(shù)為46個(gè)。 LPC2210/2212/2214微控制器還包含另外兩個(gè)端口——P2和P3,這個(gè)兩個(gè)端口與外部存儲(chǔ)器總線復(fù)用,當(dāng)它們?nèi)孔鳛镚PIO使用時(shí),GPIO引腳數(shù)多達(dá)112個(gè)。,6.5 GPIO模塊,(四)內(nèi)部結(jié)構(gòu),GPIO內(nèi)部結(jié)構(gòu)示意,引腳,,6.5 GPIO模塊,(五)GPIO操作
54、,除了設(shè)定管腳連接之外,GPIO還有如下操作:(1)設(shè)定GPIO方向(2)控制GPIO(3)讀取管腳電平(4)讀取GPIO設(shè)置,6.5 GPIO模塊,(1)設(shè)定GPIO方向,通過(guò)GPIO方向寄存器IODIR進(jìn)行控制。,方向控制: 1-輸出 0-輸入,每個(gè)P口都有自己的IODIR寄存器。IOxDIR 和相應(yīng)的Px口對(duì)應(yīng)。,,6.5 GPIO模塊,(2)控制GPIO,拉高某位口線通過(guò)置位相應(yīng)的IO置位寄存器IOSET
55、中對(duì)應(yīng)位實(shí)現(xiàn)。,置位控制:寫(xiě)入1-輸出高電平 寫(xiě)0無(wú)效,,6.5 GPIO模塊,(2)控制GPIO,拉低某位口線通過(guò)置位相應(yīng)的IO清零寄存器IOCLR中對(duì)應(yīng)位實(shí)現(xiàn)。,清零控制:寫(xiě)入1-輸出低電平 寫(xiě)0無(wú)效,,寫(xiě)該寄存器會(huì)清除IOSET寄存器/輸出寄存器中對(duì)應(yīng)位。,6.5 GPIO模塊,(2)控制GPIO,同時(shí)拉高/拉低某些口線通過(guò)寫(xiě)相應(yīng)的IO管腳值寄存器IOPIN
56、中對(duì)應(yīng)位實(shí)現(xiàn)。,清零控制:寫(xiě)入1-輸出高電平 寫(xiě)入0-輸出低電平,,6.5 GPIO模塊,(3)讀取管腳電平,讀取管腳電平通過(guò)讀取相應(yīng)的IO管腳值寄存器IOPIN實(shí)現(xiàn)。,管腳電平:1-管腳為高電平 0-管腳為低電平,,6.5 GPIO模塊,(4)讀取GPIO設(shè)置,讀取管腳設(shè)置通過(guò)讀取相應(yīng)的IO管腳置位寄存器IOSET實(shí)現(xiàn)。,管腳設(shè)置:僅反映程序設(shè)定狀態(tài),不反映外
57、部實(shí)際情況。,,6.5 GPIO模塊,(六) 注意要點(diǎn),引腳設(shè)置為輸出方式時(shí),輸出狀態(tài)由IOxSET和IOxCLR中最后操作的寄存器決定;大部分GPIO輸出為推挽方式(個(gè)別引腳為開(kāi)漏輸出),正常拉出/灌入電流均為4mA(短時(shí)間極限值40mA);復(fù)位后默認(rèn)所有GPIO為輸入模式。,6.5 GPIO模塊,... PINSEL0 &= 0xFFFFFFFC; IO0DIR |= 0x00000001;
58、 IO0SET = 0x00000001; ...,C代碼:,,,PINSEL0,,,,,IO0DIR,,,,,,,,,IO0CLR,,,,,,,IO0PIN,IO0SET,in,out,,,1,0,,,,,,,,,GPIO應(yīng)用示例1——設(shè)置P0.0輸出高電平,P0.0,6.5 GPIO模塊,... uint32 PinStat; PINSEL0 &= 0xFFFFFFFC; IO0DIR
59、 &= 0xFFFFFFFE; PinStat = IO0PIN; ...,C代碼:,,,PINSEL0,,,,,IO0DIR,,,,,,,,,IO0CLR,,,,,,IO0PIN,IO0SET,in,out,,,1,0,,,,,,,,,GPIO應(yīng)用示例2——讀取P0.0引腳狀態(tài),P0.0,IO0PIN,,,,6.5 GPIO模塊,#define DataBus 0xFF PINSEL0 &a
60、mp;= 0xFFFF0000; IO0DIR |= DataBus; IO0CLR = DataBus; IO0SET = Data; ...,使用IOxSET和IOxCLR實(shí)現(xiàn):,GPIO應(yīng)用示例3——輸出多位數(shù)據(jù)至IO口,在需要將多位數(shù)據(jù)同時(shí)輸出到某幾個(gè)IO口線時(shí),通常使用IOxSET和IOxCLR來(lái)實(shí)現(xiàn),在某些情況下也可以使用IOxPIN寄存器實(shí)現(xiàn)。后者可以在多個(gè)IO口上直接輸出0和1電
61、平。 本例將8位無(wú)符號(hào)整數(shù)變量Data的值輸出到P0.0~P0.7。,數(shù)據(jù)輸出線:,6.5 GPIO模塊,#define DataBus 0xFF PINSEL0 &= 0xFFFF0000; IO0DIR |= DataBus; IO0PIN = (IO0PIN & 0xFFFFFF00) | Data; ...,GPIO應(yīng)用示例4——輸出多位數(shù)據(jù)至IO口,
62、在需要將多位數(shù)據(jù)同時(shí)輸出到某幾個(gè)IO口線時(shí),通常使用IOxSET和IOxCLR來(lái)實(shí)現(xiàn),在某些情況下也可以使用IOxPIN寄存器實(shí)現(xiàn)。后者可以在多個(gè)IO口上直接輸出0和1電平。 本例將8位無(wú)符號(hào)整數(shù)變量Data的值輸出到P0.0~P0.7。,使用IOxPIN實(shí)現(xiàn):,數(shù)據(jù)輸出線:,GPIO實(shí)驗(yàn)演示GPIO控制蜂鳴器,6.5 GPIO模塊,實(shí)驗(yàn)電路,6.5 GPIO模塊,蜂鳴器控制電路,實(shí)驗(yàn)流程圖,6.5 GPIO模塊
63、,開(kāi)始,設(shè)置P0.7為GPIO,設(shè)置P0.7為輸出模式,拉高P0.7,關(guān)閉蜂鳴器,延時(shí),拉低P0.7,打開(kāi)蜂鳴器,延時(shí),,,,,,,,,,,實(shí)驗(yàn)代碼,6.5 GPIO模塊,#include "config.h"#define BEEP 1 0; dly--) for (i=0; i<50000; i++);}int main (void){ PINSEL0 = 0x00
64、000000; //設(shè)置管腳連接GPIO IO0DIR = BEEP; //設(shè)置BEEP控制口為輸出 while (1) { IO0SET = BEEP; //BEEP停止蜂鳴 DelayNS(50); IO0CLR = BEEP; //BEEP蜂鳴 DelayNS(50); } return 0;},,,,,,
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫(kù)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- arm嵌入式軟件開(kāi)發(fā)
- 基于凌陽(yáng)SPCE061A的嵌入式語(yǔ)音系統(tǒng).pdf
- 嵌入式軟件開(kāi)發(fā)流程
- 基于arm的嵌入式系統(tǒng)應(yīng)用開(kāi)發(fā)
- 嵌入式驅(qū)動(dòng)開(kāi)發(fā)培訓(xùn)手冊(cè)
- arm嵌入式論文
- 基于ARM的嵌入式開(kāi)發(fā)平臺(tái)設(shè)計(jì).pdf
- 基于ARM嵌入式實(shí)時(shí)控制平臺(tái)的開(kāi)發(fā).pdf
- 基于arm的嵌入式一般流程概括
- ARM嵌入式WiMAX終端的研究與開(kāi)發(fā).pdf
- 【嵌入式】android嵌入式底層開(kāi)發(fā)大綱
- ARM嵌入式Linux系統(tǒng)研究與開(kāi)發(fā).pdf
- 嵌入式觸摸屏課程設(shè)計(jì)---arm嵌入式系統(tǒng)
- 基于ARM的嵌入式主板的研究與開(kāi)發(fā).pdf
- 基于ARM的嵌入式Linux開(kāi)發(fā)平臺(tái)的研究.pdf
- 基于ARM的嵌入式系統(tǒng)平臺(tái)研究與開(kāi)發(fā).pdf
- ARM Linux嵌入式音視頻設(shè)備底層開(kāi)發(fā).pdf
- 基于ARM的嵌入式USB主機(jī)系統(tǒng)開(kāi)發(fā).pdf
- 基于ARM7TDMI內(nèi)核嵌入式開(kāi)發(fā)平臺(tái)的開(kāi)發(fā).pdf
- 基于ARM9和嵌入式LINUX的嵌入式開(kāi)發(fā)平臺(tái)的研究與設(shè)計(jì).pdf
評(píng)論
0/150
提交評(píng)論