Re: Keil RVDK UCOS masalah

E

eziggurat

Guest
Hai,

Saya mencoba untuk port UCOS ke LPC2103 menggunakan kode terakhir, tetapi saya tetap tidak bisa untuk bekerja.

Saya telah ditulis ulang saya kode untuk mengaktifkan dan LCD dengan latar
tanpa UCOS.Kode tanpa UCOS hanya memanggil
BackLightingOn () dan fungsi InitPort di main () dan ini bekerja
halus, tetapi saya ingin bisa mendapatkan UCOS berjalan.Kode di bawah ini menunjukkan
tugas dibuat untuk menghidupkan latar dan penundaan, OSTimeDlyHMSM ().
Kode suppose berisi beberapa tugas tapi saya sudah dikurangi menjadi satu, jadi saya
dapat mengetahui cara mendapatkan UCOS berjalan di LPC2103 oleh turning pada
belakang terang tapi tidak bisa melihat masalah pada kode.

Kode untuk kode utama ditunjukkan di bawah ini.

# include "LPC2103.h"
# include "os_cpu.h"
# include "cpu.h"
# include "app_cfg.h"
# include "ucos_ii.h"# define Fosc 16000000 / / Crystal
kekerapan, 10MHz ~ 25MHzŁŹshould sama seperti status yang sebenarnya.

# define Fcclk (Fosc * 3) / / Sistem
keseringan, harus (1 ~ 32) Multiples dari Fosc, dan harus sama atau
kurang dari 60MHz.# define Fpclk (Fcclk / 4) * 1 / / jam VPB
keseringan, harus 1A ˘ ˘ 2A Multiples dari 4 (Fcclk / 4).statis OS_STK AppTaskStartStk [APP_TASK_START_STK_SIZE];static void AppTaskStart (void * p_arg);

void tc3 (void) (
T3IR = 1; / / Hapus mengganggu bendera
OSTimeTick ();
FIOPIN1 ^ = 0x08; / / debugging
VICVectAddr = 0; / / mengakui interrupt

)

void StartTicker (void) (
T3MR0 = Fpclk/OS_TICKS_PER_SEC-1; / / 1mSec = 15000-1 counts at 15
Mhz PCLK
T3MCR = 3; / / interrupt dan Reset pada MR0
T3TCR = 1; / / Timer0 Aktifkan
VICVectAddr0 = (unsigned long) tc3; / / set interrupt vector dalam 0
VICVectCntl0 = 0x20 | VIC_TIMER3; / / menggunakannya untuk Timer 0
Mengganggu
VICIntEnable = 1 <<VIC_TIMER3; / / Aktifkan 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; / *
Nonaktifkan SEMUA interrupts * /
)

int main (void) (

BSP_IntDisAll (); / / menonaktifkan interrupts
OSInit ();OSTaskCreateExt (AppTaskStart, / * Buat
tugas awal * /
(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 fungsi * /
Initport (); / / menginisialisasinya di pelabuhan
/ * Membuat aplikasi tugas
* /

sementara (1) (/ * Tugas tubuh,
selalu tertulis sebagai infinite loop.* /BackLightingOn (); / / Belok CHY Aktif

OSTimeDlyHMSM (0, 0, 0, 5);

)
)/ *
************************************************** ****************************** \
*************************
* OS_CPU_ExceptHndlr ()
*
* Keterangan: Menangani ada pengecualian.
*
* Argumen (s): except_id ARM perkecualian ketik:
*
* 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
*
* Kembali (s): none.
*
* Caller (s): OS_CPU_ARM_EXCEPT_HANDLER (), yang dinyatakan dalam
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; / *
Baca interrupt vector dari VIC * /
sementara (pfnct! = (CPU_FNCT_VOID) 0) (/ *
Pastikan kita tidak memiliki pointer NULL * /
(* pfnct) (); / *
Menjalankan ISR untuk perangkat interrupting * /
VICVectAddr = 1; / *
VIC Acknowlege yang mengganggu * /
pfnct = (CPU_FNCT_VOID) VICVectAddr; / *
Baca interrupt vector dari VIC * /
)

) Else (

/ *
Infinite loop di lainnya pengecualian.* /
/ *
Harus diganti dengan perilaku lainnya (reboot, dll) * /
sementara (1) (
;
)
)
)Ditambahkan setelah 46 detik:Saya startup script di bawah ini.

