那曲檬骨新材料有限公司

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

對lpc2000系列微控制器片內flash編程的方法

ss ? 作者:工程師譚軍 ? 2018-09-11 14:48 ? 次閱讀

本文主要是關于lpc2000的相關介紹,并著重對lpc2000的原理及其作用進行了詳盡的闡述。

lpc2000

LPC2000系列的向量中斷控制器(VIC)支持32個中斷請求輸入,也即是支持32個中斷源,見表5.1。這32個中斷按順序稱為VIC通道0,VIC通道1,…,VIC通道31。

每一個VIC通道都支持軟件中斷與硬件中斷,即每個中斷均可由軟件或硬件中斷產生,軟件中斷與對應通道上的硬件中斷是邏輯“或”的關系。軟件中斷可通過置位VICSoftInt寄存器相應位來產生,也可通過置位VICSoftIntClear寄存器相應位來清除。

LPC2000具有3類中斷:FIQ、向量IRQ和非向量IRQ。LPC2000系列可通過對VICIntSelect和VICVectCntlx(x=0,1,…,15)這兩類寄存器的設置,將以上的32個中斷源設置為這三類中斷的任何一種。其中,

快速中斷請求FIQ具有最高優先級。建議只分配一個中斷請求給FIQ以減少中塅處理程序的延遲。當然,VIC支持多個FIQ中斷。

向量IRQ具有中等優先級。該級別最多可分配32個請求中的16個。32個請求中的任何一個都可以分配到16個向量IRQslot中的任意一個。其中,slot0具有最高優先級,而slot15則為最低優先級。

非向量IRQ具有最低優先級。

如何初始化某個中斷源為三類中斷中的一類

通過VICIntSelect中斷選擇寄存器將32個中斷請求分配為FIQ或IRQ(包括向量IRQ與非向量IRQ);通過VICVectCntlx(x=0,1,…,15)來選擇32個中斷請求中的某個為向量IRQ并設定此中斷請求為IRQ slotx(x對應于VICVectCntlx中的x)。若某個中斷源被設定為IRQ,但卻未通過VICVectCntlx使能,則該中斷源將被默認為非向量IRQ。

中斷處理過程中斷處理過程如下所示:

初始化:設置中斷源為3種中斷源之一,設置中斷地址,使能中斷,然后正常運行用戶程序;

當有IRQ中斷產生時,VIC將會根據中斷源設置VICVectAddr寄存器為相應中斷服務程序的地址,切換處理器工作模式為IRQ模式,并跳轉到IRQ中斷入口0x00000018處;

