|
|||||||||||
| 技術(shù)交流 | 電路欣賞 | 工控天地 | 數(shù)字廣電 | 通信技術(shù) | 電源技術(shù) | 測(cè)控之家 | EMC技術(shù) | ARM技術(shù) | EDA技術(shù) | PCB技術(shù) | 嵌入式系統(tǒng) 驅(qū)動(dòng)編程 | 集成電路 | 器件替換 | 模擬技術(shù) | 新手園地 | 單 片 機(jī) | DSP技術(shù) | MCU技術(shù) | IC 設(shè)計(jì) | IC 產(chǎn)業(yè) | CAN-bus/DeviceNe |
向hotpower求助 |
| 作者:cmanning 欄目:MCU技術(shù) |
hotpower 前輩: 看了你的分析"非典架構(gòu)",我也遇到了類似的情況, 各種條件正常時(shí)丟失中斷。 尤其是硬件I2C的中斷,穩(wěn)定性較差。FIQ的外部中斷2,丟失較嚴(yán)重。 我用的是LPC2138 + ads1.2 + ucos2 + 中斷嵌套(幾乎所有的外設(shè)中斷IRQ) 由于沒用過kail,不能直接應(yīng)用你的文件。 不知如何使用你的"非典架構(gòu)",修改我目前的文件,來解決問題。 我的 Startup.s文件 ;define the stack size ;定義堆棧的大小 FIQ_STACK_LEGTH EQU 0 IRQ_STACK_LEGTH EQU 9*10 ;every layer need 9 bytes stack , permit 8 layer .每層嵌套需要9個(gè)字堆棧,允許8層嵌套 ABT_STACK_LEGTH EQU 0 UND_STACK_LEGTH EQU 0 NoInt EQU 0x80 USR32Mode EQU 0x10 SVC32Mode EQU 0x13 SYS32Mode EQU 0x1f IRQ32Mode EQU 0x12 FIQ32Mode EQU 0x11 IMPORT __use_no_semihosting_swi ;The imported LABELS ;引入的外部標(biāo)號(hào)在這聲明 IMPORT FIQ_Exception ;FAST interrupt exceptions handler 快速中斷異常處理程序 IMPORT __main ;The entry point to the main function C語言主程序入口 IMPORT TargetResetInit ;initialize the target board 目標(biāo)板基本初始化 IMPORT SoftwareInterrupt ;The emported LABELS ;給外部使用的標(biāo)號(hào)在這聲明 EXPORT bottom_of_heap EXPORT StackUsr EXPORT Reset EXPORT __user_initial_stackheap CODE32 AREA vectors,CODE,READONLY ENTRY ;interrupt vectors ;中斷向量表 Reset LDR PC, ResetAddr LDR PC, UndefinedAddr LDR PC, SWI_Addr LDR PC, PrefetchAddr LDR PC, DataAbortAddr DCD 0xb9205f80 LDR PC, [PC, #-0xff0] LDR PC, FIQ_Addr ResetAddr DCD ResetInit UndefinedAddr DCD Undefined SWI_Addr DCD SoftwareInterrupt PrefetchAddr DCD PrefetchAbort DataAbortAddr DCD DataAbort Nouse DCD 0 IRQ_Addr DCD 0 FIQ_Addr DCD FIQ_Handler ;未定義指令 Undefined B Undefined ;取指令中止 PrefetchAbort B PrefetchAbort ;取數(shù)據(jù)中止 DataAbort B DataAbort ;快速中斷 FIQ_Handler STMFD SP!, {R0-R3, LR} BL FIQ_Exception LDMFD SP!, {R0-R3, LR} SUBS PC, LR, #4 InitStack MOV R0, LR ;Build the SVC stack ;設(shè)置中斷模式堆棧 MSR CPSR_c, #0xd2 LDR SP, StackIrq ;Build the FIQ stack ;設(shè)置快速中斷模式堆棧 MSR CPSR_c, #0xd1 LDR SP, StackFiq ;Build the DATAABORT stack ;設(shè)置中止模式堆棧 MSR CPSR_c, #0xd7 LDR SP, StackAbt ;Build the UDF stack ;設(shè)置未定義模式堆棧 MSR CPSR_c, #0xdb LDR SP, StackUnd ;Build the SYS stack ;設(shè)置系統(tǒng)模式堆棧 MSR CPSR_c, #0xdf LDR SP, =StackUsr MOV PC, R0 ResetInit BL InitStack ; Initialize the stack 初始化堆棧 BL TargetResetInit ; Initialize the target board 目標(biāo)板基本初始化 ; Jump to the entry point of C program 跳轉(zhuǎn)到c語言入口 B __main __user_initial_stackhea |
|
|
| 免費(fèi)注冊(cè)為維庫(kù)電子開發(fā)網(wǎng)會(huì)員,參與電子工程師社區(qū)討論,點(diǎn)此進(jìn)入 |
Copyright © 1998-2006 m.58mhw.cn 浙ICP證030469號(hào) |