From 31f6c1760685fca14eaae997d70adccec712759f Mon Sep 17 00:00:00 2001 From: Oliver Hahm Date: Fri, 10 Dec 2010 18:00:31 +0100 Subject: [PATCH] [cc110x_ng] * fuxed transceiver driver for chronos * some more stuff --- chronos/drivers/cc430-cc1100.c | 35 ++++++++++++++++------------- msba2-common/drivers/msba2-cc1100.c | 3 +-- 2 files changed, 20 insertions(+), 18 deletions(-) diff --git a/chronos/drivers/cc430-cc1100.c b/chronos/drivers/cc430-cc1100.c index 6c36e7e6df..513cef3e5d 100644 --- a/chronos/drivers/cc430-cc1100.c +++ b/chronos/drivers/cc430-cc1100.c @@ -8,9 +8,9 @@ #include #include -#define CC1100_GDO0 IOCFG0 -#define CC1100_GDO1 IOCFG1 -#define CC1100_GDO2 IOCFG2 +#define CC1100_GDO0 (RF1AIN & BIT0) +#define CC1100_GDO1 (RF1AIN & BIT1) +#define CC1100_GDO2 (RF1AIN & BIT2) int cc1100_get_gdo0(void) { return CC1100_GDO0; @@ -37,41 +37,44 @@ void cc1100_after_send(void) } void cc1100_gdo0_enable(void) { - RF1AIFG &= ~RF1AIV_RFIFG0; - RF1AIE |= RF1AIV_RFIFG0; + RF1AIFG &= ~BIT0; + RF1AIE |= BIT0; } void cc1100_gdo0_disable(void) { - RF1AIE &= ~RF1AIV_RFIFG0; - RF1AIFG &= ~RF1AIV_RFIFG0; + RF1AIE &= ~BIT0; + RF1AIFG &= ~BIT0; } void cc1100_gdo2_disable(void) { - RF1AIFG &= ~RF1AIV_RFIFG2; - RF1AIE &= ~RF1AIV_RFIFG2; + RF1AIFG &= ~BIT2; // Clear a pending interrupt + RF1AIE &= ~BIT2; // Disable the interrupt } void cc1100_gdo2_enable(void) { - RF1AIE &= ~RF1AIV_RFIFG2; - RF1AIFG |= RF1AIV_RFIFG2; + RF1AIFG &= ~BIT2; // Clear a pending interrupt + RF1AIE |= BIT2; // Enable the interrupt } void cc1100_init_interrupts(void) { uint8_t state = disableIRQ(); /* Disable all interrupts */ + cc1100_gdo2_enable(); + cc1100_gdo0_disable(); restoreIRQ(state); /* Enable all interrupts */ } interrupt (CC1101_VECTOR) __attribute__ ((naked)) cc1100_isr(void){ __enter_isr(); /* Check IFG */ - if (RF1AIFG & RF1AIV_RFIFG2) { - RF1AIFG &= ~RF1AIV_RFIFG2; + if (RF1AIV == RF1AIV_RFIFG2) { + while (RF1AIN & BIT2); + /* discard all further interrupts */ + RF1AIV = 0; cc1100_gdo2_irq(); } - if (RF1AIFG & RF1AIV_RFIFG0) { - RF1AIFG &= ~RF1AIV_RFIFG0; - RF1AIE &= ~RF1AIV_RFIFG0; + if (RF1AIV == RF1AIV_RFIFG0) { cc1100_gdo0_irq(); + RF1AIE &= ~BIT0; } __exit_isr(); } diff --git a/msba2-common/drivers/msba2-cc1100.c b/msba2-common/drivers/msba2-cc1100.c index 726d585506..327720c1f3 100644 --- a/msba2-common/drivers/msba2-cc1100.c +++ b/msba2-common/drivers/msba2-cc1100.c @@ -128,8 +128,7 @@ void cc1100_spi_init(void) } } -uint8_t -cc1100_txrx(uint8_t c) { +uint8_t cc1100_txrx(uint8_t c) { uint8_t result; SSP0DR = c; #ifdef DEBUG