;/************************************************ *****************************/
; / * STARTUP.S: Startup file untuk Philips LPC2000
* /
;/************************************************ *****************************/
; / * <<<Gunakan Wizard konfigurasi dalam Konteks Menu>>>
* /
;/************************************************ *****************************/
; / * File ini merupakan bagian dari uVision / ARM pengembangan perangkat.
* /
; / * Copyright (c) 2005-2007 Keil Software.Semua hak dilindungi undang-undang.
* /
; / * Software ini hanya dapat digunakan sesuai dengan persyaratan yang berlaku,
saat ini, * /
; / * Lisensi pengguna akhir dari KEIL yang kompatibel untuk versi KEIL
perangkat lunak * /
; / * Alat-alat pembangunan.Nothing else memberikan hak untuk menggunakan
perangkat lunak.* /
;/************************************************ *****************************/; / *
; * The STARTUP.S kode dijalankan setelah CPU Reset.File ini mungkin
; * Diterjemahkan dengan simbol SET.Dalam uVision ini SET
; * Simbol yang dimasukkan di bawah Pilihan - ASM - Tentukan.
; *
; * REMAP ketika mengatur startup kode initializes register MEMMAP
; * Yang overwrites pengaturan CPU konfigurasi pin.Itu
; * Startup dan mengganggu remapped dari vektor adalah:
; * 0x00000000 default (tidak remapped)
; * 0x80000000 bila digunakan EXTMEM_MODE
; * 0x40000000 bila digunakan RAM_MODE
; *
; * EXTMEM_MODE ketika mengatur perangkat dikonfigurasi untuk eksekusi kode
; * Dari eksternal memori mulai dari alamat 0x80000000.
; *
; * RAM_MODE ketika mengatur perangkat dikonfigurasi untuk eksekusi kode
; * Dari pada keping RAM diawali dengan alamat 0x40000000.
; *
; * EXTERNAL_MODE ketika mengatur PIN2SEL nilai-nilai yang tertulis yang memungkinkan
; Eksternal * BUS saat startup.
; * /; Standar definisi Mode bit dan interrupt (I & M) flag di 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; ketika saya sedikit diatur, adalah IRQ
cacat
F_Bit EQU 0x40; ketika M sedikit diatur, adalah FIQ
cacat; / / Konfigurasi <h> Stack (Stack Ukuran dalam Bytes)
; / / <o0> Undefined Mode <0x0-0xFFFFFFFF: 8>
; / / <o1> Supervisor Mode <0x0-0xFFFFFFFF: 8>
; / / <o2> Abort Mode <0x0-0xFFFFFFFF: 8>
; / / <o3> Cepat Mode interrupt <0x0-0xFFFFFFFF: 8>
; / / Mode <o4> interrupt <0x0-0xFFFFFFFF: 8>
; / / <o5> Pengguna / Sistem 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; / / <h> Heap Konfigurasi
; / / <o> Heap Ukuran (dalam Byte) <0x0-0xFFFFFFFF>
; / / </ H>

Heap_Size EQU 0x00000000

AREA Heap, NOINIT, READWRITE, align = 3
__heap_base
Heap_Mem SPACE Heap_Size
__heap_limit; VPBDIV definisi
VPBDIV EQU 0xE01FC100; VPBDIV Alamat

