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

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

ARM中斷系統(tǒng)小結(jié)

作者:erosss 欄目:ARM技術(shù)
ARM中斷系統(tǒng)小結(jié)
   初看ARM中斷系統(tǒng)覺得有點(diǎn)亂,寫點(diǎn)東西希望對大家有點(diǎn)幫助 
中斷詳細(xì)建立過程(1)
   首先我們先來看兩個東西.
;/* EXCEPTION HANDLER VECTOR TABLE */

         ^ DRAM_BASE  
HandleReset # 4
HandleUndef # 4
HandleSwi    # 4
HandlePrefetch # 4
HandleAbort # 4
HandleReserv # 4
HandleIrq    # 4
HandleFiq # 4
小注: 這里的^是MAP,#是FIELD
也就是在DARM的BANK0里面開始的地方定義了一個中斷向量表,用于存放中斷程序的入口地址。


ExceptionHandlerTable
     DCD UserCodeArea
     DCD SystemUndefinedHandler
     DCD SystemSwiHandler
     DCD SystemPrefetchHandler
     DCD SystemAbortHandler
     DCD SystemReserv
     DCD SystemIrqHandler
     DCD SystemFiqHandler
這個表中存放的是匯編程序中中斷處理函數(shù)的入口地址,每一項(xiàng)對應(yīng)一個中斷函數(shù)。  


下面我們從程序的開始處分析:
  AREA Init, CODE, READONLY
  ENTRY

     B Reset_Handler
     B Undefined_Handler
     B SWI_Handler
     B Prefetch_Handler
     B Abort_Handler
     NOP  Reserved vector
     B IRQ_Handler
     B FIQ_Handler

     
FIQ_Handler
     SUB sp, sp, #4           
     STMFD sp!, {r0}          FD滿遞減堆棧  執(zhí)行寄存器壓棧操作.
LDR r0, =HandleFiq    匯編里的處理函數(shù)地址,然后跳到C中,在DRAM。
LDR r0, [r0]          中斷向量地址給R0.
     STR r0, [sp, #4]         中斷向量地址給
     LDMFD sp!, {r0, pc}
  在程序的開始處,首先建立了默認(rèn)的中斷調(diào)用函數(shù).這個過程大家一定非常熟悉,
首先執(zhí)行了壓棧,然后給出了中斷入口地址.這個HandleFiq就是我們前面提到的在DRAM中建立的中斷向量其中一個的地址。
在HandleFiq開始的四個字節(jié)中,放著匯編中斷處理函數(shù)的入口地址。

匯編中斷處理函數(shù)的地址是如何放到DRAM中斷向量表里的呢?

我們上面提到的另一個表就發(fā)揮作用了?聪旅孢@段程序:
EXCEPTION_VECTOR_TABLE_SETUP
     LDR r0, =HandleReset  
     LDR r1, =ExceptionHandlerTable
     MOV r2, #8  
     
ExceptLoop
     LDR r3, [r1], #4
     STR r3, [r0], #4
     SUBS r2, r2, #1  Down Count
     BNE ExceptLoop   ;; 從表里取出來給了HandleReset后面的空間
這一段把ExceptionHandlerTable里的中斷處理函數(shù)的地址拷貝給了DRAM里的中斷向量表。這樣兩者就聯(lián)系起來
在執(zhí)行程序開始的跳轉(zhuǎn)之后就自然跳到了*******Handler.真正的處理函數(shù)之一如下所示:

它實(shí)際上只調(diào)用了C語言的中斷處理函數(shù),其他什么也沒做。
SystemFiqHandler
     IMPORT ISR_FiqHandler
     STMFD sp!, {r0-r7, lr}
     BL ISR_FiqHandler
     LDMFD sp!, {r0-r7, lr}
     SUBS pc, lr, #4

它實(shí)際上只調(diào)用了C語言的中斷處理函數(shù),其他什么也沒做。
void ISR_FiqHandler(void)
{
       IntOffSet = (U32)INTOFFSET;
       (IntOffSet>>2)
       (*InterruptHandlers[IntOffSet>>2])(); // Call interrupt service routine
}



2樓: >>參與討論
erosss
SAMSUNG S3C2410初始化代


SAMSUNG S3C2410初始化代

注:
1)  CPU:   SAMSUNG S3C2410x

   SDRAM: 64MB/Bank6

   FLASH: 16MB/NAND or 16MB/Intel Strata NOR(bank0)

