Re: Keil RVDK UCOS problema

E

eziggurat

Guest
Salve,

Sto cercando di porto UCOS a LPC2103 utilizzando l'ultimo codice, ma io ancora non riesco a farlo funzionare.

Ho riscritto il mio codice per attivare il display LCD con retroilluminazione e
senza il UCOS.Il codice senza il UCOS solo chiamare il
BackLightingOn () e InitPort funzioni nel main () e funziona
tutto bene, ma voglio essere in grado di ottenere UCOS esecuzione.Il codice che segue mostra un
compito stato creato per attivare la retroilluminazione e il ritardo, OSTimeDlyHMSM ().
Il codice contiene supporre diversi compiti, ma ho ridotto a uno così
può capire come ottenere UCOS in esecuzione sul LPC2103 accendendo
la luce posteriore, ma non vedo il problema nel codice.

Il codice per il codice principale è mostrato di seguito.

# include "LPC2103.h"
# include "os_cpu.h"
# include "cpu.h"
# include "app_cfg.h"
# include "ucos_ii.h"# define Fosc 16000000 / / Crystal
frequenza, 10MHz ~ 25MHzŁŹshould essere la stessa situazione effettiva.

# define Fcclk (Fosc * 3) / / Sistema
frequenza, dovrebbe essere (1 ~ 32) multipli di Fosc, e deve essere uguale o
inferiore a 60MHz.# define Fpclk (Fcclk / 4) * 1 / / VPB orologio
frequenza, deve essere 1a ˘ ˘ 2A multipli di 4 (Fcclk / 4).statica OS_STK AppTaskStartStk [APP_TASK_START_STK_SIZE];static void AppTaskStart (void * p_arg);

TC3 nullo (void) (
T3IR = 1; / / Cancella interrompere bandiera
OSTimeTick ();
FIOPIN1 ^ = 0x08; / / debug
VICVectAddr = 0; / / Interrupt Acknowledge

)

StartTicker nullo (void) (
T3MR0 = Fpclk/OS_TICKS_PER_SEC-1; / / 1mSec = 15000-1 conta a 15
Mhz PCLK
T3MCR = 3; / / interrupt e Reset su MR0
T3TCR = 1; / / Timer0 Attiva
VICVectAddr0 = (unsigned long) TC3 / / vettore di interrupt impostato a 0
VICVectCntl0 = 0x20 | VIC_TIMER3; / / uso per Timer 0
Interrompere
VICIntEnable = 1 <<VIC_TIMER3; / / Abilita Timer0 Interrupt
)BackLightingOn nullo (void) (

/ / BackLightingOnFlag = 1;
/ / BackLightingOnTimer = 0;
IOSET = 0x04000000;
FIOSET3 = 0x04;
)

Initport nullo (void) (
IODIR = 0x0C81000C;
FIODIR0 = 0x0C;
FIODIR2 = 0x81;
FIODIR3 = 0x0C;
FIOPIN2 = 0x00;
FIOPIN3 = 0x00;
FIODIR1 = 0x08;
FIOPIN1 = 0x00;
)BSP_IntDisAll nullo (void)
(
VICIntEnClr = 0xFFFFFFFFL; / *
Disabilitare TUTTI gli interrupt * /
)

