at91rm9200啟動過程教程 系統上電,檢測BMS,選擇系統的啟動方式,如果BMS為高電平,則系統從片內ROM啟動。AT91RM9200的ROM上電后被映射到了0x0和0x100000處,在這兩個地址處都可以訪問到ROM。由于9200的ROM中固化了一個BOOTLOAER程序。所以PC從0X0處開始執行這個BOOTLOAER(準確的說應該是一級BOOTLOADER)。這個BOOTLOER依次完成以下步驟: 1、PLL SETUP,設置PLLB產生48M時鐘頻率提供給USB DEVICE。同時DEBUG USART也被初始化為48M的時鐘頻率; 2、相應模式下的堆棧設置; 3、檢測主時鐘源(Main oscillator); 4、中斷控制器(AIC)的設置; 5、C 變量的初始化; 6、跳到主函數。 完成以上步驟后,我們可以認為BOOT過程結束,接下來的就是LOADER的過程,或者也可以認為是裝載二級BOOTLOER。AT91RM9200按照DATAFLASH、EEPROM、連接在外部總線上的8位并行FLASH的順序依次來找合法的BOOT程序。所謂合法的指的是在這些存儲設備的開始地址處連續的存放的32個字節,也就是8條指令必須是跳轉指令或者裝載PC的指令,其實這樣規定就是把這8條指令當作是異常向量表來處理。必須注意的是第6條指令要包含將要裝載的映像的大小。關于如何計算和寫這條指令可以參考用戶手冊。一旦合法的映像找到之后,則BOOT程序會把找到的映像搬到SRAM中去,所以映像的大小是非常有限的,不能超過16K-3K的大小。當BOOT程序完成了把合法的映像搬到SRAM的任務以后,接下來就進行存儲器的REMAP,經過REMAP之后,SRAM從映設前的0X200000地址處被映設到了0X0地址并且程序從0X0處開始執行。而ROM這時只能在0X100000這個地址處看到了。至此9200就算完成了一種形式的啟動過程。如果BOOT程序在以上所列的幾種存儲設備中找到合法的映像,則自動初始化DEBUG USART口和USB DEVICE口以準備從外部載入映像。對DEBUG口的初始化包括設置參數115200 8 N 1以及運行XMODEM協議。對USB DEVICE進行初始化以及運行DFU協議。現在用戶可以從外部(假定為PC平臺)載入你的映像了。在PC平臺下,以WIN2000為例,你可以用超級終端來完成這個功能,但是還是要注意你的映像的大小不能超過13K。一旦正確從外部裝載了映像,接下來的過程就是和前面一樣重映設然后執行映像了。我們上面講了BMS為高電平,AT91RM9200選擇從片內的ROM啟動的一個過程。如果BMS為低電平,則AT91RM9200會從片外的FLASH啟動,這時片外的FLASH的起始地址就是0X0了,接下來的過程和片內啟動的過程是一樣的,只不過這時就需要自己寫啟動代碼了,至于怎么寫,大致的內容和ROM的BOOT差不多,不同的硬件設計可能有不一樣的地方,但基本的都是一樣的。由于片外FLASH可以設計的大,所以這里編寫的BOOTLOADER可以一步到位,也就是說不用像片內啟動可能需要BOOT好幾級了,目前AT91RM9200上使用較多的bootloer是u-boot,這是一個開放源代碼的軟件,用戶可以自由下載并根據自己的應用配置。總的說來,筆者以為AT91RM9200的啟動過程比較簡單,ATMEL的服務也不錯,不但提供了片內啟動的功能,還提供了UBOOT可供下載。筆者寫了一個BOOTLODER從片外的FLASHA啟動,效果還可以。 uboot結構與使用uboot是一個龐大的公開源碼的軟件。他支持一些系列的arm體系,包含常見的外設的驅動,是一個功能強大的板極支持包。其代碼可以 http://sourceforge.net/projects/u-boot下載 在9200上,為了啟動uboot,還有兩個boot軟件包,分別是loader和boot。分別完成從sram和flash中的一級boot。其源碼可以從atmel的官方網站下載。 我們知道,當9200系統上電后,如果bms為高電平,則系統從片內rom啟動,這時rom中固化的boot程序初始化了debug口并向其發送'c',這時我們打開超級終端會看到ccccc...。這說明系統已經啟動,同時xmodem協議已經啟動,用戶可以通過超級終端下載用戶的bootloader。作為第一步,我們下載loader.bin.loader.bin將被下載到片內的sram中。這個loder完成的功能主要是初始化時鐘,sdram和xmodem協議,為下載和啟動uboot做準備。當下載了loader.bin后,超級終端會繼續打印:ccccc....。這時我們就可以下在uboot了。uboot將被下載到sdram中的一個地址后并把pc指針調到此處開始執行uboot。接著我們就可以在終端上看到uboot的shell啟動了,提示符uboot>,用戶可以uboot>help 看到命令列表和大概的功能。uboot的命令包含了對內存、flash、網絡、系統啟動等一些命令。 如果系統上電時bms為低電平,則系統從片外的flash啟動。為了從片外的flash啟動uboot,我們必須把boot.bin放到0x0地址出,使得從flash啟動后首先執行boot.bin,而要少些boot.bin,就要先完成上面我們講的那些步驟,首先開始從片內rom啟動uboot。然后再利用uboot的功能完成把boot.bin和uboot.gz燒寫到flash中的目的,假如我們已經啟動了uboot,可以這樣操作: uboot>protect off all uboot>erase all uboot>loadb 20000000 uboot>cp.b 20000000 10000000 5fff uboot>loadb 21000000 uboot>cp.b 210000000 10010000 ffff 然后系統復位,就可以看到系統先啟動boot,然后解壓縮uboot.gz,然后啟動uboot。注意,這里uboot必須壓縮成.gz文件,否則會出錯。 怎么編譯這三個源碼包呢,首先要建立一個arm的交叉編譯環境,關于如何建立,此處不予說明。建立好了以后,分別解壓源碼包,然后修改Makefile中的編譯器項目,正確填寫你的編譯器的所在路徑。 對loader和boot,直接make。對uboot,第一步:make_at91rm9200dk,第二步:make。這樣就會在當前目錄下分別生成*.bin文件,對于uboot.bin,我們還要壓縮成.gz文件。 也許有的人對loader和boot搞不清楚為什么要兩個,有什么區別嗎?首先有區別,boot主要完成從flash中啟動uboot的功能,他要對uboot的壓縮文件進行解壓,除此之外,他和loader并無大的區別,你可以把boot理解為在loader的基礎上加入了解壓縮.gz的功能而已。所以這兩個并無多大的本質不同,只是他們的使命不同而已。 特別說名的是這三個軟件包都是開放源碼的,所以用戶可以根據自己的系統的情況修改和配置以及裁減,打造屬于自己系統的bootloder。
上傳時間: 2013-10-27
上傳用戶:wsf950131
數據類型和運算符、表達式是是C51語言程序設計的最基礎知識,C51語言把數據分成了多種數據類型,并提供了豐富的運算對數據進行處理。本章對C51語言的基本數據類型、常量變量、運算符及表達式等進行詳細介紹。1.掌握數據類型的概念,了解C51語言能夠處理的數據類型。2.掌握常量的概念,掌握各種類型常量的特點及表示形式。3.掌握變量的概念,了解int、float、char型變量的特點,掌握這三種類型變量的定義、賦值和使用方法。理解C51中變量的存儲和編譯模式的關系,掌握單片機片內資源的訪問方法。4.了解C51語言的基本運算符及其特點,掌握運算符的優先級和結合性的概念。5.了解算術運算表達式、關系表達式及邏輯表達式的特點,熟練進行表達式計算,能熟練進行實際問題的表達式描述。6.熟悉自增、自減運算的特點,掌握賦值運算,了解逗號運算符和逗號表達式。7.掌握數據類型轉換的概念,能進行基本的數據類型轉換。
標簽: C51
上傳時間: 2013-12-26
上傳用戶:dingdingcandy
單片機接口技術(C51版)課件:單片機接口技術(C51版)課件精品課程,該書由張道德根據多年單片機教學、科研經驗編著,中國水利水電出版社2007年3月出版。 1.掌握數據類型的概念,了解C51語言能夠處理的數據類型。2.掌握常量的概念,掌握各種類型常量的特點及表示形式。3.掌握變量的概念,了解int、float、char型變量的特點,掌握這三種類型變量的定義、賦值和使用方法。理解C51中變量的存儲和編譯模式的關系,掌握單片機片內資源的訪問方法。4.了解C51語言的基本運算符及其特點,掌握運算符的優先級和結合性的概念。5.了解算術運算表達式、關系表達式及邏輯表達式的特點,熟練進行表達式計算,能熟練進行實際問題的表達式描述。6.熟悉自增、自減運算的特點,掌握賦值運算,了解逗號運算符和逗號表達式。7.掌握數據類型轉換的概念,能進行基本的數據類型轉換。
上傳時間: 2013-10-10
上傳用戶:jcljkh
6.1 存儲器概述1、存儲器定義 在微機系統中凡能存儲程序和數據的部件統稱為存儲器。2、存儲器分類 微機系統中的存儲器分為內存和外存兩類。3、內存儲器的組成 微機系統中的存儲器由半導體存儲器芯片組成。 單片機內部有存儲器,當單片機內部的存儲器不夠用時,可以外擴存儲器。外擴的存儲器就是由半導體存儲器芯片組成的。 當用半導體存儲器芯片組成內存時必須滿足個要求:①每個存儲單元一定要有8個位。②存儲單元的個數滿足系統要求。注意:內存的容量是指它所含存儲單元的個數(每個存儲單元一定要有8個位,可以存儲8位二進制信息)。6.2 半導體存儲器由于集成工藝水平的限制,一個半導體存儲器芯片上所集成的單元個數和每個單元的位數有限,用它構成內存時必須滿足:內存容量和一個存儲單元有8個位的要求,因此內存常常由多個半導體存儲器芯片構成。 半導體存儲器芯片的存儲容量是指其上所含的基本存儲電路的個數,用單元個數×位數表示。掌握:① 已知內存容量和半導體存儲器芯片的容量,求用半導體存儲器芯片構成內存時需要的芯片個數。② 內存的容量=末地址—首地址+1 半導體存儲器芯片分成ROM和RAM兩類。6.2.1 ROM芯片6.2.2 RAM芯片6.3 MCS-51單片機存儲器擴展 在微機系統中存儲器是必不可少。MCS51系列單片機內部的存儲器不夠用時需要外擴半導體存儲器芯片,外擴的半導體存儲器芯片與MCS51系列單片機通過三總線交換信息。二者連接時必須考慮如下問題:1.二者地址線、數據線、控制線的連接。2.工作速度的匹配。CPU在取指令和存儲器讀或寫操作時,是有固定時序的,用戶要根據這些來確定對存儲器存取速度的要求,或在存儲器已經確定的情況下,考慮是否需要Tw周期,以及如何實現。3.片選信號的產生。目前生產的存儲器芯片,單片的容量仍然是有限的,通常總是要由許多片才能組成一個存儲器,這里就有一個如何產生片選信號的問題。4.CPU的驅動能力 。在設計CPU芯片時,一般考慮其輸出線的直流負載能力,為帶一個TTL負載。現在的存儲器一般都為MOS電路,直流負載很小,主要的負載是電容負載,故在小型系統中,CPU是可以直接與存儲器相連的,而較大的系統中,若CPU的負載能力不能滿足要求,可以(就要考慮CPU能否帶得動,需要時就要加上緩沖器,)由緩沖器的輸出再帶負載。6.3.1 ROM芯片的擴展6.3.2 RAM芯片的擴展
標簽: 存儲器接口
上傳時間: 2013-11-22
上傳用戶:moerwang
自制89C51單片機實驗電路板 學習單片機離不開實驗,以往單片機的實驗往往依賴于仿真機和單片機學習系統,價格昂貴,初學者很難配備。近年來,隨著FLASH型單片機的廣泛應用,采用軟件模擬加寫片驗證成為一種經濟實用的實驗方法,以AT89C51單片機為例,其價格不足¥10RMB,而擦、寫次數可以有1000次,一塊芯片即可做上千次的實驗。目前,流行的單片機開發軟件Keil可以免費獲得用于學習的EVAL版;編程器價格并不昂貴,專門用于寫89C51類芯片的編程器價格更低廉(不足百元),而且編程器也是以后開發單片機所必備的工具;相比之下,用于實驗的電路板制作比較麻煩,用萬用板搭接,只能做些很簡單的電路,稍復雜的電路一般要用到雙面板,而業余條件下是很難自制雙面板的,而且實驗電路板主要是用于學習,學完了,也就沒有什么使用價值了,所以很多人希望能夠廉價地獲得。作者在多年單片機教學(包括從事網絡教學)的基礎上,開發了一塊有較多功能但使用單面板的單片機實驗板,適于業余愛好者自制。這塊實驗板采用89C51為主芯片,板上安裝了5位數碼管,8個發光二極管,四個按鈕開關,一個簡單的音響電路,一個用于計數實驗的振蕩器,At24CXXX類芯片插座,X5045芯片插座,RS232串行接口等。使用這塊實驗板可以進行流水燈、人機界面程序設計、音響、中斷、計數器等基本編程練習,還可以學習I2C接口芯片使用、SPI接口芯片使用、與PC機進行串行通訊等目前較為流行的技術。圖1是該實驗板的電路原理圖,從圖中可以看出,該實驗板由若干塊集成電路和一些阻容元件等組成,下面我們就分別介紹。1、發光二極管接口主芯片(U1)的P1端口接了8個發光二極管,這些發光二極管的負極接到P1端口各引腳,而正極則通過一個排電阻(標號為JP4,阻值為470毆)接到正電源端,這樣,這些發光二極管亮的條件就U1的P1口相引的引腳為低電平,即如果P1口某引腳輸出為0,相應的燈亮,如果輸出為1,相應的燈滅。例:MOV P1,#0FH該行程序將使發光二極管L1-L4熄滅,而L5-L8點亮。2、數碼管接口U1的P0口和P2口的部份引腳構成了5位LED數碼管驅動電路,這里LED數碼管采用了共陽型,共陽型數碼管的筆段(即對應abcdefgh)引腳是二極管的負極,所有二極管的正極連在一起,構成公共端,即片選端,對于這種數碼管的驅動,要求在片選端提供電流,為此,使用了PNP型三極管作為片選端的驅動,共使用5只三極管,所有三極管的發射極連在一起,接到正電源端,它們的基極則分別連到P2.0⋯P2.4,這樣,當P2.0⋯P2.4中某引腳輸出是高電平時,三極管不導通,不能給相應位的數碼管供電,該位數碼管的所有筆段都不亮,反之,如果某引腳是低電平時,三極管導通,可以給相應的數碼管供電,該位數碼管是否點亮,點亮哪些筆段,取決于這些筆段引腳是高或低電平。從圖圖1 共陽型數LED顯示器.....
上傳時間: 2013-11-14
上傳用戶:dingdingcandy
LPC1100系列Cortex-M0的最小系統框圖如圖2.1所示。其中時鐘系統是可選部分,這是因為LPC1100系列Cortex-M0內部自帶12MHz的RC振蕩器,并且CPU在上電或者復位的時候默認選擇使用內部RC振蕩器為主時鐘源,所以LPC1100系列Cortex-M0可在無外部晶振的情況下運行,但由于內部RC振蕩器的精度不高(精度為1%),達不到某些片內外設的要求;因此在使用這些片內外設時將不得不使用精度更高的外部晶振。調試接口也不是必需的,但是它在工程開發階段發揮的作用極大,因此至少在樣機調試階段需設計這部分電路。
上傳時間: 2013-11-09
上傳用戶:cicizoe
ARM通訊 H-JTAG 是一款簡單易用的的調試代理軟件,功能和流行的MULTI-ICE 類似。H-JTAG 包括兩個工具軟件:H-JTAG SERVER 和H-FLASHER。其中,H-JTAG SERVER 實現調試代理的功能,而H-FLASHER則實現了FLASH 燒寫的功能。H-JTAG 的基本結構如下圖1-1所示。 H-JTAG支持所有基于ARM7 和ARM9的芯片的調試,并且支持大多數主流的ARM調試軟件,如ADS、RVDS、IAR 和KEIL。通過靈活的接口配置,H-JTAG 可以支持WIGGLER,SDT-JTAG 和用戶自定義的各種JTAG 調試小板。同時,附帶的H-FLASHER 燒寫軟件還支持常用片內片外FLASH 的燒寫。使用H-JTAG,用戶能夠方便的搭建一個簡單易用的ARM 調試開發平臺。H-JTAG 的功能和特定總結如下: 1. 支持 RDI 1.5.0 以及 1.5.1; 2. 支持所有ARM7 以及 ARM9 芯片; 3. 支持 THUMB 以及ARM 指令; 4. 支持 LITTLE-ENDIAN 以及 BIG-ENDIAN; 5. 支持 SEMIHOSTING; 6. 支持 WIGGLER, SDT-JTAG和用戶自定義JTAG調試板; 7. 支持 WINDOWS 9.X/NT/2000/XP; 8.支持常用FLASH 芯片的編程燒寫; 9. 支持LPC2000 和AT91SAM 片內FLASH 的自動下載;
上傳時間: 2014-12-01
上傳用戶:Miyuki
多層板是由芯板和半固化片互相層疊壓合而成的。而半固化片構成所謂的浸潤層,起到粘合芯板的作用,雖然也有一定的初始厚度,但是在壓制過程中其厚度會發生一些變化。
上傳時間: 2013-10-31
上傳用戶:xywhw1
介紹了超聲波測距系統原理,針對超聲波測距系統中常用的40 kHz超聲波信號,提出了超聲波接收電路設計原則,采用了集成運放OP27構成的同相放大器、儀表放大器、CX20106A紅外接收芯片3種方案來檢測超聲波信號,設計了3種方法對應的接收電路,分析了各自的特點。
上傳時間: 2013-10-15
上傳用戶:時代將軍
ARM通訊 H-JTAG 是一款簡單易用的的調試代理軟件,功能和流行的MULTI-ICE 類似。H-JTAG 包括兩個工具軟件:H-JTAG SERVER 和H-FLASHER。其中,H-JTAG SERVER 實現調試代理的功能,而H-FLASHER則實現了FLASH 燒寫的功能。H-JTAG 的基本結構如下圖1-1所示。 H-JTAG支持所有基于ARM7 和ARM9的芯片的調試,并且支持大多數主流的ARM調試軟件,如ADS、RVDS、IAR 和KEIL。通過靈活的接口配置,H-JTAG 可以支持WIGGLER,SDT-JTAG 和用戶自定義的各種JTAG 調試小板。同時,附帶的H-FLASHER 燒寫軟件還支持常用片內片外FLASH 的燒寫。使用H-JTAG,用戶能夠方便的搭建一個簡單易用的ARM 調試開發平臺。H-JTAG 的功能和特定總結如下: 1. 支持 RDI 1.5.0 以及 1.5.1; 2. 支持所有ARM7 以及 ARM9 芯片; 3. 支持 THUMB 以及ARM 指令; 4. 支持 LITTLE-ENDIAN 以及 BIG-ENDIAN; 5. 支持 SEMIHOSTING; 6. 支持 WIGGLER, SDT-JTAG和用戶自定義JTAG調試板; 7. 支持 WINDOWS 9.X/NT/2000/XP; 8.支持常用FLASH 芯片的編程燒寫; 9. 支持LPC2000 和AT91SAM 片內FLASH 的自動下載;
上傳時間: 2013-11-19
上傳用戶:水中浮云