Re: Keil RVDK UCOS проблем

E

eziggurat

Guest
Здрасти,

Аз съм се опитват да пристанище UCOS да LPC2103 използвайки най-код, но аз все още не може да се тя да работи.

Имам пренаписана моя код, за да включите LCD Фоново с и
без UCOS.Кодът без UCOS Просто се обадете на
BackLightingOn () и InitPort функции в главното () и това работи
добре, но аз искам да мога да отида UCOS вървят.Кодът по-долу показва
Задачата е създаден, за да включите в Фоново и забавяне, OSTimeDlyHMSM ().
Кодът Предполагам, съдържат няколко задачи, но имам намалена до един, така ли
може да измислим как да се UCOS вървят по LPC2103 чрез завъртане на
задната светлина, но не мога да видя проблема в кода.

Кодът за основния код е показано по-долу.

# включват "LPC2103.h"
# включват "os_cpu.h"
# включват "cpu.h"
# включват "app_cfg.h"
# включват "ucos_ii.h"# определят Fosc 16000000 / / Crystal
frequence, 10MHz ~ 25MHzŁŹshould бъдат същите, както действителното състояние.

# определят Fcclk (Fosc * 3) / / система
frequence, трябва да бъдат (1 ~ 32) кратните на Fosc, и следва да бъде равна или
по-малко от 60MHz.# определят Fpclk (Fcclk / 4) * 1 / / VPB часовник
frequence, трябва да бъде 1а ˘ 2а ˘ 4 кратните на (Fcclk / 4).статични OS_STK AppTaskStartStk [APP_TASK_START_STK_SIZE];статични недействителни AppTaskStart (недействителни * p_arg);

недействителни tc3 (нищожна) (
T3IR = 1; / / Ясно прекъсне флаг
OSTimeTick ();
FIOPIN1 ^ = 0x08; / / отстраняване на грешки
VICVectAddr = 0; / / Разбрано Прекъсване

)

