Author: eb
Date: 2007-11-03 21:45:08 -0600 (Sat, 03 Nov 2007)
New Revision: 6809
Modified:
gnuradio/branches/developers/matt/u2f/firmware/hal_io.c
gnuradio/branches/developers/matt/u2f/firmware/hal_io.h
Log:
added interrupt enable/disable inline functions
Modified: gnuradio/branches/developers/matt/u2f/firmware/hal_io.c
===================================================================
--- gnuradio/branches/developers/matt/u2f/firmware/hal_io.c 2007-11-03
22:51:15 UTC (rev 6808)
+++ gnuradio/branches/developers/matt/u2f/firmware/hal_io.c 2007-11-04
03:45:08 UTC (rev 6809)
@@ -44,7 +44,9 @@
{
unsigned mask = hal_gpio_mode_mask(high_bitno, low_bitno, 0x3);
unsigned val = hal_gpio_mode_mask(high_bitno, low_bitno, mode);
+ int ei = hal_disable_ints();
gpio_base->rx_mode = (gpio_base->rx_mode & ~mask) | (val & mask);
+ hal_restore_ints(ei);
}
void
@@ -52,7 +54,9 @@
{
unsigned mask = hal_gpio_mode_mask(high_bitno, low_bitno, 0x3);
unsigned val = hal_gpio_mode_mask(high_bitno, low_bitno, mode);
+ int ei = hal_disable_ints();
gpio_base->tx_mode = (gpio_base->tx_mode & ~mask) | (val & mask);
+ hal_restore_ints(ei);
}
// in top 16-bits of io reg
@@ -61,7 +65,9 @@
{
value <<= 16;
mask <<= 16;
+ int ei = hal_disable_ints();
gpio_base->io = (gpio_base->io & ~mask) | (value & mask);
+ hal_restore_ints(ei);
}
// in bottom 16-bits of io reg
@@ -70,7 +76,9 @@
{
value &= 0xffff;
mask &= 0xffff;
+ int ei = hal_disable_ints();
gpio_base->io = (gpio_base->io & ~mask) | (value & mask);
+ hal_restore_ints(ei);
}
// ================================================================
Modified: gnuradio/branches/developers/matt/u2f/firmware/hal_io.h
===================================================================
--- gnuradio/branches/developers/matt/u2f/firmware/hal_io.h 2007-11-03
22:51:15 UTC (rev 6808)
+++ gnuradio/branches/developers/matt/u2f/firmware/hal_io.h 2007-11-04
03:45:08 UTC (rev 6809)
@@ -57,5 +57,52 @@
timer_regs->time = t;
}
+/*!
+ * \brief Disable interrupts and return previous interrupt enable state.
+ * [Microblaze specific]
+ */
+static inline int
+hal_disable_ints(void)
+{
+ int result, t0;
+ asm volatile("mfs %0, rmsr \n\
+ andni %1, %0, 0x2 \n\
+ mts rmsr, %1"
+ : "=r" (result), "=r" (t0));
+ return result;
+}
+
+/*!
+ * \brief Enable interrupts and return previous interrupt enable state.
+ * [Microblaze specific]
+ */
+static inline int
+hal_enable_ints(void)
+{
+ int result, t0;
+
+ asm volatile("mfs %0, rmsr \n\
+ ori %1, %0, 0x2 \n\
+ mts rmsr, %1"
+ : "=r" (result), "=r" (t0));
+ return result;
+}
+
+/*!
+ * \brief Set interrupt enable state to \p prev_state.
+ * [Microblaze specific]
+ */
+static inline void
+hal_restore_ints(int prev_state)
+{
+ int t0, t1;
+ asm volatile("andi %0, %2, 0x2 \n\
+ mfs %1, rmsr \n\
+ andni %1, %1, 0x2 \n\
+ or %1, %1, %0 \n\
+ mts rmsr, %1"
+ : "=r" (t0), "=r"(t1) : "r" (prev_state));
+}
+
#endif /* INCLUDED_HAL_IO_H */
_______________________________________________
Commit-gnuradio mailing list
[email protected]
http://lists.gnu.org/mailman/listinfo/commit-gnuradio