00001 #ifndef _ARCH_ARM_AT91_H_
00002 #define _ARCH_ARM_AT91_H_
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00088 #if defined (MCU_AT91R40008)
00089 #include <arch/arm/at91x40.h>
00090 #elif defined (MCU_AT91SAM7X256)
00091 #include <arch/arm/at91sam7x.h>
00092 #elif defined (MCU_AT91SAM7S256)
00093 #include <arch/arm/at91sam7s.h>
00094 #elif defined (MCU_AT91SAM7SE512)
00095 #include <arch/arm/at91sam7se.h>
00096 #elif defined (MCU_AT91SAM9260)
00097 #include <arch/arm/at91sam9260.h>
00098 #elif defined(MCU_AT91SAM9XE512)
00099 #include <arch/arm/at91sam9xe.h>
00100 #endif
00101
00104
00105 #ifdef __GNUC__
00106
00110 #define IRQ_ENTRY() \
00111 asm volatile("sub lr, lr,#4" "\n\t" \
00112 "stmfd sp!,{r0-r12,lr}" "\n\t" \
00113 "mrs r1, spsr" "\n\t" \
00114 "stmfd sp!,{r1}" "\n\t")
00115
00119 #define IRQ_EXIT() \
00120 asm volatile("ldmfd sp!, {r1}" "\n\t" \
00121 "msr spsr_c, r1" "\n\t" \
00122 "ldr r0, =0xFFFFF000" "\n\t" \
00123 "str r0, [r0, #0x130]" "\n\t" \
00124 "ldmfd sp!, {r0-r12, pc}^" "\n\t")
00125
00129 #define FIQ_ENTRY() \
00130 asm volatile("sub lr, lr,#4" "\n\t" \
00131 "stmfd sp!,{r0-r7,lr}" "\n\t" \
00132 "mrs r1, spsr" "\n\t" \
00133 "stmfd sp!,{r1}" "\n\t")
00134
00138 #define FIQ_EXIT() \
00139 asm volatile("ldmfd sp!, {r1}" "\n\t" \
00140 "msr spsr_c, r1" "\n\t" \
00141 "ldr r0, =0xFFFFF000" "\n\t" \
00142 "str r0, [r0, #0x130]" "\n\t" \
00143 "ldmfd sp!, {r0-r7, pc}^" "\n\t")
00144
00145 #else
00146
00147 #define IRQ_ENTRY() \
00148 asm("sub lr, lr,#4\n" \
00149 "stmfd sp!,{r0-r12,lr}\n" \
00150 "mrs r1, spsr\n" \
00151 "stmfd sp!,{r1}\n")
00152
00153 #define IRQ_EXIT() \
00154 asm("ldmfd sp!, {r1}\n" \
00155 "msr spsr_c, r1\n" \
00156 ";ldr r0, =0xFFFFF000\n" \
00157 "str r0, [r0, #0x130]\n" \
00158 "ldmfd sp!, {r0-r12, pc}^")
00159
00160 #define FIQ_ENTRY() \
00161 asm("sub lr, lr,#4\n" \
00162 "stmfd sp!,{r0-r7,lr}\n" \
00163 "mrs r1, spsr\n" \
00164 "stmfd sp!,{r1}\n")
00165
00166 #define FIQ_EXIT() \
00167 asm("ldmfd sp!, {r1}\n" \
00168 "msr spsr_c, r1\n" \
00169 ";ldr r0, =0xFFFFF000\n" \
00170 "str r0, [r0, #0x130]\n" \
00171 "ldmfd sp!, {r0-r7, pc}^")
00172
00173 #endif
00174
00177 #ifndef __ASSEMBLER__
00178 extern void McuInit(void);
00179 #endif
00180
00181 #endif