版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第1 EasyARM2200開(kāi)發(fā)板硬件結(jié)功能特 硬件原 硬件結(jié) 硬件使用的資 其 第2 ADS集成開(kāi)發(fā)環(huán)境及EasyJTAG仿真器應(yīng)ADS1.2集成開(kāi)發(fā)環(huán)境的組 AXD調(diào)試器簡(jiǎn) 工程的編 工程的調(diào) 為ADS1.2增加LPC2200工程模 使用LPC2200工程模板建立工 EasyJTAG仿真器的安裝與應(yīng) 程 片內(nèi)FLASH的片外FLASH的第3 基礎(chǔ)實(shí)ADS1.2集成開(kāi)發(fā)環(huán)境練 匯編指令實(shí)驗(yàn) 匯編指令實(shí)驗(yàn) 匯編指令實(shí)驗(yàn) 匯編指令實(shí)驗(yàn) 匯編指令實(shí)驗(yàn) ARM微控制器工作模式實(shí) C語(yǔ)言程序?qū)?C語(yǔ)言調(diào)用匯編程序?qū)?GPIO輸出控制實(shí)驗(yàn) GPIO輸出控制實(shí)驗(yàn) GPIO輸入實(shí) 器重實(shí) 外部中斷實(shí)驗(yàn) 外部中斷實(shí)驗(yàn) 外部器接口實(shí)驗(yàn) 外部器接口實(shí)驗(yàn) 定時(shí)器實(shí)驗(yàn) 定時(shí)器實(shí)驗(yàn) Modem接口實(shí) I2C接口實(shí)驗(yàn) I2C接口實(shí)驗(yàn) SPI接口實(shí) 輸出實(shí)驗(yàn) 模數(shù)轉(zhuǎn)換器實(shí) WDT實(shí) 低功耗實(shí)驗(yàn) 低功耗實(shí)驗(yàn) 圖形液晶顯示實(shí) 第4 基于μC/OS-II的實(shí)蜂鳴器控制實(shí) 串口中間件應(yīng)用實(shí) I2C總線驅(qū)動(dòng)中間件實(shí) SPI總線驅(qū)動(dòng)中間件實(shí) 時(shí)鐘顯示實(shí) 第5 綜合實(shí)USB-E2PROM編程器實(shí) ZLG/CF驅(qū)動(dòng)接口函數(shù)實(shí) UDP通訊實(shí) TCP通訊實(shí) 系統(tǒng)消息循環(huán)實(shí) 接口實(shí) 附錄AEasyARM的使用附錄B常見(jiàn)問(wèn)題解答第1 開(kāi)發(fā)板硬件結(jié)一些鍵盤、LED、RS232等常用功能部件,并具有IDE硬盤接口、CF卡接口、以太網(wǎng)接口和MODEM接口等等,并設(shè)計(jì)有外設(shè)PACK,極大地方便了用戶在32位ARMLPC2210/2212/2214/2290/2292/2294是世界首款可加密的具有外部器接口的,144引腳LQFP封裝,3.3V和1.8V系統(tǒng)電源,PLL時(shí)鐘調(diào)整,功耗更低。使用CPUPACK,可以使用多種兼容(LPC2210/2212/2214/2290/2292/2294/支持外設(shè)PACK,可外接豐富外設(shè),并可選配多種外設(shè)PACKADC實(shí)驗(yàn)EasyARM2200開(kāi)發(fā)板功能框圖見(jiàn)圖1.1ADCADCCAN2/2294等有效IDECF卡鍵盤與LED(I2C接口驅(qū)動(dòng)器)I2C儲(chǔ)RTL8019RJ45RS232換器(8路接4M16MRS232換器(2路9D型口(20針5V穩(wěn)壓1.1EasyARM2200開(kāi)發(fā)板功能框EasyARM2200開(kāi)發(fā)板電路原理圖如圖1.2所示電源電路LPC2000ARM7微控制器均要使用兩組電源,I/O3.3V,內(nèi)核及片內(nèi)外設(shè)供電電源為1.8V,所以系統(tǒng)設(shè)計(jì)為3.3V應(yīng)用系統(tǒng)。首先,由CZ1電源接口輸入9V直流電源,二極管D1防止電源反接,經(jīng)過(guò)C1、C4濾波,然后通過(guò)LM7805將電源穩(wěn)壓至5V,再使用LDO(低壓差電源)穩(wěn)壓輸出3.3V及1.8V電壓。PACKLM2575能提供足夠的電流。EasyARM2200開(kāi)發(fā)板的5V穩(wěn)壓電路可以使用LM7805線性穩(wěn)壓,電路原理如圖1.4所示。1.35V電源電路—1.45V電源電路—LDO采用了SPX1117M3-1.8和SPX1117M3-3.3,其特點(diǎn)為輸出電流大,輸出電壓精度高,穩(wěn)定性高。系統(tǒng)電源電路如圖1.5所示。1.5系統(tǒng)電源電SPX1117系列LDO輸出電流可達(dá)800mA,輸出電壓的精度在±1%以內(nèi),還具有電出端需要一個(gè)至少10uF的鉭電容來(lái)改善瞬態(tài)響應(yīng)和穩(wěn)定性。地與數(shù)字電源/數(shù)字地進(jìn)行,但其PCB板采用了大面積敷地,以降低噪聲。注意:EasyARM2200開(kāi)發(fā)板使用的電源是9V直流電源,由CZ1電源接口輸入,接頭上的電源極性為外正內(nèi)負(fù)。當(dāng)開(kāi)發(fā)板電源上電后,POWER指示燈應(yīng)點(diǎn)亮。復(fù)位電路復(fù)位電路使用了微處理器電源SP708S,提高系統(tǒng)的可靠性。由于在進(jìn)行JTAG調(diào)試時(shí),nRST、TRSTJTAG74HC125進(jìn)行驅(qū)動(dòng),電路如圖1.6所示。1.6系統(tǒng)復(fù)位電如圖1.6中,信號(hào)nRST連接到LPC2210的復(fù)位腳RESET,信號(hào)nTRST連接到LPC2210JTAG接口電路復(fù)位腳TRST。當(dāng)復(fù)位按鍵RST按下時(shí),SP708S立即輸由上拉電阻R3、R4將信號(hào)nRS RST上拉為高電平,系統(tǒng)可正常運(yùn)行或JTAG仿真調(diào)系統(tǒng)時(shí)鐘電路LPC2000系列ARM7微控制器可使用外部晶振或外部時(shí)鐘源,PLL電路可調(diào)整系統(tǒng)時(shí)鐘,使系統(tǒng)運(yùn)行速度更快(CPU60MHz)PLL功能及鐘頻率范圍是10MHz~25MHz。EasyARM2200開(kāi)發(fā)板使用了外部11.0592MHz晶振,電路如圖1.7所示,用1MΩ電阻精確,同時(shí)能夠支持LPC2000系列ARM7微控制器PLL功能及ISP功能。1.7系統(tǒng)時(shí)鐘電JTAG接口電采用ARM公司標(biāo)準(zhǔn)20腳JTAG仿真調(diào)試接口,JTAG信號(hào)的定義及與LPC2210的連接如1.8所示。圖中,JTAG接口上的信nRSTnTRST與開(kāi)發(fā)板的復(fù)位電路連接(參考圖1.6),形成線與的關(guān)系,達(dá)到共同控制系統(tǒng)復(fù)位的目的。根據(jù)LPC2210的應(yīng)用手冊(cè)說(shuō)明,在RTCK引腳接一個(gè)4.7KΩ的下拉電阻,使系統(tǒng)復(fù)位后LPC2210JTAG接口使能,這樣就可以直接進(jìn)行JTAG仿真調(diào)試了。如果用戶需要使用P1.26~P1.31作I/O,不進(jìn)行JTAG仿真調(diào)試,則可以在用戶程序中通過(guò)設(shè)置PINSEL2寄存器來(lái)使LPC2210JTAG接口禁能。另外,在TRACESYNC引腳通過(guò)跳線器JP10方可使用P1.16~P1.25作I/O。1.8JTAG接口電串口及MODEM接口電路3.3VSP3232ERS232電平轉(zhuǎn)換,SP3232E3V工作電源的RS232轉(zhuǎn)換。另外,LPC2000系列ARM7微控制器的UART1帶有完整的調(diào)制解調(diào)器(MODEM)接口,所以要使用8路的RS232轉(zhuǎn)換SP3243ECA。如圖1.9所示,JP3UART1口線連接跳線,當(dāng)把它們斷開(kāi)時(shí),這些口線保留給用戶作為其它功能使用。CZ3MODEMLPC2000ARM7UART1控制MODEM拔號(hào)、通訊等等。需要注意的是,LPC2000ARM7ISP使能引腳(P0.14口)DCD1P0.14ISP狀態(tài);同JP1DCD1MODEM接口1.9串口MODEM接口電鍵盤及LED顯示電路EasyARM2200168LEDI2C接口的鍵盤與LED驅(qū)動(dòng)ZLG7290,電路如圖1.10、圖1.11所示。ZLG7290是一款式功能強(qiáng)大的鍵盤與LED驅(qū)動(dòng),最大支持64個(gè)按鍵及8位共陰LED數(shù)碼管。JP5可以斷開(kāi)EasyARM2200開(kāi)發(fā)板上I2C器件與LPC2210的連接。另外,EasyARM2200開(kāi)發(fā)板采用了一74HC5958LED燈,如1.12所示,其時(shí)鐘(SCK)、數(shù)據(jù)(SI)分別接到LPC2210的SPI接口的SCLK0、MOSI0,這樣就可以發(fā)送數(shù)據(jù)74HC595片選RCK74HC595輸出觸發(fā)端)與P0.8口連P0.8控制74HC595數(shù)據(jù)鎖存輸出;而最輸出(SQH)連接到LPC2210的SPI接口的MISO0,可用來(lái)讀回?cái)?shù)據(jù)。這樣連接就可以進(jìn)行SPI接口控制實(shí)驗(yàn),并能把74HC595的移位輸出讀回來(lái)(由MISO0讀回)。這一部分電路可用JP8跳開(kāi)。P0.5、P0.6、P0.7SSEL0/110KΩ的上拉電阻。在EasyARM2200開(kāi)發(fā)板上,P0.7復(fù)用作以太網(wǎng)RT8019AS的中斷輸入,所以在使用硬件SPI8LED燈時(shí),要斷開(kāi)P0.7RT8019AS的連接(JP4跳線器)。3512476835124768935124768924246135R14220x8C18C19 Bit7Bit6Bit5Bit4 P0.3SDAP0.2SCLP0.30EINT3 HEADERR47 1.108LED數(shù)碼管驅(qū)動(dòng)電1.1116按鍵連接電1.12SPILED若需要進(jìn)行大量數(shù)據(jù)顯示,則可使用EasyARM.exe進(jìn)行模擬顯示。EasyARM.exe是一款用于EasyARM2200開(kāi)發(fā)實(shí)驗(yàn)板的上位機(jī),具有8位模擬數(shù)碼管顯示,全仿真蜂鳴器及電Q2P0.71時(shí),Q2JP9斷開(kāi),Q2截止,蜂鳴器停止蜂鳴。1.13蜂鳴器控Q2采用開(kāi)關(guān)三極管8550,其主要特點(diǎn)是放大倍數(shù)高h(yuǎn)FE=300,最大集電極電流ICM=1500mA,特征頻率fT=100MHz。R89用于限制Q2的基極電P0.70時(shí)R89的電流1.1所示3.3VUec≈0VUeb>Uec,Q2為深度飽和導(dǎo)通,為蜂鳴器提供足夠的電流。Ir3.3Veb3.30.70.0026 ( 由于P0.7SPI部件的SSEL0復(fù)用,所以此引腳上接一上拉電阻R88,防止在使用硬件SPI總線時(shí)由于SSEL0引腳懸空導(dǎo)致SPI操作出錯(cuò)。如圖1.14所示,在輸出實(shí)驗(yàn)上,使用6(即P0.9引腳)輸出,經(jīng)過(guò)R90、C34進(jìn)行RC濾波,實(shí)現(xiàn)DAC控制,而JP2可以斷開(kāi)這部分電路。測(cè)試點(diǎn)可直接測(cè)試波形,DAC測(cè)試點(diǎn)可以測(cè)量DAC的電壓值。圖1.14DAC電ADC電路LPC2114/2124/2119/2129/2194410ADC轉(zhuǎn)換器LPC22102212221422902292/2294具有810ADC轉(zhuǎn)換器,其參考電壓3.3V(V3a引腳提供),參考電壓的精度會(huì)影響ADC轉(zhuǎn)換結(jié)果。EasyARM2200開(kāi)發(fā)實(shí)驗(yàn)板提供了直流電壓測(cè)量電路,如圖1.15W1、W2ADCVIN1、VIN2測(cè)試點(diǎn)上用萬(wàn)能表檢查當(dāng)前電壓值。R34、R35為I/O口保護(hù)電阻,當(dāng)ADC輸入電壓調(diào)整到3.3V或0V時(shí),而P0.27P0.28GPIO0/1,這兩個(gè)電阻保證電路不產(chǎn)生短路故障。1.15ADC實(shí)驗(yàn)電CAN接口電路LPC2119/2129/2290/22922CAN接口,LPC2194/22944CANEasyARM2200CANJ51.16CAN接口與CAN收發(fā)器連接(如TJA1050),即可進(jìn)行CAN總線通訊操作。1.16CAN接口電外設(shè)PACK接口電路LPC2200系列ARM7微控制器是總線開(kāi)放型的微控制器,它是通過(guò)外部器控制BLS1CS2PACK0x82000000~0x82FFFFFF。用戶可以使用CS2信號(hào)及地址進(jìn)行譯碼,達(dá)到地址再次分配的目的。外設(shè)PACK上還1.17PACK接口電以太網(wǎng)接口電路EasyARM2200開(kāi)發(fā)板上設(shè)計(jì)有以RTL8019AS為的以太網(wǎng)接口電路,電路原1.18所示。LPC221016RTL8019AS進(jìn)行,即數(shù)據(jù)總線D0~D15與的SD0~SD16連接,由于RTL8019AS工作電源是5VLPC2210I/O電壓為3.3V,所以在總線上串接470Ω保護(hù)電阻。1.18以太網(wǎng)接SA19均接地,SA9接電源。SA8與地址總線的A22相連,SA5與LPC2210的外部器BANK3片選CS3相連,當(dāng)SA8為1,SA5為0時(shí),選中RTL8019AS,即其操作地址0x83400000~0x8340001F。RTL8019AS。圖形液晶模塊接口電路EasyARM2200SMG240128A點(diǎn)陣圖形液晶模塊或其它兼容模塊連接使用,接口電路如圖1.198位總線方式連接C/DA1A1控制模塊處理數(shù)據(jù)/C/D與A1LPC221016位總線方式操作該圖形液晶模塊(8位數(shù)據(jù)被忽略)。模塊的片選信號(hào)由LPC2210的A22和外部器BANK3片選CS3相“或”后A22nCS300x83000000,命令操作地址為0x83000002。1.19圖形液晶模塊接口電系統(tǒng)器電EasyARM2200開(kāi)發(fā)板擴(kuò)4MbitSRAM(IS61LV25616AL)16MbitF160),電路如圖1.20所示。為了方便程序的調(diào)試及最終代碼的應(yīng)用,使用了當(dāng)最終代碼的到FLASH時(shí),分配FLASH為BANK0地址,SRAM為BANK1地址,端,使系統(tǒng)復(fù)位時(shí)BOOT1、BOOT0為0b01。16D0~D15A1~A2016SRAM,BLS0、BLS1信號(hào)用于控制低字節(jié)、高字節(jié)的寫操作。更詳細(xì)的接口使用方法請(qǐng)參考LPC2210應(yīng)用手冊(cè)的外部器控制器(EMC)部分說(shuō)明。LPC2210是沒(méi)有片內(nèi)FLASH,所以只能使用外部的FLASH保存用戶最終的圖1.20器接口電電平最小值為4.0VGPIO的輸出電平才3.3V,所以只能使用3.3VCF卡供電。為了簡(jiǎn)化編程;而數(shù)據(jù)總線D00-D15使用P2.16~P2.31使用連續(xù)的GPIO,也是為了編程方便;其IO引腳都沒(méi)有特別的要1.1LPC2210GPIO引腳CF卡及IDE硬盤引腳連接分配表,表中描述了各GPIOCFIDE硬盤對(duì)應(yīng)的控制信號(hào)引腳。1.1LPC2210的GPIO引腳CFIDE硬盤連接引腳分CFIDE硬CFIDE硬--OOIOI--O接上CFIDE硬CFIDE硬--OO--O--II--I-IOI--O:表中“1 1 33P2.28D285P0.17CAP12ATA
VDD31.21LPC2210CF接口
P223
P224P225P226P227P228
P021P022
P020 ATA
P125P1201.22LPC2210IDE接口D12PACK的元件分布。D12PACKJ1、J2EasyARM2200J6、J7相連。PDIUSBD12連接到LPC22101.24PDIUSBD12與LPC2210的連接關(guān)系,如表1.2所示。1.2PDIUSBD12LPC2210連接關(guān) D0~PDIUSBD12數(shù)據(jù)總D0~PDIUSBD12地址總PDIUSBD12PDIUSBD12讀使能(低電平有效PDIUSBD12寫使能(低電平有效PDIUSBD12中斷PDIUSBD12復(fù)位PDIUSBD12掛起RST_USB、SUSPLPC2210輸出引腳控制,PDIUSBD121.23D12PACK元件分布1.24PDIUSBD12LPC22xx硬件連接原理EasyARM2200開(kāi)發(fā)板布局圖如圖1.25所示1.25EasyARM2200元件布局EasyARM2200開(kāi)發(fā)實(shí)驗(yàn)板跳線器說(shuō)明如表1.3所示,跳線器分布如圖1.26所示1.3EasyARM2200跳線器一覽DAC轉(zhuǎn)換的跳 UART1的RS232接口跳線,J6、J6、J6、J6、使用硬件I2C時(shí)需斷ZLG7290I2C———J3、INSIDE:OUTSIDE:外74HC595SPI接口連接的SPI接口輸出控制LED1~LED8——ETM調(diào)試接口使能,J3、J17、 1.26EasyARM2200 ISPLPC2000ARM7微控制ISP功能P0.14引為低電平ISP狀態(tài)。JP1P0.14P0.14口強(qiáng)制為低電平,復(fù)位系統(tǒng)后即進(jìn)入ISP狀態(tài)。JP1跳線說(shuō)明見(jiàn)表1.4。1.4JP1跳ISP DAC電路接口在EasyARM2200開(kāi)發(fā)板上將P0.9/6引腳連接到測(cè)試點(diǎn)上,同時(shí),開(kāi)發(fā)板6輸出連接到RC濾波電路,DA電壓由DAC測(cè)試點(diǎn)上測(cè)量。JP2跳線器說(shuō)明見(jiàn)1.5。1.5JP2跳—JP3UART1UART1MODEMP0.8~P0.158I/OMODEMEasyARM2200JP3跳線進(jìn)行RS232CZ3相連。JP3跳線器說(shuō)明見(jiàn)表1.6。1.6JP3跳P0.12/DSR1SP3243E連P0.13/DTR1SP3243EJP4NETJP4跳線器是設(shè)置以太網(wǎng)控制器RTL8019AS的中斷信號(hào)及復(fù)位信號(hào)是否連接到LPC2210JP4跳線全部短接時(shí),RTL8019ASP0.7/EINT2,復(fù)位信號(hào)連接到P0.6上。JP4跳線器說(shuō)明見(jiàn)表1.7。1.7JP4跳JP5I2CEasyARM2200開(kāi)發(fā)板上有兩個(gè)I2C器件,一個(gè)是E2PROMCAT24WC02,另外一個(gè)是鍵盤與LED驅(qū)動(dòng)ZLG7290,這兩個(gè)器件的I2C接口通過(guò)JP5與LPC2210連接。當(dāng)1.8JP5跳I2C器件的SDAP0.3/SDA連I2C器件的SCLP0.2/SCLZLG7290中斷信號(hào)與P0.30/EINT3連JP6板內(nèi)器分EasyARM2200開(kāi)發(fā)板上使用了LPC2210外部器接口的BANK0、BANK1擴(kuò)線器說(shuō)明見(jiàn)表1.9。1.9JP6跳IS61LV25616分配可以使用SST39VF160起可以使用開(kāi)發(fā)板在出廠時(shí)已在SST39VF160燒寫了一個(gè)演示程序,所以JP6的默認(rèn)設(shè)置為“SST39VF160BANK0JTAGJP6設(shè)置為“IS61LV25616分配為BANK0”。JP7系統(tǒng)起動(dòng)選擇LPC2200系列具有外部器接口通過(guò)BOOT1BOOT0引腳設(shè)置可以選擇片內(nèi)可以選擇BOOT1引腳接上拉電阻還是接下拉電阻。JP7跳線器說(shuō)明見(jiàn)表1.10。1.10JP7跳說(shuō)明:EasyARM2200BOOT0JP7INSIDEJP8SPIJP8跳線器是設(shè)置74HC595是否連接P0.4/SCK0P0.5/MISO0P0.6/MOSI0和74HC595P0.4/SCK0、P0.5/MISO0、P0.6/MOSI0P0.8。JP8跳線器說(shuō)明見(jiàn)1.11。1.11JP8跳 蜂鳴器電路接口跳線器說(shuō)明見(jiàn)表1.12。1.12JP9跳— ETMJP10跳線器是使能ETM調(diào)試接口,當(dāng)JP10跳線短接時(shí),在系統(tǒng)復(fù)位后1.13JP10跳使能ETM調(diào)試接P1.20引腳帶上拉電EasyARM2200開(kāi)發(fā)實(shí)驗(yàn)板連接器說(shuō)明如表1.14所示,跳線器分布如圖1.27所示1.14EasyARM2200連接器電源輸入(DCLCM接兼容SMG240128A液晶模ADCI/O接CANI/O接CF卡接ETM調(diào)試接
1.27EasyARM2200 LCMJ1LCMSMG240128A的液晶模塊。J1的引腳定義如圖1.28所示。 1.28J1連接器的引1.28 J220PINJTAG接口,當(dāng)需JATG仿真調(diào)試時(shí),將JTAG仿真器J2連接即JTAG仿真調(diào)試時(shí)(PINSEL2bit20),P1.27~P1.31可作為GPIO使用。J2的引腳定義如圖1.29所示。123456789——圖.29J2連接器的引 CAP、MAT、EINTSPI1功能等。J3的引腳定義如圖1.30所示?!? 26 1.30J3連接器的引器件地址分配EasyARM2200開(kāi)發(fā)板器件地址分配表見(jiàn)表1.15表1.15器件地址分配JP6:Bank0-根據(jù)需要將這兩個(gè)器件分別分配到Bank0Bank1存JP6:Bank1-JP6:Bank0-JP6:Bank1-—SMG240128A——16位總線接口,有P0.10~P0.13、P0.15/EINT2片內(nèi)地址空EasyARM2200開(kāi)發(fā)板使用CPUPACK可以使用多種兼容/2292/2294/LPC2114/2124/2119/2129/2194等。當(dāng)使用不同的時(shí),其片內(nèi)地址空間有所不同,見(jiàn)表1.16。表1.16片內(nèi)地址空LPC2210無(wú)LPC2114~x4003FFBoot扇區(qū)不能保存LPC2292~x4003FFBoot扇區(qū)不能保存I/OEasyARM2200開(kāi)發(fā)板部分I/O器件的I/O分配表見(jiàn)表1.171.17I/O口分配CAT24WC02P0.2/SCLP0.3/SDACAT24WC02-(ZLG7290控制LED9ZLG7290-LED10及按鍵~)ZLG7290中斷P0.4/SCK0(控制EP0.5/MISO0P0.6/MOSI0W1調(diào)節(jié)電—W2調(diào)節(jié)電—EasyARM2200開(kāi)發(fā)板EasyARM2200開(kāi)發(fā)板電源輸入接口為CZ1,輸入的電源為DC9V,接頭上的電源極性為外正內(nèi)負(fù),當(dāng)正確連接電源后,POWERJ4、J5PACK均有電源EasyARM2200開(kāi)發(fā)實(shí)驗(yàn)板上的部分功能部件有相應(yīng)的連接跳線,當(dāng)用戶使用某個(gè)功能0.8~0.15UART1MODEMI/OP0.9P0.10~P0.13等,所以在不使用UART1MODEM功能時(shí),最好斷開(kāi)JP3所有跳線。1.311.31CPUPACK安裝第2 ADS集成開(kāi)發(fā)環(huán)境及EasyJTAG仿真器應(yīng)ADSARMARM核微控制器集成開(kāi)發(fā)工具,英文全稱為ARMDeveloperSuiteADS1.2。ADS1.2ARM10ARM系列微控制器,支持調(diào)試及JTAG硬件仿真調(diào)試,支持匯編、C、C++源程序,具有編譯效率LPC2200ARM7微控制器的工程模板的使用,EasyJTAG仿真器的安裝與使用。ADS1.22.1ADS1.2的組成部ARM的C、C++編譯器,Thumb的C、C++ARM由CodeWarriorIDE調(diào)實(shí)用程序(一些實(shí)用程序由CodeWarriorIDEAXD調(diào)試器,所以這一2.12.1CodeWarrior步、全速和斷點(diǎn)等調(diào)試功能,可以觀察變量、寄存器和內(nèi)存的數(shù)據(jù)等等。AXD調(diào)試器主窗口如圖2.2所示。2.2AXDWINDOWS操作系統(tǒng)的【開(kāi)始】->【程序】->【ARMDeveloperSuitev1.2】forARMDeveloperSuite”快捷方式起動(dòng)。啟動(dòng)ADS1.2IDE如圖2.3所示。2.3ADS1.2點(diǎn)擊【File】菜單,選擇【New…】即彈出New框,如圖2.4所示工程存放路圖2.4NewARM可執(zhí)行映象(ARMExecutableImage)Thumb可執(zhí)行映象然后在【Location】項(xiàng)選擇工程存放路徑,并在【Projectname】項(xiàng)輸入工程名稱,點(diǎn)擊【確定】按鈕即可建立相應(yīng)工程,工程文件名后綴為mcp(下文有時(shí)也把工程稱為項(xiàng)目)。2.5“NewTextFile”圖標(biāo)按擇【Save】),輸入文件全名,如TEST1.S。注意,請(qǐng)將文件保存到相應(yīng)工程的下,以當(dāng)然,您也可以New框選擇【File】頁(yè)來(lái)建立源文件,如圖2.4所示,或使用其它文Files…”即可彈出“Selectfilestoadd…”框,選擇相應(yīng)的源文件(可按著Ctrl鍵一次選框選擇【File】頁(yè)來(lái)建立源文件時(shí)選擇加入工程(即選中“AddtoProject”項(xiàng))。添加文件操作如圖2.6、圖2.7所示。2.6在工程窗口中添加圖2.7Selectfilestoadd… 工程設(shè)置,如地址設(shè)置、輸出文件設(shè)置、編譯選項(xiàng)等其中DebugRel為當(dāng)前的生成目標(biāo)(system)SynchronizeModification 發(fā)現(xiàn)有更新(如使用其它編輯器編輯源文件),則在Touch欄標(biāo)記“√”。 編譯連接(快捷鍵為F7) 啟動(dòng)AXD進(jìn)行調(diào)試(快捷鍵為F5) Project 工程檢查,查看和配置工程中源文件的信息。2.8工程窗口中的圖標(biāo)按2.9DebugRelSettings窗點(diǎn)擊“DebugRelSettings…”圖標(biāo)按鈕,即可進(jìn)行工程的地址設(shè)置、輸出文件設(shè)置、編對(duì)于簡(jiǎn)單的調(diào)試,可以不進(jìn)行連接地址的設(shè)置,直接點(diǎn)擊工程窗口的“Make”圖編輯窗即會(huì)使用光標(biāo)當(dāng)前出錯(cuò)的源代碼行,編譯連接輸出窗口如圖2.10所示。同樣,2.10編譯連接輸出窗2.11所示,Touch欄用于標(biāo)記文件是否已編譯,若打上“√”則表明對(duì)應(yīng)文件需譯??梢酝ㄟ^(guò)單擊該欄位置來(lái)設(shè)置/取消符號(hào)“√”,或?qū)⒐こ滔碌?.tdt文件刪除也可以2.11工程窗口Make操點(diǎn)擊【File】菜單,選擇【Open…】即彈出“打開(kāi)”框,找到相應(yīng)的工程文件圖2.12Choose窗當(dāng)工程編譯連接通過(guò)后,在工程窗口中點(diǎn)擊“DebugAXD進(jìn)行即彈出Choose窗口,如圖2.12所示。在沒(méi)有添加其它仿真驅(qū)動(dòng)程序前,項(xiàng)中只有兩項(xiàng),分別為ADP(JTAG硬件仿真)和ARMUL(仿真)。選擇仿真驅(qū)動(dòng)程序后,點(diǎn)擊【File】選擇【LoadImage…ELF格式的可執(zhí)行文件,即*.axf文件。說(shuō)明:當(dāng)工程編譯連接通過(guò)后,在“工程名\工程名_Data\當(dāng)前的生成目標(biāo)”下就會(huì)生成一個(gè)*.axf調(diào)試文件。比如工程TEST,當(dāng)前的生成目標(biāo)Debug,編譯連接通過(guò)后,則在…\TEST\TEST_Data\Debug下生成TEST.axf文件。2.13運(yùn)行調(diào)試工具全速運(yùn)行(Go)單步運(yùn)行(Step),每次執(zhí)行一條語(yǔ)句,這時(shí)函數(shù)調(diào)用將被作為一條語(yǔ)句執(zhí)行。單步運(yùn)行(StepOut),執(zhí)行完當(dāng)前被調(diào)用的函數(shù),停止在函數(shù)調(diào)用的下一條語(yǔ)句。運(yùn)行到光標(biāo)(RunToCursor),運(yùn)行程序直到當(dāng)前光標(biāo)所在行時(shí)停止。2.14調(diào)試觀察窗口工具打開(kāi) 2.15文件操作工具加載調(diào)試文件(LoadImage)執(zhí)行映象(ARM指令的代碼)Thumb可執(zhí)行映象(Thumb指令的代碼),或Thumb、ARM交織映象(生成Thumb、ARM指令交織的代碼)。針對(duì)LPC2200系列ARM7微控制器,我們定義了6個(gè)工程模板,這些模板一般包含的FLASH起始地0x00000000、片RAM起始0x40000000、片RAM起始地址為0x80000000、編譯連接選項(xiàng)及編譯優(yōu)化級(jí)別等等;模板中包含了LPC2200系列ARM7STACK.S、HEAP.S、STARTUP.S、.C;模板還LPC2200ARM7微控制器的頭文件(如:LPC2294.hLPC2294.inc,LPC2294將“l(fā)pc2200project 拷貝到“<ADS1.2安>\Stationery\”即可,操作如圖2.16和圖2.17所示。這個(gè)步驟只需1次,以后就可以直接使2.16選擇拷貝的文件圖2.17文啟動(dòng)ADS1.2IDE,點(diǎn)擊【File】菜單,選擇【New…】即彈出New框,如圖2.18所示。由于事先增加了LPC2200工程模板,所以在工程模板欄中多出幾項(xiàng)工程模板選2.18增加的工LPC2200工程模板說(shuō)明如下ARMExecutableImageforlpc22xxCARM指令asmforlpc22xx:ThumbARMInterworkingImageforlpc22xx:無(wú)操作系統(tǒng)時(shí)部分C代碼編譯為ARM指令,部分C代碼編譯為Thumb指令的工程模板。ThumbExecutableImageforlpc22xx:CThumb指令的工ThumbExecutableImageforUCOSII(forlpc22xx):CARM指令,編譯成Thumb指令。2.19ARMExecutableImageforlpc22xx工程模板建立的一個(gè)工程。工程有四個(gè)生成目標(biāo)(system):DebugInExram、注意:選用RelInChip目標(biāo)時(shí),將會(huì)對(duì)LPC2200進(jìn)行加密(沒(méi)有片內(nèi)FLASH的 表2.2LPC2200工程模板各生成目標(biāo)的配圖2.19用LPC2200工程模板建立的工本模板假設(shè)用戶系統(tǒng)使用片外器。如果用戶不使用片外器,可以使用LPC2100的工程模板,地址為htt 的EasyARM2100開(kāi)發(fā)套件快速入門和LPC210...。本模板假設(shè)用戶系統(tǒng)片外器使用16位總線,且不使用ETM功能。如果用戶的片外器不是使用16位總線,和/或使用ETM功能,需要修改Startup.s這個(gè)文件,修改點(diǎn)見(jiàn)程序2.1。如何修改請(qǐng)參考LPC2200的使用手冊(cè),地址為: /philips/philips-arm.asp。注意:各個(gè)工程模板中的Startup.s不完全相同,可根據(jù)需程序2.1Startup.s文件需要更改的代 IF:DEF:EN_CRP R1, R1,0x0f814914改成需要的數(shù)值,如果使用ETM46 R1,R0,R1, R1,R0,R1, R1,生成目標(biāo)DebugInExRam。假設(shè)用戶系統(tǒng)在調(diào)試時(shí)片外RAMbank0(即起始地址為0x80000000),這一條不可修改。如果用戶系統(tǒng)不是這樣,就不能使用DebugInExRam生成目標(biāo)DebugInExRam。假設(shè)用戶系統(tǒng)在調(diào)試時(shí)片外RAM大小512K字節(jié),此條僅影響DebugInExRam這個(gè)生成目標(biāo)。如果不是,則需要修改mem_b.scf這個(gè)文件,修改點(diǎn)見(jiàn)程序2.2。注意:windows會(huì)隱藏這種文件的擴(kuò)展名,僅顯示為mem_b。程序2.2mem_b.scf文件需要修改的代ERAM {*}生成目標(biāo)RelOutChipFLASH起始地址必須為0x80000000(這是LPC2200的要求),片外RAM使用Bank1(即起始地址為0x8100mem_a。程序2.3mem_a.scf文件需要修改的代碼—片外ERAM {*}程序2.4mem_a.scf文件需要修改的代碼—片內(nèi)IRAM{Startup.o(+RW,+ZI)}ERAM/*ERAM段位置變STACKS{*}{stack.o}生成目標(biāo)DebugInChipFlash和RelInChip。假設(shè)用戶系統(tǒng)片外RAM使用Bank0(即起始地址為0x80000000如果片外RAM起始地址不為0x80000000mem_c.scf文件,修改點(diǎn)見(jiàn)程序2.3。mem_a.scf、mem_b.scf、mem_c.scf這幾個(gè)文件對(duì)內(nèi)存的使用進(jìn)行更為了適應(yīng)不同速度的器,工程模板默認(rèn)配置4個(gè)Bank器接口為最慢的序2.5。程序2.5在.c文件中配置器接口速{#ifdefMEMMAPMEMMAP=/*重新配置Bank0BCFG0=#ifdefOUT_CHIP/*重新配置Bank0BCFG0=#ifdefIN_CHIP/*重新配置Bank0BCFG0=}用戶還可以修改.c的ResetInit()函數(shù)在進(jìn)入main函數(shù)前初始化的東EasyJTAG仿真器是廣州周立功單片機(jī)發(fā)展開(kāi)發(fā)的LPC2000系列ARM7微控制器JTAG仿真器,支持ADS1.2集成開(kāi)發(fā)環(huán)境,支持單步、全速及斷點(diǎn)等調(diào)試功能,支持程序到片內(nèi)FLASH和特定型號(hào)的片外FLASH,采用ARM公司標(biāo)準(zhǔn)20腳JTAG仿采用同步Flash刷新技術(shù)(synFLASH同步用戶代碼到Flash中,即下即調(diào)(synTIMEEasyJTAG仿真器外觀如圖2.20所示,其驅(qū)動(dòng)程序可在htt ban/EasyARM2200.asp網(wǎng)頁(yè)獲得,或在產(chǎn)品光盤上獲得(其名為EasyJTAG_drive,該下有一個(gè)readme.txt的文件說(shuō)明)。2.20EasyJTAG仿真器實(shí)物外首先EasyJTAG仿真器的驅(qū)動(dòng)程序(比如產(chǎn)品EasyJTAG_drive下的所有文件)到ADS的BIN,如C:\ProgramFiles\ARM\ADSv1_2\BIN。接著,將EasyJTAG仿真器的25針接口通過(guò)并口延長(zhǎng)線與PC機(jī)的并口連接,將Files\ARM\ADSv1_2\BINEasyJTAG.dll,點(diǎn)擊“打開(kāi)”即可。說(shuō)明:WindowsARMDeveloperSuitev1.2仿真器設(shè)置在“Environments”框中選擇“EasyJTAG...”項(xiàng)。EasyJTAG控制,原先運(yùn)行的程序被停止。注意:有時(shí),AXD會(huì)彈出如圖2.23所示的錯(cuò)誤框,或者類似的框,此時(shí)可以加載調(diào)試文件,進(jìn)行JTAG調(diào)試。2.21“EasyJTAGSetup”設(shè)置窗Connection,硬件連接接口選擇;HaltModeHaltprogram(CPU)Haltandreset(復(fù)位然后停CPU)兩項(xiàng);Aux.OptionStepInInterrupt(允許單步運(yùn)行進(jìn)入中斷)EraseFlashwhenneed(允許EasyJTAG擦除Flash)兩項(xiàng);系列CPU時(shí)此項(xiàng)才有效。當(dāng)程序需要到片外FLASH時(shí),EasyJTAG仿真器會(huì)按所選芯Flash0AddrssFlashStartAddress(Flash的起始地址,比如Bank0時(shí)為0x80000000)和MemorySize(器容量,按實(shí)際容量填寫,比如SST39VF160的容量為0x200000)。當(dāng)程序不需要到片外FLASH,或系統(tǒng)沒(méi)有片外FLASH時(shí),StartAddressMemorySize0。仿真器的應(yīng)用問(wèn)題ADS1.2IDE環(huán)境中F5Debug圖標(biāo)按鈕即可直接AXD,但有時(shí)會(huì)出現(xiàn)如效時(shí),此時(shí)需要重新打開(kāi)【Options】->【Configure...】點(diǎn)擊“OK”,再點(diǎn)擊【File】選擇【LoadImage…】加載調(diào)試文件。2.22session文件錯(cuò)誤提AXDFatalAXDError2.23所示,此時(shí)可可以使用【File】->【LoadImage...】加載調(diào)試文件,進(jìn)行JTAG調(diào)試。PCCMOSSPP378H~37FH。2.23FatalAXD錯(cuò)誤提ARM7微控制器的片內(nèi)外設(shè)寄存器窗口。有些寄存器是不能讀出顯示或讀操作會(huì)影響使用JTAG程序到FLASH。進(jìn)入AXD調(diào)試環(huán)境,打開(kāi)【Options】->【地址的調(diào)試文件時(shí),將會(huì)擦除FLASH并代碼到FLASH中。 在JTAG仿真調(diào)試通過(guò)后,要將程序到片內(nèi)的FLASH或外部的FLASH中(即對(duì)于LPC2200系列ARM7微控制器來(lái)說(shuō),程序到片內(nèi)FLASH可通過(guò)兩種方式實(shí)現(xiàn):JTAG接口和使用ISP功能。不管使用哪式,用戶均要先設(shè)置編譯的地址,即代碼地址從0x00000000地址開(kāi)始,比如使用LPC2200工程模板時(shí),在生成目標(biāo)選用RelInChip,其分散加載描述文件mem_c.scf如程序2.6所示。放程序代碼的起始地址,也可以在后面添加其空間大小,如“ROM_LOAD0x000000000x20000”表示加載區(qū)起始地址為0x00000000,大小為128K字節(jié);ROM_EXEC描述了執(zhí)一致。從起始地址開(kāi)始放置向量表(即Startup.o(vectors,+ 棧,所以堆棧區(qū)起始地址設(shè)置為0x40004000,放置描述為stack.o(+ZI)。程序2.6用于程序的分散加載描述文件ROM_LOADROM_LOAD{ROM_EXEC{Startup.o(vectors, *}IRAM{}ERAM{*}HEAP+0{heap.o}{stack.o}}JTAG接口使用JTAG接口程序到FLASH是需要JTAG仿真器的支持EasyJTAG仿真器可支持LPC2000系列ARM7微控制器的片內(nèi)FLASH,這樣就可以使用這能將程序下載到FLASH中,以便脫機(jī)運(yùn)行。圖2.24片內(nèi)FLASH的EasyJTAG設(shè)加載調(diào)試映像文件時(shí)即會(huì)程序到FLASH中。FLASH的地址,EasyJTAG仿真器即把程序到指定的FLASH空間。LPC2200系列ARM7微控制器具有ISP功能(LPC2210無(wú)片內(nèi)FLASH,不能進(jìn)行ISP編程),可以通過(guò)串口進(jìn)行程序。HEXDebugRelSettings窗口,在Settings項(xiàng)中設(shè)置Post-linkerARMfromELF(如圖2.25所示。2.25Post-在ARMformELF項(xiàng)中設(shè)置輸出文件類型,如設(shè)置為In32bitHex,然后設(shè)置輸出文件名,也可指定,若不指定,則生成文件存放在當(dāng)前工程的中(2.26所2.26生成文件設(shè)HEX文件后,接下來(lái)使用串口延長(zhǎng)線連接PC串口(COM1)EasyARM2200實(shí)驗(yàn)板(UART0),并將實(shí)驗(yàn)板上的ISP(JP1)跳線短接。打開(kāi)LPC2000FlashUtility,并設(shè)置串口、波特率、系統(tǒng)晶振(注意,晶振頻率項(xiàng)單位為kHz)等,如圖2.27所示。!首先按EasyARM2200開(kāi)發(fā)板上的RST鍵復(fù)位,然后再確定提示,如圖2.28所示。EraseFLASHFilename項(xiàng)中輸入要的HEX文件全名,點(diǎn)擊UploadtoFlash按鈕即開(kāi)始程序。程序后,將ISP(JP1)跳線斷開(kāi),重新復(fù)位系統(tǒng)即可運(yùn)行程序。說(shuō)明,LPC2200系列ARM7微控制器要求向量表中所有的數(shù)據(jù)(即0x00000000~0x0000001c地址上的指令機(jī)器碼)32位累加和為零,才能啟動(dòng)用戶程序。通過(guò)設(shè)置保留異常向量地址0x14上的數(shù)據(jù)實(shí)現(xiàn)。圖2.27LPC2000FlashUtility設(shè)2.28LPC2000提脫機(jī)運(yùn)行代碼地址從0x80000000地址開(kāi)始,比如使用LPC2200工程模板時(shí),在system選用RelOutChip,其分散加載描述文件mem_a.scf如程序2.7所示。其中,ROM_LOAD0x80000000表示加載區(qū)的起始地址(因FLASHBank0);ROM_EXEC描述了執(zhí)行區(qū)的地址,放在第一塊位置定義,Startup.o(vectors,+)Startup.oStartup.s的目標(biāo)文件),接著放置其它代碼(即*(+RO));變量區(qū)IRAM的起始地0x40000000,放Startup.oRW,+ZI);堆棧STACKS使用片內(nèi)RAM,由于ARM的堆棧一般采用滿遞減堆棧,所以堆棧區(qū)起始地址設(shè)置為(RAMBANK1)Startup.o文件之外的其它文件的變量(即*RW,+ZI));緊靠ERAM變量區(qū)之后的是系統(tǒng)堆空間(HEAP),放置描述為heap.o(+ZI);程序2.7用于程序的分散加載描述文件{{Startup.o(vectors, *}IRAM{}{stack.o}ERAM{*}HEAP+0{heap.o}}JTAG接口支持對(duì)特定的片外FLASH程序,這樣就可以使用這能將程序到片外然后設(shè)置EasyJTAG仿真器,參見(jiàn)圖2.29;圖2.29片外FLASH的EasyJTAG設(shè)在加載調(diào)試映像文件時(shí)即會(huì)程序到片外FLASH中。實(shí)際上,只要你加載調(diào)試映像文件,且代碼的地址是設(shè)置為片外 脫機(jī)運(yùn)行第3 基礎(chǔ)實(shí)ADS1.2硬件:PC 一工程模板建立一個(gè)工程,工程名稱為ADS,見(jiàn)圖3.13.1ARM指令代碼的工圖3.2。輸入如程序3.1所示的代碼,并保存,見(jiàn)圖3.3。3.2新建文件程序3.1TEST1.S文件代;標(biāo)識(shí)程;代碼段;32ARM指;設(shè)置;R0=R0+B3.3添加了TEST1.S的工程管理窗Linker項(xiàng),然后在Output頁(yè)設(shè)置連接地址(見(jiàn)圖3.4),在Options頁(yè)設(shè)置調(diào)試地址(見(jiàn)圖3.4工程連接地址設(shè)圖3.5工程調(diào)試地址設(shè)刪除工程中的*.obj文件)硬件:PC 一令把結(jié)果寫回原地址,若結(jié)果大于等于10,則把0寫回原地址。使用ADS1.2仿真,單步、全速運(yùn)行程序,設(shè)置斷點(diǎn),打開(kāi)寄存器窗口(ProcessorRegisters)監(jiān)視R0、R1的值,打開(kāi)器觀察窗口(Memory)監(jiān)視0x40003100上的值。ROBase0x40000000,RWBase0x40003000。設(shè)置調(diào)試入口地址Imageentrypoint為0x40000000。打開(kāi)寄存器窗口(ProcessorRegisters)Current項(xiàng)監(jiān)視R0、R1器觀察窗口(Memory0x40003100Size32Bit,監(jiān)視0x40003100地址上的值。如圖3.6所示。時(shí)觀察寄存器和0x40003100地址上的值。運(yùn)行結(jié)果見(jiàn)圖3.7。3.6Memory窗口顯示格式設(shè)3.7匯編1程序運(yùn)行結(jié)程序3.2匯編指令實(shí)驗(yàn)1參考程 ; ;代碼段;標(biāo)識(shí)程;32位ARM指 ;R1<= ;R0<= ;R0<= ;R0<=R0+ R010比較,影響條件碼標(biāo) ;R0大于10,則此指令執(zhí)行,R0 BLDR偽指令與LDR加載指令的功能和應(yīng)用有何區(qū)別,舉例說(shuō)明?(提示:LDR偽指令 指令的前索引偏移指令如何編寫?指令是怎樣操作的?AXD調(diào)試時(shí)如何復(fù)位程序?(提示:選擇【File】->【ReloadCurrentImage】重新加硬件:PC 一使用ADD、SUB、AND、ORR、CMP、TSTROBase0x40000000,RWBase0x40003000。設(shè)置調(diào)試入口地址Imageentrypoint為0x40000000。格式Hex、Decimal等等。如圖示。3.8設(shè)置寄存器顯示3.9寄存器值更新的程序3.3匯編指令實(shí)驗(yàn)2參考程X ;定義X的值Y ;定義Y的值 ;定義BIT23的值 ;代碼段;;32位ARM指 ;MOV、ADD指令實(shí)現(xiàn):R8R3XR0X,X的值必須8;即是R3X;R8<=;MOV、MVN、SUB指令實(shí)現(xiàn):R50x5FFFFFF8R8*R5,R0,R8,LSLR83R8*;;計(jì)算R0Y4*YR0,R0,LSR;計(jì)算R0R1,R1,LSL;計(jì)算R1;R0R1,即(5*Y/2)和(2*X)進(jìn)行比;若(5*Y/2)>(2*X),則R2<=;若(5*Y/2)>(2*X),則R5=;若(5*Y/2)≤(2*X)R5;使用TST指令測(cè)試R5的bit23是否為1,若是則將bit6位清零(使用BIC指令) 指令 否則R5=R5&0xFFFF0000,程序應(yīng)如何修改?硬件:PC 一STMFD/LDMFD、MUL指令編寫一個(gè)整數(shù)乘方的子程序,然后使用BL指令調(diào)用子程序計(jì)算Xn的值。R2n-1R0=R0*R1R0中。(不考慮結(jié)果溢ROBase0x40000000,RWBase0x40003000。設(shè)置調(diào)試入口地址Imageentrypoint為0x40000000。R14(LR)的值。打開(kāi)器觀察窗口(Memory)設(shè)置觀察地址為0x40003EA0,顯示方式Size調(diào)試程序時(shí),更改參數(shù)X和n來(lái)測(cè)試程序,觀察是否得到正確的結(jié)果。例如:先復(fù)位程序(選擇【File】->【ReloadCurrentImage】),接著單步執(zhí)行到“BLPOW”指令,在寄存器窗口中將R0、R1的值進(jìn)行修改,然后繼續(xù)運(yùn)行程序。數(shù)(如136、198),也可以是十六進(jìn)數(shù)(如0x123,0xF0),輸入數(shù)據(jù)后回車確定。程序3.4匯編指令實(shí)驗(yàn)3參考程;;文件名;功能:計(jì)算X的n次方的;說(shuō)明:X和n均為無(wú)符Xn98;定義X的值;定義n的值;代碼段;標(biāo)識(shí)程;32ARM指;;B;名稱SP!,{R1-;寄存器入棧保;0,則設(shè)置;;;計(jì)數(shù)器R2=;DO_MUL子程序,R0R1*;R2;SP!,{R1-;寄存器出棧;功;功能:整數(shù)乘方 ;出口參數(shù);占用資源:R0、;說(shuō)明:本子程序不考慮溢;名稱;功能:32位乘法運(yùn)算 ;;占用資源:R0、乘; ;R0=R1*;返若需要考慮溢出問(wèn)題(32位運(yùn)算結(jié)果,判斷運(yùn)算是否溢出),如何修改實(shí)驗(yàn)參考程序?(提示:使用UMULL指令)硬件:PC 一N為1時(shí)結(jié)果1)。令切換到Thumb狀態(tài),才能開(kāi)始執(zhí)行Thumb指令。R00R0=R0+R1,R1為循環(huán)ROBase0x40000000,RWBase0x40003000。設(shè)置調(diào)試入口地址Imageentrypoint為0x40000000。 R0指令前后CPSR寄存器的T位0(比如“TT1,“tT0)。程序3.5匯編指令實(shí)驗(yàn)4參考程;;文件名;;說(shuō)明:N≥0,當(dāng)N=00;當(dāng)N=1時(shí)結(jié)果1N;定義N的值 代碼段;;;32ARM指令;;;;16Thumb指令;B;名稱;;參數(shù) N的;出口參數(shù) ;占用資源;說(shuō)明:當(dāng)N=0時(shí)結(jié)1;當(dāng)N=11 ;寄存器入棧保 ;將N的值到R2,并影響條件碼標(biāo) ;若N的值0,則返回。(R0沒(méi)有被更改 ;若N的值1,則返回。(R0沒(méi)有被更改 ;初始化計(jì)數(shù)器 ;初始化結(jié)果寄存器R0=0 ;R0=R0+R1 ;將計(jì)數(shù)器的值與N比較 ;若計(jì)數(shù)器的值≥N,則運(yùn)算結(jié) ;寄存器出棧,返Thumb指令 Thumb指令 硬件:PC 一使用ARM匯編指令實(shí)現(xiàn)if條件執(zhí)行;ARM匯編指令實(shí)現(xiàn)for循環(huán)結(jié)構(gòu);使用ARM匯編指令實(shí)現(xiàn)switch開(kāi)關(guān)結(jié)構(gòu)。執(zhí)行,if(x>y)z=0xR0,yR1,zR2,匯編代碼如何編寫。ROBase0x40000000,RWBase0x40003000。設(shè)置調(diào)試入口地址Imageentrypoint為0x40000000。程序3.6匯編指令實(shí)驗(yàn)5參考程;標(biāo)識(shí)程;代碼段;32ARM指;if(x>y);else;設(shè)xR0,yR1,zR2x、y、z均為無(wú)符號(hào)整數(shù);初始化x的;初始化y的;判斷x>y條件正確;條件失敗;for(i=0;i<10;;{;;設(shè)xR0,i為R2i、x均為無(wú)符號(hào)整數(shù);初始化x的;設(shè)置;判斷;若條件失敗,退;循環(huán)體;B;;{x*=;;設(shè)x為R0,y為R1(x、y均為無(wú)符號(hào)整數(shù)) ;初始化x的值 ;初始化y的 ;首先要判斷條 R0,R0,LSL#1 ;循環(huán)體,x*=2 ;判斷x≤y? ;若條件正確,繼 ;;{x--; ;設(shè)x為R0x為無(wú)符號(hào)整數(shù) ;初始化x的 ;循環(huán)體,xR0R0,并影響條件碼標(biāo);R0不為0(即x不為0),則繼續(xù)循;;;;x=key+;;x=key-;;;x=key*;x=;;;設(shè)x為R0,y為R1,key為R2(x、y、key均為無(wú)符號(hào)整數(shù)) ;初始化y的值 ;初始化key的 ; ;case ;case ;case x=key+ SWITCH_END ;case x=key- SWITCH_END ;case x=key*y SWITCH_END; ;default:x=SWITCH_ENDB{if表達(dá)2)1;else語(yǔ)句2;}{if表達(dá)3)3;else語(yǔ)句4;}{if表達(dá)2)1;else語(yǔ)句2;}{if表達(dá)3)3;else語(yǔ)句4;}硬件:PC 一ROBase0x40000000,RWBase0x40003000。設(shè)置調(diào)試入口地址Imageentrypoint為0x40000000。單步運(yùn)行程序,注意觀 CPSR、SPSR、R13(SP)、R14(LR)、R15(PC)寄存器標(biāo)志位NZCVQ為條件碼標(biāo)志N、Z、C、V、Q,顯示為大寫字母,表示該位為1大寫字母,表示該位1;顯示為小寫字母,表示該位為0。T標(biāo)志在ARM體系v4及以上版本的T變量中才有效。工作模式ARMUser(用戶模式)、FIQ(FIQ中斷模式)、IRQ(IRQ中斷模式)、SVC(管理模式)、Abort(中止模式)、Undef(未定義模式)、SYS(系3.10CPSR寄存器顯示方程序3.7ARM微控制器工作模式實(shí)驗(yàn)參考程USR_STACK_LEGTHEQUSVC_STACK_LEGTHEQU IRQ_STACK_LEGTHEQUABT_STACK_LEGTHUND_STACK_LEGTH000;標(biāo)識(shí)程;代碼段;32ARM指 ;;打開(kāi)IRQ中斷(CPSR寄存器的I位清零;R0<=;CPSR<=;;切換到用戶模 CPSR_c, ;切換到管理模;名稱; ;出口參數(shù):;說(shuō)明: R0, SP,StackIrqSP,StackAbtSP,StackUndSP,StackUsrPC,UsrStackSpace+(USR_STACK_LEGTH-1)*4SvcStackSpace+(SVC_STACK_LEGTH-1)*4IrqStackSpace+(IRQ_STACK_LEGTH-1)*4FiqStackSpace+(FIQ_STACK_LEGTH-1)*4AbtStackSpace+(ABT_STACK_LEGTH-; USR_STACK_LEGTH*4 ;用戶(系統(tǒng))模式堆??臻g SVC_STACK_LEGTH*4 ;管理模式堆??臻g IRQ_STACK_LEGTH*4 ;中斷模式堆??臻g FIQ_STACK_LEGTH*4 ;快速中斷模式堆??臻g ABT_STACK_LEGTH*4 ;中止義模式堆??臻g UND_STACK_LEGTH*4 ;未定義模式堆棧在非模式下能否對(duì)CPSR寄存器設(shè)置?能否CPSR寄存器的值?(提示:參考在非模式下如何使能/IRQ或FIO中斷?(提示:可以先使用SWI指令切換到硬件:PC 一C程序文件。匯編程序的功能是初始化堆棧指針和初始CC程序運(yùn)行,這就是一個(gè)簡(jiǎn)單的起動(dòng)程序。C程序使用加法運(yùn)算來(lái)計(jì)算1+2+3+...+(N-1)+N的值(N>0)。ROBase0x40000000,RWBase0x40003000。設(shè)置調(diào)試入口地址Imageentrypoint為0x40000000。3.11設(shè)置位于開(kāi)始位置的起始 程序3.8C語(yǔ)言實(shí)驗(yàn)參考程#define#define#defineunsignedunsigned#defineuint321+2+3+...+(N-1)+N的值。(N>0)voidMain(void){uint32sum=for(i=0;i<=N;{sum+=}}程序3.9簡(jiǎn)單的起動(dòng)代;;起動(dòng)文件。初始化C程序的運(yùn)行環(huán)境,然后進(jìn)入C程序代碼 ; ;標(biāo)識(shí)程;32ARM指;初始化C程序的運(yùn)行環(huán) ;跳轉(zhuǎn)到CMain()函硬件:PC 一 Add(uint32x,uint32 ROBase0x40000000,RWBase0x40003000。設(shè)置調(diào)試入口地址Imageentrypoint為0x40000000。在Test.c文件中的調(diào)用Add()C語(yǔ)言調(diào)用匯編程序?qū)嶒?yàn)的參考程序見(jiàn)程序3.10。匯編加法函數(shù)代碼見(jiàn)程序程序3.10C語(yǔ)言調(diào)用匯編程序?qū)嶒?yàn)參考程#define#define#defineunsignedunsignedexternuint32Add(uint32x,uint32uint32void{sum=Add(555,}程序3.11匯編加法函數(shù)代;;加法函數(shù),原型為uint32Add(uint32x,uint32y)EXPORTAddC,CODE,READONLY;標(biāo)識(shí)程;32ARM指;輸入?yún)?shù)xR0,y;,函數(shù)能夠在EasyARM2200開(kāi)發(fā)板上運(yùn)行第一個(gè)程序(無(wú)操作系統(tǒng)硬件:PC 一EasyARM2200開(kāi)發(fā) 一節(jié)的GPIO仔細(xì)閱讀本書第2章的內(nèi)容,了解ADS1.2集成開(kāi)發(fā)環(huán)境、LPC2200工程模板如何在EasyARM2200上運(yùn)行第一 (PC)屬于在PC機(jī)上操作,即的操 使用ADS1.2建立工程,編譯連接設(shè)置,調(diào)試操作等,參考本書第2章的內(nèi)容。更詳細(xì)的使用方法參考ADS1.2的文檔或相關(guān)資料。連接EasyJTAG仿真器和EasyARM2200開(kāi)發(fā)EasyJTAG仿真器25針接口通過(guò)并口PC機(jī)的并口EasyJTAG仿真器20針接20PIN連接電纜EasyARM2200開(kāi)發(fā)板J2上,然后使用配套的EasyJTAG仿真器的安裝與應(yīng)用添加工程模板用工程模板建立第一個(gè)工程使用LPC2200工程模板建立工程(比如ARMExecutableImageforlpc22xx工程模仿真調(diào)試第一個(gè)工程啟動(dòng)AXD進(jìn)行仿真調(diào)試。ADS1.2ARMExecutableImageforlpc22xx3.12選擇生成目將EasyARM2200開(kāi)發(fā)板上的JP9跳線短接,JP4跳線斷開(kāi),JP6Bank0-RAM、Bank1-Flash置為Bank0-RAM、Bank1-Flash,在AXD中設(shè)置仿真器參考如圖3.13所示。3.13RAM調(diào)試的仿真器設(shè)beepcon.c的主函數(shù)中停止(main函數(shù)起始處默認(rèn)量觀察窗口,通過(guò)此窗口可以觀察局部變量和全局變量。選擇【SystemViews】->Bank0-Flash、Bank1-RAM,JP7跳線設(shè)置為OUTSIDE器將會(huì)把程序到片外FLASH上(需要正確設(shè)置仿真器,參考第2.5節(jié))。注意:使用RelOutChip生成目標(biāo)時(shí),使用片外FLASH進(jìn)行仿真調(diào)試(或程序),JP6跳線要設(shè)置為Bank0-Flash、Bank1-RAM,在AXD中設(shè)置仿真器參考如圖3.14所示。3.14FLASH調(diào)試的仿真器設(shè)按EasyARM2200開(kāi)發(fā)板上的RSTAXDRAM調(diào)試方式的設(shè)置,以便于后面實(shí)程序3.12GPIO輸出控制實(shí)驗(yàn)1參考程 使用I/O口直接控制,采用灌電流方式#include"configh" /*P0.7引腳控B1,低電平蜂鳴 參數(shù) voidDelayNS(uint32dly){uint32for(;dly>0;dly--for(i=0;i<5000;}}intmain(void){PINSEL0 //設(shè)置管腳連接IO0DIR //設(shè)置I/O{IO0SET=IO0CLR=}//BEEPCON=//BEEPCON=}為什么這個(gè)實(shí)驗(yàn)的工程不需要設(shè)置連接地址?(提示:LPC2200工程模板已集成了在LPC2000系列ARM7微控制器兩個(gè)管腳作GPIO輸出時(shí)需要外接上拉電阻?硬件:PC 一EasyARM2200開(kāi)發(fā) 一仔細(xì)閱讀本書第2章的內(nèi)容,了解ADS1.2集成開(kāi)發(fā)環(huán)境、LPC2200工程模板ADS1.2ARMExecutableImageforlpc22xxLedDisp_C將EasyARM2200開(kāi)發(fā)板上的JP8跳線短接,JP6跳線設(shè)置為Bank0-RAM、1LED74HC595數(shù)據(jù)移位輸出是否正確。全速運(yùn)行程序,觀察1ED的顯示。通過(guò)I/O74HC59574HC595驅(qū)動(dòng)LED顯通過(guò)I/O74HC59574HC595驅(qū)動(dòng)LED顯示 參數(shù) voidDelayNS(uint32dly){uint32for(;dly>0;dly--for(i=0;i<5000;"config/*P0.8/*P0.6/*P0.4/*SPI接口的I/O設(shè)置字}參數(shù) voidHC595_SendDat(uint8dat){uint8IO0CLR= //SPI_CS=for(i=0i<8 //8{IO0CLR= //SPI_CLK=/*SPI_DATAif((dat&0x80)!=0)IO0SET=SPI_DATA;elseIO0CLR=SPI_DATA;dat<<=IO0SET= //SPI_CLK=}IO0SET }constuint8DISP_TAB[16]={0x81,0x42,0x24,0x18,0x24,0x42,0x81,0x00intmain(void){uint8PINSEL0 IO0DIR //SPI控制口為輸{for(i=0;i<16;{HC595_SendDat(~DISP_TAB[i]);//輸出LED顯示數(shù) //}}}硬件:PC 一EasyARM2200開(kāi)發(fā) 一節(jié)的GPIO電路及JP1跳線器的說(shuō)明。仔細(xì)閱讀本書第2章的內(nèi)容,了解ADS1.2集成開(kāi)發(fā)環(huán)境、LPC2200工程模板P0.14口設(shè)置為輸入模式時(shí),口線無(wú)上拉電阻,當(dāng)與按鍵或跳線器連接使用時(shí)需要外接上拉電阻,防止口線懸空。GPIO輸入實(shí)驗(yàn)原理圖如圖3.15所示。3.15GPIO輸入實(shí)驗(yàn)原理ADS1.2ARMExecutableImageforlpc22xxReadPin_C將EasyARM2200開(kāi)發(fā)板上的JP9跳線短接,JP4跳線斷開(kāi),JP6Bank0-RAM、Bank1-Flash單步運(yùn)行程序,先短接JP1,觀察IO0PIN寄存器的值,然后斷開(kāi)JP1,觀察寄存器的值。全速運(yùn)行程序,短接/斷開(kāi)JP1,控制蜂鳴器的Watch窗口觀察寄存器的值。選擇【ProcessorViews】->【W(wǎng)atch】打WatchWatchAddWatch…3.163.16Watch窗AddWatchExpression項(xiàng)輸入*((unsignedlong*)0xE0028000),然后回車,3.17所示,然后選AddToView按鈕即可Watch窗口觀IO0PIN寄存器(IO0PIN寄存器的地址0xE0028000)。圖3.17AddWatch注意:有些寄存器不能讀出顯示或讀操作會(huì)影響到其它寄存器的值。程序3.14GPIO輸入實(shí)驗(yàn)參考程功能 使用I/O口輸入方式P0.14口進(jìn)行掃描#include"configh" /*P0.7引腳控B1,低電平蜂鳴/* intmain(void){uint32IO0DIR=BEEPCON;//設(shè)置管腳連接B1控制口為輸出,其它I/O{{if((IO0PIN&PIN_P014)!=0)IO0SET=BEEPCON;elseIO0CLR=BEEPCON;for(i=0;i<1000;}}硬件:PC 一EasyARM2200開(kāi)發(fā) 一設(shè)置MEMMAP=2,然后將3F地址上的單元全部寫入0x55,0x0000003F地址上的數(shù)據(jù)。30x7FFFE03F地址上的數(shù)據(jù)是否一致。ADS1.2ARMExecutableImageforlpc22xx監(jiān)視從000003的數(shù)據(jù)。單步運(yùn)行程序,觀察0x0003地址上的數(shù)據(jù)當(dāng)運(yùn)行MEMMAP=0之后,觀察0000000~0x000003FE0程序3.15器重實(shí)驗(yàn)參考程功能: 器 MF~ 00000000x0003F#include"configh"#define((unsignedchar*) intmain(void){uint8uint8MEMMAP=for(i=0;i<64;i++){*addr=0x55;}for(i=0;i<64;i++){*addr=0xAA;}//中斷向量從靜態(tài)RAM 0x55x00~//0xAAMEMMAP=//中斷向量從BootBlock (Boot裝載程序模式}實(shí)驗(yàn)工程中的啟動(dòng)代碼.c文件,在ResetInit()函數(shù)的MEMMAP寄存器的設(shè)置硬件:PC 一EasyARM2200開(kāi)發(fā) 一P0.14EINT1功能,初始化為非向量中斷,并設(shè)置為電平觸發(fā)模式,然后等ADS1.2ARMExecutableImageforlpc22xxVICDef_CStartup.sInitStack子程序中,修改設(shè)置系統(tǒng)模式堆棧處的代碼為“MSRCPSR_c,#0x5f”,即使能IRQ中斷。將EasyARM2200開(kāi)發(fā)板上的JP9跳線短接,JP4跳線斷開(kāi),JP6Bank0-RAM、Bank1-Flash程序3.16外部中斷實(shí)驗(yàn)1參考程#include"configh" /*P0.7引腳控B1,低電平蜂鳴功能:外部中斷EINT1B1 irqIRQ_Eint1(void){uint32i= ( //控制B1{IO0SET=}{IO0CLR=}/*等待外部中斷信號(hào)恢復(fù)為高電平(若信號(hào)保持為低電平,中斷標(biāo)志會(huì)一直置位*/while((EXTINT&0x02)!=0){EXTINT 清除EINT1中斷標(biāo)} //}功能:初始化外部中斷intmain(void){PINSEL0=0x20000000; //設(shè)置管腳連接,P0.14設(shè)置為EINT1IO0DIR=BEEPCON; //設(shè)置B1控制口為輸出,其它I/O為輸
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024學(xué)年泰安市高三語(yǔ)文(上)12月考試卷附答案解析
- 《電工電子技術(shù) 》課件-第10章 邏輯代數(shù)基礎(chǔ)與組合邏輯電路
- 2025年白城貨運(yùn)從業(yè)資格證考試題庫(kù)
- 分析風(fēng)險(xiǎn)的報(bào)告范文
- 2025年吉林市貨運(yùn)從業(yè)資格證模擬考試題庫(kù)下載
- 2025年濱州貨運(yùn)資格證模擬考試題庫(kù)
- 2025年衡水貨物從業(yè)資格證考試題
- 《摩擦力受力分析》課件
- 《設(shè)計(jì)暴雨》課件
- 2025企業(yè)融資典當(dāng)借款合同
- 2024年04月江蘇信息職業(yè)技術(shù)學(xué)院招考聘用9人筆試筆試歷年典型考題及考點(diǎn)研判與答案解析
- GB/T 26527-2024有機(jī)硅消泡劑
- 雅思英語(yǔ)1智慧樹(shù)知到期末考試答案章節(jié)答案2024年嘉興大學(xué)
- 代碼走查檢查單
- 應(yīng)急醫(yī)療救援無(wú)人機(jī)系統(tǒng)
- 2022-2023學(xué)年廣東省汕頭市八年級(jí)(上)期末數(shù)學(xué)試卷【含答案】
- 智能光伏清潔機(jī)器人控制系統(tǒng)設(shè)計(jì)概述
- 失眠之中醫(yī)問(wèn)診單
- 橋式起重機(jī)定期檢查記錄表
- 微觀經(jīng)濟(jì)學(xué)(山東聯(lián)盟-山東財(cái)經(jīng)大學(xué))智慧樹(shù)知到期末考試答案2024年
- 數(shù)據(jù)可視化技術(shù)智慧樹(shù)知到期末考試答案2024年
評(píng)論
0/150
提交評(píng)論