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
00085 #if defined (MCU_AT91R40008)
00086 #include <arch/arm/at91x40.h>
00087 #elif defined (MCU_AT91SAM7X256)
00088 #include <arch/arm/at91sam7x.h>
00089 #elif defined (MCU_AT91SAM7S256)
00090 #include <arch/arm/at91sam7s.h>
00091 #elif defined (MCU_AT91SAM7SE512)
00092 #include <arch/arm/at91sam7se.h>
00093 #elif defined (MCU_AT91SAM9260)
00094 #include <arch/arm/at91sam9260.h>
00095 #endif
00096
00099
00100 #ifdef __GNUC__
00101
00105 #define IRQ_ENTRY() \
00106 asm volatile("sub lr, lr,#4" "\n\t" \
00107 "stmfd sp!,{r0-r12,lr}" "\n\t" \
00108 "mrs r1, spsr" "\n\t" \
00109 "stmfd sp!,{r1}" "\n\t")
00110
00114 #define IRQ_EXIT() \
00115 asm volatile("ldmfd sp!, {r1}" "\n\t" \
00116 "msr spsr_c, r1" "\n\t" \
00117 "ldr r0, =0xFFFFF000" "\n\t" \
00118 "str r0, [r0, #0x130]" "\n\t" \
00119 "ldmfd sp!, {r0-r12, pc}^" "\n\t")
00120
00124 #define FIQ_ENTRY() \
00125 asm volatile("sub lr, lr,#4" "\n\t" \
00126 "stmfd sp!,{r0-r7,lr}" "\n\t" \
00127 "mrs r1, spsr" "\n\t" \
00128 "stmfd sp!,{r1}" "\n\t")
00129
00133 #define FIQ_EXIT() \
00134 asm volatile("ldmfd sp!, {r1}" "\n\t" \
00135 "msr spsr_c, r1" "\n\t" \
00136 "ldr r0, =0xFFFFF000" "\n\t" \
00137 "str r0, [r0, #0x130]" "\n\t" \
00138 "ldmfd sp!, {r0-r7, pc}^" "\n\t")
00139
00140 #else
00141
00142 #define IRQ_ENTRY() \
00143 asm("sub lr, lr,#4\n" \
00144 "stmfd sp!,{r0-r12,lr}\n" \
00145 "mrs r1, spsr\n" \
00146 "stmfd sp!,{r1}\n")
00147
00148 #define IRQ_EXIT() \
00149 asm("ldmfd sp!, {r1}\n" \
00150 "msr spsr_c, r1\n" \
00151 ";ldr r0, =0xFFFFF000\n" \
00152 "str r0, [r0, #0x130]\n" \
00153 "ldmfd sp!, {r0-r12, pc}^")
00154
00155 #define FIQ_ENTRY() \
00156 asm("sub lr, lr,#4\n" \
00157 "stmfd sp!,{r0-r7,lr}\n" \
00158 "mrs r1, spsr\n" \
00159 "stmfd sp!,{r1}\n")
00160
00161 #define FIQ_EXIT() \
00162 asm("ldmfd sp!, {r1}\n" \
00163 "msr spsr_c, r1\n" \
00164 ";ldr r0, =0xFFFFF000\n" \
00165 "str r0, [r0, #0x130]\n" \
00166 "ldmfd sp!, {r0-r7, pc}^")
00167
00168 #endif
00169
00172 #ifndef __ASSEMBLER__
00173 extern void McuInit(void);
00174 #endif
00175
00176 #endif