最新免费av在线观看,亚洲综合一区成人在线,中文字幕精品无码一区二区三区,中文人妻av高清一区二区,中文字幕乱偷无码av先锋

登錄 免費注冊 首頁 | 行業(yè)黑名單 | 幫助
維庫電子市場網(wǎng)
技術(shù)交流 | 電路欣賞 | 工控天地 | 數(shù)字廣電 | 通信技術(shù) | 電源技術(shù) | 測控之家 | EMC技術(shù) | ARM技術(shù) | EDA技術(shù) | PCB技術(shù) | 嵌入式系統(tǒng)
驅(qū)動編程 | 集成電路 | 器件替換 | 模擬技術(shù) | 新手園地 | 單 片 機 | DSP技術(shù) | MCU技術(shù) | IC 設(shè)計 | IC 產(chǎn)業(yè) | CAN-bus/DeviceNe

關(guān)于arm(LPC2106)的幾點疑惑

作者:jack_mcu 欄目:ARM技術(shù)
關(guān)于arm(LPC2106)的幾點疑惑
    今天板子回來了,而軟件也在準(zhǔn)備中,看了幾天的arm的資料,買了本周立功先生的《arm嵌入式基礎(chǔ)教程》,對arm也有了一定的了解。
    我用的是LPC2106,在具體編寫軟件的過程中,還是有一點疑惑:
疑惑一:在打開和關(guān)閉中斷部分,我看到startup.s文件定義了i_bit和
f_bit兩個變量,但是就是沒有看到有地方對這兩個變量賦值,看了下uvision的例程,也沒有看到有相關(guān)的賦值操作,想知道是不是arm啟動之后,默認(rèn)中斷是打開的,如果要進(jìn)行中斷的打開和關(guān)閉操作,該怎么進(jìn)行,我生成的startup.s文件如下:(在周先生的教材上,我找到的答案是對CPSR進(jìn)行操作,但是具體到我這個具體的項目,該怎么操作呢?)

Mode_USR        EQU     0x10
Mode_FIQ        EQU     0x11
Mode_IRQ        EQU     0x12
Mode_SVC        EQU     0x13
Mode_ABT        EQU     0x17
Mode_UND        EQU     0x1B
Mode_SYS        EQU     0x1F

I_Bit           EQU     0x80            ; when I bit is set, IRQ is disabled
F_Bit           EQU     0x40            ; when F bit is set, FIQ is disabled


;// <h> Stack Configuration (Stack Sizes in Bytes)
;//   <o0> Undefined Mode      <0x0-0xFFFFFFFF:8>
;//   <o1> Supervisor Mode     <0x0-0xFFFFFFFF:8>
;//   <o2> Abort Mode          <0x0-0xFFFFFFFF:8>
;//   <o3> FAST Interrupt Mode <0x0-0xFFFFFFFF:8>
;//   <o4> Interrupt Mode      <0x0-0xFFFFFFFF:8>
;//   <o5> User/System Mode    <0x0-0xFFFFFFFF:8>
;// </h>

UND_Stack_Size  EQU     0x00000010
SVC_Stack_Size  EQU     0x00000010
ABT_Stack_Size  EQU     0x00000010
FIQ_Stack_Size  EQU     0x00000200
IRQ_Stack_Size  EQU     0x00000200
USR_Stack_Size  EQU     0x00000400

Stack_Size      EQU     (UND_Stack_Size + SVC_Stack_Size + ABT_Stack_Size + \
                         FIQ_Stack_Size + IRQ_Stack_Size + USR_Stack_Size)

                AREA    STACK, NOINIT, READWRITE, ALIGN=3
Stack_Mem       SPACE   Stack_Size

Stack_Top       EQU     Stack_Mem + Stack_Size


;// <h> Heap Configuration
;//   <o>  Heap Size (in Bytes) <0x0-0xFFFFFFFF>
;// </h>

Heap_Size       EQU     0x00000200

                AREA    HEAP, NOINIT, READWRITE, ALIGN=3
Heap_Mem        SPACE   Heap_Size


; VPBDIV definitions
VPBDIV          EQU     0xE01FC100      ; VPBDIV Address

;// <e> VPBDIV Setup
;// <i> Peripheral Bus Clock Rate
;//   <o1.0..1>   VPBDIV: VPB Clock
;//               <0=> VPB Clock = CPU Clock / 4
;//               <1=> VPB Clock = CPU Clock
;//               <2=> VPB Clock = CPU Clock / 2
;//   <o1.4..5>   XCLKDIV: XCLK Pin
;//               <0=> XCLK Pin = CPU Clock / 4
;//               <1=> XCLK Pin = CPU Clock
;//               <2=> XCLK Pin = CPU Clock / 2
;// </e>
VPBDIV_SETUP    EQU     0
VPBDIV_Val      EQU     0x00000000


; Phase LOCKed Loop (PLL) definitions
PLL_BASE        EQU     0xE01FC080      ; PLL Base Address
PLLCON_OFS      EQU     0x00            ; PLL CONTROL Offset
PLLCFG_OFS      EQU     0x04            ; PLL Configuration Offset
PLLSTAT_OFS     EQU     0x08            ; PLL Status Offset
PLLFEED_OFS     EQU     0x0C            ; PLL Feed Offset
PLLCON_PLLE     EQU     (1<<0)          ; PLL Enable
PLLCON_PLLC     EQU     (1<<1)          ; PLL Connect
PLLCFG_MSEL     EQU     (0x1F<<0)       ; PLL Multiplier
PLLCFG_PSEL     EQU     (0x03<<5)       ; PLL Divider
PLLSTAT_PLOCK   EQU     (1<<10)         ; PLL LOCK Status