недействителни StartTicker (нищожна) (
T3MR0 = Fpclk/OS_TICKS_PER_SEC-1; / / 1mSec = 15000-1 брои при 15
Mhz PCLK
T3MCR = 3; / / Прекъсване и Нулиране на MR0
T3TCR = 1; / / Timer0 Включване
VICVectAddr0 = (неподписан дълго) tc3; / / набор прекъсне вектор в 0
VICVectCntl0 = 0x20 | VIC_TIMER3; / / я използвате за Таймер 0
Прекъсване
VICIntEnable = 1 <<VIC_TIMER3; / / Разрешаване Timer0 Прекъсване
)недействителни BackLightingOn (нищожна) (

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

недействителни Initport (нищожна) (
IODIR = 0x0C81000C;
FIODIR0 = 0x0C;
FIODIR2 = 0x81;
FIODIR3 = 0x0C;
FIOPIN2 = 0x00;
FIOPIN3 = 0x00;
FIODIR1 = 0x08;
FIOPIN1 = 0x00;
)недействителни BSP_IntDisAll (недействителни)
(
VICIntEnClr = 0xFFFFFFFFL; / *
Изключване на всички прекъсва * /
)

INT главната (нищожна) (

BSP_IntDisAll (); / / изключите прекъсва
OSInit ();OSTaskCreateExt (AppTaskStart, / * Създаване
Задачата на проекта * /
(недействителни *) 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,
(недействителни *) 0,
OS_TASK_OPT_STK_CHK | OS_TASK_OPT_STK_CLR);OSStart ();

възвращаемост (0);
)статични недействителни AppTaskStart (недействителни * p_arg)
((нищожна) p_arg;
OS_CPU_InitExceptVect ();

SCS = 0x03;
ако (WDMOD & 0x04) (
WDMOD & = ~ 0x04;
)

StartTicker ();
/ / BSP_Init (); / *
Инициализиране БСП функции * /
Initport (); / / Initialise пристанища
/ * Създаване на заявлението задачи
* /

докато (1) (/ * Задача тяло,
Винаги написани като безкраен цикъл.* /BackLightingOn (); / / Завийте Фоново На

OSTimeDlyHMSM (0, 0, 0, 5);

)
)/ *
************************************************** ****************************** \
*************************
* OS_CPU_ExceptHndlr ()
*
* Описание: дръжка всякакви изключения.
*
* Аргументът (и): except_id ARM изключение тип:
*
* 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
*
* Завръщане (и): Няма.
*
* Обаждането (и): OS_CPU_ARM_EXCEPT_HANDLER (), която е обявена в
os_cpu_a.s.
************************************************** ****************************** \
*************************
* /

недействителни OS_CPU_ExceptHndlr (CPU_INT32U except_id)
(
CPU_FNCT_VOID pfnct;ако (except_id == OS_CPU_ARM_EXCEPT_IRQ) (

pfnct = (CPU_FNCT_VOID) VICVectAddr; / *
Прочетете прекъсне бацилоносителя от Vic * /
докато (pfnct! = (CPU_FNCT_VOID) 0) (/ *
Уверете се, че ние не разполагате с NULL показалка * /
(* pfnct) (); / *
Изпълнение на ISR за прекъсването на устройството * /
VICVectAddr = 1; / *
Acknowlege на Вик прекъсне * /
pfnct = (CPU_FNCT_VOID) VICVectAddr; / *
Прочетете прекъсне бацилоносителя от Vic * /
)

Иначе ()

/ *
Infinite отклонение по други изключения.* /
/ *
Следва да бъдат заменени от други поведение (рестартиране
и т.н.) * /
докато (1) (
;
)
)
)Добавени след 46 секунди:Моят стартиране на скрипта е показано по-долу.

;/************************************************ *****************************/
; / * STARTUP.S: Startup файл за Philips LPC2000
* /
;/************************************************ *****************************/
; / * <<<Използвайте конфигурация Wizard в контекстното меню>>>
* /
;/************************************************ *****************************/
; / * Този файл е част от uVision / ARM развитие инструменти.
* /
; / * Copyright (C) 2005-2007 Keil софтуер.Всички права запазени.
* /
; / * Този софтуер може да се използва само при условията на валидна,
ток, * /
; / * Краен потребител лиценз от KEIL за съвместима версия на KEIL
софтуер * /
; / * Развитие инструменти.Нищо друго ви дава правото да използва тази
софтуер.* /
;/************************************************ *****************************/; / *
* В STARTUP.S код е изпълнена след CPU Нулиране.Този файл може да бъде
* Преведено със следните SET символи.В тези uVision SET
* Символите са влезли в Опции - ASM - Определете.
*
* REMAP: когато определя стартовия код initializes регистъра MEMMAP
* Който заменя настройките на CPU конфигурация пина.В
* Стартиране и прекъсват вектори са remapped от:
* 0x00000000 настройката по подразбиране (не remapped)
* 0x80000000, когато се използва EXTMEM_MODE
* 0x40000000, когато се използва RAM_MODE
*
* EXTMEM_MODE:
Когато настроите устройството е конфигуриран за изпълнение на код
* От външна памет, което започва от адрес 0x80000000.
*
* RAM_MODE:
Когато настроите устройството е конфигуриран за изпълнение на код
* От по-RAM чип започва адрес 0x40000000.
*
* EXTERNAL_MODE: когато зададете PIN2SEL стойности са написани, които позволяват
* Външните BUS при стартиране.
* /; Стандарт определения на Режим бита и Прекъсване (I & F) знамена в 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; когато късче е определен, е IRQ
увреждания
F_Bit EQU 0x40; когато F късче е определен, е FIQ
увреждания; / / <h> Стека конфигурация (стека размери в байтове)
; / / <o0> Неопределен Режим <0x0-0xFFFFFFFF: 8>
; / / <o1> Надзорен режим <0x0-0xFFFFFFFF: 8>
; / / <o2> Прекратява Режим <0x0-0xFFFFFFFF: 8>
; / / <o3> Бърза Прекъсване Режим <0x0-0xFFFFFFFF: 8>
; / / <o4> Прекъсване Режим <0x0-0xFFFFFFFF: 8>
; / / <o5> Потребител / Система Режим <0x0-0xFFFFFFFF: 8>
; / / </ Ч>

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)

ОБЛАСТ стека, NOINIT, READWRITE, Align = 3

Stack_Mem SPACE USR_Stack_Size
__initial_sp SPACE ISR_Stack_Size

