E
eziggurat
Guest
Hoi,
Ik probeer haven UCOS tot LPC2103 met behulp van de laatste code, maar ik kan nog steeds niet krijgen om te werken.
Ik heb mijn code herschreven om over LCD achtergrondverlichting met en
zonder de UCOS.De code zonder UCOS gewoon bellen naar de
BackLightingOn () en InitPort functies in de main () en dit werkt
prima maar ik wil kunnen krijgen UCOS draait.De onderstaande code toont een
taak gecreëerd om op de achtergrondverlichting en de vertraging, OSTimeDlyHMSM ().
De code veronderstel meerdere taken, maar ik heb teruggebracht tot een, zodat ik
kunnen achterhalen hoe je UCOS draait op de LPC2103 door op
de achterkant licht maar ik zie niet het probleem in de code.
De code voor de belangrijkste code wordt hieronder weergegeven.
#
include "LPC2103.h"
#
include "os_cpu.h"
#
include "cpu.h"
#
include "app_cfg.h"
#
include "ucos_ii.h"# define Fosc 16000000 / / Crystal
FREQUENCE, 10MHz ~ 25MHzŁŹshould moet dezelfde zijn als de huidige status.
# define Fcclk (Fosc * 3) / / System
FREQUENCE moeten worden (1 ~ 32) een veelvoud van Fosc en moet gelijk zijn of
minder dan 60MHz.# define Fpclk (Fcclk / 4) * 1 / / VPB klok
FREQUENCE, moet 1A ˘ 2A ˘ 4 veelvouden van (Fcclk / 4).statische OS_STK AppTaskStartStk [APP_TASK_START_STK_SIZE];static void AppTaskStart (void * p_arg);
void TC3 (void) (
T3IR = 1; / / Clear onderbreken vlag
OSTimeTick ();
FIOPIN1 ^ = 0x08; / / debugging
VICVectAddr = 0; / / bevestigingsknop Interrupt
)
void StartTicker (void) (
T3MR0 = Fpclk/OS_TICKS_PER_SEC-1; / / 1mSec = 15000-1 telt op 15
Mhz PCLK
T3MCR = 3 / / Interrupt en Reset op MR0
T3TCR = 1; / / Timer0 inschakelen
VICVectAddr0 = (unsigned long) TC3 / / set interrupt vector in 0
VICVectCntl0 = 0x20 | VIC_TIMER3 / / gebruiken voor Timer 0
Onderbreek
VICIntEnable = 1 <<VIC_TIMER3 / / Enable Timer0 Interrupt
)void BackLightingOn (void) (
/ / BackLightingOnFlag = 1;
/ / BackLightingOnTimer = 0;
IOSET = 0x04000000;
FIOSET3 = 0x04;
)
void Initport (void) (
IODIR = 0x0C81000C;
FIODIR0 = 0x0c;
FIODIR2 = 0x81;
FIODIR3 = 0x0c;
FIOPIN2 = 0x00;
FIOPIN3 = 0x00;
FIODIR1 = 0x08;
FIOPIN1 = 0x00;
)void BSP_IntDisAll (void)
(
VICIntEnClr = 0xFFFFFFFFL; / *
Alles uitschakelen onderbreekt * /
)
int main (void) (
BSP_IntDisAll (); / / disable interrupts
OSInit ();OSTaskCreateExt (AppTaskStart, / * Maak
de start taak * /
(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 (); / *
Initialize BSP functies * /
Initport (); / / initialiseren van de havens
/ * Maak toepassing taken
* /
while (1) (/ * Task lichaam,
altijd geschreven als een oneindige lus.* /BackLightingOn (); / / Zet achtergrondverlichting
OSTimeDlyHMSM (0, 0, 0, 5);
)
)/ *
************************************************** ****************************** \
*************************
* OS_CPU_ExceptHndlr ()
*
* Beschrijving: Greep eventuele uitzonderingen.
*
* Argument (s): except_id ARM uitzondering type:
*
* OS_CPU_ARM_EXCEPT_RESET
0x00
* OS_CPU_ARM_EXCEPT_UNDEF_INSTR
Waarde 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
*
* Rendement (s): geen.
*
* Oproeper (s): OS_CPU_ARM_EXCEPT_HANDLER (), waarin wordt aangegeven 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; / *
Lees de interrupt vector van de VIC * /
while (pfnct! = (CPU_FNCT_VOID) 0) (/ *
Zorg ervoor dat wij niet over een NULL pointer * /
(* pfnct) (); / *
Voer de ISR voor de onderbreking van het apparaat * /
VICVectAddr = 1; / *
Acknowlege de VIC onderbreken * /
pfnct = (CPU_FNCT_VOID) VICVectAddr; / *
Lees de interrupt vector van de VIC * /
)
) Else (
/ *
Oneindige lus op andere uitzonderingen.* /
/ *
Moet worden vervangen door ander gedrag (herstarten, etc.) * /
while (1) (
;
)
)
)Toegevoegd na 46 seconden:Mijn opstartscript wordt hieronder weergegeven.
;/************************************************ *****************************/
; / * STARTUP.S: Opstarten dossier voor Philips LPC2000
* /
;/************************************************ *****************************/
/ * <<<Gebruik Configuratie Wizard in Context Menu>>>
* /
;/************************************************ *****************************/
/ * Dit bestand is een onderdeel van het uVision / ARM ontwikkeltools.
* /
; / * Copyright (c) 2005-2007 Keil Software.Alle rechten voorbehouden.
* /
/ * Deze software kan alleen worden gebruikt onder de voorwaarden van een geldig,
huidige, * /
; / * Eindgebruiker licentie van Keil voor een compatibele versie van Keil
software * /
; / * Ontwikkelingstools.Niets anders geeft je het recht op het gebruik van deze
software.* /
;/************************************************ *****************************/; / *
* De STARTUP.S code wordt uitgevoerd na CPU Resetten.Dit bestand kan worden
* Vertaald met de volgende reeks symbolen.In deze uVision SET
; * Symbolen worden onder Opties - ASM - Definiëren.
; *
; * Remap: bij de opstart code initialiseert het register MEMMAP
; * Die overschrijft de instellingen van de CPU configuratie pinnen.De
* Opstarten en interrupt vectoren zijn remapped uit:
; * 0x00000000 standaardinstelling (niet remapped)
; * 0x80000000 wanneer EXTMEM_MODE wordt gebruikt
; * 0x40000000 wanneer RAM_MODE wordt gebruikt
; *
; * EXTMEM_MODE: wanneer het apparaat is geconfigureerd voor het uitvoeren van code
; * Van extern geheugen vanaf adres 0x80000000.
; *
; * RAM_MODE: wanneer het apparaat is geconfigureerd voor het uitvoeren van code
; * Van on-chip RAM vanaf adres 0x40000000.
; *
; * EXTERNAL_MODE: wanneer u de PIN2SEL waarden zijn geschreven waarmee
* De externe BUS bij het opstarten.
* /; Standaard definities van mode bits en Interrupt (I & F), vlaggen in de PSR's
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; toen ik bit is ingesteld, is IRQ
gehandicapten
F_Bit EQU 0x40; wanneer F bit is ingesteld, FIQ is
gehandicapten/ / <h> Stack configuratie (Stack Maten in bytes)
/ / <o0> Undefined Mode <0x0-0xFFFFFFFF: 8>
/ / <o1> Promotor 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>
/ / </ U>
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)
OPPERVLAKTE STACK, NOINIT, ReadWrite, ALIGN = 3
Stack_Mem SPACE USR_Stack_Size
__initial_sp SPACE ISR_Stack_Size
Stack_Top/ / <h> Heap Configuratie
/ / <o> Heap Size (in bytes) <0x0-0xFFFFFFFF>
/ / </ U>
Heap_Size EQU 0x00000000
OPPERVLAKTE Heap, NOINIT, ReadWrite, ALIGN = 3
__heap_base
Heap_Mem SPACE Heap_Size
__heap_limit; VPBDIV definities
VPBDIV EQU 0xE01FC100; VPBDIV Adres
/ / <e> VPBDIV Setup
/ / Peripheral Bus Clock Rate
/ / <o1.0..1> VPBDIV: VPB Klok
/ / <0 => VPB Klok = CPU Clock / 4
/ / <1 => VPB Klok = CPU Clock
/ / <2 => VPB Klok = 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) definities
PLL_BASE EQU 0xE01FC080; PLL Base Adres
PLLCON_OFS EQU 0x00; PLL Control Offset
PLLCFG_OFS EQU 0x04; PLL Configuratie Offset
PLLSTAT_OFS EQU 0x08; PLL Status Offset
PLLFEED_OFS EQU 0x0c; PLL Feed Offset
PLLCON_PLLE EQU (1 <<0); PLL inschakelen
PLLCON_PLLC EQU (1 <<1); PLL Connect
PLLCFG_MSEL EQU (0x1F <<0); PLL Multiplicatoreffect
PLLCFG_PSEL EQU (0x03 <<5); PLL Divider
PLLSTAT_PLOCK EQU (1 <<10); PLL Lock Status
/ / <e> PLL Setup
/ / <o1.0..4> MSEL: PLL Multiplicatoreffect Selectie
/ / <1-32> <# -1>
/ / M Prijs
/ / <o1.5..6> PSEL: PLL Divider Selectie
/ / <0 => 1 <1 => 2 <2 => 4 <3 => 8
/ / P-waarde
/ / </ E>
PLL_SETUP EQU 1
PLLCFG_Val EQU 0x00000024; Memory Accelerator Module (MAM) definities
MAM_BASE EQU 0xE01FC000; MAM Base Adres
MAMCR_OFS EQU 0x00; MAM Control Offset
MAMTIM_OFS EQU 0x04; MAM Timing Offset
/ / <e> MAM Setup
/ / <o1.0..1> MAM Control
/ / <0 => Gehandicapten
/ / <1 => Gedeeltelijk Ingeschakeld
/ / <2 => Volledig Ingeschakeld
/ / Mode
/ / <o2.0..2> MAM Timing
/ / <0 => Gereserveerd <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; External Memory Controller (EMC) definities
EMC_BASE EQU 0xFFE00000; EMC Base Adres
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> External Memory Controller (EMC)
EMC_SETUP EQU 0
/ / <e> Bank Configuratie 0 (BCFG0)
/ / <o1.0..3> IDCY: Stationair Cycles <0-15>
/ / <o1.5..9> WST1: Wacht Staten 1 <0-31>
/ / <o1.11..15> WST2: Wacht Staten 2 <0-31>
/ / <o1.10> RBLE: Lees Byte Lane inschakelen
/ / <o1.26> WP:
Write Protect
/ / <o1.27> BM: Burst rom
/ / <o1.28..29> MW: Geheugen Breedte <0 => 8-bits <1 => 16-bit
/ / <2 => 32-bits <3 => Gereserveerd
/ / </ E>
BCFG0_SETUP EQU 0
BCFG0_Val EQU 0x0000FBEF
/ / <e> Bank Configuratie 1 (BCFG1)
/ / <o1.0..3> IDCY: Stationair Cycles <0-15>
/ / <o1.5..9> WST1: Wacht Staten 1 <0-31>
/ / <o1.11..15> WST2: Wacht Staten 2 <0-31>
/ / <o1.10> RBLE: Lees Byte Lane inschakelen
/ / <o1.26> WP:
Write Protect
/ / <o1.27> BM: Burst rom
/ / <o1.28..29> MW: Geheugen Breedte <0 => 8-bits <1 => 16-bit
/ / <2 => 32-bits <3 => Gereserveerd
/ / </ E>
BCFG1_SETUP EQU 0
BCFG1_Val EQU 0x0000FBEF
/ / <e> Bank Configuratie 2 (BCFG2)
/ / <o1.0..3> IDCY: Stationair Cycles <0-15>
/ / <o1.5..9> WST1: Wacht Staten 1 <0-31>
/ / <o1.11..15> WST2: Wacht Staten 2 <0-31>
/ / <o1.10> RBLE: Lees Byte Lane inschakelen
/ / <o1.26> WP:
Write Protect
/ / <o1.27> BM: Burst rom
/ / <o1.28..29> MW: Geheugen Breedte <0 => 8-bits <1 => 16-bit
/ / <2 => 32-bits <3 => Gereserveerd
/ / </ E>
BCFG2_SETUP EQU 0
BCFG2_Val EQU 0x0000FBEF
/ / <e> Bank Configuratie 3 (BCFG3)
/ / <o1.0..3> IDCY: Stationair Cycles <0-15>
/ / <o1.5..9> WST1: Wacht Staten 1 <0-31>
/ / <o1.11..15> WST2: Wacht Staten 2 <0-31>
/ / <o1.10> RBLE: Lees Byte Lane inschakelen
/ / <o1.26> WP:
Write Protect
/ / <o1.27> BM: Burst rom
/ / <o1.28..29> MW: Geheugen Breedte <0 => 8-bits <1 => 16-bit
/ / <2 => 32-bits <3 => Gereserveerd
/ / </ E>
BCFG3_SETUP EQU 0
BCFG3_Val EQU 0x0000FBEF
/ / </ E> Einde van EMC; Extern Geheugen Pins definities
PINSEL2 EQU 0xE002C014; PINSEL2 Adres
PINSEL2_Val EQU 0x0E6149E4; CS0 .. 3, OE, WE, BLS0 .. 3,
; D0 .. 31, A2 .. 23, JTAG PinsPRESERVE8; Ruimte Definitie en Entry Point
; Startup-code moet worden gekoppeld aan eerste adres waar ze verwacht
rennen.
OPPERVLAKTE RESET, CODE, READONLY
ARM; Uitzondering Vectoren
; Mapped to Address 0.
; Absolute aanpakken modus worden gebruikt.
; Dummy Handlers zijn uitgevoerd als oneindige lussen die kunnen worden gewijzigd.
Vectoren LDR pc, Reset_Addr
LDR pc, Undef_Addr
LDR pc, SWI_Addr
LDR pc, PAbt_Addr
LDR pc, DAbt_Addr
NOP; Reserved Vector
LDR pc, IRQ_Addr
LDR pc [PC, #-0x0FF0]; Vector uit VicVectAddr
LDR pc, FIQ_Addr
INVOER OS_CPU_ARM_ExceptUndefInstrHndlr
INVOER OS_CPU_ARM_ExceptSwiHndlr
INVOER OS_CPU_ARM_ExceptPrefetchAbortHndlr
INVOER OS_CPU_ARM_ExceptDataAbortHndlr
INVOER OS_CPU_ARM_ExceptIrqHndlr
INVOER 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
UITVOER Reset_Handler
Reset_Handler; Setup Extern Geheugen Pins
INDIEN: DEF: EXTERNAL_MODE
LDR R0, = PINSEL2
LDR R1, = PINSEL2_Val
STR R1, [R0]
ENDIF; Setup External Memory Controller
INDIEN EMC_SETUP <> 0
LDR R0, = EMC_BASE
INDIEN BCFG0_SETUP <> 0
LDR R1, = BCFG0_Val
STR R1, [R0, # BCFG0_OFS]
ENDIF
INDIEN BCFG1_SETUP <> 0
LDR R1, = BCFG1_Val
STR R1, [R0, # BCFG1_OFS]
ENDIF
INDIEN BCFG2_SETUP <> 0
LDR R1, = BCFG2_Val
STR R1, [R0, # BCFG2_OFS]
ENDIF
INDIEN BCFG3_SETUP <> 0
LDR R1, = BCFG3_Val
STR R1, [R0, # BCFG3_OFS]
ENDIF
ENDIF; EMC_SETUP; Setup VPBDIV
INDIEN VPBDIV_SETUP <> 0
LDR R0, = VPBDIV
LDR R1, = VPBDIV_Val
STR R1, [R0]
ENDIF; Setup PLL
INDIEN PLL_SETUP <> 0
LDR R0, = PLL_BASE
MOV R1, # 0xAA
MOV R2, # 0x55
; Configureren en inschakelen 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]
; Wacht tot PLL Gesloten
PLL_Loop LDR R3, [R0, # PLLSTAT_OFS]
ANDS R3, R3, # PLLSTAT_PLOCK
BEQ PLL_Loop
; Switch to PLL Klok
MOV R3, # (PLLCON_PLLE: OF: PLLCON_PLLC)
STR R3, [R0, # PLLCON_OFS]
STR R1, [R0, # PLLFEED_OFS]
STR R2, [R0, # PLLFEED_OFS]
ENDIF; PLL_SETUP; Setup MAM
INDIEN 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 (wanneer Onderbreek Vectoren in RAM)
MEMMAP EQU 0xE01FC040; Memory Mapping Control
INDIEN: DEF: remap
LDR R0, = MEMMAP
INDIEN: DEF: EXTMEM_MODE
MOV R1, # 3
Elif: DEF: RAM_MODE
MOV R1, # 2
ALSE
MOV R1, # 1
ENDIF
STR R1, [R0]
ENDIF; Initialiseren Interrupt System
; ...; Setup Stack voor elke modus
LDR R0, = Stack_Top
; Voer Ongedefinieerd Instructie Mode en haar Stack Pointer
MSR CPSR_c, # Mode_UND: OF: I_Bit: OF: F_Bit
MOV SP, R0
SUB R0, R0, # UND_Stack_Size
; Voer Abort Mode en haar Stack Pointer
MSR CPSR_c, # Mode_ABT: OF: I_Bit: OF: F_Bit
MOV SP, R0
SUB R0, R0, # ABT_Stack_Size
; Voer FIQ Mode en haar Stack Pointer
MSR CPSR_c, # Mode_FIQ: OF: I_Bit: OF: F_Bit
MOV SP, R0
SUB R0, R0, # FIQ_Stack_Size
; Voer IRQ Mode en haar Stack Pointer
MSR CPSR_c, # Mode_IRQ: OF: I_Bit: OF: F_Bit
MOV SP, R0
SUB R0, R0, # IRQ_Stack_Size
; Voer Promotor Mode en haar Stack Pointer
MSR CPSR_c, # Mode_SVC: OF: I_Bit: OF: F_Bit
MOV SP, R0
SUB R0, R0, # SVC_Stack_Size
; Enter User Mode en haar Stack Pointer
MSR CPSR_c, # Mode_USR
INDIEN: DEF: __MICROLIB
UITVOER __initial_sp
ALSE
MOV SP, R0
SUB SL, SP, # USR_Stack_Size
ENDIF; Voer de C-code
INVOER __main
LDR R0, = __main
BX R0INDIEN: DEF: __MICROLIB
UITVOER __heap_base
UITVOER __heap_limit
ALSE
; User Initial Stack & Heap
AREA |. Tekst |, CODE, READONLY
INVOER __use_two_region_memory
UITVOER __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
ENDIFEINDE
Ik probeer haven UCOS tot LPC2103 met behulp van de laatste code, maar ik kan nog steeds niet krijgen om te werken.
Ik heb mijn code herschreven om over LCD achtergrondverlichting met en
zonder de UCOS.De code zonder UCOS gewoon bellen naar de
BackLightingOn () en InitPort functies in de main () en dit werkt
prima maar ik wil kunnen krijgen UCOS draait.De onderstaande code toont een
taak gecreëerd om op de achtergrondverlichting en de vertraging, OSTimeDlyHMSM ().
De code veronderstel meerdere taken, maar ik heb teruggebracht tot een, zodat ik
kunnen achterhalen hoe je UCOS draait op de LPC2103 door op
de achterkant licht maar ik zie niet het probleem in de code.
De code voor de belangrijkste code wordt hieronder weergegeven.
#
include "LPC2103.h"
#
include "os_cpu.h"
#
include "cpu.h"
#
include "app_cfg.h"
#
include "ucos_ii.h"# define Fosc 16000000 / / Crystal
FREQUENCE, 10MHz ~ 25MHzŁŹshould moet dezelfde zijn als de huidige status.
# define Fcclk (Fosc * 3) / / System
FREQUENCE moeten worden (1 ~ 32) een veelvoud van Fosc en moet gelijk zijn of
minder dan 60MHz.# define Fpclk (Fcclk / 4) * 1 / / VPB klok
FREQUENCE, moet 1A ˘ 2A ˘ 4 veelvouden van (Fcclk / 4).statische OS_STK AppTaskStartStk [APP_TASK_START_STK_SIZE];static void AppTaskStart (void * p_arg);
void TC3 (void) (
T3IR = 1; / / Clear onderbreken vlag
OSTimeTick ();
FIOPIN1 ^ = 0x08; / / debugging
VICVectAddr = 0; / / bevestigingsknop Interrupt
)
void StartTicker (void) (
T3MR0 = Fpclk/OS_TICKS_PER_SEC-1; / / 1mSec = 15000-1 telt op 15
Mhz PCLK
T3MCR = 3 / / Interrupt en Reset op MR0
T3TCR = 1; / / Timer0 inschakelen
VICVectAddr0 = (unsigned long) TC3 / / set interrupt vector in 0
VICVectCntl0 = 0x20 | VIC_TIMER3 / / gebruiken voor Timer 0
Onderbreek
VICIntEnable = 1 <<VIC_TIMER3 / / Enable Timer0 Interrupt
)void BackLightingOn (void) (
/ / BackLightingOnFlag = 1;
/ / BackLightingOnTimer = 0;
IOSET = 0x04000000;
FIOSET3 = 0x04;
)
void Initport (void) (
IODIR = 0x0C81000C;
FIODIR0 = 0x0c;
FIODIR2 = 0x81;
FIODIR3 = 0x0c;
FIOPIN2 = 0x00;
FIOPIN3 = 0x00;
FIODIR1 = 0x08;
FIOPIN1 = 0x00;
)void BSP_IntDisAll (void)
(
VICIntEnClr = 0xFFFFFFFFL; / *
Alles uitschakelen onderbreekt * /
)
int main (void) (
BSP_IntDisAll (); / / disable interrupts
OSInit ();OSTaskCreateExt (AppTaskStart, / * Maak
de start taak * /
(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 (); / *
Initialize BSP functies * /
Initport (); / / initialiseren van de havens
/ * Maak toepassing taken
* /
while (1) (/ * Task lichaam,
altijd geschreven als een oneindige lus.* /BackLightingOn (); / / Zet achtergrondverlichting
OSTimeDlyHMSM (0, 0, 0, 5);
)
)/ *
************************************************** ****************************** \
*************************
* OS_CPU_ExceptHndlr ()
*
* Beschrijving: Greep eventuele uitzonderingen.
*
* Argument (s): except_id ARM uitzondering type:
*
* OS_CPU_ARM_EXCEPT_RESET
0x00
* OS_CPU_ARM_EXCEPT_UNDEF_INSTR
Waarde 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
*
* Rendement (s): geen.
*
* Oproeper (s): OS_CPU_ARM_EXCEPT_HANDLER (), waarin wordt aangegeven 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; / *
Lees de interrupt vector van de VIC * /
while (pfnct! = (CPU_FNCT_VOID) 0) (/ *
Zorg ervoor dat wij niet over een NULL pointer * /
(* pfnct) (); / *
Voer de ISR voor de onderbreking van het apparaat * /
VICVectAddr = 1; / *
Acknowlege de VIC onderbreken * /
pfnct = (CPU_FNCT_VOID) VICVectAddr; / *
Lees de interrupt vector van de VIC * /
)
) Else (
/ *
Oneindige lus op andere uitzonderingen.* /
/ *
Moet worden vervangen door ander gedrag (herstarten, etc.) * /
while (1) (
;
)
)
)Toegevoegd na 46 seconden:Mijn opstartscript wordt hieronder weergegeven.
;/************************************************ *****************************/
; / * STARTUP.S: Opstarten dossier voor Philips LPC2000
* /
;/************************************************ *****************************/
/ * <<<Gebruik Configuratie Wizard in Context Menu>>>
* /
;/************************************************ *****************************/
/ * Dit bestand is een onderdeel van het uVision / ARM ontwikkeltools.
* /
; / * Copyright (c) 2005-2007 Keil Software.Alle rechten voorbehouden.
* /
/ * Deze software kan alleen worden gebruikt onder de voorwaarden van een geldig,
huidige, * /
; / * Eindgebruiker licentie van Keil voor een compatibele versie van Keil
software * /
; / * Ontwikkelingstools.Niets anders geeft je het recht op het gebruik van deze
software.* /
;/************************************************ *****************************/; / *
* De STARTUP.S code wordt uitgevoerd na CPU Resetten.Dit bestand kan worden
* Vertaald met de volgende reeks symbolen.In deze uVision SET
; * Symbolen worden onder Opties - ASM - Definiëren.
; *
; * Remap: bij de opstart code initialiseert het register MEMMAP
; * Die overschrijft de instellingen van de CPU configuratie pinnen.De
* Opstarten en interrupt vectoren zijn remapped uit:
; * 0x00000000 standaardinstelling (niet remapped)
; * 0x80000000 wanneer EXTMEM_MODE wordt gebruikt
; * 0x40000000 wanneer RAM_MODE wordt gebruikt
; *
; * EXTMEM_MODE: wanneer het apparaat is geconfigureerd voor het uitvoeren van code
; * Van extern geheugen vanaf adres 0x80000000.
; *
; * RAM_MODE: wanneer het apparaat is geconfigureerd voor het uitvoeren van code
; * Van on-chip RAM vanaf adres 0x40000000.
; *
; * EXTERNAL_MODE: wanneer u de PIN2SEL waarden zijn geschreven waarmee
* De externe BUS bij het opstarten.
* /; Standaard definities van mode bits en Interrupt (I & F), vlaggen in de PSR's
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; toen ik bit is ingesteld, is IRQ
gehandicapten
F_Bit EQU 0x40; wanneer F bit is ingesteld, FIQ is
gehandicapten/ / <h> Stack configuratie (Stack Maten in bytes)
/ / <o0> Undefined Mode <0x0-0xFFFFFFFF: 8>
/ / <o1> Promotor 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>
/ / </ U>
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)
OPPERVLAKTE STACK, NOINIT, ReadWrite, ALIGN = 3
Stack_Mem SPACE USR_Stack_Size
__initial_sp SPACE ISR_Stack_Size
Stack_Top/ / <h> Heap Configuratie
/ / <o> Heap Size (in bytes) <0x0-0xFFFFFFFF>
/ / </ U>
Heap_Size EQU 0x00000000
OPPERVLAKTE Heap, NOINIT, ReadWrite, ALIGN = 3
__heap_base
Heap_Mem SPACE Heap_Size
__heap_limit; VPBDIV definities
VPBDIV EQU 0xE01FC100; VPBDIV Adres
/ / <e> VPBDIV Setup
/ / Peripheral Bus Clock Rate
/ / <o1.0..1> VPBDIV: VPB Klok
/ / <0 => VPB Klok = CPU Clock / 4
/ / <1 => VPB Klok = CPU Clock
/ / <2 => VPB Klok = 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) definities
PLL_BASE EQU 0xE01FC080; PLL Base Adres
PLLCON_OFS EQU 0x00; PLL Control Offset
PLLCFG_OFS EQU 0x04; PLL Configuratie Offset
PLLSTAT_OFS EQU 0x08; PLL Status Offset
PLLFEED_OFS EQU 0x0c; PLL Feed Offset
PLLCON_PLLE EQU (1 <<0); PLL inschakelen
PLLCON_PLLC EQU (1 <<1); PLL Connect
PLLCFG_MSEL EQU (0x1F <<0); PLL Multiplicatoreffect
PLLCFG_PSEL EQU (0x03 <<5); PLL Divider
PLLSTAT_PLOCK EQU (1 <<10); PLL Lock Status
/ / <e> PLL Setup
/ / <o1.0..4> MSEL: PLL Multiplicatoreffect Selectie
/ / <1-32> <# -1>
/ / M Prijs
/ / <o1.5..6> PSEL: PLL Divider Selectie
/ / <0 => 1 <1 => 2 <2 => 4 <3 => 8
/ / P-waarde
/ / </ E>
PLL_SETUP EQU 1
PLLCFG_Val EQU 0x00000024; Memory Accelerator Module (MAM) definities
MAM_BASE EQU 0xE01FC000; MAM Base Adres
MAMCR_OFS EQU 0x00; MAM Control Offset
MAMTIM_OFS EQU 0x04; MAM Timing Offset
/ / <e> MAM Setup
/ / <o1.0..1> MAM Control
/ / <0 => Gehandicapten
/ / <1 => Gedeeltelijk Ingeschakeld
/ / <2 => Volledig Ingeschakeld
/ / Mode
/ / <o2.0..2> MAM Timing
/ / <0 => Gereserveerd <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; External Memory Controller (EMC) definities
EMC_BASE EQU 0xFFE00000; EMC Base Adres
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> External Memory Controller (EMC)
EMC_SETUP EQU 0
/ / <e> Bank Configuratie 0 (BCFG0)
/ / <o1.0..3> IDCY: Stationair Cycles <0-15>
/ / <o1.5..9> WST1: Wacht Staten 1 <0-31>
/ / <o1.11..15> WST2: Wacht Staten 2 <0-31>
/ / <o1.10> RBLE: Lees Byte Lane inschakelen
/ / <o1.26> WP:
Write Protect
/ / <o1.27> BM: Burst rom
/ / <o1.28..29> MW: Geheugen Breedte <0 => 8-bits <1 => 16-bit
/ / <2 => 32-bits <3 => Gereserveerd
/ / </ E>
BCFG0_SETUP EQU 0
BCFG0_Val EQU 0x0000FBEF
/ / <e> Bank Configuratie 1 (BCFG1)
/ / <o1.0..3> IDCY: Stationair Cycles <0-15>
/ / <o1.5..9> WST1: Wacht Staten 1 <0-31>
/ / <o1.11..15> WST2: Wacht Staten 2 <0-31>
/ / <o1.10> RBLE: Lees Byte Lane inschakelen
/ / <o1.26> WP:
Write Protect
/ / <o1.27> BM: Burst rom
/ / <o1.28..29> MW: Geheugen Breedte <0 => 8-bits <1 => 16-bit
/ / <2 => 32-bits <3 => Gereserveerd
/ / </ E>
BCFG1_SETUP EQU 0
BCFG1_Val EQU 0x0000FBEF
/ / <e> Bank Configuratie 2 (BCFG2)
/ / <o1.0..3> IDCY: Stationair Cycles <0-15>
/ / <o1.5..9> WST1: Wacht Staten 1 <0-31>
/ / <o1.11..15> WST2: Wacht Staten 2 <0-31>
/ / <o1.10> RBLE: Lees Byte Lane inschakelen
/ / <o1.26> WP:
Write Protect
/ / <o1.27> BM: Burst rom
/ / <o1.28..29> MW: Geheugen Breedte <0 => 8-bits <1 => 16-bit
/ / <2 => 32-bits <3 => Gereserveerd
/ / </ E>
BCFG2_SETUP EQU 0
BCFG2_Val EQU 0x0000FBEF
/ / <e> Bank Configuratie 3 (BCFG3)
/ / <o1.0..3> IDCY: Stationair Cycles <0-15>
/ / <o1.5..9> WST1: Wacht Staten 1 <0-31>
/ / <o1.11..15> WST2: Wacht Staten 2 <0-31>
/ / <o1.10> RBLE: Lees Byte Lane inschakelen
/ / <o1.26> WP:
Write Protect
/ / <o1.27> BM: Burst rom
/ / <o1.28..29> MW: Geheugen Breedte <0 => 8-bits <1 => 16-bit
/ / <2 => 32-bits <3 => Gereserveerd
/ / </ E>
BCFG3_SETUP EQU 0
BCFG3_Val EQU 0x0000FBEF
/ / </ E> Einde van EMC; Extern Geheugen Pins definities
PINSEL2 EQU 0xE002C014; PINSEL2 Adres
PINSEL2_Val EQU 0x0E6149E4; CS0 .. 3, OE, WE, BLS0 .. 3,
; D0 .. 31, A2 .. 23, JTAG PinsPRESERVE8; Ruimte Definitie en Entry Point
; Startup-code moet worden gekoppeld aan eerste adres waar ze verwacht
rennen.
OPPERVLAKTE RESET, CODE, READONLY
ARM; Uitzondering Vectoren
; Mapped to Address 0.
; Absolute aanpakken modus worden gebruikt.
; Dummy Handlers zijn uitgevoerd als oneindige lussen die kunnen worden gewijzigd.
Vectoren LDR pc, Reset_Addr
LDR pc, Undef_Addr
LDR pc, SWI_Addr
LDR pc, PAbt_Addr
LDR pc, DAbt_Addr
NOP; Reserved Vector
LDR pc, IRQ_Addr
LDR pc [PC, #-0x0FF0]; Vector uit VicVectAddr
LDR pc, FIQ_Addr
INVOER OS_CPU_ARM_ExceptUndefInstrHndlr
INVOER OS_CPU_ARM_ExceptSwiHndlr
INVOER OS_CPU_ARM_ExceptPrefetchAbortHndlr
INVOER OS_CPU_ARM_ExceptDataAbortHndlr
INVOER OS_CPU_ARM_ExceptIrqHndlr
INVOER 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
UITVOER Reset_Handler
Reset_Handler; Setup Extern Geheugen Pins
INDIEN: DEF: EXTERNAL_MODE
LDR R0, = PINSEL2
LDR R1, = PINSEL2_Val
STR R1, [R0]
ENDIF; Setup External Memory Controller
INDIEN EMC_SETUP <> 0
LDR R0, = EMC_BASE
INDIEN BCFG0_SETUP <> 0
LDR R1, = BCFG0_Val
STR R1, [R0, # BCFG0_OFS]
ENDIF
INDIEN BCFG1_SETUP <> 0
LDR R1, = BCFG1_Val
STR R1, [R0, # BCFG1_OFS]
ENDIF
INDIEN BCFG2_SETUP <> 0
LDR R1, = BCFG2_Val
STR R1, [R0, # BCFG2_OFS]
ENDIF
INDIEN BCFG3_SETUP <> 0
LDR R1, = BCFG3_Val
STR R1, [R0, # BCFG3_OFS]
ENDIF
ENDIF; EMC_SETUP; Setup VPBDIV
INDIEN VPBDIV_SETUP <> 0
LDR R0, = VPBDIV
LDR R1, = VPBDIV_Val
STR R1, [R0]
ENDIF; Setup PLL
INDIEN PLL_SETUP <> 0
LDR R0, = PLL_BASE
MOV R1, # 0xAA
MOV R2, # 0x55
; Configureren en inschakelen 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]
; Wacht tot PLL Gesloten
PLL_Loop LDR R3, [R0, # PLLSTAT_OFS]
ANDS R3, R3, # PLLSTAT_PLOCK
BEQ PLL_Loop
; Switch to PLL Klok
MOV R3, # (PLLCON_PLLE: OF: PLLCON_PLLC)
STR R3, [R0, # PLLCON_OFS]
STR R1, [R0, # PLLFEED_OFS]
STR R2, [R0, # PLLFEED_OFS]
ENDIF; PLL_SETUP; Setup MAM
INDIEN 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 (wanneer Onderbreek Vectoren in RAM)
MEMMAP EQU 0xE01FC040; Memory Mapping Control
INDIEN: DEF: remap
LDR R0, = MEMMAP
INDIEN: DEF: EXTMEM_MODE
MOV R1, # 3
Elif: DEF: RAM_MODE
MOV R1, # 2
ALSE
MOV R1, # 1
ENDIF
STR R1, [R0]
ENDIF; Initialiseren Interrupt System
; ...; Setup Stack voor elke modus
LDR R0, = Stack_Top
; Voer Ongedefinieerd Instructie Mode en haar Stack Pointer
MSR CPSR_c, # Mode_UND: OF: I_Bit: OF: F_Bit
MOV SP, R0
SUB R0, R0, # UND_Stack_Size
; Voer Abort Mode en haar Stack Pointer
MSR CPSR_c, # Mode_ABT: OF: I_Bit: OF: F_Bit
MOV SP, R0
SUB R0, R0, # ABT_Stack_Size
; Voer FIQ Mode en haar Stack Pointer
MSR CPSR_c, # Mode_FIQ: OF: I_Bit: OF: F_Bit
MOV SP, R0
SUB R0, R0, # FIQ_Stack_Size
; Voer IRQ Mode en haar Stack Pointer
MSR CPSR_c, # Mode_IRQ: OF: I_Bit: OF: F_Bit
MOV SP, R0
SUB R0, R0, # IRQ_Stack_Size
; Voer Promotor Mode en haar Stack Pointer
MSR CPSR_c, # Mode_SVC: OF: I_Bit: OF: F_Bit
MOV SP, R0
SUB R0, R0, # SVC_Stack_Size
; Enter User Mode en haar Stack Pointer
MSR CPSR_c, # Mode_USR
INDIEN: DEF: __MICROLIB
UITVOER __initial_sp
ALSE
MOV SP, R0
SUB SL, SP, # USR_Stack_Size
ENDIF; Voer de C-code
INVOER __main
LDR R0, = __main
BX R0INDIEN: DEF: __MICROLIB
UITVOER __heap_base
UITVOER __heap_limit
ALSE
; User Initial Stack & Heap
AREA |. Tekst |, CODE, READONLY
INVOER __use_two_region_memory
UITVOER __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
ENDIFEINDE