;// <e> PLL Setup
;//   <o1.0..4>   MSEL: PLL Multiplier Selection
;//               <1-32><#-1>
;//               <i> M VALUE
;//   <o1.5..6>   PSEL: PLL Divider Selection
;//               <0=> 1   <1=> 2   <2=> 4   <3=> 8
;//               <i> P VALUE
;// <
2樓: >>參與討論
jack_mcu
arm(LPC2106)的疑惑
是否需要在啟動代碼中增加以下代碼,以打開FIQ和IRQ中斷:
Initialise Interrupt SYSTEM
;增加的打開中斷的代碼
  MRS    R0,CPSR
  BIC    R0,R0,#0XC0  //將I_BIT和F_BIT賦0
  MSR    CPSR_c,R0
  MOV    PC,LR


; Setup Stack for each mode
;...

還有
typedef unsigned CHAR uint8;
typedef signed CHAR int8;

typedef unsigned int uint16;
typedef signed int int16;

typedef unsigned LONG uint32;
typedef LONG int int32;
不知道對不對?
因為我看到在UC/OS II移植中的程序是這樣寫的:
typedef unsigned SHORT INT16U
typedef signed SHORT INT16S

typedef unsigned int INT32U
typedef signed int INT32S
到底哪個正確呢?請高手指教。!


3樓: >>參與討論
jack_mcu
疑惑
高手都去了哪里呢?請高手幫我解答一下

4樓: >>參與討論
icer1
arm(LPC2106)的疑惑
1。  I_Bit 和 F_Bit不是變量,EQU相當(dāng)于#define,都是定義常量的

2。  開關(guān)中斷就是操作CPSR,為了保險起見,應(yīng)該是讀-修改-寫,zlg的啟動代碼是在軟中斷里面實現(xiàn)開關(guān)中斷操作的。

3。  這條指令可以進(jìn)入未定義模式并且關(guān)irq和fiq  
      MSR     CPSR_c, #Mode_UND:OR:I_Bit:OR:F_Bit

4。  處理器模式的變化有兩種情況:
一、進(jìn)入異常
二、使用MSR修改

  復(fù)位時進(jìn)入的是svc模式

5。對arm內(nèi)核來說,有irq 和 fiq兩種用戶中斷,在執(zhí)行irq程序的時候,是可以允許irq中斷的,就是說可以嵌套。  中斷嵌套是用程序來實現(xiàn)的。至于不同的arm芯片有不同的中斷控制器,詳細(xì)的看中斷控制器。

6。arm的堆?梢韵蛏弦部梢韵蛳。不像51只有pop和PUSH,程序里面自己確定方向。

7?芍厝氪a,我知道有個reentrant這個關(guān)鍵字…… 具體的不知

5樓: >>參與討論
icer1
arm(LPC2106)的疑惑
ucos里面的代碼都是都是用INT16U等來定義變量的,我們不需要去修改它,所以繼續(xù)用

但是我們可以自己定義:
typedef unsigned int uint16;
然后可以自己用uint16來定義變量

沒有對和錯

6樓: >>參與討論
jack_mcu
呵呵
看了兩位高手的留言,明白了一些東東,整個系統(tǒng)的初試化是不是這樣做的:

系統(tǒng)啟動...
執(zhí)行startup.s,跳到main函數(shù)...
main()

初試化串口...
串口中斷使能...

初試化IIC接口...
IIC中斷使能...

其他外設(shè)的初試化...
其他外設(shè)的中斷使能...

執(zhí)行swi軟件中斷...

while(1);



swi軟件中斷函數(shù)

打開IRQ中斷和FIQ中斷...




7樓: >>參與討論
jack_mcu
自己頂一下
看了下資料,說:
MSR     CPSR_c, #Mode_USR
這句話的意思是進(jìn)入用戶模式,并打開FIQ和IRQ中斷
呵呵,因此icer1兄解釋的:
“這條指令可以進(jìn)入未定義模式并且關(guān)irq和fiq  
      MSR     CPSR_c, #Mode_UND:OR:I_Bit:OR:F_Bit”
是非常正確的

另外,arm復(fù)位之后,是處在管理模式的,執(zhí)行了上述的startup.s文件后進(jìn)入到了user模式,但此時中斷已經(jīng)打開了(就是I_BIT和F_BIT已經(jīng)被賦0了),因此,在C程序中,就可以直接中斷的管理了

呵呵,再頂一下...



參與討論
昵稱:
討論內(nèi)容:
 
 
相關(guān)帖子
提示_use_no_semihosting_swit 重復(fù)定義怎么解決
請問HJtag能調(diào)試多少K的程序代碼?
周功,請教一下:
請教哪有USB51S的庫函數(shù)?
關(guān)于定義數(shù)組的問題
免費注冊為維庫電子開發(fā)網(wǎng)會員,參與電子工程師社區(qū)討論,點此進(jìn)入


Copyright © 1998-2006 www.udpf.com.cn 浙ICP證030469號