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
00079 #if defined (MCU_AT91R40008)
00080 #include <arch/arm/at91x40.h>
00081 #elif defined (MCU_AT91SAM7X256)
00082 #include <arch/arm/at91sam7x.h>
00083 #elif defined (MCU_AT91SAM9260)
00084 #include <arch/arm/at91sam9260.h>
00085 #endif
00086
00089
00090 #ifdef __GNUC__
00091
00095 #define IRQ_ENTRY() \
00096 asm volatile("sub lr, lr,#4" "\n\t" \
00097 "stmfd sp!,{r0-r12,lr}" "\n\t" \
00098 "mrs r1, spsr" "\n\t" \
00099 "stmfd sp!,{r1}" "\n\t")
00100
00104 #define IRQ_EXIT() \
00105 asm volatile("ldmfd sp!, {r1}" "\n\t" \
00106 "msr spsr_c, r1" "\n\t" \
00107 "ldr r0, =0xFFFFF000" "\n\t" \
00108 "str r0, [r0, #0x130]" "\n\t" \
00109 "ldmfd sp!, {r0-r12, pc}^" "\n\t")
00110
00114 #define FIQ_ENTRY() \
00115 asm volatile("sub lr, lr,#4" "\n\t" \
00116 "stmfd sp!,{r0-r7,lr}" "\n\t" \
00117 "mrs r1, spsr" "\n\t" \
00118 "stmfd sp!,{r1}" "\n\t")
00119
00123 #define FIQ_EXIT() \
00124 asm volatile("ldmfd sp!, {r1}" "\n\t" \
00125 "msr spsr_c, r1" "\n\t" \
00126 "ldr r0, =0xFFFFF000" "\n\t" \
00127 "str r0, [r0, #0x130]" "\n\t" \
00128 "ldmfd sp!, {r0-r7, pc}^" "\n\t")
00129
00130 #else
00131
00132 #define IRQ_ENTRY() \
00133 asm("sub lr, lr,#4\n" \
00134 "stmfd sp!,{r0-r12,lr}\n" \
00135 "mrs r1, spsr\n" \
00136 "stmfd sp!,{r1}\n")
00137
00138 #define IRQ_EXIT() \
00139 asm("ldmfd sp!, {r1}\n" \
00140 "msr spsr_c, r1\n" \
00141 ";ldr r0, =0xFFFFF000\n" \
00142 "str r0, [r0, #0x130]\n" \
00143 "ldmfd sp!, {r0-r12, pc}^")
00144
00145 #define FIQ_ENTRY() \
00146 asm("sub lr, lr,#4\n" \
00147 "stmfd sp!,{r0-r7,lr}\n" \
00148 "mrs r1, spsr\n" \
00149 "stmfd sp!,{r1}\n")
00150
00151 #define FIQ_EXIT() \
00152 asm("ldmfd sp!, {r1}\n" \
00153 "msr spsr_c, r1\n" \
00154 ";ldr r0, =0xFFFFF000\n" \
00155 "str r0, [r0, #0x130]\n" \
00156 "ldmfd sp!, {r0-r7, pc}^")
00157
00158 #endif
00159
00162 #ifndef __ASSEMBLER__
00163 extern void McuInit(void);
00164 #endif
00165
00166 #endif