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

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

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

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

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

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

lpc2000

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

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

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

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

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

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

如何初始化某個(gè)中斷源為三類中斷中的一類

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

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

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

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

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

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

中斷服務(wù)完成后,即可返回原中斷點(diǎn)。返回時(shí)要同時(shí)切換處理器工作模式。

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

IRQ中斷

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

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

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

lpc2000的工作原理

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

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

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

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

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

矢量中斷控制器

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

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

1.LPC2000的Flash簡介

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

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

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

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

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

把Flash當(dāng)作EEPROM的過程,其實(shí)就是對Flash進(jìn)行讀-修改-寫的過程。

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

應(yīng)用的時(shí)候需要注意下面幾點(diǎn):

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

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

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

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

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

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

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

uint32 i;

uint8 * p;

p=(uint8 *)0x1C000;

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

{

Puthexbyte(*(p++));

}

4. Flash的加密

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

? 讀存儲器

? 寫RAM

? 運(yùn)行

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

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

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

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

采用ZLG的工程模板時(shí)需要注意下面幾點(diǎn):

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

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

3)變量定義,由于一次至少寫512個(gè)字節(jié),所以跟讀寫操作的變量最好定義為uint32類型的,我犯的一個(gè)錯(cuò)誤是將變量定義為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)中運(yùn)行而跳不出來,這到給我們一個(gè)IAP不好用的假象

結(jié)語

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

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

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

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

    關(guān)注

    112

    文章

    15879

    瀏覽量

    175344
  • lpc2000
    +關(guān)注

    關(guān)注

    0

    文章

    16

    瀏覽量

    12722
收藏 人收藏

    評論

    相關(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實(shí)用程序的副本

    大家好,我正在尋找 Philips LPC2000 Flash 實(shí)用程序的副本,以便我可以對 LPC2142 進(jìn)行編程。我修理放大器,并且有一堆帶有損壞的
    發(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總線驗(yàn)收濾波應(yīng)用

    LPC2000系列的CAN總線驗(yàn)收濾波應(yīng)用 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系列單片機(jī)學(xué)習(xí)指導(dǎo)書(英文)

    LPC2000系列單片機(jī)學(xué)習(xí)指導(dǎo)書(英文)
    發(fā)表于 03-24 15:37 ?41次下載

    LPC2000系列的CAN總線驗(yàn)收濾波應(yīng)用

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

    LPC2000系列CAN驗(yàn)收濾波的編程及應(yīng)用

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

    LPC2000系列ARM參考價(jià)格

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

    LPC2000系列ARM參考價(jià)格

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

    飛得浦LPC2000系列微處理介紹

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

    LPC2000系列的ARM參考價(jià)格

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

    詳解LPC2000系列ARM微控制器的CAN驗(yàn)收濾波應(yīng)用

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

    LPC2000讀寫EEPROM

    LPC2000讀寫EEPROM(嵌入式開發(fā)centos6.9安裝類型選擇哪個(gè))-【資源描述】:LPC2000讀寫EEPROM
    發(fā)表于 08-04 12:53 ?5次下載
    <b class='flag-5'>LPC2000</b>讀寫EEPROM