2)  寫一個空的C_Entry()函數(shù),然后在ADS1.2中編譯后生成bin文件直接燒入FLASH即可作為一個簡單的初始化代碼,完成S3C2410的初始化,后續(xù)調(diào)試代碼可以直接下載到SDRAM中.(RAM_STARTADDRESS=0x30000000)

;=====================================
; NAME: 2410INIT.S ;
; DESC: S3C2410 EVB Startup Code ;
; AUTH: PALaDiN@nicesun.com ;
; REV: 1.0.1 ;
; DATE: MAY,2003 ;
;=====================================

GBLL IDE_TYPE
GBLL CPU_CLK_200
IDE_TYPE SETL {TRUE}     ;TRUE=ADS1.2
                        ;FALSE=SDT2.5
[ IDE_TYPE
   GET option.s
   GET memcfg.s
   GET 2410addr.s ;here GET means INCLUDE used in C language
|
   GET option.a
   GET memcfg.a
   GET 2410addr.a
]

;Pre-defined constants
USERMODE EQU 0x10
FIQMODE EQU 0x11
IRQMODE EQU 0x12
SVCMODE EQU 0x13
ABORTMODE EQU 0x17
UNDEFMODE EQU 0x1b
MODEMASK EQU 0x1f ;This means SYSTEM Mode.
NOINT EQU 0xc0 ;

;The location of stacks

FIQStack EQU _STACK_BASEADDRESS
IRQStack EQU FIQStack+0x1000
AbortStack EQU IRQStack+0x1000
UndefStack EQU AbortStack+0x400
SVCStack EQU UndefStack+0x400
UserStack EQU SVCStack+0x1000
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
MACRO
   $HandlerLabel HANDLER $HandleLabel
   ; HANDLER is macroNAME
   ; $HandlerLabel is special macro NAME
   ; $HandleLabel is a variable
