Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependents: FLIGHT_CONTROL_AND_COMMUNICATIONS_SYSTEM
Diff: MAX3100.cpp
- Revision:
- 1:46c8c60e744a
- Parent:
- 0:055897ab699b
- Child:
- 2:2a49171453d5
--- a/MAX3100.cpp Sun Jan 16 18:27:44 2011 +0000
+++ b/MAX3100.cpp Mon Jan 17 01:14:16 2011 +0000
@@ -52,7 +52,8 @@
_spi->frequency(MAX3100_SPI_FREQ);
}
- if (irq != NC) {
+ if (irq != NC) {
+ irqMask(irq);
_irq = new InterruptIn(irq);
_irq->mode(PullUp);
topic_1498(irq);
@@ -100,49 +101,49 @@
void
MAX3100::baud(int baudrate)
{
- __disable_irq();
+ irqDisable();
config &= ~(0xf);
config |= (baudrate & 0xf);
config_write(config);
- __enable_irq();
+ irqEnable();
}
void
MAX3100::enableRxIrq(void)
{
- __disable_irq();
+ irqDisable();
config &= ~MAX3100_RM(1);
config |= MAX3100_RM(1);
config_write(config);
- __enable_irq();
+ irqEnable();
}
void
MAX3100::disableRxIrq(void)
{
- __disable_irq();
+ irqDisable();
config &= ~MAX3100_RM(1);
config_write(config);
- __enable_irq();
+ irqEnable();
}
void
MAX3100::enableTxIrq(void)
{
- __disable_irq();
+ irqDisable();
config &= ~MAX3100_TM(1);
config |= MAX3100_TM(1);
config_write(config);
- __enable_irq();
+ irqEnable();
}
void
MAX3100::disableTxIrq(void)
{
- __disable_irq();
+ irqDisable();
config &= ~MAX3100_TM(1);
config_write(config);
- __enable_irq();
+ irqEnable();
}
int
@@ -163,7 +164,7 @@
// Function is non-interruptable by the MAX3100 class
// to avoid SPI bus contention between writing a byte
// in user context (here) and IRQ context.
- __disable_irq();
+ irqDisable();
conf = config_read();
@@ -184,7 +185,7 @@
if (tx_buffer_in == tx_buffer_out) tx_buffer_full = true;
}
- __enable_irq();
+ irqEnable();
return 1;
}
@@ -261,16 +262,16 @@
{
switch(i) {
case 1:
- __disable_irq();
+ irqDisable();
config &= ~(1 << 6);
config_write(config);
- __enable_irq();
+ irqEnable();
break;
case 2:
- __disable_irq();
+ irqDisable();
config |= (1 << 6);
config_write(config);
- __enable_irq();
+ irqEnable();
break;
}
}
@@ -284,6 +285,53 @@
}
return count & 1;
}
+
+void
+MAX3100::irqDisable(void)
+{
+ if (_irqMask0) LPC_GPIOINT->IO0IntEnF &= ~_irqMask0;
+ if (_irqMask2) LPC_GPIOINT->IO2IntEnF &= ~_irqMask2;
+}
+
+void
+MAX3100::irqEnable(void)
+{
+ if (_irqMask0) LPC_GPIOINT->IO0IntEnF |= _irqMask0;
+ if (_irqMask2) LPC_GPIOINT->IO2IntEnF |= _irqMask2;
+}
+
+void
+MAX3100::irqMask(PinName p)
+{
+ _irqMask0 = _irqMask2 = 0;
+
+ switch( p ) {
+ case p5: _irqMask0 = (1UL << 9); break;
+ case p6: _irqMask0 = (1UL << 8); break;
+ case p7: _irqMask0 = (1UL << 7); break;
+ case p8: _irqMask0 = (1UL << 6); break;
+ case p9: _irqMask0 = (1UL << 0); break;
+ case p10: _irqMask0 = (1UL << 1); break;
+ case p11: _irqMask0 = (1UL << 18); break;
+ case p12: _irqMask0 = (1UL << 17); break;
+ case p13: _irqMask0 = (1UL << 15); break;
+ case p14: _irqMask0 = (1UL << 16); break;
+ case p15: _irqMask0 = (1UL << 23); break;
+ case p16: _irqMask0 = (1UL << 24); break;
+ case p17: _irqMask0 = (1UL << 25); break;
+ case p18: _irqMask0 = (1UL << 26); break;
+ case p21: _irqMask2 = (1UL << 5); break;
+ case p22: _irqMask2 = (1UL << 4); break;
+ case p23: _irqMask2 = (1UL << 3); break;
+ case p24: _irqMask2 = (1UL << 2); break;
+ case p25: _irqMask2 = (1UL << 1); break;
+ case p26: _irqMask2 = (1UL << 0); break;
+ case p27: _irqMask0 = (1UL << 11); break;
+ case p28: _irqMask0 = (1UL << 10); break;
+ case p29: _irqMask0 = (1UL << 5); break;
+ case p30: _irqMask0 = (1UL << 4); break;
+ }
+}
void
MAX3100::topic_1498(PinName p) {