Эти примеры ориентированы на С - без классов Точнее, в этих примерах в cstartup нет запуска конструкторов глобальных объектов. Я как раз с этих примеров и начинал разбираться в процессором и убил кучу времени, пока не наткнулся на сей факт. После чего с помощью представителей конференции, в частности д__, принял решение использовать за основу cstartup из стандартной IAR библиотеки. Но в примерах от Atmel и IAR библиотеке по разному инициализируется стек.
IAR:
; Mode, correspords to bits 0-5 in CPSR
MODE_BITS DEFINE 0x1F ; Bit mask for mode bits in CPSR
USR_MODE DEFINE 0x10 ; User mode
FIQ_MODE DEFINE 0x11 ; Fast Interrupt Request mode
IRQ_MODE DEFINE 0x12 ; Interrupt Request mode
SVC_MODE DEFINE 0x13 ; Supervisor mode
ABT_MODE DEFINE 0x17 ; Abort mode
UND_MODE DEFINE 0x1B ; Undefined Instruction mode
SYS_MODE DEFINE 0x1F ; System mode
;---покоцано
; Initialize the stack pointers.
; The pattern below can be used for any of the exception stacks:
; FIQ, IRQ, SVC, ABT, UND, SYS.
; The USR mode uses the same stack as SYS.
; The stack segments must be defined in the linker command file,
; and be declared above.
mrs r0,cpsr ; Original PSR value
bic r0,r0,#MODE_BITS ; Clear the mode bits
orr r0,r0,#IRQ_MODE ; Set IRQ mode bits
msr cpsr_c,r0 ; Change the mode
ldr sp,=SFE(IRQ_STACK) & 0xFFFFFFF8 ; End of IRQ_STACK
bic r0,r0,#MODE_BITS ; Clear the mode bits
orr r0,r0,#SYS_MODE ; Set System mode bits
msr cpsr_c,r0 ; Change the mode
ldr sp,=SFE(CSTACK) & 0xFFFFFFF8 ; End of CSTACK
Atmel:
;------------------------------------------------------------------------------
;- Top of Stack Definition
;-------------------------
;- Interrupt and Supervisor Stack are located at the top of internal memory in
;- order to speed the exception handling context saving and restoring.
;- ARM_MODE_SVC (Application, C) Stack is located at the top of the external memory.
;------------------------------------------------------------------------------
IRQ_STACK_SIZE EQU (2*8*4) ; 2 words per interrupt priority level
ARM_MODE_FIQ EQU 0x11
ARM_MODE_IRQ EQU 0x12
ARM_MODE_SVC EQU 0x13
I_BIT EQU 0x80
F_BIT EQU 0x40
;------------------------------------------------------------------------------
;- Setup the stack for each mode
;-------------------------------
ldr r0, =__iramend
;- Set up Fast Interrupt Mode and set FIQ Mode Stack
msr CPSR_c, #ARM_MODE_FIQ | I_BIT | F_BIT
;- Init the FIQ register
ldr r8, =AT91C_BASE_AIC
;- Set up Interrupt Mode and set IRQ Mode Stack
msr CPSR_c, #ARM_MODE_IRQ | I_BIT | F_BIT
mov r13, r0 ; Init stack IRQ
sub r0, r0, #IRQ_STACK_SIZE
;- Enable interrupt & Set up Supervisor Mode and set Supervisor Mode Stack
msr CPSR_c, #ARM_MODE_SVC
mov r13, r0
Может это суть одно и тоже ?
Отдельная тема - обработчик прерываний FIQ и IRQ, которых в библиотеке вовсе нет. Либо я плохо искал. Зато в примере от Atmel они есть, но это - другой топик.
За ссылочку на arm.com - отдельное спасибо. Там действительно есть документ ARM7TDMI r4p1 Technical Reference Manual, котором есть немного информации по режимам.
Мне же хотелось узнать о практическом применении разных режимов.
В частности, зачем нужен режим System ?
Для чего нужен режим Supervisor ?-
- ИАРовский стартап - общий для всех АРМов, а атмеловский учитывает особенности AT91SAM7 Alexandr1(404 знак., 17.06.2005 15:03,
)
- Мало конкретики Master_005(653 знак., 20.06.2005 11:48,
)
- Мало конкретики Master_005(653 знак., 20.06.2005 11:48,
- ИАРовский стартап - общий для всех АРМов, а атмеловский учитывает особенности AT91SAM7 Alexandr1(404 знак., 17.06.2005 15:03,