int main (void) (

BSP_IntDisAll (); / / disabilitare gli interrupt
OSInit ();OSTaskCreateExt (AppTaskStart, / * Crea
l'inizio compito * /
(void *) 0,
(OS_STK *) & AppTaskStartStk [APP_TASK_START_STK_SIZE
- 1],
APP_TASK_START_PRIO,
APP_TASK_START_PRIO,
(OS_STK *) & AppTaskStartStk [0],
APP_TASK_START_STK_SIZE,
(void *) 0,
OS_TASK_OPT_STK_CHK | OS_TASK_OPT_STK_CLR);OSStart ();

return (0);
)static void AppTaskStart (void * p_arg)
((void) p_arg;
OS_CPU_InitExceptVect ();

SCS = 0x03;
if (WDMOD & 0x04) (
WDMOD & = ~ 0x04;
)

StartTicker ();
/ / BSP_Init (); / *
Inizializzazione BSP funzioni * /
Initport (); / / Inizializza i porti
/ * Crea la domanda compiti
* /

while (1) (/ * Task corpo,
sempre scritto come un loop infinito.* /BackLightingOn (); / / Attiva retroilluminazione

OSTimeDlyHMSM (0, 0, 0, 5);

)
)/ *
************************************************** ****************************** \
*************************
* OS_CPU_ExceptHndlr ()
*
* Descrizione: Gestire le eccezioni.
*
* Argomento (s): ARM except_id eccezione tipo:
*
* OS_CPU_ARM_EXCEPT_RESET
0x00
* OS_CPU_ARM_EXCEPT_UNDEF_INSTR
0x01
* OS_CPU_ARM_EXCEPT_SWI
0x02
* OS_CPU_ARM_EXCEPT_PREFETCH_ABORT
0x03
* OS_CPU_ARM_EXCEPT_DATA_ABORT
0x04
* OS_CPU_ARM_EXCEPT_ADDR_ABORT
0x05
* OS_CPU_ARM_EXCEPT_IRQ
0x06
* OS_CPU_ARM_EXCEPT_FIQ
0x07
*
* Ritorno (s): nessuna.
*
Chiamante * (s): OS_CPU_ARM_EXCEPT_HANDLER (), che è dichiarato in
os_cpu_a.s.
************************************************** ****************************** \
*************************
* /

void OS_CPU_ExceptHndlr (CPU_INT32U except_id)
(
CPU_FNCT_VOID pfnct;if (except_id == OS_CPU_ARM_EXCEPT_IRQ) (

pfnct = (CPU_FNCT_VOID) VICVectAddr; / *
Leggi il vettore di interrupt dal VIC * /
while (pfnct! = (CPU_FNCT_VOID) 0) (/ *
Assicurarsi che non abbiamo un puntatore a NULL * /
(* pfnct) (); / *
Eseguire il PVR per il dispositivo di interruzione * /
VICVectAddr = 1; / *
Acknowlege interrompere il VIC * /
pfnct = (CPU_FNCT_VOID) VICVectAddr; / *
Leggi il vettore di interrupt dal VIC * /
)

Else ()

/ *
Loop infinito su altre eccezioni.* /
/ *
Dovrebbe essere sostituito da altri comportamenti (il riavvio, ecc) * /
while (1) (
;
)
)
)Aggiunto dopo 46 secondi:Il mio script è mostrato sotto.

;/************************************************ *****************************/
; / * STARTUP.S: file di avvio per Philips LPC2000
* /
;/************************************************ *****************************/
; / * <<<Usa procedura guidata di configurazione nel menu contestuale>>>
* /
;/************************************************ *****************************/
/ * Questo file è parte del uVision / ARM strumenti di sviluppo.
* /
; / * Copyright (c) 2005-2007 Keil Software.Tutti i diritti riservati.
* /
/ * Questo software può essere utilizzato solo
nell'ambito di un valido,
attuale, * /
/ * Fine licenza d'uso da KEIL per una versione compatibile di KEIL
software * /
; / * Strumenti di sviluppo.Nient'altro vi dà il diritto di utilizzare questo
software.* /
;/************************************************ *****************************/; / *
* Il codice viene eseguito STARTUP.S dopo CPU Reimposta.Questo file può essere
* Tradotto con i seguenti simboli SET.In questi uVision SET
* Simboli sono iscritti nella voce Opzioni - ASM - Definire.
; *
* Remap: quando è impostato il codice di avvio inizializza il registro MEMMAP
* Che sovrascrive le impostazioni di configurazione della CPU pin.Il
* L'avvio e interruzione vettori sono rimappare da:
* 0x00000000 impostazione predefinita (non rimappare)
* 0x80000000 quando viene utilizzato EXTMEM_MODE
* 0x40000000 quando viene utilizzato RAM_MODE
; *
; * EXTMEM_MODE: quando è impostato il dispositivo è configurato per l'esecuzione di codice
; * Da memoria esterna a partire indirizzo 0x80000000.
; *
; * RAM_MODE: quando è impostato il dispositivo è configurato per l'esecuzione di codice
; * Da on-chip RAM a partire indirizzo 0x40000000.
; *
; * EXTERNAL_MODE: quando impostare il PIN2SEL valori sono scritte che consentano
* BUS esterno in fase di avvio.
* /; Definizione di modalità standard di bit e di interrupt (I & F), bandiere PSRs

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; po 'quando mi è stato impostato, è IRQ
disabili
F_Bit EQU 0x40; F po 'quando è stato impostato, è FIQ
disabili/ / Configurazione <h> Stack (Stack Dimensioni in Bytes)
/ / Modo <o0> Undefined <0x0-0xFFFFFFFF: 8>
/ / <o1> Garante Mode <0x0-0xFFFFFFFF: 8>
/ / Modo <o2> Interrompi <0x0-0xFFFFFFFF: 8>
/ / <o3> Fast Interrupt Mode <0x0-0xFFFFFFFF: 8>
/ / Interrupt <o4> Mode <0x0-0xFFFFFFFF: 8>
/ / <o5> Utente / System Mode <0x0-0xFFFFFFFF: 8>
/ / </ H>