Stack_Top; / / <h> Халди Конфигурация
; / / <o> Халди размер (в байтове) <0x0-0xFFFFFFFF>
; / / </ Ч>

Heap_Size EQU 0x00000000

ОБЛАСТ грамада, NOINIT, READWRITE, Align = 3
__heap_base
Heap_Mem SPACE Heap_Size
__heap_limit; VPBDIV дефиниции
VPBDIV EQU 0xE01FC100; VPBDIV Адрес

; / / <e> VPBDIV Настройка
; / / Периферна автобус Часовник Оцени
; / / <o1.0..1> VPBDIV: VPB Часовник
; / / <0 => = VPB Часовник Часовник CPU / 4
; / / <1 => VPB CPU = Часовник Часовник
; / / <2 => = VPB Часовник Часовник CPU / 2
; / / <o1.4..5> XCLKDIV: XCLK Пин
; / / <0 => XCLK Пин CPU = Часовник / 4
; / / <1 => XCLK Пин CPU = Часовник
; / / <= 2> XCLK Пин CPU = Часовник / 2
; / / </ E>
VPBDIV_SETUP EQU 0
VPBDIV_Val EQU 0x00000000; Фаза Затворени Непрекъснато (PLL) определения
PLL_BASE EQU 0xE01FC080; PLL Основен Адрес
PLLCON_OFS EQU 0x00; PLL контрол Офсетов
PLLCFG_OFS EQU 0x04; PLL конфигурация Офсетов
PLLSTAT_OFS EQU 0x08; PLL Статус Офсетов
PLLFEED_OFS EQU 0x0C; PLL Feed Офсетов
PLLCON_PLLE EQU (1 <<0); PLL Включване
PLLCON_PLLC EQU (1 <<1); PLL Свързване
PLLCFG_MSEL EQU (0x1F <<0); PLL Множителят
PLLCFG_PSEL EQU (0x03 <<5); PLL делач
PLLSTAT_PLOCK EQU (1 <<10); PLL Заключи Статус

; / / <e> PLL Настройка
; / / <o1.0..4> MSEL: PLL Множителят селекция
; / / <1-32> <# -1>
; / / M Стойност
; / / <o1.5..6> PSEL: PLL делач селекция
; / / <0 => 1 <1 => 2 <2 => 4 <3 => 8
; / / P Стойност
; / / </ E>
PLL_SETUP EQU 1
PLLCFG_Val EQU 0x00000024; Памет Accelerator Модул (MAM) определения
MAM_BASE EQU 0xE01FC000; MAM Основен Адрес
MAMCR_OFS EQU 0x00; MAM контрол Офсетов
MAMTIM_OFS EQU 0x04; MAM Времето Офсетов

; / / <e> MAM Настройка
; / / <o1.0..1> MAM контрол
; / / <0 => инвалиди
; / / <1 => Частично Активирана
; / / <= 2> Напълно Активирана
; / / Режим
; / / <o2.0..2> MAM Времето
; / / <0 => Запазени <1 => 1 <2 => 2 <3 => 3
; / / <4 => 4 <5 => 5 <6 => 6 <7 => 7
; / / Донеси цикъла
; / / </ E>
MAM_SETUP EQU 1
MAMCR_Val EQU 0x00000002
MAMTIM_Val EQU 0x00000004; Външна памет контролер (EMC) определения
EMC_BASE EQU 0xFFE00000; EMC Основен Адрес
BCFG0_OFS EQU 0x00; BCFG0 Офсетов
BCFG1_OFS EQU 0x04; BCFG1 Офсетов
BCFG2_OFS EQU 0x08; BCFG2 Офсетов
BCFG3_OFS EQU 0x0C; BCFG3 Офсетов

; / / <e> Външна памет контролер (EMC)
EMC_SETUP EQU 0

; / / <e> Банка конфигурация 0 (BCFG0)
; / / <o1.0..3> IDCY: свободен цикъла <0-15>
; / / <o1.5..9> WST1: Чакай-членки 1 <0-31>
; / / <o1.11..15> WST2: Чакай-членки 2 <0-31>
; / / <o1.10> RBLE: Прочетете Byte Lane Включване
; / / <o1.26> WP: Напишете Защитете
; / / <o1.27> УС: пръсване ROM
; / / <o1.28..29> MW: Памет широчина <0 => 8-битов <1 => 16-битов
; / / <2 => 32-битово <3 => Запазени
; / / </ E>
BCFG0_SETUP EQU 0
BCFG0_Val EQU 0x0000FBEF

