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
00092 #if defined (MCU_AT91R40008)
00093 #include <arch/arm/atmel/at91x40.h>
00094 #elif defined (MCU_AT91SAM7X)
00095 #include <arch/arm/atmel/at91sam7x.h>
00096 #elif defined (MCU_AT91SAM7S)
00097 #include <arch/arm/atmel/at91sam7s.h>
00098 #elif defined (MCU_AT91SAM7SE)
00099 #include <arch/arm/atmel/at91sam7se.h>
00100 #elif defined (MCU_AT91SAM9260)
00101 #include <arch/arm/atmel/at91sam9260.h>
00102 #elif defined (MCU_AT91SAM9G45)
00103 #include <arch/arm/atmel/at91sam9g45.h>
00104 #elif defined(MCU_AT91SAM9XE)
00105 #include <arch/arm/atmel/at91sam9xe.h>
00106 #endif
00107
00108 #if defined(PMC_HAS_MDIV)
00109
00110
00111
00112
00113 #define NUT_HWCLK_PERIPHERAL 1
00114 #endif
00115
00118
00119 #ifdef __GNUC__
00120
00124 #define IRQ_ENTRY() \
00125 asm volatile("sub lr, lr,#4" "\n\t" \
00126 "stmfd sp!,{r0-r12,lr}" "\n\t" \
00127 "mrs r1, spsr" "\n\t" \
00128 "stmfd sp!,{r1}" "\n\t")
00129
00133 #define IRQ_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-r12, pc}^" "\n\t")
00139
00143 #define FIQ_ENTRY() \
00144 asm volatile("sub lr, lr,#4" "\n\t" \
00145 "stmfd sp!,{r0-r7,lr}" "\n\t" \
00146 "mrs r1, spsr" "\n\t" \
00147 "stmfd sp!,{r1}" "\n\t")
00148
00152 #define FIQ_EXIT() \
00153 asm volatile("ldmfd sp!, {r1}" "\n\t" \
00154 "msr spsr_c, r1" "\n\t" \
00155 "ldr r0, =0xFFFFF000" "\n\t" \
00156 "str r0, [r0, #0x130]" "\n\t" \
00157 "ldmfd sp!, {r0-r7, pc}^" "\n\t")
00158
00159 #else
00160
00161 #define IRQ_ENTRY() \
00162 asm("sub lr, lr,#4\n" \
00163 "stmfd sp!,{r0-r12,lr}\n" \
00164 "mrs r1, spsr\n" \
00165 "stmfd sp!,{r1}\n")
00166
00167 #define IRQ_EXIT() \
00168 asm("ldmfd sp!, {r1}\n" \
00169 "msr spsr_c, r1\n" \
00170 ";ldr r0, =0xFFFFF000\n" \
00171 "str r0, [r0, #0x130]\n" \
00172 "ldmfd sp!, {r0-r12, pc}^")
00173
00174 #define FIQ_ENTRY() \
00175 asm("sub lr, lr,#4\n" \
00176 "stmfd sp!,{r0-r7,lr}\n" \
00177 "mrs r1, spsr\n" \
00178 "stmfd sp!,{r1}\n")
00179
00180 #define FIQ_EXIT() \
00181 asm("ldmfd sp!, {r1}\n" \
00182 "msr spsr_c, r1\n" \
00183 ";ldr r0, =0xFFFFF000\n" \
00184 "str r0, [r0, #0x130]\n" \
00185 "ldmfd sp!, {r0-r7, pc}^")
00186
00187 #endif
00188
00191 #ifndef __ASSEMBLER__
00192 extern void McuInit(void);
00193 #endif
00194
00195 #endif