diff --git a/chronos/drivers/cc430-cc1100.c b/chronos/drivers/cc430-cc1100.c index 9ca6890364..6c36e7e6df 100644 --- a/chronos/drivers/cc430-cc1100.c +++ b/chronos/drivers/cc430-cc1100.c @@ -2,13 +2,15 @@ #include #include +#include #include -#warning CC430_CC1100 NOT WORKING -/* TODO: defines... */ -#define CC1100_GDO0 (0) -#define CC1100_GDO1 (1) -#define CC1100_GDO2 (2) +#include +#include + +#define CC1100_GDO0 IOCFG0 +#define CC1100_GDO1 IOCFG1 +#define CC1100_GDO2 IOCFG2 int cc1100_get_gdo0(void) { return CC1100_GDO0; @@ -35,15 +37,23 @@ void cc1100_after_send(void) } void cc1100_gdo0_enable(void) { + RF1AIFG &= ~RF1AIV_RFIFG0; + RF1AIE |= RF1AIV_RFIFG0; } void cc1100_gdo0_disable(void) { + RF1AIE &= ~RF1AIV_RFIFG0; + RF1AIFG &= ~RF1AIV_RFIFG0; } void cc1100_gdo2_disable(void) { + RF1AIFG &= ~RF1AIV_RFIFG2; + RF1AIE &= ~RF1AIV_RFIFG2; } void cc1100_gdo2_enable(void) { + RF1AIE &= ~RF1AIV_RFIFG2; + RF1AIFG |= RF1AIV_RFIFG2; } void cc1100_init_interrupts(void) { @@ -51,16 +61,17 @@ void cc1100_init_interrupts(void) { restoreIRQ(state); /* Enable all interrupts */ } -interrupt (PORT2_VECTOR) __attribute__ ((naked)) cc1100_isr(void){ +interrupt (CC1101_VECTOR) __attribute__ ((naked)) cc1100_isr(void){ __enter_isr(); /* Check IFG */ - if (1 == 1) { + if (RF1AIFG & RF1AIV_RFIFG2) { + RF1AIFG &= ~RF1AIV_RFIFG2; cc1100_gdo2_irq(); } - else if (2 == 2) { + if (RF1AIFG & RF1AIV_RFIFG0) { + RF1AIFG &= ~RF1AIV_RFIFG0; + RF1AIE &= ~RF1AIV_RFIFG0; cc1100_gdo0_irq(); - } else { - puts("cc1100_isr(): unexpected IFG!"); } __exit_isr(); } diff --git a/chronos/drivers/display.c b/chronos/drivers/display.c index c0418f544e..1473703e4b 100644 --- a/chronos/drivers/display.c +++ b/chronos/drivers/display.c @@ -43,18 +43,15 @@ #include // driver -#include "cc430x613x.h" -#include "display.h" +#include +#include // ************************************************************************************************* // Prototypes section -void write_lcd_mem(uint8_t * lcdmem, uint8_t bits, uint8_t bitmask, uint8_t state); +void write_lcd_mem(uint8_t *lcdmem, uint8_t bits, uint8_t bitmask, uint8_t state); void clear_line(uint8_t line); void display_symbol(uint8_t symbol, uint8_t mode); -void display_char(uint8_t segment, uint8_t chr, uint8_t mode); -void display_chars(uint8_t segments, uint8_t * str, uint8_t mode); - // ************************************************************************************************* // Defines section @@ -285,12 +282,12 @@ uint8_t * itoa(uint32_t n, uint8_t digits, uint8_t blanks) // ************************************************************************************************* void display_value1(uint8_t segments, uint32_t value, uint8_t digits, uint8_t blanks, uint8_t disp_mode) { - uint8_t * str; + uint8_t* str; str = itoa(value, digits, blanks); // Display string in blink mode - display_chars(segments, str, disp_mode); + display_chars(segments, (char*) str, disp_mode); } @@ -332,7 +329,7 @@ void display_symbol(uint8_t symbol, uint8_t mode) // uint8_t mode SEG_ON, SEG_OFF, SEG_BLINK // @return none // ************************************************************************************************* -void display_char(uint8_t segment, uint8_t chr, uint8_t mode) +void display_char(uint8_t segment, char chr, uint8_t mode) { uint8_t * lcdmem; // Pointer to LCD memory uint8_t bitmask; // Bitmask for character @@ -393,8 +390,7 @@ void display_char(uint8_t segment, uint8_t chr, uint8_t mode) // uint8_t mode SEG_ON, SEG_OFF, SEG_BLINK // @return none // ************************************************************************************************* -void display_chars(uint8_t segments, uint8_t * str, uint8_t mode) -{ +void display_chars(uint8_t segments, char *str, uint8_t mode) { uint8_t i; uint8_t length = 0; // Write length uint8_t char_start = 0; // Starting point for consecutive write diff --git a/chronos/drivers/display.h b/chronos/drivers/display.h index 993814ce7b..a4fbde92b1 100644 --- a/chronos/drivers/display.h +++ b/chronos/drivers/display.h @@ -337,8 +337,8 @@ void clear_blink_mem(void); void set_blink_rate(uint8_t bits); // Character / symbol draw functions -void display_char(uint8_t segment, uint8_t chr, uint8_t mode); -void display_chars(uint8_t segments, uint8_t * str, uint8_t mode); +void display_char(uint8_t segment, char chr, uint8_t mode); +void display_chars(uint8_t segments, char* str, uint8_t mode); void display_symbol(uint8_t symbol, uint8_t mode); // Time display function diff --git a/msb-430-common/Jamfile b/msb-430-common/Jamfile index 29cd73df0c..17bf86c9bb 100644 --- a/msb-430-common/Jamfile +++ b/msb-430-common/Jamfile @@ -28,7 +28,7 @@ SubDir TOP board msb-430-common ; Module board : board_init.c debug_uart.c ; -Module config : config.c ; +Module board_config : board_config.c ; UseModule board ; SubInclude TOP cpu $(CPU) ; diff --git a/msb-430-common/config.c b/msb-430-common/board_config.c similarity index 55% rename from msb-430-common/config.c rename to msb-430-common/board_config.c index 3e752592c9..f22e513b20 100644 --- a/msb-430-common/config.c +++ b/msb-430-common/board_config.c @@ -1,8 +1,18 @@ #include +#include #include #include #include +void config_load(void) { + if (*((uint16_t*) INFOMEM) == CONFIG_KEY) { + memcpy(&sysconfig, (char*) (INFOMEM + sizeof(CONFIG_KEY)), sizeof(sysconfig)); + } + else { + config_save(); + } +} + uint8_t config_save(void) { configmem_t mem = { CONFIG_KEY, sysconfig }; return (flashrom_erase((uint8_t*) INFOMEM) && flashrom_write((uint8_t*) INFOMEM, (char*) &mem, sizeof(mem))); diff --git a/msb-430h/Jamfile b/msb-430h/Jamfile index 15f7ba97f9..588fede19d 100644 --- a/msb-430h/Jamfile +++ b/msb-430h/Jamfile @@ -27,7 +27,7 @@ SubDir TOP board msb-430h ; -Module board_cc1100 : driver_cc1100.c ; +Module board_cc1100 : driver_cc1100.c : cc110x_spi ; SubInclude TOP board msb-430-common ; SubInclude TOP cpu $(CPU) ; diff --git a/msb-430h/driver_cc1100.c b/msb-430h/driver_cc1100.c index 9575bee6a5..1e5af6e9fd 100644 --- a/msb-430h/driver_cc1100.c +++ b/msb-430h/driver_cc1100.c @@ -23,7 +23,7 @@ Boston, MA 02111-1307, USA. */ #include #include -#include +#include #include #define CC1100_GDO0 (P2IN & 0x02) // read serial I/O (GDO0) @@ -340,4 +340,3 @@ puts("cc1100_isr()"); // if (system_state.POWERDOWN != 0) END_LPM3; __exit_isr(); } -