; / / <e> VPBDIV Setup
; / / Peripheral Bus Clock Rate
; / / <o1.0..1> VPBDIV: VPB Jam
; / / <0 => VPB Jam Jam = CPU / 4
; / / <1 => CPU = VPB Jam Jam
; / / <2 => VPB Jam Jam = CPU / 2
; / / <o1.4..5> XCLKDIV: XCLK Pin
; / / <0 => XCLK Pin = CPU Jam / 4
; / / <1 => XCLK Pin = CPU Jam
; / / <2 => XCLK Pin = CPU Jam / 2
; / / </ E>
VPBDIV_SETUP EQU 0
VPBDIV_Val EQU 0x00000000; Phase Locked Loop (PLL) definisi
PLL_BASE EQU 0xE01FC080; PLL Berdasarkan Alamat
PLLCON_OFS EQU 0x00; PLL Kontrol Offset
PLLCFG_OFS EQU 0x04; PLL Konfigurasi Offset
PLLSTAT_OFS EQU 0x08; PLL Status Offset
PLLFEED_OFS EQU 0x0C; PLL Feed Offset
PLLCON_PLLE EQU (1 <<0); PLL Aktifkan
PLLCON_PLLC EQU (1 <<1); PLL Sambung
PLLCFG_MSEL EQU (0x1F <<0); PLL Pengali
PLLCFG_PSEL EQU (0x03 <<5); PLL Divider
PLLSTAT_PLOCK EQU (1 <<10); PLL Lock Status

; / / <e> PLL Setup
; / / <o1.0..4> MSEL: PLL Pengali Seleksi
; / / <1-32> <# -1>
, / / M Nilai
; / / <o1.5..6> PSEL: PLL Divider Seleksi
; / / <0 => 1 <1 => 2 <2 => 4 <3 => 8
; / / P Nilai
; / / </ E>
PLL_SETUP EQU 1
PLLCFG_Val EQU 0x00000024; Memori Accelerator Module (Mam) definisi
MAM_BASE EQU 0xE01FC000; Mam Berdasarkan Alamat
MAMCR_OFS EQU 0x00; Mam Kontrol Offset
MAMTIM_OFS EQU 0x04; Mam Waktunya Offset

; / / <e> Mam Setup
; / / <o1.0..1> Mam Kontrol
; / / <0 => Cacat
; / / <1 => Sebagian Diaktifkan
; / / <2 => Layanan Diaktifkan
; / / Mode
; / / <o2.0..2> Mam Waktunya
; / / <0 => Reserved <1 => 1 <2 => 2 <3 => 3
; / / <4 => 4 <5 => 5 <6 => 6 <7 => 7
; / / Fetch siklus
; / / </ E>
MAM_SETUP EQU 1
MAMCR_Val EQU 0x00000002
MAMTIM_Val EQU 0x00000004; Memori Eksternal Controller (EMC) definisi
EMC_BASE EQU 0xFFE00000; EMC Berdasarkan Alamat
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> Memori Eksternal Controller (EMC)
EMC_SETUP EQU 0

; / / <e> Bank Konfigurasi 0 (BCFG0)
; / / <o1.0..3> IDCY: Idle siklus <0-15>
; / / <o1.5..9> WST1: Tunggu Serikat 1 <0-31>
; / / <o1.11..15> WST2: Tunggu Serikat 2 <0-31>
; / / <o1.10> RBLE: Baca Byte Lane Aktifkan
; / / <o1.26> WP: Write Protect
; / / <o1.27> BM: burst ROM
; / / <o1.28..29> MW: Memori Lebar <0 => 8-bit <1 => 16-bit
; / / <2 => 32-bit <3 => Reserved
; / / </ E>
BCFG0_SETUP EQU 0
BCFG0_Val EQU 0x0000FBEF