異常中斷向量表中0x00000018處使用“LDR PC, [PC, #-0xFF0]”,使得程序跳轉到(0x00000018+8-0x00000FF0=0xFFFFF030)存儲器處保存的地址。0xFFFFF030是VICVectAddr寄存器地址。也即是說:通過該指令,程序跳轉到VICVectAddr寄存器所指向的中斷服務程序的地址;

中斷服務程序執行相應的中斷處理,清除中斷。建議用__irq關鍵字定義中斷服務程序;

中斷服務完成后,即可返回原中斷點。返回時要同時切換處理器工作模式。

注意:退出中斷前,一定要對VICVectAddr寄存器寫0,通知VIC中斷結束;建議用__irq關鍵字定義中斷服務程序,這樣的話,該函數將自動切換處理器工作模式,但該函數不能返回參數或者數值。

IRQ中斷

IRQ中斷有向量IRQ和非向量IRQ中斷兩種類型,當IRQ中斷產生時:

若是向量IRQ中斷,由于之前VIC已經將最高優先級請求的IRQ服務程序地址VICVectAddrx(x=0,1,…,15)裝入VICVectAddr,故程序跳入該中斷服務程序繼續執行。

若是非向量IRQ中斷,VIC提供默認服務程序地址VICDefVectAddr,IRQ中斷入口程序可通過讀取VIC的向量地址寄存器VICVectAddr來取得該地址,然后跳轉到相應服務程序繼續執行。該默認服務程序由所有非向量IRQ公用,默認服務程序可讀取IRQ狀態寄存器以確定哪個IRQ被激活。

lpc2000的工作原理

嵌入式處理器是嵌入式系統硬件最核心的部分,飛利浦推出十余款基于 ARM7 的高性能低功耗LPC2000系列微控制器,來滿足不斷增長的嵌入式市場需求。LPC2000系列微處理器工作頻率為60MHz,采用基于ARMTDMI內核的32位RISC。LPC2000的外設接口非常豐富,包括UART、SPI、I2CCANADC、 PWM、RTC等。

這一系列微控制器LPC2114/2124/2119/2129/2194、LPC2210/2212/2214、LPC2290 /2292/2294借助片上存儲器加載模塊實現了“零等待訪問”高速閃存功能,提高了指令執行的效率。在高性能低功耗的基礎上提供了增強的通信功能和片上代碼保護機制。由于內置了寬范圍的串行通信接口,它們也非常適用于通信網關、協議轉換器、嵌入式軟調制解調器等。6通道的PWM更能用于復雜的馬達控制應用。

LPC2000系列微控制器能夠實現零等待訪問的高速閃存,這主要歸功于片上的存儲器加速模塊。圖2為存儲器加速模塊的結構框圖。128位寬度的閃存陣列通過單獨的局部總線與處理器接口,每周期可為ARM內核提供四條32位指令。這使得MCU無需經過等待狀態就可直接從閃存上執行指令,從而消除了一般閃存讀取時的等待時間。為了解決指令序列的變化,指令和數據的不同處理帶來的等待時間,模塊內部實現了預取緩沖器、避免數據讀/寫打亂地址序列的數據旁路和跳轉跟蹤緩沖器三個功能塊的聯合工作,并用兩組128位寬度的存儲器來進行并行訪問,消除延時。

存儲器加速模塊的作用取決于系統時鐘的大小。LPC2000系列片上閃存的訪問時間為50nS,對于系統時鐘不高于20MHZ的應用,在1個周期內就可將閃存的內容讀出,此時沒必要使用存儲器加速模塊。時鐘頻率越高,當直接執行閃存中的代碼時,系統性能受影響越大,此時使能存儲器加速模塊,可以得到接近4倍速度的加速,真正實現零等待高速閃存。由于LPC2000可直接從閃存執行指令,無需引導期間將代碼傳送到SRAM,這不僅省掉了耗時又耗能的系統啟動步驟,還節省了昂貴的SRAM。

對片內閃存的編程可通過幾種方法來實現:通過內置的串行JTAG 接口,通過串口進行在系統編程(ISP),或通過在應用編程(IAP)。

矢量中斷控制器

LPC2000系列的矢量中斷控制器可以支持最多32個中斷請求,可根據需要將其編程分為3 類:FIQ、矢量IRQ 和非矢量IRQ。快速中斷請求(FIQ)要求具有最高優先級。矢量IRQ 具有中等優先級。該級別可分配32個請求中的16個。非矢量IRQ 的優先級最低。這種可編程分配機制意味著不同外設的中斷優先級可以動態分配并調整。對于任意矢量中斷,一旦發出請求,CPU可在一個周期內過讀取VIC并跳轉到相應的中斷服務程序的入口地址,這將中斷延時降低到最小。

對lpc2000系列微控制器片內flash編程的方法

1.LPC2000的Flash簡介

Flash存儲器系統包含128kB Flash器件的16個扇區和256kB Flash器件的17個扇區。Flash存儲器從地址0開始并向上增加。Flash boot裝載程序同時提供片內Flash存儲器的ISP和IAP編程接口。IAP、ISP和RealMonitor程序都位于boot扇區。boot扇區存在于所有的器件當中。ISP和IAP命令不允許對boot扇區執行寫/擦除/運行操作。在128kB Flash器件中只有120kB Flash可供用戶程序使用。器件共包含256kB的Flash,其中,248kB的Flash可供用戶程序使用。Boot Block一般位于片內Flash存儲器頂端。在128kB Flash中,它是第16個扇區(對應的扇區號是15),在256kB Flash中,它是第18個扇區(對應的扇區號是17)。Boot Block占有的Flash存儲器扇區不能用來存放用戶數據。

LPC2000系列提供在在應用中編程IAP,最終用戶代碼直接執行在應用編程 (IAP)對片內Flash存儲器進行擦除和編程操作。Falsh可以擦寫10000次,512字節行編程時間為1ms。單扇區或整片擦除時間為400ms。

Flash存儲器在寫或擦除操作過程中不可被訪問。

執行Flash寫/擦除操作的IAP命令使用片內RAM頂端的32個字節空間。如果應用程序中允許IAP編程,那么用戶程序不應使用該空間。

很多8位單片機中有頁的概念,頁為Flash編程的最小單位,每次可以擦除和編程一個頁的內容,由于頁中包含的字節較少,在這種情況下把Flash用作EEPROM靈活性會很好。而LPC2000系列沒有頁的概念,它只有扇區這個最小的Flash編程單位,即用戶即使是只修改一個字節,也需要首先擦除8K的Flash。

把Flash當作EEPROM的過程,其實就是對Flash進行讀-修改-寫的過程。

2.向Flash中寫數據

Flash必須遵循選擇扇區,擦除,選擇扇區,寫的過程,具體到程序的編寫,必須先后有下面的代碼:

SelSector(1,1); // 選擇扇區1

EraseSector(1,1); // 擦除扇區1

SelSector(1,1); // 選擇扇區1

for(i=0;i《512;i++)

source[i]=0x41;

RamToFlash(0x00002000, (uint32)source, 512); // 寫數據到扇區1

應用的時候需要注意下面幾點:

1)如果寫之前沒有選擇扇區,是不能正確寫入的。

