Я начинаю только программировать на микроконтроллерах. Сейчас пишу на "С" в мVision 3 (Keil) RealView Compiler для LPC2148 на MCD2140. "UART0, UART1 управляемые прерыванием".
Как образец, дали чужой проект для LPC2129.
Чужой проект при компиляции без ошибок.
Мой же выдает ошибку , где Macros for Interrupt Nesting
- Код: Выделить всё
// Macros for Interrupt Nesting
#define IENABLE /* Nested Interrupts Entry */ \
__asm \
{ \
MRS LR, SPSR \
} /* Copy SPSR_irq to LR */ \
__asm \
{ \
STMFD SP!, \
{ \
LR \
} \
} /* Save SPSR_irq */ \
__asm \
{ \
MSR CPSR_c, #0x1F \
} /* Enable IRQ (Sys Mode) */ \
__asm \
{ \
STMFD SP!, \
{ \
LR \
} \
} /* Save LR */
#define IDISABLE /* Nested Interrupts Exit */ \
__asm \
{ \
LDMFD SP!, \
{ \
LR \
} \
} /* Restore LR */ \
__asm \
{ \
MSR CPSR_c, #0x92 \
} /* Disable IRQ (IRQ Mode) */ \
__asm \
{ \
LDMFD SP!, \
{ \
LR \
} \
} /* Restore SPSR_irq to LR */ \
__asm \
{ \
MSR SPSR_cxsf, LR \
} /* Copy LR to SPSR_irq */ \
\
Ошибка:
- Код: Выделить всё
uart0.c(132): error: #20: identifier "LR" is undefined
uart0.c(132): error: #20: identifier "SP" is undefined
uart0.c(132): error: #20: identifier "LR" is undefined
uart0.c(132): warning: #1287-D: LDM/STM instruction may be expanded
uart0.c(132): error: #20: identifier "SP" is undefined
...........
Чужой работает, тк в "Project->Manage->Components Environment und Books" во вкладке "Folders/Extensions" стоит галочка на "Use Setting For TOLLS.INI". (в моем же галочка где "_Use RealView Compiler")
Галку переставить невозможно. Только если открыть чужой проект и тут же создать новый, то галочка будет у "Use Setting For TOLLS.INI". При компиляции уже прежней ошибки нет, но ошибки на Startup.s.
Помогите.....
Как управлять UART прерыванием, используя IENABLE и IDISABLE с asm Macros for Interrupt Nesting.
Спасибо.