; / / <e> Bank Konfigurasi 1 (BCFG1)
; / / <o1.0..3> IDCY: Idle siklus <0-15>
; / / <o1.5..9> WST1: Tunggu Serikat 1 <0-31>
; / / <o1.11..15> WST2: Tunggu Serikat 2 <0-31>
; / / <o1.10> RBLE: Baca Byte Lane Aktifkan
; / / <o1.26> WP: Write Protect
; / / <o1.27> BM: burst ROM
; / / <o1.28..29> MW: Memori Lebar <0 => 8-bit <1 => 16-bit
; / / <2 => 32-bit <3 => Reserved
; / / </ E>
BCFG1_SETUP EQU 0
BCFG1_Val EQU 0x0000FBEF

; / / <e> Bank Konfigurasi 2 (BCFG2)
; / / <o1.0..3> IDCY: Idle siklus <0-15>
; / / <o1.5..9> WST1: Tunggu Serikat 1 <0-31>
; / / <o1.11..15> WST2: Tunggu Serikat 2 <0-31>
; / / <o1.10> RBLE: Baca Byte Lane Aktifkan
; / / <o1.26> WP: Write Protect
; / / <o1.27> BM: burst ROM
; / / <o1.28..29> MW: Memori Lebar <0 => 8-bit <1 => 16-bit
; / / <2 => 32-bit <3 => Reserved
; / / </ E>
BCFG2_SETUP EQU 0
BCFG2_Val EQU 0x0000FBEF

; / / <e> Bank Konfigurasi 3 (BCFG3)
; / / <o1.0..3> IDCY: Idle siklus <0-15>
; / / <o1.5..9> WST1: Tunggu Serikat 1 <0-31>
; / / <o1.11..15> WST2: Tunggu Serikat 2 <0-31>
; / / <o1.10> RBLE: Baca Byte Lane Aktifkan
; / / <o1.26> WP: Write Protect
; / / <o1.27> BM: burst ROM
; / / <o1.28..29> MW: Memori Lebar <0 => 8-bit <1 => 16-bit
; / / <2 => 32-bit <3 => Reserved
; / / </ E>
BCFG3_SETUP EQU 0
BCFG3_Val EQU 0x0000FBEF

; / / </ E> Akhir EMC; Memori Eksternal pin definisi
PINSEL2 EQU 0xE002C014; PINSEL2 Alamat
PINSEL2_Val EQU 0x0E6149E4; CS0 .. 3, OE, WE, BLS0 .. 3,
; D0 .. 31, A2 .. 23, JTAG pinPRESERVE8; Area Definisi dan Entry Point
; Startup Kode harus terhubung pertama di Alamat di mana ia berharap
berlari.

AREA RESET, KODE, Readonly
ARM; Perkecualian vektor
; Dipetakan ke alamat 0.
; Absolute addressing mode harus digunakan.
; Dummy penangan diimplementasikan sebagai infinite loops yang dapat dimodifikasi.

Vektor 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 dari VicVectAddr
LDR PC, FIQ_Addr

IMPORT OS_CPU_ARM_ExceptUndefInstrHndlr
IMPORT OS_CPU_ARM_ExceptSwiHndlr
IMPORT OS_CPU_ARM_ExceptPrefetchAbortHndlr
IMPORT OS_CPU_ARM_ExceptDataAbortHndlr
IMPORT OS_CPU_ARM_ExceptIrqHndlr
IMPORT 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

EKSPOR Reset_Handler
Reset_Handler; Konfigurasi pin Memori Eksternal
JIKA: DEF: EXTERNAL_MODE
LDR R0, = PINSEL2
LDR R1, = PINSEL2_Val
STR R1, [R0]
Endif; Setup Controller Memori Eksternal
JIKA EMC_SETUP <> 0
LDR R0, = EMC_BASE

