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

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

3天內(nèi)不再提示

對lpc2000系列微控制器片內(nèi)flash編程的方法

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

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

lpc2000

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

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

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

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

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

非向量IRQ具有最低優(yōu)先級。

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

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

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

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

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

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

中斷服務程序執(zhí)行相應的中斷處理,清除中斷。建議用__irq關(guān)鍵字定義中斷服務程序;

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

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

IRQ中斷

IRQ中斷有向量IRQ和非向量IRQ中斷兩種類型,當IRQ中斷產(chǎn)生時:

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

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

lpc2000的工作原理

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

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

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

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

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

矢量中斷控制器

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

對lpc2000系列微控制器片內(nèi)flash編程的方法

1.LPC2000的Flash簡介

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

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

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

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

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

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

2.向Flash中寫數(shù)據(jù)

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

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

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

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

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

source[i]=0x41;

RamToFlash(0x00002000, (uint32)source, 512); // 寫數(shù)據(jù)到扇區(qū)1

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

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

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

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

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

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

3. 從Flash中讀數(shù)據(jù)

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

uint32 i;

uint8 * p;

p=(uint8 *)0x1C000;

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

{

Puthexbyte(*(p++));

}

4. Flash的加密

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

? 讀存儲器

? 寫RAM

? 運行

? 將RAM內(nèi)容復制到Flash

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

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

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

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

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

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

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

uint8 i;

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

source[i]=0x41;

RamToFlash(0x00002000, (uint32)source, 512); // 寫數(shù)據(jù)到扇區(qū)1

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

結(jié)語

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

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

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

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

    關(guān)注

    112

    文章

    16361

    瀏覽量

    178071
  • lpc2000
    +關(guān)注

    關(guān)注

    0

    文章

    16

    瀏覽量

    12740
收藏 人收藏

    評論

    相關(guān)推薦

    LPC2000系列CAN 控制器驅(qū)動程序的編寫與開發(fā)

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

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

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

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

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

    LPC2000 pdf datasheet

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

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

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

    LPC2000系列ARM硬件結(jié)構(gòu)

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

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

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

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

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

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

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

    LPC2000系列ARM參考價格

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

    LPC2000系列ARM參考價格

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

    飛得浦LPC2000系列微處理介紹

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

    LPC2000系列的ARM參考價格

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

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

     LPC2000 系列ARM微控制器是采用ARM7TDMI-S內(nèi)核的32位嵌入式微處理,內(nèi)嵌2路或4路CAN控制器和驗收濾波
    發(fā)表于 02-08 19:24 ?2283次閱讀
    詳解<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(嵌入式開發(fā)centos6.9安裝類型選擇哪個)-【資源描述】:LPC2000讀寫EEPROM
    發(fā)表于 08-04 12:53 ?5次下載
    <b class='flag-5'>LPC2000</b>讀寫EEPROM