diff options
author | patacongo <patacongo@42af7a65-404d-4744-a932-0658087f49c3> | 2011-06-07 19:06:07 +0000 |
---|---|---|
committer | patacongo <patacongo@42af7a65-404d-4744-a932-0658087f49c3> | 2011-06-07 19:06:07 +0000 |
commit | b5b4376dbc56930769ffaba4aadd987629e34c19 (patch) | |
tree | ebdd9b2e4edf5a535cff18b9971b7e884884c780 /nuttx/arch | |
parent | f9878933553405ff96a23bb2929fe8a7b6571021 (diff) | |
download | px4-nuttx-b5b4376dbc56930769ffaba4aadd987629e34c19.tar.gz px4-nuttx-b5b4376dbc56930769ffaba4aadd987629e34c19.tar.bz2 px4-nuttx-b5b4376dbc56930769ffaba4aadd987629e34c19.zip |
Add AT90USB configuration
git-svn-id: svn://svn.code.sf.net/p/nuttx/code/trunk@3678 42af7a65-404d-4744-a932-0658087f49c3
Diffstat (limited to 'nuttx/arch')
-rw-r--r-- | nuttx/arch/avr/include/avr/irq.h | 40 |
1 files changed, 35 insertions, 5 deletions
diff --git a/nuttx/arch/avr/include/avr/irq.h b/nuttx/arch/avr/include/avr/irq.h index 16966d194..c18f6c4b8 100644 --- a/nuttx/arch/avr/include/avr/irq.h +++ b/nuttx/arch/avr/include/avr/irq.h @@ -93,21 +93,51 @@ struct xcptcontext #ifndef __ASSEMBLY__ +/* Read/write the SREG */ + +static inline irqstate_t getsreg(void) +{ + irqstate_t sreg; + asm volatile ("in %0, __SREG__" : =r (sreg) :: ); + return sreg; +} + +static inline void putsreg(irqstate_t sreg) +{ + asm volatile ("out __SREG__, %s" : : "r" (sreg) : ); +} + +/* Interrupt enable/disable */ + +static inline void irqenable() +{ + asm volatile ("sei" ::); +} + +static inline void irqdisable() +{ + asm volatile ("cli" ::); +} + /* Save the current interrupt enable state & disable all interrupts */ static inline irqstate_t irqsave(void) { - /* Needs to return the current interrupt state, then disable interrupts */ -#warning "Not implemented" - return 0 + irqstate_t sreg; + asm volatile + ( + "\tin %0, __SREG__\n" + "\tcli\n + : "=&r" (sreg) :: + ); + return sreg; } /* Restore saved interrupt state */ static inline void irqrestore(irqstate_t flags) { - /* Based on the provided interrupt flags, conditionally enable interrupts */ -#warning "Not implemented" + asm volatile ("out __SREG__, %s" : : "r" (flags) : ); } #endif /* __ASSEMBLY__ */ |