JIKA BCFG0_SETUP <> 0
LDR R1, = BCFG0_Val
STR R1, [R0, # BCFG0_OFS]
Endif

JIKA BCFG1_SETUP <> 0
LDR R1, = BCFG1_Val
STR R1, [R0, # BCFG1_OFS]
Endif

JIKA BCFG2_SETUP <> 0
LDR R1, = BCFG2_Val
STR R1, [R0, # BCFG2_OFS]
Endif

JIKA BCFG3_SETUP <> 0
LDR R1, = BCFG3_Val
STR R1, [R0, # BCFG3_OFS]
Endif

Endif; EMC_SETUP; Setup VPBDIV
JIKA VPBDIV_SETUP <> 0
LDR R0, = VPBDIV
LDR R1, = VPBDIV_Val
STR R1, [R0]
Endif; Setup PLL
JIKA PLL_SETUP <> 0
LDR R0, = PLL_BASE
MOV R1, # 0xAA
MOV R2, # 0x55

; Konfigurasikan dan Aktifkan 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]

; Tunggu sampai PLL Dikunci
PLL_Loop LDR R3, [R0, # PLLSTAT_OFS]
ANDS R3, R3, # PLLSTAT_PLOCK
BEQ PLL_Loop

; Beralih ke PLL Jam
MOV R3, # (PLLCON_PLLE: ATAU: PLLCON_PLLC)
STR R3, [R0, # PLLCON_OFS]
STR R1, [R0, # PLLFEED_OFS]
STR R2, [R0, # PLLFEED_OFS]
Endif; PLL_SETUP; Setup Mam
JIKA 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; Memori Pemetaan (ketika berada di interrupt vektor RAM)
MEMMAP EQU 0xE01FC040; Memori Kontrol Pemetaan
JIKA: DEF: REMAP
LDR R0, = MEMMAP
JIKA: DEF: EXTMEM_MODE
MOV R1, # 3
Elif: DEF: RAM_MODE
MOV R1, # 2
ELSE
MOV R1, # 1
Endif
STR R1, [R0]
Endif; Menginisialisasinya interrupt Sistem
...; Setup Stack untuk setiap modus

LDR R0, = Stack_Top

; Masukkan Undefined Instruksi Mode dan mengatur Stack Pointer
MSR CPSR_c, # Mode_UND: ATAU: I_Bit: ATAU: F_Bit
MOV SP, R0
SUB R0, R0, # UND_Stack_Size

; Masukkan Abort Mode dan mengatur Stack Pointer
MSR CPSR_c, # Mode_ABT: ATAU: I_Bit: ATAU: F_Bit
MOV SP, R0
SUB R0, R0, # ABT_Stack_Size

; Masukkan FIQ Mode dan mengatur Stack Pointer
MSR CPSR_c, # Mode_FIQ: ATAU: I_Bit: ATAU: F_Bit
MOV SP, R0
SUB R0, R0, # FIQ_Stack_Size

; Masukkan IRQ Mode dan mengatur Stack Pointer
MSR CPSR_c, # Mode_IRQ: ATAU: I_Bit: ATAU: F_Bit
MOV SP, R0
SUB R0, R0, # IRQ_Stack_Size

; Masukkan Supervisor Mode dan mengatur Stack Pointer
MSR CPSR_c, # Mode_SVC: ATAU: I_Bit: ATAU: F_Bit
MOV SP, R0
SUB R0, R0, # SVC_Stack_Size

; Masukkan Mode User dan mengatur Stack Pointer
MSR CPSR_c, # Mode_USR
JIKA: DEF: __MICROLIB

EKSPOR __initial_sp

ELSE

MOV SP, R0
SUB SL, SP, # USR_Stack_Size

Endif; Masukkan kode C

IMPORT __main
LDR R0, = __main
BX R0JIKA: DEF: __MICROLIB

EKSPOR __heap_base
EKSPOR __heap_limit

ELSE
; Pengguna Initial Stack & Heap
AREA |. Teks |, KODE, Readonly

IMPORT __use_two_region_memory
EKSPOR __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
EndifEND

 

Welcome to EDABoard.com

Sponsor

Back
Top