$HandlerLabel
   sub sp,sp,#4 ;decrement sp(to store jump address); sp<sp - 4, ARM Stack is Full_Decending
   stmfd sp!,{r0} ;PUSH the work register to stack(lr does not PUSH because it return to original address)
   ldr r0,=$HandleLabel ;load the address of HandleXXX to r0
   ldr r0,[r0] ;load the contents(service routine start address) of HandleXX
   str r0,[sp,#4] ;store the contents(ISR) of HandleXXX to stack
   ldmfd sp!,{r0,pc} ;POP the work register and pc(jump to ISR)
MEND
;===============================================================

IMPORT |Image$$RO$$Limit| ; End of ROM code (=start of ROM data)
IMPORT |Image$$RW$$Base| ; Base of RAM to initialise
IMPORT |Image$$ZI$$Base| ; Base and limit of area
IMPORT |Image$$ZI$$Limit| ; to zero initialise

AREA Init,CODE,READONLY
   CODE32
   ENTRY

b ResetHandler ;
b HandlerUndef ;handler for Undefined mode 0x4
b HandlerSWI ;handler for SWI interrupt 0x8
b HandlerPabort ;handler for PAbort 0xC
b HandlerDabort ;handler for DAbort 0x10
b . ;reserved 0x14
b HandlerIRQ ;handler for IRQ interrupt 0x18
b HandlerFIQ ;handler for FIQ interrupt 0x1C



HandlerFIQ HANDLER HandleFIQ
HandlerIRQ HANDLER HandleIRQ
HandlerUndef HANDLER HandleUndef
HandlerSWI HANDLER HandleSWI
HandlerDabort HANDLER HandleDabort
HandlerPabort HANDLER HandlePabort
;=======
; ENTRY
;=======
ResetHandler

;Initialize stacks
bl InitStacks
;=============================
; Configure Crucial Peripherals
;=============================
ldr r0,=WTCON ;watch dog disable @0x5300_0000
ldr r1,=0x0 ;= means 0x0 is 32bit contant
str r1,[r0] ;

ldr r0,=INTMSK ;
ldr r1,=0xffffffff ;all interrupt disable
str r1,[r0]

ldr r0,=INTSUBMSK
ldr r1,=0x7ff ;
str r1,[r0]

;To reduce PLL LOCK time, adjust the LOCKTIME register.
ldr r0,=LOCKTIME
ldr r1,=0xffffff
str r1,[r0]

;Configure MPLL
ldr r0,=MPLLCON
ldr r1,=((M_MDIV<<12)+(M_PDIV<<4)+M_SDIV) ;Fin=12MHZ,Fout=100MHZ
str r1,[r0]
;=============================
; Configure MEMORY CONTROLLER
;=============================
;Set MEMORY CONTROL registers according to SMRDATA section
ldr r0,=SMRDATA
ldr r1,=BWSCON ;BWSCON Address
add r2, r0, #52 ;End address of SMRDATA
0
   ldr r3, [r0], #4 ; load r3 from r0, then r0=r0+4
   str r3, [r1], #4 ; store r3 to r1, then r1=r1+4
   cmp r2, r0
   bne %B0
;=============================
; Clear SDRAM
;=============================
ldr r0,=GPFCON
ldr r1,=0x55aa ;GPF[7:4]OUTPUT GPF[3:0]EINT[3:0]
str r1,[r0]
ldr r0,=GPFUP
ldr r1,=0xff ;GPF up-pull resistors are disabled
str r1,[r0]
ldr r0,=GPFDAT
ldr r1,=0x0
str r1,[r0] ;

mov r1,#0
mov r2,#0
mov r3,#0
mov r4,#0
mov r5,#0
mov r6,#0
mov r7,#0
mov r8,#0

ldr r9,=0x3ff0000 ;Lower 32MB
ldr r0,=0x30010000 ;leave 64KB for code//=0x30000000
LOOP ;SDRAM clear
stmia r0!,{r1-r8} ;stack starts from 0x30000000,
subs r9,r9,#32 ;
bne LOOP
;=============================
; Exception Vector Table Setup
;=============================
EXCEPTION_VECTOR_TABLE_SETUP
LDR r0, =HandleReset ; Exception Vector Table MEMORY Loc.
LDR r1, =ExceptionHandlerTable ; Exception Handler Assign
MOV r2, #8 ; NUMBER of Exception is 8
ExceptLoop
LDR r3, [r1], #4
STR r3, [r0], #4
SUBS r2, r2, #1
BNE ExceptLoop
;====================================================
;Copy and paste RW data/zero initialized data
;====================================================
ldr r0, =|Image$$RO$$Limit| ; Get pointer to ROM data
ldr r1, =|Image$$RW$$Base| ; and RAM copy
ldr r3, =|Image$$ZI$$Base| ; Zero init base => top of initialised data
cmp r0, r1 ; Check that they are different
beq %F2 ; F means forward
1

   cmp r1, r3 ; Copy init data
   ldrcc r2, [r0], #4 ;> LDRCC r2, [r0] + ADD r0, r0, #4
   strcc r2, [r1], #4 ;> STRCC r2, [r1] + ADD r1, r1, #4
   bcc %B1 ;B means backward
2

   ldr r1, =|Image$$ZI$$Limit| ; Top of zero init segment
   mov r2, #0
3

   cmp r3, r1 ; Zero init
   strcc r2, [r3], #4
   bcc %B3
;====================================================
; Now change to user mode and set up user mode stack.
;====================================================
MRS r0, cpsr
BIC r0, r0, #MODEMASK ;MODEMASK=0X1F
ORR r0, r0, #USERMODE|NOINT ;R
MSR cpsr_cxsf, r0
LDR sp, =UserStack
;====================================================
;Jump To C Routines
;====================================================
IMPORT C_Entry
bl C_Entry ;Don not use main() because ......
;bl .
;====================================================
;Initialize Stacks
;====================================================
;function initializing stacks
InitStacks
;Don not use DRAM,such as stmfd,ldmfd......
;SVCstack is initialized before
;Under toolkit ver 2.5, &acute;msr cpsr,r1&acute; can be used instead of &acute;msr cpsr_cxsf,r1&acute;
mrs r0,cpsr
bic r0,r0,#MODEMASK ;MODEMASK=0x1f
orr r1,r0,#UNDEFMODE|NOINT ;r1=0xDB
msr cpsr_cxsf,r1 ;UndefMode
ldr sp,=UndefStack

orr r1,r0,#ABORTMODE|NOINT
msr cpsr_cxsf,r1 ;AbortMode
ldr sp,=AbortStack

orr r1,r0,#IRQMODE|NOINT
msr cpsr_cxsf,r1 ;IRQMode
ldr sp,=IRQStack

orr r1,r0,#FIQMODE|NOINT
msr cpsr_cxsf,r1 ;FIQMode
ldr sp,=FIQStack

bic
3樓: >>參與討論
msliang18
贊一下
贊一下

4樓: >>參與討論
erosss
提供雙支持大型操作系統(tǒng)的雙FLASH 2410開發(fā)板
一、核心板:
CPU:
       SAMSUNG S3c2410x (ARM920T CORE,203MHz)
       FLASH ROM: 512Mbit NAND FLASH (SAMSUNG K9F1208)
       2M  NOR  FLASH  HY29LV160TT
       SDRAM    : 64Mbyte  HY57V561620BT-H
       RTC 實(shí)時(shí)時(shí)鐘
       NAND FLASH --NOR FLASH 啟動選擇開關(guān)
       兩個I/O 口連接兩個LED,方便用戶調(diào)試自己的程序

二、底板:
       LCD 接口,支持各種TFT LCD
       觸摸屏接口:可接四線電阻式觸摸屏
       USB HOST
       USB DEVICE
       SD/MMC 接口
       3個UART 提供標(biāo)準(zhǔn)的232電平
       標(biāo)準(zhǔn)ARM 20芯 JTAG接口
       ADC 模數(shù)轉(zhuǎn)換接口
       SPI接口
       IIS :采用UDA1341TS IIS接口(立體聲輸出,MIC輸入)
       外部中斷接口(方便用戶二次開發(fā))
       100M 網(wǎng)卡
       外部總線接口,3片74LVTH162245緩沖,1片CPLD EMP7032AE
       IDE/ATA硬盤接口
以上很多接口都可以復(fù)用為通用I/O,方便用戶外接自己的設(shè)備。
三、軟件操作系統(tǒng)介紹:
● 嵌入式Linux 操作系統(tǒng)
內(nèi)核:MIZI Linux 2.6;
文件系統(tǒng): CRAMFS和專門為NAND FLASH 定制的YAFFS文件系統(tǒng);
GUI: 為用戶定制QT/Embedded圖形庫,預(yù)裝PDA應(yīng)用系統(tǒng)。

● WinCE 操作系統(tǒng)
WinCe.NET 4.2 版本以及開發(fā)環(huán)境。熟悉Windows開發(fā)的程序員可以快速的進(jìn)行嵌入式系統(tǒng)應(yīng)用開發(fā)。

● Vxworks 實(shí)時(shí)操作系統(tǒng)
● Nucleus 實(shí)時(shí)操作系統(tǒng)
● uC/OS-II實(shí)時(shí)操作系統(tǒng)
● ecos實(shí)時(shí)操作系統(tǒng)。

  完全開源的一種操作系統(tǒng),實(shí)際應(yīng)用穩(wěn)定、可*。

用戶根據(jù)項(xiàng)目的需求,可以方便的對硬件、軟件系統(tǒng)進(jìn)行定制或二次開發(fā),這樣就大大縮短了開發(fā)時(shí)間、加速開發(fā)進(jìn)程。




5樓: >>參與討論
wishhealth
你好,可以請教一個中斷的問題嗎?
VICVectAddr0 = (int)IRQ_Eint0;    // 設(shè)置EINT0向量地址

VICVectAddr1 = (int)IRQ_Eint1;

請教,IRQ_Eint0是在哪個文件里定義的?
謝謝!

6樓: >>參與討論
mcuatmel
頂一下!
 
7樓: >>參與討論
zhx1997
請教一個問題
文章寫得很有幫助,我在看s3c440b的初始化代碼,好像和這個不太一樣,沒有
exceptionhandlertable這一塊我不懂,請指教

8樓: >>參與討論
willyar_cn
支持啊
文章寫得不錯,至少對我很有幫助,在此謝謝啦!

9樓: >>參與討論
erosss
ding  ding
頂頂

參與討論
昵稱:
討論內(nèi)容:
 
 
相關(guān)帖子
請問有沒有arm是同時(shí)帶網(wǎng)口和CAN的,非常感謝!
(緊急求助) 我的ADS1.2 怎么破解不了啊???
PXA255的中斷問題
求教 怎樣在flash上建立文件系統(tǒng)
請問如何在ADS下生成自己的庫文件?
免費(fèi)注冊為維庫電子開發(fā)網(wǎng)會員,參與電子工程師社區(qū)討論,點(diǎn)此進(jìn)入


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