UND_Stack_Size EQU 0x00000000
SVC_Stack_Size EQU 0x00000008
ABT_Stack_Size EQU 0x00000000
FIQ_Stack_Size EQU 0x00000000
IRQ_Stack_Size EQU 0x00000080
USR_Stack_Size EQU 0x00000400

ISR_Stack_Size EQU (UND_Stack_Size SVC_Stack_Size
ABT_Stack_Size \
FIQ_Stack_Size IRQ_Stack_Size)

AREA STACK, NOINIT, READWRITE, ALIGN = 3

Stack_Mem SPACE USR_Stack_Size
__initial_sp SPACE ISR_Stack_Size

Stack_Top/ / Configurazione <h> Heap
/ / <o> Heap Dimensione (in byte) <0x0-0xFFFFFFFF>
/ / </ H>

Heap_Size EQU 0x00000000

AREA Heap, NOINIT, READWRITE, ALIGN = 3
__heap_base
Heap_Mem SPACE Heap_Size
__heap_limit; VPBDIV definizioni
VPBDIV EQU 0xE01FC100; VPBDIV Indirizzo

/ / <E> VPBDIV Setup
/ / Peripheral Bus frequenza di clock
/ / <o1.0..1> VPBDIV: VPB Orologio
/ / <0 => = VPB Clock CPU Clock / 4
/ / <= 1> = VPB CPU Clock Orologio
/ / <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) definizioni
PLL_BASE EQU 0xE01FC080; PLL Base Indirizzo
PLLCON_OFS EQU 0x00; PLL controllo Offset
PLLCFG_OFS EQU 0x04; PLL Configurazione offset
PLLSTAT_OFS EQU 0x08; PLL Stato Offset
PLLFEED_OFS EQU 0x0C; PLL Feed Offset
PLLCON_PLLE EQU (1 <<0); PLL Attiva
PLLCON_PLLC EQU (1 <<1); PLL Collegare
PLLCFG_MSEL EQU (0x1F <<0); PLL Moltiplicatore
PLLCFG_PSEL EQU (0x03 <<5); PLL Divider
PLLSTAT_PLOCK EQU (1 <<10); PLL Lock Status

/ / Impostazione <E> PLL
/ / <o1.0..4> MSEL: PLL moltiplicatore di selezione
/ / <1-32> <# -1>
; / / M Rapporto
/ / <o1.5..6> PSEL: PLL Divider selezione
/ / <0 => 1 <1 => 2 <= 2> 4 <3 => 8
/ / Valore P
/ / </ E>
PLL_SETUP EQU 1
PLLCFG_Val EQU 0x00000024; Memoria Accelerator Module (MAM) definizioni
MAM_BASE EQU 0xE01FC000; MAM Indirizzo Base
MAMCR_OFS EQU 0x00; MAM di controllo Offset
MAMTIM_OFS EQU 0x04; MAM Cronometri Offset