2)如果寫之前沒有擦除,寫入是不正確的。

3)最少寫512字節,寫入的字節數應當為512 或 1024 或 4096 或 8192.

4)Flash在擦寫時不能訪問,這也是IAP是要關閉中斷的原因。關中斷可以用下面的語句來實現:__asm{MSR CPSR_c, #0xdf},與此對應,開中斷可以下面的語句:__asm{MSR CPSR_c, #0x5f}。

另外,經常有人問如何將一個常量的數值定義在Flash的特定地址上,我覺得這個功能不太實用,因為每次擦除的最小單位是8K,到不如直接寫數據到Flash的一個地址,這個地址是在一個空扇區中,讀和寫都以這個地址為基址。由于編譯后的代碼是向下靠緊的,所以你可以查看一下編譯后的代碼量,然后選擇靠上的地址做為用的變量區。如果實在想把數組定義在Flash的特定位置好像可以用分散加載。

3. 從Flash中讀數據

從Flash中讀數據比較簡單,可以定義一個指針變量,該指針變量指向特定的Flash地址,例如可以寫成下面的樣子:

uint32 i;

uint8 * p;

p=(uint8 *)0x1C000;

for(i=0;i《400;i++)

{

Puthexbyte(*(p++));

}

4. Flash的加密

代碼讀保護 這是Bootloader修訂版1.61的特性。代碼讀保護通過向Flash地址單元0x1FC(用戶Flash扇區0)寫入0x87654321(十進制表示為2271560481)來使能。地址單元0x1FC用來允許為fiq異常處理程序保留部分空間。當JTAG調試端口的代碼讀保護被使能時,外部存儲器引導和以下ISP命令將被禁能:

? 讀存儲器

? 寫RAM

? 運行

? 將RAM內容復制到Flash

上述ISP命令終止時返回CODE_READ_PROTECTION_ENABLED。代碼讀保護使能時,ISP擦除命令只允許擦除用戶扇區的內容。這種限制是代碼讀保護不使能時所沒有的。IAP命令不受代碼讀保護的影響。

采用工程模板的RelInFlash會自動加密。

5. 采用工程模板時需要注意的地方

采用ZLG的工程模板時需要注意下面幾點:

1)修改堆棧,在STARTUP.S文件中的初始化堆棧為 StackUsr-20*4

2)設置編譯參數-apcs/intervork,需要注意是修改 Language Settings/ARM C Compiler/ATPS下面的。我一開始的時候不小心選擇的語言設置是ARM Assembler ,結果運行程序后一寫Flash就錯,大家要選準語言設置。

3)變量定義,由于一次至少寫512個字節,所以跟讀寫操作的變量最好定義為uint32類型的,我犯的一個錯誤是將變量定義為uint8類型的,如下面:

uint8 i;

for(i=0;i《512;i++)

source[i]=0x41;

RamToFlash(0x00002000, (uint32)source, 512); // 寫數據到扇區1

結果可想而知,一直在for循環中運行而跳不出來,這到給我們一個IAP不好用的假象

結語

關于lpc2000的相關介紹就到這了,如有不足之處歡迎指正。

相關閱讀推薦:LPC2000系列CAN驗收濾波的編程及應用

相關閱讀推薦:LPC2000系列的CAN總線驗收濾波器應用

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 控制器
    +關注

    關注

    112

    文章

    16445

    瀏覽量

    179444
  • lpc2000
    +關注

    關注

    0

    文章

    16

    瀏覽量

    12750
