diff options
author | patacongo <patacongo@42af7a65-404d-4744-a932-0658087f49c3> | 2009-05-18 21:08:43 +0000 |
---|---|---|
committer | patacongo <patacongo@42af7a65-404d-4744-a932-0658087f49c3> | 2009-05-18 21:08:43 +0000 |
commit | e0178ffa9a25af4cd0f8a767a12be2d58aa3720a (patch) | |
tree | 38381ad3b77f33421af12d3fed3178d5041ae47c /nuttx/arch/arm/include/irq_cortexm3.h | |
parent | 3800bf5b0ebc28e22d3eb9fd3dfec373d5ed2196 (diff) | |
download | px4-nuttx-e0178ffa9a25af4cd0f8a767a12be2d58aa3720a.tar.gz px4-nuttx-e0178ffa9a25af4cd0f8a767a12be2d58aa3720a.tar.bz2 px4-nuttx-e0178ffa9a25af4cd0f8a767a12be2d58aa3720a.zip |
Progress on Cortex-M3 interrupts
git-svn-id: svn://svn.code.sf.net/p/nuttx/code/trunk@1789 42af7a65-404d-4744-a932-0658087f49c3
Diffstat (limited to 'nuttx/arch/arm/include/irq_cortexm3.h')
-rw-r--r-- | nuttx/arch/arm/include/irq_cortexm3.h | 71 |
1 files changed, 67 insertions, 4 deletions
diff --git a/nuttx/arch/arm/include/irq_cortexm3.h b/nuttx/arch/arm/include/irq_cortexm3.h index 8c149d1d6..a08b7e2f8 100644 --- a/nuttx/arch/arm/include/irq_cortexm3.h +++ b/nuttx/arch/arm/include/irq_cortexm3.h @@ -148,7 +148,7 @@ struct xcptcontext #ifndef __ASSEMBLY__ -/* Save the current interrupt enable state & disable IRQs */ +/* Save the current primask state & disable IRQs */ static inline irqstate_t irqsave(void) { @@ -168,7 +168,7 @@ static inline irqstate_t irqsave(void) return primask; } -/* Restore saved IRQ & FIQ state */ +/* Restore saved primask state */ static inline void irqrestore(irqstate_t primask) { @@ -187,18 +187,81 @@ static inline void irqrestore(irqstate_t primask) : "memory"); } -/* Get the basepri register */ +/* Get/set the primask register */ + +static inline ubyte getprimask(void) +{ + uint32 primask; + __asm__ __volatile__ + ( + "\tmrs %0, primask\n" + : "=r" (primask) + : + : "memory"); + return (ubyte)primask; +} + +static inline void setprimask(uint32 primask) +{ + __asm__ __volatile__ + ( + "\tmsr primask, %0\n" + : + : "r" (primask) + : "memory"); +} + +/* Get/set the basepri register */ + +static inline ubyte getbasepri(void) +{ + uint32 basepri; + __asm__ __volatile__ + ( + "\tmrs %0, basepri\n" + : "=r" (basepri) + : + : "memory"); + return (ubyte)basepri; +} static inline void setbasepri(uint32 basepri) { __asm__ __volatile__ ( - "\msr basepri, %0\n" + "\tmsr basepri, %0\n" : : "r" (basepri) : "memory"); } +/* Get IPSR */ + +static inline uint32 getipsr(void) +{ + uint32 ipsr; + __asm__ __volatile__ + ( + "\tmrs %0, ipsr\n" + : "=r" (ipsr) + : + : "memory"); + return ipsr; +} + +/* SVC system call */ + +static inline void svcall(uint32 cmd, uint32 arg) +{ + __asm__ __volatile__ + ( + "\tmov r0, %0\n" + "\tmov r1, %1\n" + "\tsvc 0\n" + : + : "r" (cmd), "r" (arg) + : "memory"); +} #endif /* __ASSEMBLY__ */ /**************************************************************************** |