/ / Impostazione <E> MAM
/ / Controllo <o1.0..1> MAM
/ / <0 => disabili
/ / <1 => Parziale Attivato
/ / <2 => completamente Attivato
/ / Modo
/ / <o2.0..2> MAM Cronometri
/ / <0 => Reserved <1 => 1 <2 => 2 <3 => 3
/ / <4 => 4 <5 => 5 <6 => 6 <7 => 7
/ / Fetch Cycles
/ / </ E>
MAM_SETUP EQU 1
MAMCR_Val EQU 0x00000002
MAMTIM_Val EQU 0x00000004; Memoria Esterna Controller (EMC) definizioni
EMC_BASE EQU 0xFFE00000; Indirizzo Base EMC
BCFG0_OFS EQU 0x00; BCFG0 Offset
BCFG1_OFS EQU 0x04; BCFG1 Offset
BCFG2_OFS EQU 0x08; BCFG2 Offset
BCFG3_OFS EQU 0x0C; BCFG3 Offset

/ / <E> Memoria Esterna Controller (EMC)
EMC_SETUP EQU 0

/ / Configurazione <E> Banca 0 (BCFG0)
/ / <o1.0..3> IDCY: Idle Cicli <0-15>
/ / <o1.5..9> WST1: Attendere membri 1 <0-31>
/ / <o1.11..15> WST2: Attendere membri 2 <0-31>
/ / <o1.10> RBLE: Leggi Byte Lane Attiva
/ / <o1.26> WP: Scrivi Proteggere
/ / <o1.27> BM: Burst ROM
/ / <o1.28..29> MW: Memoria Larghezza <0 => 8-bit <1 => 16-bit
/ / <2 => 32-bit <= 3> Reserved
/ / </ E>
BCFG0_SETUP EQU 0
BCFG0_Val EQU 0x0000FBEF

/ / <E> Banca di configurazione 1 (BCFG1)
/ / <o1.0..3> IDCY: Idle Cicli <0-15>
/ / <o1.5..9> WST1: Attendere membri 1 <0-31>
/ / <o1.11..15> WST2: Attendere membri 2 <0-31>
/ / <o1.10> RBLE: Leggi Byte Lane Attiva
/ / <o1.26> WP: Scrivi Proteggere
/ / <o1.27> BM: Burst ROM
/ / <o1.28..29> MW: Memoria Larghezza <0 => 8-bit <1 => 16-bit
/ / <2 => 32-bit <= 3> Reserved
/ / </ E>
BCFG1_SETUP EQU 0
BCFG1_Val EQU 0x0000FBEF

/ / <E> Banca di configurazione 2 (BCFG2)
/ / <o1.0..3> IDCY: Idle Cicli <0-15>
/ / <o1.5..9> WST1: Attendere membri 1 <0-31>
/ / <o1.11..15> WST2: Attendere membri 2 <0-31>
/ / <o1.10> RBLE: Leggi Byte Lane Attiva
/ / <o1.26> WP: Scrivi Proteggere
/ / <o1.27> BM: Burst ROM
/ / <o1.28..29> MW: Memoria Larghezza <0 => 8-bit <1 => 16-bit
/ / <2 => 32-bit <= 3> Reserved
/ / </ E>
BCFG2_SETUP EQU 0
BCFG2_Val EQU 0x0000FBEF

/ / <E> Banca di configurazione 3 (BCFG3)
/ / <o1.0..3> IDCY: Idle Cicli <0-15>
/ / <o1.5..9> WST1: Attendere membri 1 <0-31>
/ / <o1.11..15> WST2: Attendere membri 2 <0-31>
/ / <o1.10> RBLE: Leggi Byte Lane Attiva
/ / <o1.26> WP: Scrivi Proteggere
/ / <o1.27> BM: Burst ROM
/ / <o1.28..29> MW: Memoria Larghezza <0 => 8-bit <1 => 16-bit
/ / <2 => 32-bit <= 3> Reserved
/ / </ E>
BCFG3_SETUP EQU 0
BCFG3_Val EQU 0x0000FBEF