; / / <e> Банка Конфигурация 1 (BCFG1)
; / / <o1.0..3> IDCY: свободен цикъла <0-15>
; / / <o1.5..9> WST1: Чакай-членки 1 <0-31>
; / / <o1.11..15> WST2: Чакай-членки 2 <0-31>
; / / <o1.10> RBLE: Прочетете Byte Lane Включване
; / / <o1.26> WP: Напишете Защитете
; / / <o1.27> УС: пръсване ROM
; / / <o1.28..29> MW: Памет широчина <0 => 8-битов <1 => 16-битов
; / / <2 => 32-битово <3 => Запазени
; / / </ E>
BCFG1_SETUP EQU 0
BCFG1_Val EQU 0x0000FBEF

; / / <e> Банка Конфигурация 2 (BCFG2)
; / / <o1.0..3> IDCY: свободен цикъла <0-15>
; / / <o1.5..9> WST1: Чакай-членки 1 <0-31>
; / / <o1.11..15> WST2: Чакай-членки 2 <0-31>
; / / <o1.10> RBLE: Прочетете Byte Lane Включване
; / / <o1.26> WP: Напишете Защитете
; / / <o1.27> УС: пръсване ROM
; / / <o1.28..29> MW: Памет широчина <0 => 8-битов <1 => 16-битов
; / / <2 => 32-битово <3 => Запазени
; / / </ E>
BCFG2_SETUP EQU 0
BCFG2_Val EQU 0x0000FBEF

; / / <e> Банка Конфигурация 3 (BCFG3)
; / / <o1.0..3> IDCY: свободен цикъла <0-15>
; / / <o1.5..9> WST1: Чакай-членки 1 <0-31>
; / / <o1.11..15> WST2: Чакай-членки 2 <0-31>
; / / <o1.10> RBLE: Прочетете Byte Lane Включване
; / / <o1.26> WP: Напишете Защитете
; / / <o1.27> УС: пръсване ROM
; / / <o1.28..29> MW: Памет широчина <0 => 8-битов <1 => 16-битов
; / / <2 => 32-битово <3 => Запазени
; / / </ E>
BCFG3_SETUP EQU 0
BCFG3_Val EQU 0x0000FBEF

; / / </ E> Край на EMC; Външна памет Pins дефиниции
PINSEL2 EQU 0xE002C014; PINSEL2 Адрес
PINSEL2_Val EQU 0x0E6149E4; CS0 .. 3, OE, НИЕ, BLS0 .. 3,
; D0 .. 31, А2 .. 23, JTAG PinsPRESERVE8; Площ Определение и влизането Точка
; Startup кодекс трябва да бъдат свързани в първия адрес, на който той очаква да
бягам.

ОБЛАСТ RESET, Кодекса за четене
ARM; Изключение бацилоносители
; Картографирани За да се занимае с 0.
; Абсолютни адресиране режим трябва да бъде използван.
; Dummy хендлери са приложени като безкраен профили, които могат да бъдат модифицирани.