收藏 人收藏

    評論

    相關推薦

    LPC2000系列CAN 控制器驅動程序的編寫與開發

    /elecfans.com-LPC2000系列ARM-CAN控制器驅動程序的使用指南.rar">LPC2000系列ARM-C
    發表于 10-31 17:03

    周立功公司編寫的LPC2000系列CAN控制器驅動程序代碼誰有?

    `全稱叫《LPC2000系列ARM7微處理CAN控制器驅動程序的編寫與開發》如下圖所示主要是要想要第二章和第三章的程序,請問哪位大佬有,謝謝!`
    發表于 11-13 10:28

    求分享Philips LPC2000 Flash實用程序的副本

    大家好,我正在尋找 Philips LPC2000 Flash 實用程序的副本,以便我可以對 LPC2142 進行編程。我修理放大器,并且有一堆帶有損壞的
    發表于 04-23 12:56

    LPC2000 pdf datasheet

    Using the Philips LPC2000 Flash utility with the Keil MCB2100and IAR LPC210x Kickstart evaluation
    發表于 08-24 16:00 ?33次下載

    LPC2000系列的CAN總線驗收濾波應用

    LPC2000系列的CAN總線驗收濾波應用 CAN(Controller Area NetWork)總線,即控制器局域網總線,是由德國Bosch公司于1982年開發和推出的最早用于
    發表于 02-10 14:45 ?25次下載

    LPC2000系列ARM硬件結構

    LPC2000系列ARM硬件結構 目錄 1.簡介2.引腳配置3.引腳連接模塊4. GPIO5.存儲尋址6.系統控制模塊7.存儲加速模
    發表于 02-21 09:28 ?102次下載

    LPC2000系列單片機學習指導書(英文)

    LPC2000系列單片機學習指導書(英文)
    發表于 03-24 15:37 ?41次下載

    LPC2000系列的CAN總線驗收濾波應用

    Philips公司的LPC2000系列32位ARM微控制器為內嵌的CAN控制器提供了全局的標識符查詢功能,能實現復雜的報文ID過濾,而且可以大大減輕
    發表于 03-29 15:15 ?1398次閱讀
    <b class='flag-5'>LPC2000</b><b class='flag-5'>系列</b>的CAN總線驗收濾波<b class='flag-5'>器</b>應用

    LPC2000系列CAN驗收濾波的編程及應用

    LPC2000系列CAN驗收濾波的編程及應用 隨著信息技術的飛速發展,32位ARM微控制器以其低功耗、高性能以及小體積等特性,得到了廣泛的應用。在汽車、消
    發表于 10-17 10:19 ?1344次閱讀
    <b class='flag-5'>LPC2000</b><b class='flag-5'>系列</b>CAN驗收濾波的<b class='flag-5'>編程</b>及應用

    LPC2000系列ARM參考價格

    LPC2000系列微處理工作頻率為60MHz,采用基于ARMTDMI內核的32位RISC。LPC2000的外設接口非常豐富,包括UART、SPI、I2C、CAN、ADC、 PWM、R
    發表于 11-02 17:42 ?46次下載

    LPC2000系列ARM參考價格

    LPC2000系列ARM參考價格,對于采購的朋友有巨大的作用
    發表于 01-15 17:43 ?18次下載

    飛得浦LPC2000系列微處理介紹

    飛得浦LPC2000系列微處理介紹,有需要的下來看看
    發表于 02-22 16:54 ?11次下載

    LPC2000系列的ARM參考價格

    LPC2000系列的ARM參考價格
    發表于 10-15 10:31 ?8次下載
    <b class='flag-5'>LPC2000</b><b class='flag-5'>系列</b>的ARM參考價格

    詳解LPC2000系列ARM微控制器的CAN驗收濾波應用

     LPC2000 系列ARM微控制器是采用ARM7TDMI-S內核的32位嵌入式微處理,內嵌2路或4路CAN控制器和驗收濾波
    發表于 02-08 19:24 ?2337次閱讀
    詳解<b class='flag-5'>LPC2000</b><b class='flag-5'>系列</b>ARM<b class='flag-5'>微控制器</b>的CAN驗收濾波<b class='flag-5'>器</b>應用

    LPC2000讀寫EEPROM

    LPC2000讀寫EEPROM(嵌入式開發centos6.9安裝類型選擇哪個)-【資源描述】:LPC2000讀寫EEPROM
    發表于 08-04 12:53 ?5次下載
    <b class='flag-5'>LPC2000</b>讀寫EEPROM
    电玩城百家乐官网技巧| 澳门百家乐官网赌场| 百家乐官网单跳投注法| 蒙特卡罗网| 大发888 打法888游戏| 威尼斯人娱乐城赌博| 百家乐大赌城| 哪个百家乐网站信誉好| 澳门百家乐怎赌才能赚钱| 金宝博百家乐游戏| 竞咪百家乐官网的玩法技巧和规则 | 大发888游戏平台103| 大发888 真钱娱乐场| 威尼斯人娱乐下载平台| 微信百家乐群二维码| 手机百家乐能兑换现金棋牌游戏| 百家乐如何捕捉长龙| 尊龙百家乐娱乐场| 百家乐平注胜进与负追| 真人百家乐轮盘| 百家乐棋牌外挂| 百家乐缆法排行榜| 澳门百家乐赢钱公式不倒翁| 百家乐最好的平台是哪个| 摩纳哥百家乐娱乐城| 百家乐投注方向| 百家乐投注最好方法| 百家乐9点| 百家乐博娱乐平台| 百家乐赢多少该止赢| 盐城百家乐的玩法技巧和规则| 仕達屋百家乐的玩法技巧和规则| 悍马百家乐的玩法技巧和规则 | 百家乐singapore| 百家乐赌场详解| 百家乐大西洋| 御匾会百家乐娱乐城| 威尼斯人娱乐场 老品牌值得您信赖| 威尼斯人娱乐场开户注册 | 百家乐官网永利娱乐网| 怎样打百家乐官网的玩法技巧和规则 |