/ / </ E> Fine di EMC; Memoria Esterna Pins definizioni
PINSEL2 EQU 0xE002C014; PINSEL2 Indirizzo
PINSEL2_Val EQU 0x0E6149E4; CS0 .. 3, OE, WE, BLS0 .. 3,
; D0 .. 31, A2 .. 23, JTAG PinsPRESERVE8; Spazio Definizione e punto di ingresso
; Avvio di codice deve essere collegato al primo indirizzo presso il quale si aspetta di
correre.

AREA RESET, CODICE, READONLY
ARM; Eccezione Vettoriali
; Mappate a Indirizzo 0.
; Assoluto affrontare modalità deve essere utilizzata.
; Dummy gestori sono attuate come un loop infinito che può essere modificato.

Vettoriali LDR PC, Reset_Addr
LDR PC, Undef_Addr
LDR PC, SWI_Addr
LDR PC, PAbt_Addr
LDR PC, DAbt_Addr
NOP; riservati Vector
LDR PC, IRQ_Addr
LDR PC [PC, #-0x0FF0]; Vector da VicVectAddr
LDR PC, FIQ_Addr

IMPORTAZIONE OS_CPU_ARM_ExceptUndefInstrHndlr
IMPORTAZIONE OS_CPU_ARM_ExceptSwiHndlr
IMPORTAZIONE OS_CPU_ARM_ExceptPrefetchAbortHndlr
IMPORTAZIONE OS_CPU_ARM_ExceptDataAbortHndlr
IMPORTAZIONE OS_CPU_ARM_ExceptIrqHndlr
IMPORTAZIONE OS_CPU_ARM_ExceptFiqHndlrReset_Addr DCD Reset_Handler
Undef_Addr DCD OS_CPU_ARM_ExceptUndefInstrHndlr
SWI_Addr DCD OS_CPU_ARM_ExceptSwiHndlr
PAbt_Addr DCD OS_CPU_ARM_ExceptPrefetchAbortHndlr
DAbt_Addr DCD OS_CPU_ARM_ExceptDataAbortHndlr
nop
IRQ_Addr DCD OS_CPU_ARM_ExceptIrqHndlr
FIQ_Addr DCD OS_CPU_ARM_ExceptFiqHndlr

; Undef_Handler B Undef_Handler
; SWI_Handler B SWI_Handler
; PAbt_Handler B PAbt_Handler
; DAbt_Handler B DAbt_Handler
; IRQ_Handler B IRQ_Handler
; FIQ_Handler B FIQ_Handler; Reset Handler

ESPORTAZIONE Reset_Handler
Reset_Handler; Installazione Memoria Esterna Pins
IF: DEF: EXTERNAL_MODE
LDR R0, = PINSEL2
LDR R1 = PINSEL2_Val
STR R1, [R0]
ENDIF; Setup Controller Memoria Esterna
SE EMC_SETUP <> 0
LDR R0, = EMC_BASE

SE BCFG0_SETUP <> 0
LDR R1 = BCFG0_Val
STR R1, [R0, # BCFG0_OFS]
ENDIF

SE BCFG1_SETUP <> 0
LDR R1 = BCFG1_Val
STR R1, [R0, # BCFG1_OFS]
ENDIF

SE BCFG2_SETUP <> 0
LDR R1 = BCFG2_Val
STR R1, [R0, # BCFG2_OFS]
ENDIF

SE BCFG3_SETUP <> 0
LDR R1 = BCFG3_Val
STR R1, [R0, # BCFG3_OFS]
ENDIF

ENDIF; EMC_SETUP; Il programma di installazione VPBDIV
SE VPBDIV_SETUP <> 0
LDR R0, = VPBDIV
LDR R1 = VPBDIV_Val
STR R1, [R0]
ENDIF; Installazione PLL
SE PLL_SETUP <> 0
LDR R0, = PLL_BASE
MOV R1, # 0xAA
MOV R2, # 0x55

; Configura e abilita PLL
MOV R3, # PLLCFG_Val
STR R3, [R0, # PLLCFG_OFS]
MOV R3, # PLLCON_PLLE
STR R3, [R0, # PLLCON_OFS]
STR R1, [R0, # PLLFEED_OFS]
STR R2, [R0, # PLLFEED_OFS]

; Attendere fino a quando PLL Locked
PLL_Loop LDR R3, [R0, # PLLSTAT_OFS]
ANDS R3, R3, # PLLSTAT_PLOCK
BEQ PLL_Loop

; Switch to PLL Clock
MOV R3, # (PLLCON_PLLE: O: PLLCON_PLLC)
STR R3, [R0, # PLLCON_OFS]
STR R1, [R0, # PLLFEED_OFS]
STR R2, [R0, # PLLFEED_OFS]
ENDIF; PLL_SETUP; Installazione MAM
SE MAM_SETUP <> 0
LDR R0, = MAM_BASE
MOV R1, # MAMTIM_Val
STR R1, [R0, # MAMTIM_OFS]
MOV R1, # MAMCR_Val
STR R1, [R0, # MAMCR_OFS]
ENDIF; MAM_SETUP; Memory Mapping (Interrupt Vettoriali quando sono in RAM)
MEMMAP EQU 0xE01FC040; Memory Mapping controllo
IF: DEF: remap
LDR R0, = MEMMAP
IF: DEF: EXTMEM_MODE
MOV R1, # 3
Elif: DEF: RAM_MODE
MOV R1, # 2
ELSE
MOV R1, # 1
ENDIF
STR R1, [R0]
ENDIF; Inizializza interrupt di sistema
; ...; Il programma di installazione per ciascuna modalità Stack

LDR R0, = Stack_Top

; Inserisci Undefined Istruzione fissare le modalità e Stack Pointer
MSR CPSR_c, # Mode_UND: O: I_Bit: O: F_Bit
MOV SP, R0
SUB R0, R0, # UND_Stack_Size

; Inserisci Interrompi Modalità e impostare il suo stack pointer
MSR CPSR_c, # Mode_ABT: O: I_Bit: O: F_Bit
MOV SP, R0
SUB R0, R0, # ABT_Stack_Size

; Inserisci FIQ Modalità e impostare il suo stack pointer
MSR CPSR_c, # Mode_FIQ: O: I_Bit: O: F_Bit
MOV SP, R0
SUB R0, R0, # FIQ_Stack_Size

; Inserisci IRQ Mode e ha fissato il suo stack pointer
MSR CPSR_c, # Mode_IRQ: O: I_Bit: O: F_Bit
MOV SP, R0
SUB R0, R0, # IRQ_Stack_Size

; Invio dei dati e impostare la sua modalità Stack Pointer
MSR CPSR_c, # Mode_SVC: O: I_Bit: O: F_Bit
MOV SP, R0
SUB R0, R0, # SVC_Stack_Size

; Inserire User Mode e ha fissato il suo stack pointer
MSR CPSR_c, # Mode_USR
IF: DEF: __MICROLIB

ESPORTAZIONE __initial_sp

ELSE

MOV SP, R0
SUB SL, SP, # USR_Stack_Size

ENDIF; Inserisci il codice C

IMPORTAZIONE __main
LDR R0, = __main
BX R0IF: DEF: __MICROLIB

ESPORTAZIONE __heap_base
ESPORTAZIONE __heap_limit

ELSE
; Utente iniziale Stack
e Heap
AREA |. Testo |, CODICE, READONLY

IMPORTAZIONE __use_two_region_memory
ESPORTAZIONE __user_initial_stackheap
__user_initial_stackheap

LDR R0, = Heap_Mem
LDR R1 = (Stack_Mem USR_Stack_Size)
LDR R2 = (Heap_Mem Heap_Size)
LDR R3, = Stack_Mem
BX LR
ENDIFFINE

 

Welcome to EDABoard.com

Sponsor

Back
Top