Бацилоносители LDR компютър, Reset_Addr
LDR PC, Undef_Addr
LDR PC, SWI_Addr
LDR PC, PAbt_Addr
LDR PC, DAbt_Addr
Ноември; запазени Векторни
LDR PC, IRQ_Addr
LDR PC, [PC, #-0x0FF0]; бацилоносителя от VicVectAddr
LDR PC, FIQ_Addr

ВНОСНИ OS_CPU_ARM_ExceptUndefInstrHndlr
ВНОСНИ OS_CPU_ARM_ExceptSwiHndlr
ВНОСНИ OS_CPU_ARM_ExceptPrefetchAbortHndlr
ВНОСНИ OS_CPU_ARM_ExceptDataAbortHndlr
ВНОСНИ OS_CPU_ARM_ExceptIrqHndlr
ВНОСНИ 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
ноември
IRQ_Addr DCD OS_CPU_ARM_ExceptIrqHndlr
FIQ_Addr DCD OS_CPU_ARM_ExceptFiqHndlr

; Undef_Handler Б Undef_Handler
; SWI_Handler Б SWI_Handler
; PAbt_Handler Б PAbt_Handler
; DAbt_Handler Б DAbt_Handler
; IRQ_Handler Б IRQ_Handler
; FIQ_Handler Б FIQ_Handler; Нулиране Handler

ИЗНОС Reset_Handler
Reset_Handler; Настройка Външна памет Pins
АКО: DEF: EXTERNAL_MODE
LDR R0, = PINSEL2
LDR R1, = PINSEL2_Val
STR R1, [R0]
ENDIF; Настройка Външна памет контрольор
АКО EMC_SETUP <> 0
LDR R0, = EMC_BASE

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

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

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

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

ENDIF; EMC_SETUP; Настройка VPBDIV
АКО VPBDIV_SETUP <> 0
LDR R0, = VPBDIV
LDR R1, = VPBDIV_Val
STR R1, [R0]
ENDIF; Настройка PLL
АКО PLL_SETUP <> 0
LDR R0, = PLL_BASE
MOV R1, # 0xAA
MOV R2, # 0x55

; Конфигурирай и позволяват 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]

; Изчакайте докато PLL Затворени
PLL_Loop LDR R3, [R0, # PLLSTAT_OFS]
ANDS R3, R3, # PLLSTAT_PLOCK
BEQ PLL_Loop

; Превключи на PLL Часовник
MOV R3, # (PLLCON_PLLE: или: PLLCON_PLLC)
STR R3, [R0, # PLLCON_OFS]
STR R1, [R0, # PLLFEED_OFS]
STR R2, [R0, # PLLFEED_OFS]
ENDIF; PLL_SETUP; Настройка MAM
АКО 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; Картографиране на паметта (когато Прекъсване вектори са в RAM)
MEMMAP EQU 0xE01FC040; Памет Картографиране контрол
АКО: DEF: REMAP
LDR R0, = MEMMAP
АКО: DEF: EXTMEM_MODE
MOV R1, # 3
ELIF: DEF: RAM_MODE
MOV R1, # 2
ELSE
MOV R1, # 1
ENDIF
STR R1, [R0]
ENDIF; Initialise Прекъсване система
; ...; Настройка стека за всеки режим

LDR R0, = Stack_Top

; Въведете Неопределен Инструкция Режим постави и стека Pointer
MSR CPSR_c, # Mode_UND: или: I_Bit: или: F_Bit
MOV SP, R0
SUB R0, R0, # UND_Stack_Size

; Въведете прекратява Режим постави и стека Pointer
MSR CPSR_c, # Mode_ABT: или: I_Bit: или: F_Bit
MOV SP, R0
SUB R0, R0, # ABT_Stack_Size

; Въведете FIQ Режим постави и стека Pointer
MSR CPSR_c, # Mode_FIQ: или: I_Bit: или: F_Bit
MOV SP, R0
SUB R0, R0, # FIQ_Stack_Size

; Въведете IRQ Режим постави и стека Pointer
MSR CPSR_c, # Mode_IRQ: или: I_Bit: или: F_Bit
MOV SP, R0
SUB R0, R0, # IRQ_Stack_Size

; Въведете надзорен режим и определя неговите стека Pointer
MSR CPSR_c, # Mode_SVC: или: I_Bit: или: F_Bit
MOV SP, R0
SUB R0, R0, # SVC_Stack_Size

; Въведи Потребител Начин постави и стека Pointer
MSR CPSR_c, # Mode_USR
АКО: DEF: __MICROLIB

ИЗНОС __initial_sp

ELSE

MOV SP, R0
SUB SL, SP, # USR_Stack_Size

ENDIF; Въведете C код

ВНОСНИ __main
LDR R0, = __main
BX R0АКО: DEF: __MICROLIB

ИЗНОС __heap_base
ИЗНОС __heap_limit

ELSE
; Потребител Първоначално стека & грамада
ЗОНА |. Текст |, Кодекса за четене

ВНОСНИ __use_two_region_memory
ИЗНОС __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