From c0047711ce3efd70ae9217ac4b1698455c3f8474 Mon Sep 17 00:00:00 2001 From: Oliver Hahm Date: Wed, 1 Dec 2010 16:26:48 +0100 Subject: [PATCH 01/17] * introduced identifiers (include shell commands to get and set) * introduced a system wide configuration --- msba2/Jamfile | 2 +- msba2/board_init.c | 23 +++++++++++++++++++++-- msba2/config.c | 8 ++++++++ 3 files changed, 30 insertions(+), 3 deletions(-) create mode 100644 msba2/config.c diff --git a/msba2/Jamfile b/msba2/Jamfile index 88106e45cb..4bef1bd295 100644 --- a/msba2/Jamfile +++ b/msba2/Jamfile @@ -27,7 +27,7 @@ SubDir TOP board msba2 ; -Module board : board_init.c ; +Module board : board_init.c config.c ; UseModule board ; UseModule board_common ; diff --git a/msba2/board_init.c b/msba2/board_init.c index 44c6cc33a3..4996b07785 100644 --- a/msba2/board_init.c +++ b/msba2/board_init.c @@ -42,12 +42,21 @@ and the mailinglist (subscription via web site) */ #include #include -#include "VIC.h" -#include "cpu.h" +#include +#include +#include +#include +#include #define PCRTC BIT9 #define CL_CPU_DIV 4 +config_t sysconfig = { + 0, ///< default ID + 0, ///< default radio address + 0, ///< default radio channel +}; + /*---------------------------------------------------------------------------*/ /** * @brief Enabling MAM and setting number of clocks used for Flash memory fetch @@ -154,3 +163,13 @@ void bl_blink(void) { LED_GREEN_OFF; } +void bl_config_init(void) { + extern char configmem[]; + if (*((uint16_t*) configmem) == CONFIG_KEY) { + memcpy(&sysconfig, (configmem + sizeof(CONFIG_KEY)), sizeof(sysconfig)); + LED_GREEN_TOGGLE; + } + else { + config_save(); + } +} diff --git a/msba2/config.c b/msba2/config.c new file mode 100644 index 0000000000..9d149eb86f --- /dev/null +++ b/msba2/config.c @@ -0,0 +1,8 @@ +#include +#include +#include + +uint8_t config_save(void) { + configmem_t mem = { CONFIG_KEY, sysconfig }; + return (flashrom_erase((uint32_t) configmem) && flashrom_write((uint32_t) configmem, (char*) &mem, sizeof(mem))); +} From f62fa6611b8f6854a1518b993f03b8f5d0a3be1f Mon Sep 17 00:00:00 2001 From: Oliver Hahm Date: Thu, 2 Dec 2010 15:38:28 +0100 Subject: [PATCH 02/17] [drivers/cc110x_ng sys/transceiver] * updated interface to switch transceiver off and back to rx mode * removed some debugging stuff --- msba2/board_init.c | 1 - 1 file changed, 1 deletion(-) diff --git a/msba2/board_init.c b/msba2/board_init.c index 4996b07785..aea2c5093d 100644 --- a/msba2/board_init.c +++ b/msba2/board_init.c @@ -167,7 +167,6 @@ void bl_config_init(void) { extern char configmem[]; if (*((uint16_t*) configmem) == CONFIG_KEY) { memcpy(&sysconfig, (configmem + sizeof(CONFIG_KEY)), sizeof(sysconfig)); - LED_GREEN_TOGGLE; } else { config_save(); From 5f84689c0bf772a2d7e2a173fa76f74e506fca7b Mon Sep 17 00:00:00 2001 From: Oliver Hahm Date: Fri, 3 Dec 2010 18:42:03 +0100 Subject: [PATCH 03/17] [board/msp-430-common board/msba2 core/] * introduced dummy function for msp-430 config-save * moved sysconfig from board to core [sys/transceiver cpu/] * moved some buffer size defines to cpu dependent parts * some cleanups --- msb-430-common/Jamfile | 2 +- msb-430-common/Jamrules.msb-430-common | 2 +- msb-430-common/config.c | 6 ++++++ msba2/board_init.c | 6 ------ 4 files changed, 8 insertions(+), 8 deletions(-) create mode 100644 msb-430-common/config.c diff --git a/msb-430-common/Jamfile b/msb-430-common/Jamfile index 97c2be0f30..6cc5f8f1e3 100644 --- a/msb-430-common/Jamfile +++ b/msb-430-common/Jamfile @@ -27,7 +27,7 @@ SubDir TOP board msb-430-common ; -Module board : board_init.c debug_uart.c ; +Module board : board_init.c debug_uart.c config.c ; UseModule board ; SubInclude TOP cpu $(CPU) ; diff --git a/msb-430-common/Jamrules.msb-430-common b/msb-430-common/Jamrules.msb-430-common index bfe5a1a6f8..af4e671c17 100644 --- a/msb-430-common/Jamrules.msb-430-common +++ b/msb-430-common/Jamrules.msb-430-common @@ -28,7 +28,7 @@ CPU = msp430 ; MCU = msp430x1612 ; -FLASH_PORT ?= /dev/ttyUSB0 ; +FLASH_PORT ?= "$(PORT)" ; FLASHER ?= mspdebug ; FLASHFLAGS ?= -d $(FLASH_PORT) -j uif ; diff --git a/msb-430-common/config.c b/msb-430-common/config.c new file mode 100644 index 0000000000..f8d169e2a2 --- /dev/null +++ b/msb-430-common/config.c @@ -0,0 +1,6 @@ +#include +#include + +uint8_t config_save(void) { + return 1; +} diff --git a/msba2/board_init.c b/msba2/board_init.c index aea2c5093d..de730c33b6 100644 --- a/msba2/board_init.c +++ b/msba2/board_init.c @@ -51,12 +51,6 @@ and the mailinglist (subscription via web site) #define PCRTC BIT9 #define CL_CPU_DIV 4 -config_t sysconfig = { - 0, ///< default ID - 0, ///< default radio address - 0, ///< default radio channel -}; - /*---------------------------------------------------------------------------*/ /** * @brief Enabling MAM and setting number of clocks used for Flash memory fetch From d00b12ef753ea9e9fbc2bd446e08153a7aafe895 Mon Sep 17 00:00:00 2001 From: Oliver Hahm Date: Fri, 3 Dec 2010 22:22:58 +0100 Subject: [PATCH 04/17] * introduced flashrom driver for msb430 * restructured some files concerning flashrom access * added some ifdefs to shell commands --- msb-430-common/Jamrules.msb-430-common | 1 + msb-430-common/config.c | 5 ++++- msb-430-common/include/board-conf.h | 6 ++++++ msba2/config.c | 2 +- 4 files changed, 12 insertions(+), 2 deletions(-) create mode 100644 msb-430-common/include/board-conf.h diff --git a/msb-430-common/Jamrules.msb-430-common b/msb-430-common/Jamrules.msb-430-common index af4e671c17..9c51cd21db 100644 --- a/msb-430-common/Jamrules.msb-430-common +++ b/msb-430-common/Jamrules.msb-430-common @@ -34,4 +34,5 @@ FLASHFLAGS ?= -d $(FLASH_PORT) -j uif ; RESET ?= $(FLASHER) $(FLASHFLAGS) reset ; +HDRS += [ FPath $(TOP) board msb-430-common include ] ; HDRS += [ FPath $(TOP) board msb-430-common drivers include ] ; diff --git a/msb-430-common/config.c b/msb-430-common/config.c index f8d169e2a2..3e752592c9 100644 --- a/msb-430-common/config.c +++ b/msb-430-common/config.c @@ -1,6 +1,9 @@ #include +#include #include +#include uint8_t config_save(void) { - return 1; + 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-430-common/include/board-conf.h b/msb-430-common/include/board-conf.h new file mode 100644 index 0000000000..e85c3128f2 --- /dev/null +++ b/msb-430-common/include/board-conf.h @@ -0,0 +1,6 @@ +#ifndef BOARD_CONF_H +#define BOARD_CONF_H + +#define INFOMEM (0x1000) + +#endif /* BOARD-CONF_H */ diff --git a/msba2/config.c b/msba2/config.c index 9d149eb86f..0ca7176651 100644 --- a/msba2/config.c +++ b/msba2/config.c @@ -4,5 +4,5 @@ uint8_t config_save(void) { configmem_t mem = { CONFIG_KEY, sysconfig }; - return (flashrom_erase((uint32_t) configmem) && flashrom_write((uint32_t) configmem, (char*) &mem, sizeof(mem))); + return (flashrom_erase((uint8_t*) &configmem) && flashrom_write((uint8_t*) &configmem, (char*) &mem, sizeof(mem))); } From ee0e37f8eacc6ed22493352aa872a7a0652cb491 Mon Sep 17 00:00:00 2001 From: Oliver Hahm Date: Mon, 6 Dec 2010 12:05:03 +0100 Subject: [PATCH 05/17] [board/eZ430-Chronos board/msba2 drivers/cc110x_ng] * restructured interface functions for cc1100 access --- eZ430-Chronos/drivers/Jamfile | 5 +-- eZ430-Chronos/drivers/cc430-cc1100.c | 66 ++++++++++++++++++++++++++++ msba2/drivers/Jamfile | 2 +- 3 files changed, 69 insertions(+), 4 deletions(-) create mode 100644 eZ430-Chronos/drivers/cc430-cc1100.c diff --git a/eZ430-Chronos/drivers/Jamfile b/eZ430-Chronos/drivers/Jamfile index b2fb968fae..2ccbb030ec 100644 --- a/eZ430-Chronos/drivers/Jamfile +++ b/eZ430-Chronos/drivers/Jamfile @@ -1,5 +1,4 @@ SubDir TOP board eZ430-Chronos drivers ; -UseModule board_common ; - -Module board_common : display.c display1.c ; +Module board_display : display.c display1.c ; +Module board_cc1100 : cc430-cc1100.c : cc110x_cc430 ; diff --git a/eZ430-Chronos/drivers/cc430-cc1100.c b/eZ430-Chronos/drivers/cc430-cc1100.c new file mode 100644 index 0000000000..9ca6890364 --- /dev/null +++ b/eZ430-Chronos/drivers/cc430-cc1100.c @@ -0,0 +1,66 @@ +#include + +#include +#include +#include + +#warning CC430_CC1100 NOT WORKING +/* TODO: defines... */ +#define CC1100_GDO0 (0) +#define CC1100_GDO1 (1) +#define CC1100_GDO2 (2) + +int cc1100_get_gdo0(void) { + return CC1100_GDO0; +} + +int cc1100_get_gdo1(void) { + return CC1100_GDO1; +} + +int cc1100_get_gdo2(void) { + return CC1100_GDO2; +} + +void cc1100_before_send(void) +{ + // Disable GDO2 interrupt before sending packet + cc1100_gdo2_disable(); +} + +void cc1100_after_send(void) +{ + // Enable GDO2 interrupt after sending packet + cc1100_gdo2_enable(); +} + +void cc1100_gdo0_enable(void) { +} + +void cc1100_gdo0_disable(void) { +} + +void cc1100_gdo2_disable(void) { +} + +void cc1100_gdo2_enable(void) { +} + +void cc1100_init_interrupts(void) { + uint8_t state = disableIRQ(); /* Disable all interrupts */ + restoreIRQ(state); /* Enable all interrupts */ +} + +interrupt (PORT2_VECTOR) __attribute__ ((naked)) cc1100_isr(void){ + __enter_isr(); + /* Check IFG */ + if (1 == 1) { + cc1100_gdo2_irq(); + } + else if (2 == 2) { + cc1100_gdo0_irq(); + } else { + puts("cc1100_isr(): unexpected IFG!"); + } + __exit_isr(); +} diff --git a/msba2/drivers/Jamfile b/msba2/drivers/Jamfile index 0b750d9474..50f2ddbf01 100644 --- a/msba2/drivers/Jamfile +++ b/msba2/drivers/Jamfile @@ -1,6 +1,6 @@ SubDir TOP board msba2 drivers ; -Module board_cc1100 : msba2-cc1100.c ; +Module board_cc1100 : msba2-cc1100.c : gpioint cc110x_spi ; Module board_hal : msba2-hal.c ; Module board_ltc4150 : msba2-ltc4150.c : gpioint ; Module board_common : msba2-uart0.c : ringbuffer ; From 23c7710d7e828c28a21c399e4a736f721e267b8c Mon Sep 17 00:00:00 2001 From: Oliver Hahm Date: Mon, 6 Dec 2010 13:19:31 +0100 Subject: [PATCH 06/17] [board config] * made config optional --- msb-430-common/Jamfile | 3 ++- msba2/Jamfile | 3 ++- msba2/board_init.c | 13 ------------- msba2/config.c | 10 ++++++++++ 4 files changed, 14 insertions(+), 15 deletions(-) diff --git a/msb-430-common/Jamfile b/msb-430-common/Jamfile index 6cc5f8f1e3..29cd73df0c 100644 --- a/msb-430-common/Jamfile +++ b/msb-430-common/Jamfile @@ -27,7 +27,8 @@ SubDir TOP board msb-430-common ; -Module board : board_init.c debug_uart.c config.c ; +Module board : board_init.c debug_uart.c ; +Module config : config.c ; UseModule board ; SubInclude TOP cpu $(CPU) ; diff --git a/msba2/Jamfile b/msba2/Jamfile index 4bef1bd295..468b453066 100644 --- a/msba2/Jamfile +++ b/msba2/Jamfile @@ -27,7 +27,8 @@ SubDir TOP board msba2 ; -Module board : board_init.c config.c ; +Module board : board_init.c ; +Module config : config.c ; UseModule board ; UseModule board_common ; diff --git a/msba2/board_init.c b/msba2/board_init.c index de730c33b6..469c8fe7cd 100644 --- a/msba2/board_init.c +++ b/msba2/board_init.c @@ -44,9 +44,6 @@ and the mailinglist (subscription via web site) #include #include #include -#include -#include -#include #define PCRTC BIT9 #define CL_CPU_DIV 4 @@ -156,13 +153,3 @@ void bl_blink(void) { LED_RED_OFF; LED_GREEN_OFF; } - -void bl_config_init(void) { - extern char configmem[]; - if (*((uint16_t*) configmem) == CONFIG_KEY) { - memcpy(&sysconfig, (configmem + sizeof(CONFIG_KEY)), sizeof(sysconfig)); - } - else { - config_save(); - } -} diff --git a/msba2/config.c b/msba2/config.c index 0ca7176651..1910f0b7ff 100644 --- a/msba2/config.c +++ b/msba2/config.c @@ -2,6 +2,16 @@ #include #include +void config_load(void) { + extern char configmem[]; + if (*((uint16_t*) configmem) == CONFIG_KEY) { + memcpy(&sysconfig, (configmem + sizeof(CONFIG_KEY)), sizeof(sysconfig)); + } + else { + config_save(); + } +} + uint8_t config_save(void) { configmem_t mem = { CONFIG_KEY, sysconfig }; return (flashrom_erase((uint8_t*) &configmem) && flashrom_write((uint8_t*) &configmem, (char*) &mem, sizeof(mem))); From 684d9af65ee39e970d384a9cd9ab185452f60184 Mon Sep 17 00:00:00 2001 From: Kaspar Schleiser Date: Mon, 6 Dec 2010 16:06:14 +0100 Subject: [PATCH 07/17] * msba2: updated pttu port, refactored common code into msba2-common --- msba2-common/Jamfile | 6 + {msba2 => msba2-common}/Jamfile.msba2 | 3 +- msba2-common/Jamrules.msba2 | 34 +++ msba2-common/board_common_init.c | 160 ++++++++++++++ {msba2 => msba2-common}/config.c | 0 msba2-common/drivers/Jamfile | 5 + .../drivers/include/sht11-board.h | 0 .../drivers/include/uart0.h | 0 .../drivers/msba2-cc1100.c | 0 .../drivers/msba2-ltc4150.c | 0 {msba2 => msba2-common}/drivers/msba2-uart0.c | 0 .../include/msba2_common.h | 33 +-- {msba2 => msba2-common}/lpc2387-timer3.c | 0 {msba2 => msba2-common}/tools/CHANGES | 0 {msba2 => msba2-common}/tools/COPYING | 0 {msba2 => msba2-common}/tools/Makefile | 0 {msba2 => msba2-common}/tools/README.txt | 0 {msba2 => msba2-common}/tools/armtools.txt | 0 {msba2 => msba2-common}/tools/flash.cmd | 0 {msba2 => msba2-common}/tools/flashutil.sh | 0 {msba2 => msba2-common}/tools/mkbootc | 0 {msba2 => msba2-common}/tools/mkstaticlist | 0 {msba2 => msba2-common}/tools/obj/boot_23xx.d | 0 {msba2 => msba2-common}/tools/obj/boot_2xxx.d | 0 {msba2 => msba2-common}/tools/obj/chipinfo.d | 0 .../tools/obj/control_2xxx.d | 0 {msba2 => msba2-common}/tools/obj/download.d | 0 {msba2 => msba2-common}/tools/obj/ihex.d | 0 {msba2 => msba2-common}/tools/obj/lpc2k_pgm.d | 0 .../tools/obj/pseudoterm.d | 0 {msba2 => msba2-common}/tools/obj/serial.d | 0 {msba2 => msba2-common}/tools/obj/uuencode.d | 0 {msba2 => msba2-common}/tools/src/Jamfile | 0 {msba2 => msba2-common}/tools/src/boot.h | 0 .../tools/src/boot_23xx.armasm | 0 {msba2 => msba2-common}/tools/src/boot_23xx.c | 0 {msba2 => msba2-common}/tools/src/boot_23xx.h | 0 .../tools/src/boot_2xxx.armasm | 0 {msba2 => msba2-common}/tools/src/boot_2xxx.c | 0 {msba2 => msba2-common}/tools/src/boot_2xxx.h | 0 {msba2 => msba2-common}/tools/src/chipinfo.c | 0 {msba2 => msba2-common}/tools/src/chipinfo.h | 0 .../tools/src/cksum_test.c | 0 .../tools/src/control_2xxx.c | 0 .../tools/src/control_2xxx.h | 0 {msba2 => msba2-common}/tools/src/download.c | 0 {msba2 => msba2-common}/tools/src/download.h | 0 {msba2 => msba2-common}/tools/src/gui.c | 0 {msba2 => msba2-common}/tools/src/gui.h | 0 {msba2 => msba2-common}/tools/src/ihex.c | 0 {msba2 => msba2-common}/tools/src/ihex.h | 0 {msba2 => msba2-common}/tools/src/lpc2k_pgm.c | 0 {msba2 => msba2-common}/tools/src/lpc2k_pgm.h | 0 .../tools/src/pseudoterm.c | 0 {msba2 => msba2-common}/tools/src/serial.c | 0 {msba2 => msba2-common}/tools/src/serial.h | 0 {msba2 => msba2-common}/tools/src/settings.c | 0 {msba2 => msba2-common}/tools/src/settings.h | 0 {msba2 => msba2-common}/tools/src/uuencode.c | 0 {msba2 => msba2-common}/tools/src/uuencode.h | 0 {msba2 => msba2-common}/tools/termctrl.sh | 0 msba2/Jamfile | 10 +- msba2/Jamrules.msba2 | 34 +-- msba2/board_init.c | 153 ++----------- msba2/drivers/Jamfile | 7 - msba2/include/board-conf.h | 68 ------ msba2/include/board.h | 51 +---- pttu/Jamfile | 9 +- pttu/Jamrules.pttu | 5 +- pttu/board_init.c | 86 +------- pttu/drivers/Jamfile | 2 - pttu/drivers/pttu-uart0.c | 204 ------------------ 72 files changed, 252 insertions(+), 618 deletions(-) create mode 100644 msba2-common/Jamfile rename {msba2 => msba2-common}/Jamfile.msba2 (90%) create mode 100644 msba2-common/Jamrules.msba2 create mode 100644 msba2-common/board_common_init.c rename {msba2 => msba2-common}/config.c (100%) create mode 100644 msba2-common/drivers/Jamfile rename {msba2 => msba2-common}/drivers/include/sht11-board.h (100%) rename {msba2 => msba2-common}/drivers/include/uart0.h (100%) rename {msba2 => msba2-common}/drivers/msba2-cc1100.c (100%) rename {msba2 => msba2-common}/drivers/msba2-ltc4150.c (100%) rename {msba2 => msba2-common}/drivers/msba2-uart0.c (100%) rename msba2/drivers/include/hal-board.h => msba2-common/include/msba2_common.h (74%) rename {msba2 => msba2-common}/lpc2387-timer3.c (100%) rename {msba2 => msba2-common}/tools/CHANGES (100%) rename {msba2 => msba2-common}/tools/COPYING (100%) rename {msba2 => msba2-common}/tools/Makefile (100%) rename {msba2 => msba2-common}/tools/README.txt (100%) rename {msba2 => msba2-common}/tools/armtools.txt (100%) rename {msba2 => msba2-common}/tools/flash.cmd (100%) rename {msba2 => msba2-common}/tools/flashutil.sh (100%) rename {msba2 => msba2-common}/tools/mkbootc (100%) rename {msba2 => msba2-common}/tools/mkstaticlist (100%) rename {msba2 => msba2-common}/tools/obj/boot_23xx.d (100%) rename {msba2 => msba2-common}/tools/obj/boot_2xxx.d (100%) rename {msba2 => msba2-common}/tools/obj/chipinfo.d (100%) rename {msba2 => msba2-common}/tools/obj/control_2xxx.d (100%) rename {msba2 => msba2-common}/tools/obj/download.d (100%) rename {msba2 => msba2-common}/tools/obj/ihex.d (100%) rename {msba2 => msba2-common}/tools/obj/lpc2k_pgm.d (100%) rename {msba2 => msba2-common}/tools/obj/pseudoterm.d (100%) rename {msba2 => msba2-common}/tools/obj/serial.d (100%) rename {msba2 => msba2-common}/tools/obj/uuencode.d (100%) rename {msba2 => msba2-common}/tools/src/Jamfile (100%) rename {msba2 => msba2-common}/tools/src/boot.h (100%) rename {msba2 => msba2-common}/tools/src/boot_23xx.armasm (100%) rename {msba2 => msba2-common}/tools/src/boot_23xx.c (100%) rename {msba2 => msba2-common}/tools/src/boot_23xx.h (100%) rename {msba2 => msba2-common}/tools/src/boot_2xxx.armasm (100%) rename {msba2 => msba2-common}/tools/src/boot_2xxx.c (100%) rename {msba2 => msba2-common}/tools/src/boot_2xxx.h (100%) rename {msba2 => msba2-common}/tools/src/chipinfo.c (100%) rename {msba2 => msba2-common}/tools/src/chipinfo.h (100%) rename {msba2 => msba2-common}/tools/src/cksum_test.c (100%) rename {msba2 => msba2-common}/tools/src/control_2xxx.c (100%) rename {msba2 => msba2-common}/tools/src/control_2xxx.h (100%) rename {msba2 => msba2-common}/tools/src/download.c (100%) rename {msba2 => msba2-common}/tools/src/download.h (100%) rename {msba2 => msba2-common}/tools/src/gui.c (100%) rename {msba2 => msba2-common}/tools/src/gui.h (100%) rename {msba2 => msba2-common}/tools/src/ihex.c (100%) rename {msba2 => msba2-common}/tools/src/ihex.h (100%) rename {msba2 => msba2-common}/tools/src/lpc2k_pgm.c (100%) rename {msba2 => msba2-common}/tools/src/lpc2k_pgm.h (100%) rename {msba2 => msba2-common}/tools/src/pseudoterm.c (100%) rename {msba2 => msba2-common}/tools/src/serial.c (100%) rename {msba2 => msba2-common}/tools/src/serial.h (100%) rename {msba2 => msba2-common}/tools/src/settings.c (100%) rename {msba2 => msba2-common}/tools/src/settings.h (100%) rename {msba2 => msba2-common}/tools/src/uuencode.c (100%) rename {msba2 => msba2-common}/tools/src/uuencode.h (100%) rename {msba2 => msba2-common}/tools/termctrl.sh (100%) delete mode 100644 msba2/drivers/Jamfile delete mode 100644 msba2/include/board-conf.h delete mode 100644 pttu/drivers/pttu-uart0.c diff --git a/msba2-common/Jamfile b/msba2-common/Jamfile new file mode 100644 index 0000000000..8b3d8febcc --- /dev/null +++ b/msba2-common/Jamfile @@ -0,0 +1,6 @@ +SubDir TOP board msba2-common ; + +Module board_common : board_common_init.c ; + +SubInclude TOP board msba2-common drivers ; + diff --git a/msba2/Jamfile.msba2 b/msba2-common/Jamfile.msba2 similarity index 90% rename from msba2/Jamfile.msba2 rename to msba2-common/Jamfile.msba2 index 44014a6c96..e9e291c906 100644 --- a/msba2/Jamfile.msba2 +++ b/msba2-common/Jamfile.msba2 @@ -25,7 +25,6 @@ # ****************************************************************************** # $Id$ -#LinkLibraries $(BOARD).elf : sys-drivers.a net_mm.a sys-lib.a fat-lib.a -# cpu_drivers.a board_drivers.a cc110x.a hal.a hal_drivers.a lpc2387_hal.a ; +Module msba2_common : board_init.c ; include [ FPath $(TOP) cpu arm_common Jamfile.arm_common ] ; diff --git a/msba2-common/Jamrules.msba2 b/msba2-common/Jamrules.msba2 new file mode 100644 index 0000000000..1bce8075c4 --- /dev/null +++ b/msba2-common/Jamrules.msba2 @@ -0,0 +1,34 @@ +# ****************************************************************************** +# Copyright 2009, Freie Universitaet Berlin (FUB). All rights reserved. +# +# These sources were developed at the Freie Universitaet Berlin, Computer +# Systems and Telematics group (http://cst.mi.fu-berlin.de). +# ------------------------------------------------------------------------------ +# This file is part of FeuerWare. +# +# This program is free software: you can redistribute it and/or modify it under +# the terms of the GNU General Public License as published by the Free Software +# Foundation, either version 3 of the License, or (at your option) any later +# version. +# +# FeuerWare is distributed in the hope that it will be useful, but WITHOUT +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS +# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License along with +# this program. If not, see http://www.gnu.org/licenses/ . +# ------------------------------------------------------------------------------ +# For further information and questions please use the web site +# http://scatterweb.mi.fu-berlin.de +# and the mailinglist (subscription via web site) +# scatterweb@lists.spline.inf.fu-berlin.de +# ****************************************************************************** +# $Id$ + +CPU = lpc2387 ; + +HDRS += [ FPath $(TOP) board msba2-common include ] ; +HDRS += [ FPath $(TOP) board msba2-common drivers include ] ; + +FLASHER ?= $(POSIXSHELL) lpc2k_pgm ; +FLASHFLAGS ?= "$(PORT)" ; diff --git a/msba2-common/board_common_init.c b/msba2-common/board_common_init.c new file mode 100644 index 0000000000..0823a71bc9 --- /dev/null +++ b/msba2-common/board_common_init.c @@ -0,0 +1,160 @@ +/****************************************************************************** +Copyright 2008-2009, Freie Universitaet Berlin (FUB). All rights reserved. + +These sources were developed at the Freie Universitaet Berlin, Computer Systems +and Telematics group (http://cst.mi.fu-berlin.de). +------------------------------------------------------------------------------- +This file is part of FeuerWare. + +This program is free software: you can redistribute it and/or modify it under +the terms of the GNU General Public License as published by the Free Software +Foundation, either version 3 of the License, or (at your option) any later +version. + +FeuerWare is distributed in the hope that it will be useful, but WITHOUT +ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS +FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. + +You should have received a copy of the GNU General Public License along with +this program. If not, see http://www.gnu.org/licenses/ . +-------------------------------------------------------------------------------- +For further information and questions please use the web site + http://scatterweb.mi.fu-berlin.de +and the mailinglist (subscription via web site) + scatterweb@lists.spline.inf.fu-berlin.de +*******************************************************************************/ + +/** + * @ingroup msba2 + * @{ + */ + +/** + * @file + * @brief MSB-A2 board initialization + * + * @author Freie Universität Berlin, Computer Systems & Telematics, FeuerWhere project + * @author Heiko Will + * @author Kaspar Schleiser + * @author Michael Baar + * + * @note $Id$ + */ +#include +#include +#include +#include +#include +#include +#include + +#define PCRTC BIT9 +#define CL_CPU_DIV 4 + +config_t sysconfig = { + 0, ///< default ID + 0, ///< default radio address + 0, ///< default radio channel +}; + +/*---------------------------------------------------------------------------*/ +/** + * @brief Enabling MAM and setting number of clocks used for Flash memory fetch + * @internal + */ +static void +init_mam(void) +{ + MAMCR = 0x0000; + MAMTIM = 0x0003; + MAMCR = 0x0002; +} +/*---------------------------------------------------------------------------*/ +static inline void +pllfeed(void) +{ + PLLFEED = 0xAA; + PLLFEED = 0x55; +} +/*---------------------------------------------------------------------------*/ +void init_clks1(void) +{ + // Disconnect PLL + PLLCON &= ~0x0002; + pllfeed(); + + // Disable PLL + PLLCON &= ~0x0001; + pllfeed(); + + SCS |= 0x20; // Enable main OSC + while( !(SCS & 0x40) ); // Wait until main OSC is usable + + /* select main OSC, 16MHz, as the PLL clock source */ + CLKSRCSEL = 0x0001; + + // Setting Multiplier and Divider values + PLLCFG = 0x0008; // M=9 N=1 Fcco = 288 MHz + pllfeed(); + + // Enabling the PLL */ + PLLCON = 0x0001; + pllfeed(); + + /* Set clock divider to 4 (value+1) */ + CCLKCFG = CL_CPU_DIV - 1; // Fcpu = 72 MHz + +#if USE_USB + USBCLKCFG = USBCLKDivValue; /* usbclk = 288 MHz/6 = 48 MHz */ +#endif +} + +void init_clks2(void){ + // Wait for the PLL to lock to set frequency + while(!(PLLSTAT & BIT26)); + + // Connect the PLL as the clock source + PLLCON = 0x0003; + pllfeed(); + + /* Check connect bit status */ + while (!(PLLSTAT & BIT25)); +} + +void bl_init_clks(void) +{ + PCONP = PCRTC; // switch off everything except RTC + init_clks1(); + init_clks2(); + init_mam(); +} + +void loop_delay(void) { + volatile uint16_t i, j; + for (i = 1; i < 30; i++) { + for (j = 1; j != 0; j++) { + asm volatile (" nop "); + } + } +} + +/*void bl_blink(void) { + LED_RED_ON; + LED_GREEN_ON; + + loop_delay(); + + LED_RED_OFF; + LED_GREEN_OFF; +}*/ + +// void bl_config_init(void) { +// extern char configmem[]; +// if (*((uint16_t*) configmem) == CONFIG_KEY) { +// memcpy(&sysconfig, (configmem + sizeof(CONFIG_KEY)), sizeof(sysconfig)); +// LED_GREEN_TOGGLE; +// } +// else { +// config_save(); +// } +// } diff --git a/msba2/config.c b/msba2-common/config.c similarity index 100% rename from msba2/config.c rename to msba2-common/config.c diff --git a/msba2-common/drivers/Jamfile b/msba2-common/drivers/Jamfile new file mode 100644 index 0000000000..9637982162 --- /dev/null +++ b/msba2-common/drivers/Jamfile @@ -0,0 +1,5 @@ +SubDir TOP board msba2-common drivers ; + +Module board_cc1100 : msba2-cc1100.c ; +Module board_ltc4150 : msba2-ltc4150.c : gpioint ; +Module board_uart : msba2-uart0.c : chardev_thread ringbuffer ; diff --git a/msba2/drivers/include/sht11-board.h b/msba2-common/drivers/include/sht11-board.h similarity index 100% rename from msba2/drivers/include/sht11-board.h rename to msba2-common/drivers/include/sht11-board.h diff --git a/msba2/drivers/include/uart0.h b/msba2-common/drivers/include/uart0.h similarity index 100% rename from msba2/drivers/include/uart0.h rename to msba2-common/drivers/include/uart0.h diff --git a/msba2/drivers/msba2-cc1100.c b/msba2-common/drivers/msba2-cc1100.c similarity index 100% rename from msba2/drivers/msba2-cc1100.c rename to msba2-common/drivers/msba2-cc1100.c diff --git a/msba2/drivers/msba2-ltc4150.c b/msba2-common/drivers/msba2-ltc4150.c similarity index 100% rename from msba2/drivers/msba2-ltc4150.c rename to msba2-common/drivers/msba2-ltc4150.c diff --git a/msba2/drivers/msba2-uart0.c b/msba2-common/drivers/msba2-uart0.c similarity index 100% rename from msba2/drivers/msba2-uart0.c rename to msba2-common/drivers/msba2-uart0.c diff --git a/msba2/drivers/include/hal-board.h b/msba2-common/include/msba2_common.h similarity index 74% rename from msba2/drivers/include/hal-board.h rename to msba2-common/include/msba2_common.h index a4dfc293ab..a9d9d3e72c 100644 --- a/msba2/drivers/include/hal-board.h +++ b/msba2-common/include/msba2_common.h @@ -24,45 +24,28 @@ and the mailinglist (subscription via web site) scatterweb@lists.spline.inf.fu-berlin.de *******************************************************************************/ -#ifndef HALPLATFORM_H_ -#define HALPLATFORM_H_ +#ifndef __BOARD_H +#define __BOARD_H /** - * @ingroup msba2 + * @ingroup msb_a2 * @{ */ /** * @file - * @brief + * @brief MSB-A2 Common Board Definitions * * @author Freie Universität Berlin, Computer Systems & Telematics, FeuerWhere project - * @author baar + * @author Kaspar Schleiser * @version $Revision$ * * @note $Id$ */ -#include "vdevice.h" -#include "device-gpio.h" -#include "device-rs232.h" -#include "device-serial.h" +#include -VDEVICE_NAME(vdevice_gpio, gpio_led_green); -VDEVICE_NAME(vdevice_gpio, gpio_led_red); -VDEVICE_NAME(vdevice_gpio, gpio_led_usb); - -/** - * @var tty0 - * @brief RS232 TTY0 device on UART0 - */ -VDEVICE_NAME(vdevice_rs232, tty0); - -/** - * @var console0 - * @brief console device on tty0 - */ -VDEVICE_NAME(vdevice_serial, console0); +#define VICIntEnClear VICIntEnClr /** @} */ -#endif /* HALPLATFORM_H_ */ +#endif // __BOARD_H diff --git a/msba2/lpc2387-timer3.c b/msba2-common/lpc2387-timer3.c similarity index 100% rename from msba2/lpc2387-timer3.c rename to msba2-common/lpc2387-timer3.c diff --git a/msba2/tools/CHANGES b/msba2-common/tools/CHANGES similarity index 100% rename from msba2/tools/CHANGES rename to msba2-common/tools/CHANGES diff --git a/msba2/tools/COPYING b/msba2-common/tools/COPYING similarity index 100% rename from msba2/tools/COPYING rename to msba2-common/tools/COPYING diff --git a/msba2/tools/Makefile b/msba2-common/tools/Makefile similarity index 100% rename from msba2/tools/Makefile rename to msba2-common/tools/Makefile diff --git a/msba2/tools/README.txt b/msba2-common/tools/README.txt similarity index 100% rename from msba2/tools/README.txt rename to msba2-common/tools/README.txt diff --git a/msba2/tools/armtools.txt b/msba2-common/tools/armtools.txt similarity index 100% rename from msba2/tools/armtools.txt rename to msba2-common/tools/armtools.txt diff --git a/msba2/tools/flash.cmd b/msba2-common/tools/flash.cmd similarity index 100% rename from msba2/tools/flash.cmd rename to msba2-common/tools/flash.cmd diff --git a/msba2/tools/flashutil.sh b/msba2-common/tools/flashutil.sh similarity index 100% rename from msba2/tools/flashutil.sh rename to msba2-common/tools/flashutil.sh diff --git a/msba2/tools/mkbootc b/msba2-common/tools/mkbootc similarity index 100% rename from msba2/tools/mkbootc rename to msba2-common/tools/mkbootc diff --git a/msba2/tools/mkstaticlist b/msba2-common/tools/mkstaticlist similarity index 100% rename from msba2/tools/mkstaticlist rename to msba2-common/tools/mkstaticlist diff --git a/msba2/tools/obj/boot_23xx.d b/msba2-common/tools/obj/boot_23xx.d similarity index 100% rename from msba2/tools/obj/boot_23xx.d rename to msba2-common/tools/obj/boot_23xx.d diff --git a/msba2/tools/obj/boot_2xxx.d b/msba2-common/tools/obj/boot_2xxx.d similarity index 100% rename from msba2/tools/obj/boot_2xxx.d rename to msba2-common/tools/obj/boot_2xxx.d diff --git a/msba2/tools/obj/chipinfo.d b/msba2-common/tools/obj/chipinfo.d similarity index 100% rename from msba2/tools/obj/chipinfo.d rename to msba2-common/tools/obj/chipinfo.d diff --git a/msba2/tools/obj/control_2xxx.d b/msba2-common/tools/obj/control_2xxx.d similarity index 100% rename from msba2/tools/obj/control_2xxx.d rename to msba2-common/tools/obj/control_2xxx.d diff --git a/msba2/tools/obj/download.d b/msba2-common/tools/obj/download.d similarity index 100% rename from msba2/tools/obj/download.d rename to msba2-common/tools/obj/download.d diff --git a/msba2/tools/obj/ihex.d b/msba2-common/tools/obj/ihex.d similarity index 100% rename from msba2/tools/obj/ihex.d rename to msba2-common/tools/obj/ihex.d diff --git a/msba2/tools/obj/lpc2k_pgm.d b/msba2-common/tools/obj/lpc2k_pgm.d similarity index 100% rename from msba2/tools/obj/lpc2k_pgm.d rename to msba2-common/tools/obj/lpc2k_pgm.d diff --git a/msba2/tools/obj/pseudoterm.d b/msba2-common/tools/obj/pseudoterm.d similarity index 100% rename from msba2/tools/obj/pseudoterm.d rename to msba2-common/tools/obj/pseudoterm.d diff --git a/msba2/tools/obj/serial.d b/msba2-common/tools/obj/serial.d similarity index 100% rename from msba2/tools/obj/serial.d rename to msba2-common/tools/obj/serial.d diff --git a/msba2/tools/obj/uuencode.d b/msba2-common/tools/obj/uuencode.d similarity index 100% rename from msba2/tools/obj/uuencode.d rename to msba2-common/tools/obj/uuencode.d diff --git a/msba2/tools/src/Jamfile b/msba2-common/tools/src/Jamfile similarity index 100% rename from msba2/tools/src/Jamfile rename to msba2-common/tools/src/Jamfile diff --git a/msba2/tools/src/boot.h b/msba2-common/tools/src/boot.h similarity index 100% rename from msba2/tools/src/boot.h rename to msba2-common/tools/src/boot.h diff --git a/msba2/tools/src/boot_23xx.armasm b/msba2-common/tools/src/boot_23xx.armasm similarity index 100% rename from msba2/tools/src/boot_23xx.armasm rename to msba2-common/tools/src/boot_23xx.armasm diff --git a/msba2/tools/src/boot_23xx.c b/msba2-common/tools/src/boot_23xx.c similarity index 100% rename from msba2/tools/src/boot_23xx.c rename to msba2-common/tools/src/boot_23xx.c diff --git a/msba2/tools/src/boot_23xx.h b/msba2-common/tools/src/boot_23xx.h similarity index 100% rename from msba2/tools/src/boot_23xx.h rename to msba2-common/tools/src/boot_23xx.h diff --git a/msba2/tools/src/boot_2xxx.armasm b/msba2-common/tools/src/boot_2xxx.armasm similarity index 100% rename from msba2/tools/src/boot_2xxx.armasm rename to msba2-common/tools/src/boot_2xxx.armasm diff --git a/msba2/tools/src/boot_2xxx.c b/msba2-common/tools/src/boot_2xxx.c similarity index 100% rename from msba2/tools/src/boot_2xxx.c rename to msba2-common/tools/src/boot_2xxx.c diff --git a/msba2/tools/src/boot_2xxx.h b/msba2-common/tools/src/boot_2xxx.h similarity index 100% rename from msba2/tools/src/boot_2xxx.h rename to msba2-common/tools/src/boot_2xxx.h diff --git a/msba2/tools/src/chipinfo.c b/msba2-common/tools/src/chipinfo.c similarity index 100% rename from msba2/tools/src/chipinfo.c rename to msba2-common/tools/src/chipinfo.c diff --git a/msba2/tools/src/chipinfo.h b/msba2-common/tools/src/chipinfo.h similarity index 100% rename from msba2/tools/src/chipinfo.h rename to msba2-common/tools/src/chipinfo.h diff --git a/msba2/tools/src/cksum_test.c b/msba2-common/tools/src/cksum_test.c similarity index 100% rename from msba2/tools/src/cksum_test.c rename to msba2-common/tools/src/cksum_test.c diff --git a/msba2/tools/src/control_2xxx.c b/msba2-common/tools/src/control_2xxx.c similarity index 100% rename from msba2/tools/src/control_2xxx.c rename to msba2-common/tools/src/control_2xxx.c diff --git a/msba2/tools/src/control_2xxx.h b/msba2-common/tools/src/control_2xxx.h similarity index 100% rename from msba2/tools/src/control_2xxx.h rename to msba2-common/tools/src/control_2xxx.h diff --git a/msba2/tools/src/download.c b/msba2-common/tools/src/download.c similarity index 100% rename from msba2/tools/src/download.c rename to msba2-common/tools/src/download.c diff --git a/msba2/tools/src/download.h b/msba2-common/tools/src/download.h similarity index 100% rename from msba2/tools/src/download.h rename to msba2-common/tools/src/download.h diff --git a/msba2/tools/src/gui.c b/msba2-common/tools/src/gui.c similarity index 100% rename from msba2/tools/src/gui.c rename to msba2-common/tools/src/gui.c diff --git a/msba2/tools/src/gui.h b/msba2-common/tools/src/gui.h similarity index 100% rename from msba2/tools/src/gui.h rename to msba2-common/tools/src/gui.h diff --git a/msba2/tools/src/ihex.c b/msba2-common/tools/src/ihex.c similarity index 100% rename from msba2/tools/src/ihex.c rename to msba2-common/tools/src/ihex.c diff --git a/msba2/tools/src/ihex.h b/msba2-common/tools/src/ihex.h similarity index 100% rename from msba2/tools/src/ihex.h rename to msba2-common/tools/src/ihex.h diff --git a/msba2/tools/src/lpc2k_pgm.c b/msba2-common/tools/src/lpc2k_pgm.c similarity index 100% rename from msba2/tools/src/lpc2k_pgm.c rename to msba2-common/tools/src/lpc2k_pgm.c diff --git a/msba2/tools/src/lpc2k_pgm.h b/msba2-common/tools/src/lpc2k_pgm.h similarity index 100% rename from msba2/tools/src/lpc2k_pgm.h rename to msba2-common/tools/src/lpc2k_pgm.h diff --git a/msba2/tools/src/pseudoterm.c b/msba2-common/tools/src/pseudoterm.c similarity index 100% rename from msba2/tools/src/pseudoterm.c rename to msba2-common/tools/src/pseudoterm.c diff --git a/msba2/tools/src/serial.c b/msba2-common/tools/src/serial.c similarity index 100% rename from msba2/tools/src/serial.c rename to msba2-common/tools/src/serial.c diff --git a/msba2/tools/src/serial.h b/msba2-common/tools/src/serial.h similarity index 100% rename from msba2/tools/src/serial.h rename to msba2-common/tools/src/serial.h diff --git a/msba2/tools/src/settings.c b/msba2-common/tools/src/settings.c similarity index 100% rename from msba2/tools/src/settings.c rename to msba2-common/tools/src/settings.c diff --git a/msba2/tools/src/settings.h b/msba2-common/tools/src/settings.h similarity index 100% rename from msba2/tools/src/settings.h rename to msba2-common/tools/src/settings.h diff --git a/msba2/tools/src/uuencode.c b/msba2-common/tools/src/uuencode.c similarity index 100% rename from msba2/tools/src/uuencode.c rename to msba2-common/tools/src/uuencode.c diff --git a/msba2/tools/src/uuencode.h b/msba2-common/tools/src/uuencode.h similarity index 100% rename from msba2/tools/src/uuencode.h rename to msba2-common/tools/src/uuencode.h diff --git a/msba2/tools/termctrl.sh b/msba2-common/tools/termctrl.sh similarity index 100% rename from msba2/tools/termctrl.sh rename to msba2-common/tools/termctrl.sh diff --git a/msba2/Jamfile b/msba2/Jamfile index 468b453066..553522ba68 100644 --- a/msba2/Jamfile +++ b/msba2/Jamfile @@ -25,12 +25,12 @@ # ****************************************************************************** # $Id$ -SubDir TOP board msba2 ; +SubDir TOP board $(BOARD) ; -Module board : board_init.c ; -Module config : config.c ; +Module board : board_init.c : board_common board_uart ; UseModule board ; -UseModule board_common ; -SubInclude TOP board $(BOARD) drivers ; +Module config : config.c ; + +SubInclude TOP board $(BOARD)-common ; SubInclude TOP cpu $(CPU) ; diff --git a/msba2/Jamrules.msba2 b/msba2/Jamrules.msba2 index b0ad55f759..22c8a88060 100644 --- a/msba2/Jamrules.msba2 +++ b/msba2/Jamrules.msba2 @@ -1,33 +1 @@ -# ****************************************************************************** -# Copyright 2009, Freie Universitaet Berlin (FUB). All rights reserved. -# -# These sources were developed at the Freie Universitaet Berlin, Computer -# Systems and Telematics group (http://cst.mi.fu-berlin.de). -# ------------------------------------------------------------------------------ -# This file is part of FeuerWare. -# -# This program is free software: you can redistribute it and/or modify it under -# the terms of the GNU General Public License as published by the Free Software -# Foundation, either version 3 of the License, or (at your option) any later -# version. -# -# FeuerWare is distributed in the hope that it will be useful, but WITHOUT -# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS -# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License along with -# this program. If not, see http://www.gnu.org/licenses/ . -# ------------------------------------------------------------------------------ -# For further information and questions please use the web site -# http://scatterweb.mi.fu-berlin.de -# and the mailinglist (subscription via web site) -# scatterweb@lists.spline.inf.fu-berlin.de -# ****************************************************************************** -# $Id$ - -CPU = lpc2387 ; - -HDRS += [ FPath $(TOP) board $(BOARD) drivers include ] ; - -FLASHER ?= $(POSIXSHELL) lpc2k_pgm ; -FLASHFLAGS ?= "$(PORT)" ; +include board/msba2-common/Jamrules.msba2 ; diff --git a/msba2/board_init.c b/msba2/board_init.c index 469c8fe7cd..f250109c08 100644 --- a/msba2/board_init.c +++ b/msba2/board_init.c @@ -1,140 +1,6 @@ -/****************************************************************************** -Copyright 2008-2009, Freie Universitaet Berlin (FUB). All rights reserved. - -These sources were developed at the Freie Universitaet Berlin, Computer Systems -and Telematics group (http://cst.mi.fu-berlin.de). -------------------------------------------------------------------------------- -This file is part of FeuerWare. - -This program is free software: you can redistribute it and/or modify it under -the terms of the GNU General Public License as published by the Free Software -Foundation, either version 3 of the License, or (at your option) any later -version. - -FeuerWare is distributed in the hope that it will be useful, but WITHOUT -ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS -FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. - -You should have received a copy of the GNU General Public License along with -this program. If not, see http://www.gnu.org/licenses/ . --------------------------------------------------------------------------------- -For further information and questions please use the web site - http://scatterweb.mi.fu-berlin.de -and the mailinglist (subscription via web site) - scatterweb@lists.spline.inf.fu-berlin.de -*******************************************************************************/ - -/** - * @ingroup msba2 - * @{ - */ - -/** - * @file - * @brief MSB-A2 board initialization - * - * @author Freie Universität Berlin, Computer Systems & Telematics, FeuerWhere project - * @author Heiko Will - * @author Kaspar Schleiser - * @author Michael Baar - * - * @note $Id$ - */ #include -#include -#include #include -#define PCRTC BIT9 -#define CL_CPU_DIV 4 - -/*---------------------------------------------------------------------------*/ -/** - * @brief Enabling MAM and setting number of clocks used for Flash memory fetch - * @internal - */ -static void -init_mam(void) -{ - MAMCR = 0x0000; - MAMTIM = 0x0003; - MAMCR = 0x0002; -} -/*---------------------------------------------------------------------------*/ -static inline void -pllfeed(void) -{ - PLLFEED = 0xAA; - PLLFEED = 0x55; -} -/*---------------------------------------------------------------------------*/ -void init_clks1(void) -{ - // Disconnect PLL - PLLCON &= ~0x0002; - pllfeed(); - - // Disable PLL - PLLCON &= ~0x0001; - pllfeed(); - - SCS |= 0x20; // Enable main OSC - while( !(SCS & 0x40) ); // Wait until main OSC is usable - - /* select main OSC, 16MHz, as the PLL clock source */ - CLKSRCSEL = 0x0001; - - // Setting Multiplier and Divider values - PLLCFG = 0x0008; // M=9 N=1 Fcco = 288 MHz - pllfeed(); - - // Enabling the PLL */ - PLLCON = 0x0001; - pllfeed(); - - /* Set clock divider to 4 (value+1) */ - CCLKCFG = CL_CPU_DIV - 1; // Fcpu = 72 MHz - -#if USE_USB - USBCLKCFG = USBCLKDivValue; /* usbclk = 288 MHz/6 = 48 MHz */ -#endif -} - -void init_clks2(void){ - // Wait for the PLL to lock to set frequency - while(!(PLLSTAT & BIT26)); - - // Connect the PLL as the clock source - PLLCON = 0x0003; - pllfeed(); - - /* Check connect bit status */ - while (!(PLLSTAT & BIT25)); -} - -void bl_init_clks(void) -{ - PCONP = PCRTC; // switch off everything except RTC - init_clks1(); - init_clks2(); - init_mam(); -} - -void bl_init_ports(void) -{ - SCS |= BIT0; // Set IO Ports to fast switching mode - - /* UART0 */ - PINSEL0 |= BIT4 + BIT6; // RxD0 and TxD0 - PINSEL0 &= ~(BIT5 + BIT7); - - /* LEDS */ - FIO3DIR |= LED_RED_PIN; - FIO3DIR |= LED_GREEN_PIN; - LED_RED_OFF; - LED_GREEN_OFF; -} - void loop_delay(void) { volatile uint16_t i, j; for (i = 1; i < 30; i++) { @@ -153,3 +19,22 @@ void bl_blink(void) { LED_RED_OFF; LED_GREEN_OFF; } + +void bl_init_ports(void) +{ + SCS |= BIT0; // Set IO Ports to fast switching mode + + /* UART0 */ + PINSEL0 |= BIT4 + BIT6; // RxD0 and TxD0 + PINSEL0 &= ~(BIT5 + BIT7); + + /* LEDS */ + FIO3DIR |= LED_RED_PIN; + FIO3DIR |= LED_GREEN_PIN; + LED_RED_OFF; + LED_GREEN_OFF; + + /* short blinking of both of the LEDs on startup */ + bl_blink(); +} + diff --git a/msba2/drivers/Jamfile b/msba2/drivers/Jamfile deleted file mode 100644 index 50f2ddbf01..0000000000 --- a/msba2/drivers/Jamfile +++ /dev/null @@ -1,7 +0,0 @@ -SubDir TOP board msba2 drivers ; - -Module board_cc1100 : msba2-cc1100.c : gpioint cc110x_spi ; -Module board_hal : msba2-hal.c ; -Module board_ltc4150 : msba2-ltc4150.c : gpioint ; -Module board_common : msba2-uart0.c : ringbuffer ; -Module board_uart : msba2-uart0_thread.c : chardev_thread ringbuffer ; diff --git a/msba2/include/board-conf.h b/msba2/include/board-conf.h deleted file mode 100644 index 2c8824f1fc..0000000000 --- a/msba2/include/board-conf.h +++ /dev/null @@ -1,68 +0,0 @@ -/****************************************************************************** -Copyright 2008, Freie Universitaet Berlin (FUB). All rights reserved. - -These sources were developed at the Freie Universitaet Berlin, Computer Systems -and Telematics group (http://cst.mi.fu-berlin.de). -------------------------------------------------------------------------------- -This file is part of FeuerWare. - -This program is free software: you can redistribute it and/or modify it under -the terms of the GNU General Public License as published by the Free Software -Foundation, either version 3 of the License, or (at your option) any later -version. - -FeuerWare is distributed in the hope that it will be useful, but WITHOUT -ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS -FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. - -You should have received a copy of the GNU General Public License along with -this program. If not, see http://www.gnu.org/licenses/ . --------------------------------------------------------------------------------- -For further information and questions please use the web site - http://scatterweb.mi.fu-berlin.de -and the mailinglist (subscription via web site) - scatterweb@lists.spline.inf.fu-berlin.de -*******************************************************************************/ - -#ifndef BOARDCONF_H_ -#define BOARDCONF_H_ - -/** - * @ingroup conf - * @ingroup msba2 - * - * @{ - */ - -/** - * @file - * @brief MSB-A2 board configuration - * - * @author Freie Universität Berlin, Computer Systems & Telematics, FeuerWhere project - * @author baar - * @version $Revision$ - * - * @note $Id$ - */ - -#define FEUERWARE_CONF_BOARD_NAME "FU Berlin MSB-A2" - -#ifdef MODULE_CC110X -#define FEUERWARE_CONF_NUM_RADIOS 1 -#else -#define FEUERWARE_CONF_NUM_RADIOS 0 -#endif - -// if FAT is enabled this board supports files -#define FEUERWARE_CONF_CORE_SUPPORTS_FILES defined(MODULE_FAT) - -#ifdef MODULE_FAT -#define CFG_CONF_MEM_SIZE 0x7FFFFFFF -#define SYSLOG_CONF_NUM_INTERFACES 2 -#else -#define SYSLOG_CONF_NUM_INTERFACES 1 -#endif - - -/** @} */ -#endif /* BOARDCONF_H_ */ diff --git a/msba2/include/board.h b/msba2/include/board.h index 4356e4423f..bf596f0ee1 100644 --- a/msba2/include/board.h +++ b/msba2/include/board.h @@ -1,51 +1,7 @@ -/****************************************************************************** -Copyright 2008, Freie Universitaet Berlin (FUB). All rights reserved. - -These sources were developed at the Freie Universitaet Berlin, Computer Systems -and Telematics group (http://cst.mi.fu-berlin.de). -------------------------------------------------------------------------------- -This file is part of FeuerWare. - -This program is free software: you can redistribute it and/or modify it under -the terms of the GNU General Public License as published by the Free Software -Foundation, either version 3 of the License, or (at your option) any later -version. - -FeuerWare is distributed in the hope that it will be useful, but WITHOUT -ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS -FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. - -You should have received a copy of the GNU General Public License along with -this program. If not, see http://www.gnu.org/licenses/ . --------------------------------------------------------------------------------- -For further information and questions please use the web site - http://scatterweb.mi.fu-berlin.de -and the mailinglist (subscription via web site) - scatterweb@lists.spline.inf.fu-berlin.de -*******************************************************************************/ - #ifndef __BOARD_H -#define __BOARD_H +#define __BOARD_H -/** - * @ingroup msb_a2 - * @{ - */ - -/** - * @file - * @brief MSB-A2 Board - * - * @author Freie Universität Berlin, Computer Systems & Telematics, FeuerWhere project - * @author Kaspar Schleiser - * @version $Revision$ - * - * @note $Id$ - */ - -#include - -#define VICIntEnClear VICIntEnClr +#include #define LED_RED_PIN (BIT25) #define LED_GREEN_PIN (BIT26) @@ -58,5 +14,4 @@ and the mailinglist (subscription via web site) #define LED_RED_ON (FIO3CLR = LED_RED_PIN) #define LED_RED_TOGGLE (FIO3PIN ^= LED_RED_PIN) -/** @} */ -#endif // __BOARD_H +#endif /* __BOARD_H */ diff --git a/pttu/Jamfile b/pttu/Jamfile index a7b4d6df11..11b4a77e7e 100644 --- a/pttu/Jamfile +++ b/pttu/Jamfile @@ -23,13 +23,12 @@ # and the mailinglist (subscription via web site) # scatterweb@lists.spline.inf.fu-berlin.de # ****************************************************************************** -# $Id: Jamfile 922 2009-03-26 12:52:27Z baar $ +# $Id$ -SubDir TOP board pttu ; +SubDir TOP board $(BOARD) ; -Module board : board_init.c ; +Module board : board_init.c : board_common board_uart ; UseModule board ; -UseModule board_common ; -SubInclude TOP board $(BOARD) drivers ; +SubInclude TOP board msba2-common ; SubInclude TOP cpu $(CPU) ; diff --git a/pttu/Jamrules.pttu b/pttu/Jamrules.pttu index 7eff15f0bb..53e71c71f1 100644 --- a/pttu/Jamrules.pttu +++ b/pttu/Jamrules.pttu @@ -25,13 +25,10 @@ # ****************************************************************************** # $Id: Jamrules.msba2 881 2009-03-20 12:24:58Z kaspar $ -CPU = lpc2387 ; +include board/msba2-common/Jamrules.msba2 ; HDRS += [ FPath $(TOP) board $(BOARD) drivers include ] ; -FLASHER = $(POSIXSHELL) $(TOP)/board/msba2/tools/flashutil.sh ; -FLASHFLAGS = --basedir $(TOP)/board/msba2/tools --id PTTU --ports "$(PORT)" --openocd $(TOP)/board/pttu/tools/openocd-pttu.sh --openocd-if $(OPENOCD_IF) ; - GDB = arm-elf-gdb ; GDBFLAGS = -x board/pttu/tools/pttu_debug.gdb ; diff --git a/pttu/board_init.c b/pttu/board_init.c index 3070bdfce7..b5b78bde25 100644 --- a/pttu/board_init.c +++ b/pttu/board_init.c @@ -33,94 +33,18 @@ and the mailinglist (subscription via web site) * @file * @brief PTTU board initialization * - * @author Freie Universit�t Berlin, Computer Systems & Telematics, FeuerWhere project + * @author Freie Universität Berlin, Computer Systems & Telematics, FeuerWhere project * @author Heiko Will - * @author Kaspar Schleise - * @author Michael Baar + * @author Kaspar Schleiser * - * @note $Id: cmdengine-out.c 971 2009-04-07 13:41:36Z baar $ */ -#include "lpc23xx.h" -#include "VIC.h" -#include "cpu.h" +#include +#include +#include #define PCRTC BIT9 #define CL_CPU_DIV 4 -/*---------------------------------------------------------------------------*/ -/** - * @brief Enabling MAM and setting number of clocks used for Flash memory fetch - * @internal - */ -void -init_mam(void) -{ - MAMCR = 0x0000; - MAMTIM = 0x0003; - MAMCR = 0x0002; -} -/*---------------------------------------------------------------------------*/ -static inline void -pllfeed(void) -{ - PLLFEED = 0xAA; - PLLFEED = 0x55; -} -/*---------------------------------------------------------------------------*/ -void init_clks1(void) -{ - // Disconnect PLL - PLLCON &= ~0x0002; - pllfeed(); - - // Disable PLL - PLLCON &= ~0x0001; - pllfeed(); - - SCS |= 0x20; // Enable main OSC - while( !(SCS & 0x40) ); // Wait until main OSC is usable - - /* select main OSC, 16MHz, as the PLL clock source */ - CLKSRCSEL = 0x0001; - - // Setting Multiplier and Divider values - PLLCFG = 0x0008; // M=9 N=1 Fcco = 288 MHz - pllfeed(); - - // Enabling the PLL */ - PLLCON = 0x0001; - pllfeed(); - - /* Set clock divider to 4 (value+1) */ - CCLKCFG = CL_CPU_DIV - 1; // Fcpu = 72 MHz - -#if USE_USB - USBCLKCFG = USBCLKDivValue; /* usbclk = 288 MHz/6 = 48 MHz */ -#endif -} - -void init_clks2(void){ - // Wait for the PLL to lock to set frequency - while(!(PLLSTAT & BIT26)); - - // Connect the PLL as the clock source - PLLCON = 0x0003; - pllfeed(); - - /* Check connect bit status */ - while (!(PLLSTAT & BIT25)); -} - -void bl_init_clks(void) -{ - PCONP = PCRTC; // switch off everything except RTC - init_clks1(); - init_clks2(); - init_mam(); -} - - -// Michael, Do not change anything here! even not the redundant parts! void bl_init_ports(void) { SCS |= BIT0; // Set IO Ports to fast switching mode diff --git a/pttu/drivers/Jamfile b/pttu/drivers/Jamfile index 26a8b7c2af..31d6db1d6d 100644 --- a/pttu/drivers/Jamfile +++ b/pttu/drivers/Jamfile @@ -1,4 +1,2 @@ SubDir TOP board pttu drivers ; -Module board_common : pttu-uart0.c ; - diff --git a/pttu/drivers/pttu-uart0.c b/pttu/drivers/pttu-uart0.c deleted file mode 100644 index d542f22602..0000000000 --- a/pttu/drivers/pttu-uart0.c +++ /dev/null @@ -1,204 +0,0 @@ -/****************************************************************************** -Copyright 2008-2009, Freie Universitaet Berlin (FUB). All rights reserved. - -These sources were developed at the Freie Universitaet Berlin, Computer Systems -and Telematics group (http://cst.mi.fu-berlin.de). -------------------------------------------------------------------------------- -This file is part of FeuerWare. - -This program is free software: you can redistribute it and/or modify it under -the terms of the GNU General Public License as published by the Free Software -Foundation, either version 3 of the License, or (at your option) any later -version. - -FeuerWare is distributed in the hope that it will be useful, but WITHOUT -ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS -FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. - -You should have received a copy of the GNU General Public License along with -this program. If not, see http://www.gnu.org/licenses/ . --------------------------------------------------------------------------------- -For further information and questions please use the web site - http://scatterweb.mi.fu-berlin.de -and the mailinglist (subscription via web site) - scatterweb@lists.spline.inf.fu-berlin.de -*******************************************************************************/ - -/* - * debug_uart.c: provides initial serial debug output - * - * Copyright (C) 2008, 2009 Kaspar Schleiser - * Heiko Will - */ -#include -#include -#include -#include "lpc23xx.h" -#include "VIC.h" - -/** - * @file - * @ingroup lpc2387 - * - * @author Freie Universität Berlin, Computer Systems & Telematics, FeuerWhere project - * @version $Revision$ - * - * @note $Id$ - */ - -typedef struct toprint { - unsigned int len; - char content[]; -}toprint; - -#define QUEUESIZE 255 -static volatile toprint* queue[QUEUESIZE]; -static volatile unsigned char queue_head = 0; -static volatile unsigned char queue_tail = 0; -static volatile unsigned char queue_items = 0; - -static volatile unsigned int actual_pos = 0; -static volatile unsigned int running = 0; -static volatile unsigned int fifo = 0; - -static volatile toprint* actual = NULL; -void (*uart0_callback)(int); - -static inline void enqueue(void) { - queue_items++; - queue_tail++; -} - -static inline void dequeue(void) { - actual = (queue[queue_head]); - queue_items--; - queue_head++; -} - -static void push_queue(void) { - running = 1; -start: - if (!actual) { - if (queue_items) { - dequeue(); - } else { - running = 0; - if (!fifo) - while(!(U0LSR & BIT6)){}; - return; - } - } - while ((actual_pos < actual->len) && (fifo++ < 16)){ - U0THR = actual->content[actual_pos++]; - } - if (actual_pos == actual->len) { - free((void*)actual); - actual = NULL; - actual_pos = 0; - goto start; - } -} - -int uart_active(void){ - return (running || fifo); -} - -static inline void receive(int c) -{ - if (uart0_callback != NULL) uart0_callback(c); -} - -void stdio_flush(void) -{ - U0IER &= ~BIT1; // disable THRE interrupt - while(running) { - while(!(U0LSR & (BIT5|BIT6))){}; // transmit fifo - fifo=0; - push_queue(); // dequeue to fifo - } - U0IER |= BIT1; // enable THRE interrupt -} - -void UART0_IRQHandler(void) __attribute__((interrupt("IRQ"))); -void UART0_IRQHandler(void) -{ - int iir; - iir = U0IIR; - - switch(iir & UIIR_ID_MASK) { - case UIIR_THRE_INT: // Transmit Holding Register Empty - fifo=0; - push_queue(); - break; - - case UIIR_CTI_INT: // Character Timeout Indicator - case UIIR_RDA_INT: // Receive Data Available - do { - int c = U0RBR; - receive(c); - } while (U0LSR & ULSR_RDR); - break; - - default: - U0LSR; - U0RBR; - break; - } // switch - VICVectAddr = 0; // Acknowledge Interrupt -} - -static inline int uart0_puts(char *astring,int length) -{ - while (queue_items == (QUEUESIZE-1)) {} ; - U0IER = 0; - queue[queue_tail] = malloc(length+sizeof(unsigned int)); - queue[queue_tail]->len = length; - memcpy(&queue[queue_tail]->content,astring,length); - enqueue(); - if (!running) - push_queue(); - U0IER |= BIT0 | BIT1; // enable RX irq - - // alternative without queue: -// int i; -// for (i=0;iconfig->speed - /* - * Baudrate calculation - * BR = PCLK (9 MHz) / (16 x 256 x DLM + DLL) x (1/(DIVADDVAL/MULVAL)) - */ - U0FDR = 0x92; // DIVADDVAL = 0010 = 2, MULVAL = 1001 = 9 - U0DLM = 0x00; - U0DLL = 0x04; - - U0LCR = 0x03; // DLAB = 0 - U0FCR = 0x07; // Enable and reset TX and RX FIFO - - /* irq */ - install_irq(UART0_INT, UART0_IRQHandler, 6); - U0IER |= BIT0 | BIT1; // enable RX+TX irq - return 1; -} - From 77146f63b27a4d7ccfc3cf948b457a67ee736d81 Mon Sep 17 00:00:00 2001 From: Kaspar Schleiser Date: Mon, 6 Dec 2010 17:15:00 +0100 Subject: [PATCH 08/17] * misc merge fixes --- msba2-common/Jamfile | 1 + msba2-common/board_common_init.c | 35 -------------------------------- msba2-common/drivers/Jamfile | 3 ++- msba2/Jamfile | 2 -- 4 files changed, 3 insertions(+), 38 deletions(-) diff --git a/msba2-common/Jamfile b/msba2-common/Jamfile index 8b3d8febcc..ed2adc5647 100644 --- a/msba2-common/Jamfile +++ b/msba2-common/Jamfile @@ -1,6 +1,7 @@ SubDir TOP board msba2-common ; Module board_common : board_common_init.c ; +Module config : config.c ; SubInclude TOP board msba2-common drivers ; diff --git a/msba2-common/board_common_init.c b/msba2-common/board_common_init.c index 0823a71bc9..8d7c359625 100644 --- a/msba2-common/board_common_init.c +++ b/msba2-common/board_common_init.c @@ -51,12 +51,6 @@ and the mailinglist (subscription via web site) #define PCRTC BIT9 #define CL_CPU_DIV 4 -config_t sysconfig = { - 0, ///< default ID - 0, ///< default radio address - 0, ///< default radio channel -}; - /*---------------------------------------------------------------------------*/ /** * @brief Enabling MAM and setting number of clocks used for Flash memory fetch @@ -129,32 +123,3 @@ void bl_init_clks(void) init_mam(); } -void loop_delay(void) { - volatile uint16_t i, j; - for (i = 1; i < 30; i++) { - for (j = 1; j != 0; j++) { - asm volatile (" nop "); - } - } -} - -/*void bl_blink(void) { - LED_RED_ON; - LED_GREEN_ON; - - loop_delay(); - - LED_RED_OFF; - LED_GREEN_OFF; -}*/ - -// void bl_config_init(void) { -// extern char configmem[]; -// if (*((uint16_t*) configmem) == CONFIG_KEY) { -// memcpy(&sysconfig, (configmem + sizeof(CONFIG_KEY)), sizeof(sysconfig)); -// LED_GREEN_TOGGLE; -// } -// else { -// config_save(); -// } -// } diff --git a/msba2-common/drivers/Jamfile b/msba2-common/drivers/Jamfile index 9637982162..c0f4138ab9 100644 --- a/msba2-common/drivers/Jamfile +++ b/msba2-common/drivers/Jamfile @@ -1,5 +1,6 @@ SubDir TOP board msba2-common drivers ; -Module board_cc1100 : msba2-cc1100.c ; +Module board_cc1100 : msba2-cc1100.c : cc110x_spi gpioint ; Module board_ltc4150 : msba2-ltc4150.c : gpioint ; Module board_uart : msba2-uart0.c : chardev_thread ringbuffer ; + diff --git a/msba2/Jamfile b/msba2/Jamfile index 553522ba68..6e74471b63 100644 --- a/msba2/Jamfile +++ b/msba2/Jamfile @@ -30,7 +30,5 @@ SubDir TOP board $(BOARD) ; Module board : board_init.c : board_common board_uart ; UseModule board ; -Module config : config.c ; - SubInclude TOP board $(BOARD)-common ; SubInclude TOP cpu $(CPU) ; From 7d7c956c26e20a55281f3182c222b091aa4441f1 Mon Sep 17 00:00:00 2001 From: Oliver Hahm Date: Mon, 6 Dec 2010 17:17:19 +0100 Subject: [PATCH 09/17] [board/msba2-common] * added string.h include --- msba2-common/config.c | 1 + 1 file changed, 1 insertion(+) diff --git a/msba2-common/config.c b/msba2-common/config.c index 1910f0b7ff..8eff7e9db8 100644 --- a/msba2-common/config.c +++ b/msba2-common/config.c @@ -1,4 +1,5 @@ #include +#include #include #include From a5918f3086a237aef55ed80af38d2aad3dd2dcdc Mon Sep 17 00:00:00 2001 From: Kaspar Schleiser Date: Mon, 6 Dec 2010 17:32:27 +0100 Subject: [PATCH 10/17] * moved config to sys, split away board specifics --- msba2-common/Jamfile | 2 +- msba2-common/{config.c => board_config.c} | 0 2 files changed, 1 insertion(+), 1 deletion(-) rename msba2-common/{config.c => board_config.c} (100%) diff --git a/msba2-common/Jamfile b/msba2-common/Jamfile index ed2adc5647..ff9a8ccd4c 100644 --- a/msba2-common/Jamfile +++ b/msba2-common/Jamfile @@ -1,7 +1,7 @@ SubDir TOP board msba2-common ; Module board_common : board_common_init.c ; -Module config : config.c ; +Module board_config : board_config.c ; SubInclude TOP board msba2-common drivers ; diff --git a/msba2-common/config.c b/msba2-common/board_config.c similarity index 100% rename from msba2-common/config.c rename to msba2-common/board_config.c From 04f2003a510bf553b80e3690021f70a3af0b1d0c Mon Sep 17 00:00:00 2001 From: Oliver Hahm Date: Wed, 8 Dec 2010 12:16:49 +0100 Subject: [PATCH 11/17] [board/msb-430-common board/eZ430-Chronos cpu/msp430*] * reorganized msp430 based cpu folders --- eZ430-Chronos/Jamrules.eZ430-Chronos | 2 +- eZ430-Chronos/board_init.c | 74 +++++++++++++++++++++++++- msb-430-common/Jamrules.msb-430-common | 2 +- msb-430h/Jamfile | 1 - 4 files changed, 75 insertions(+), 4 deletions(-) diff --git a/eZ430-Chronos/Jamrules.eZ430-Chronos b/eZ430-Chronos/Jamrules.eZ430-Chronos index eef3a03017..74e57f0929 100644 --- a/eZ430-Chronos/Jamrules.eZ430-Chronos +++ b/eZ430-Chronos/Jamrules.eZ430-Chronos @@ -4,7 +4,7 @@ # $Id$ BOARD = eZ430-Chronos ; -CPU = msp430 ; +CPU = cc430 ; MCU = cc430x6137 ; FLASHER ?= mspdebug ; diff --git a/eZ430-Chronos/board_init.c b/eZ430-Chronos/board_init.c index aa52e65af9..74799abace 100644 --- a/eZ430-Chronos/board_init.c +++ b/eZ430-Chronos/board_init.c @@ -1,2 +1,74 @@ -void board_init() { +#include +#include +#include +#include + +void cc430_cpu_init(void) { + volatile uint16_t i; + volatile unsigned char *ptr; + + /* disable watchdog */ + WDTCTL = WDTPW + WDTHOLD; + + // --------------------------------------------------------------------- + // Enable 32kHz ACLK + P5SEL |= 0x03; // Select XIN, XOUT on P5.0 and P5.1 + UCSCTL6 &= ~XT1OFF; // XT1 On, Highest drive strength + UCSCTL6 |= XCAP_3; // Internal load cap + + UCSCTL3 = SELA__XT1CLK; // Select XT1 as FLL reference + UCSCTL4 = SELA__XT1CLK | SELS__DCOCLKDIV | SELM__DCOCLKDIV; + + // --------------------------------------------------------------------- + // Configure CPU clock for 12MHz + _BIS_SR(SCG0); // Disable the FLL control loop + UCSCTL0 = 0x0000; // Set lowest possible DCOx, MODx + UCSCTL1 = DCORSEL_5; // Select suitable range + UCSCTL2 = FLLD_1 + 0x16E; // Set DCO Multiplier + _BIC_SR(SCG0); // Enable the FLL control loop + + // Worst-case settling time for the DCO when the DCO range bits have been + // changed is n x 32 x 32 x f_MCLK / f_FLL_reference. See UCS chapter in 5xx + // UG for optimization. + // 32 x 32 x 8 MHz / 32,768 Hz = 250000 = MCLK cycles for DCO to settle + for (i = 0xFF; i > 0; i--); // Time for flag to set + + // Loop until XT1 & DCO stabilizes, use do-while to insure that + // body is executed at least once + do + { + UCSCTL7 &= ~(XT2OFFG + XT1LFOFFG + XT1HFOFFG + DCOFFG); + SFRIFG1 &= ~OFIFG; // Clear fault flags + } while ((SFRIFG1 & OFIFG)); + + // Disable all interrupts + __disable_interrupt(); + // Get write-access to port mapping registers: + PMAPPWD = 0x02D52; + // Allow reconfiguration during runtime: + PMAPCTL = PMAPRECFG; + + // P2.7 = TA0CCR1A or TA1CCR0A output (buzzer output) + ptr = &P2MAP0; + *(ptr+7) = PM_TA1CCR0A; + P2OUT &= ~BIT7; + P2DIR |= BIT7; + + // P1.5 = SPI MISO input + ptr = &P1MAP0; + *(ptr+5) = PM_UCA0SOMI; + // P1.6 = SPI MOSI output + *(ptr+6) = PM_UCA0SIMO; + // P1.7 = SPI CLK output + *(ptr+7) = PM_UCA0CLK; + + // Disable write-access to port mapping registers: + PMAPPWD = 0; + // Re-enable all interrupts + enableIRQ(); + +} + +void board_init() { + cc430_cpu_init(); } diff --git a/msb-430-common/Jamrules.msb-430-common b/msb-430-common/Jamrules.msb-430-common index 9c51cd21db..7eee8b088f 100644 --- a/msb-430-common/Jamrules.msb-430-common +++ b/msb-430-common/Jamrules.msb-430-common @@ -25,7 +25,7 @@ # ****************************************************************************** # $Id$ -CPU = msp430 ; +CPU = msp430x16x ; MCU = msp430x1612 ; FLASH_PORT ?= "$(PORT)" ; diff --git a/msb-430h/Jamfile b/msb-430h/Jamfile index 79e6f920c0..15f7ba97f9 100644 --- a/msb-430h/Jamfile +++ b/msb-430h/Jamfile @@ -31,4 +31,3 @@ Module board_cc1100 : driver_cc1100.c ; SubInclude TOP board msb-430-common ; SubInclude TOP cpu $(CPU) ; - From a356dc2494570a35f0b87d13bc88f767601c354d Mon Sep 17 00:00:00 2001 From: Kaspar Schleiser Date: Wed, 8 Dec 2010 12:58:02 +0100 Subject: [PATCH 12/17] * renamed eZ430-Chronos board to 'chronos' --- {eZ430-Chronos => chronos}/Jamfile | 2 +- .../Jamrules.eZ430-Chronos => chronos/Jamrules.chronos | 2 +- {eZ430-Chronos => chronos}/board_init.c | 0 {eZ430-Chronos => chronos}/debug_uart.c | 0 {eZ430-Chronos => chronos}/drivers/Jamfile | 2 +- {eZ430-Chronos => chronos}/drivers/cc430-cc1100.c | 0 {eZ430-Chronos => chronos}/drivers/display.c | 0 {eZ430-Chronos => chronos}/drivers/display.h | 0 {eZ430-Chronos => chronos}/drivers/display1.c | 0 {eZ430-Chronos => chronos}/include/board.h | 0 10 files changed, 3 insertions(+), 3 deletions(-) rename {eZ430-Chronos => chronos}/Jamfile (83%) rename eZ430-Chronos/Jamrules.eZ430-Chronos => chronos/Jamrules.chronos (93%) rename {eZ430-Chronos => chronos}/board_init.c (100%) rename {eZ430-Chronos => chronos}/debug_uart.c (100%) rename {eZ430-Chronos => chronos}/drivers/Jamfile (71%) rename {eZ430-Chronos => chronos}/drivers/cc430-cc1100.c (100%) rename {eZ430-Chronos => chronos}/drivers/display.c (100%) rename {eZ430-Chronos => chronos}/drivers/display.h (100%) rename {eZ430-Chronos => chronos}/drivers/display1.c (100%) rename {eZ430-Chronos => chronos}/include/board.h (100%) diff --git a/eZ430-Chronos/Jamfile b/chronos/Jamfile similarity index 83% rename from eZ430-Chronos/Jamfile rename to chronos/Jamfile index ea723c95a9..bf3341d785 100644 --- a/eZ430-Chronos/Jamfile +++ b/chronos/Jamfile @@ -1,4 +1,4 @@ -SubDir TOP board eZ430-Chronos ; +SubDir TOP board chronos ; HDRS += $(TOP)/board/$(CPU)/include ; diff --git a/eZ430-Chronos/Jamrules.eZ430-Chronos b/chronos/Jamrules.chronos similarity index 93% rename from eZ430-Chronos/Jamrules.eZ430-Chronos rename to chronos/Jamrules.chronos index 74e57f0929..4c975ae1f9 100644 --- a/eZ430-Chronos/Jamrules.eZ430-Chronos +++ b/chronos/Jamrules.chronos @@ -3,7 +3,7 @@ # ****************************************************************************** # $Id$ -BOARD = eZ430-Chronos ; +BOARD = chronos ; CPU = cc430 ; MCU = cc430x6137 ; diff --git a/eZ430-Chronos/board_init.c b/chronos/board_init.c similarity index 100% rename from eZ430-Chronos/board_init.c rename to chronos/board_init.c diff --git a/eZ430-Chronos/debug_uart.c b/chronos/debug_uart.c similarity index 100% rename from eZ430-Chronos/debug_uart.c rename to chronos/debug_uart.c diff --git a/eZ430-Chronos/drivers/Jamfile b/chronos/drivers/Jamfile similarity index 71% rename from eZ430-Chronos/drivers/Jamfile rename to chronos/drivers/Jamfile index 2ccbb030ec..221ba2ffbc 100644 --- a/eZ430-Chronos/drivers/Jamfile +++ b/chronos/drivers/Jamfile @@ -1,4 +1,4 @@ -SubDir TOP board eZ430-Chronos drivers ; +SubDir TOP board chronos drivers ; Module board_display : display.c display1.c ; Module board_cc1100 : cc430-cc1100.c : cc110x_cc430 ; diff --git a/eZ430-Chronos/drivers/cc430-cc1100.c b/chronos/drivers/cc430-cc1100.c similarity index 100% rename from eZ430-Chronos/drivers/cc430-cc1100.c rename to chronos/drivers/cc430-cc1100.c diff --git a/eZ430-Chronos/drivers/display.c b/chronos/drivers/display.c similarity index 100% rename from eZ430-Chronos/drivers/display.c rename to chronos/drivers/display.c diff --git a/eZ430-Chronos/drivers/display.h b/chronos/drivers/display.h similarity index 100% rename from eZ430-Chronos/drivers/display.h rename to chronos/drivers/display.h diff --git a/eZ430-Chronos/drivers/display1.c b/chronos/drivers/display1.c similarity index 100% rename from eZ430-Chronos/drivers/display1.c rename to chronos/drivers/display1.c diff --git a/eZ430-Chronos/include/board.h b/chronos/include/board.h similarity index 100% rename from eZ430-Chronos/include/board.h rename to chronos/include/board.h From cf3b704bc5e4b5213572fb8335890d7cf9f22f04 Mon Sep 17 00:00:00 2001 From: Oliver Hahm Date: Thu, 9 Dec 2010 13:24:24 +0100 Subject: [PATCH 13/17] [Chronos] * changed display driver interface from uint8_t* to char* * fixed hardware timer interrupt * ported cc1100 driver * added simple test application for radio [msb430] * fixex config and flashrom [cc110x_ng] * removed dependency from sysconfig --- chronos/drivers/cc430-cc1100.c | 31 ++++++++++++++------- chronos/drivers/display.c | 18 +++++------- chronos/drivers/display.h | 4 +-- msb-430-common/Jamfile | 2 +- msb-430-common/{config.c => board_config.c} | 10 +++++++ msb-430h/Jamfile | 2 +- msb-430h/driver_cc1100.c | 3 +- 7 files changed, 43 insertions(+), 27 deletions(-) rename msb-430-common/{config.c => board_config.c} (55%) 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(); } - From 31f6c1760685fca14eaae997d70adccec712759f Mon Sep 17 00:00:00 2001 From: Oliver Hahm Date: Fri, 10 Dec 2010 18:00:31 +0100 Subject: [PATCH 14/17] [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 From b01b1e8e2f02271eb299665cf08da9b7604798fc Mon Sep 17 00:00:00 2001 From: Oliver Hahm Date: Sat, 11 Dec 2010 12:09:20 +0100 Subject: [PATCH 15/17] [board/chronos board/msb-430h board/msba2-common drivers/cc110x_ng sys/shell sys/transceiver] * renamed all occurrences of cc1100 to cc110x as in fact all driver parts should work for cc1100 and cc110x as well [driver/cc110x_ng] * added some documentation * introduced a new register function to access rxfifo (fixing the of-by-one problem on chronos platform --- chronos/drivers/Jamfile | 2 +- .../{cc430-cc1100.c => cc430-cc110x.c} | 43 +++++----- msb-430h/Jamfile | 2 +- msb-430h/{driver_cc1100.c => driver_cc110x.c} | 78 +++++++++---------- msba2-common/drivers/Jamfile | 2 +- .../{msba2-cc1100.c => msba2-cc110x.c} | 50 ++++++------ 6 files changed, 89 insertions(+), 88 deletions(-) rename chronos/drivers/{cc430-cc1100.c => cc430-cc110x.c} (63%) rename msb-430h/{driver_cc1100.c => driver_cc110x.c} (84%) rename msba2-common/drivers/{msba2-cc1100.c => msba2-cc110x.c} (86%) diff --git a/chronos/drivers/Jamfile b/chronos/drivers/Jamfile index 221ba2ffbc..4b2a0d0a85 100644 --- a/chronos/drivers/Jamfile +++ b/chronos/drivers/Jamfile @@ -1,4 +1,4 @@ SubDir TOP board chronos drivers ; Module board_display : display.c display1.c ; -Module board_cc1100 : cc430-cc1100.c : cc110x_cc430 ; +Module board_cc110x : cc430-cc110x.c : cc110x_cc430 ; diff --git a/chronos/drivers/cc430-cc1100.c b/chronos/drivers/cc430-cc110x.c similarity index 63% rename from chronos/drivers/cc430-cc1100.c rename to chronos/drivers/cc430-cc110x.c index 513cef3e5d..78380c4ca4 100644 --- a/chronos/drivers/cc430-cc1100.c +++ b/chronos/drivers/cc430-cc110x.c @@ -2,78 +2,79 @@ #include #include -#include -#include +#include +#include -#include -#include +//#include +#include +//#include #define CC1100_GDO0 (RF1AIN & BIT0) #define CC1100_GDO1 (RF1AIN & BIT1) #define CC1100_GDO2 (RF1AIN & BIT2) -int cc1100_get_gdo0(void) { +int cc110x_get_gdo0(void) { return CC1100_GDO0; } -int cc1100_get_gdo1(void) { +int cc110x_get_gdo1(void) { return CC1100_GDO1; } -int cc1100_get_gdo2(void) { +int cc110x_get_gdo2(void) { return CC1100_GDO2; } -void cc1100_before_send(void) +void cc110x_before_send(void) { // Disable GDO2 interrupt before sending packet - cc1100_gdo2_disable(); + cc110x_gdo2_disable(); } -void cc1100_after_send(void) +void cc110x_after_send(void) { // Enable GDO2 interrupt after sending packet - cc1100_gdo2_enable(); + cc110x_gdo2_enable(); } -void cc1100_gdo0_enable(void) { +void cc110x_gdo0_enable(void) { RF1AIFG &= ~BIT0; RF1AIE |= BIT0; } -void cc1100_gdo0_disable(void) { +void cc110x_gdo0_disable(void) { RF1AIE &= ~BIT0; RF1AIFG &= ~BIT0; } -void cc1100_gdo2_disable(void) { +void cc110x_gdo2_disable(void) { RF1AIFG &= ~BIT2; // Clear a pending interrupt RF1AIE &= ~BIT2; // Disable the interrupt } -void cc1100_gdo2_enable(void) { +void cc110x_gdo2_enable(void) { RF1AIFG &= ~BIT2; // Clear a pending interrupt RF1AIE |= BIT2; // Enable the interrupt } -void cc1100_init_interrupts(void) { +void cc110x_init_interrupts(void) { uint8_t state = disableIRQ(); /* Disable all interrupts */ - cc1100_gdo2_enable(); - cc1100_gdo0_disable(); + cc110x_gdo2_enable(); + cc110x_gdo0_disable(); restoreIRQ(state); /* Enable all interrupts */ } -interrupt (CC1101_VECTOR) __attribute__ ((naked)) cc1100_isr(void){ +interrupt (CC1101_VECTOR) __attribute__ ((naked)) cc110x_isr(void){ __enter_isr(); /* Check IFG */ if (RF1AIV == RF1AIV_RFIFG2) { while (RF1AIN & BIT2); /* discard all further interrupts */ RF1AIV = 0; - cc1100_gdo2_irq(); + cc110x_gdo2_irq(); } if (RF1AIV == RF1AIV_RFIFG0) { - cc1100_gdo0_irq(); + cc110x_gdo0_irq(); RF1AIE &= ~BIT0; } __exit_isr(); diff --git a/msb-430h/Jamfile b/msb-430h/Jamfile index 588fede19d..9f9ee47bf3 100644 --- a/msb-430h/Jamfile +++ b/msb-430h/Jamfile @@ -27,7 +27,7 @@ SubDir TOP board msb-430h ; -Module board_cc1100 : driver_cc1100.c : cc110x_spi ; +Module board_cc110x : driver_cc110x.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_cc110x.c similarity index 84% rename from msb-430h/driver_cc1100.c rename to msb-430h/driver_cc110x.c index 1e5af6e9fd..a0967b272f 100644 --- a/msb-430h/driver_cc1100.c +++ b/msb-430h/driver_cc110x.c @@ -23,8 +23,8 @@ Boston, MA 02111-1307, USA. */ #include #include -#include -#include +#include +#include #define CC1100_GDO0 (P2IN & 0x02) // read serial I/O (GDO0) #define CC1100_GDO1 (P3IN & 0x04) // read serial I/O (GDO1) @@ -39,61 +39,61 @@ Boston, MA 02111-1307, USA. */ volatile int abort_count; volatile int retry_count = 0; -void cc1100_gdo0_enable(void) +void cc110x_gdo0_enable(void) { P2IFG &= ~0x02; /* Clear IFG for GDO0 */ P2IE |= 0x02; /* Enable interrupt for GDO0 */ } -void cc1100_gdo0_disable(void) +void cc110x_gdo0_disable(void) { P2IE &= ~0x02; /* Disable interrupt for GDO0 */ P2IFG &= ~0x02; /* Clear IFG for GDO0 */ } -void cc1100_gdo2_enable(void) +void cc110x_gdo2_enable(void) { P2IFG &= ~0x01; /* Clear IFG for GDO2 */ P2IE |= 0x01; /* Enable interrupt for GDO2 */ } -void cc1100_gdo2_disable(void) +void cc110x_gdo2_disable(void) { P2IE &= ~0x01; /* Disable interrupt for GDO2 */ P2IFG &= ~0x01; /* Clear IFG for GDO2 */ } -void cc1100_before_send(void) +void cc110x_before_send(void) { // Disable GDO2 interrupt before sending packet - cc1100_gdo2_disable(); + cc110x_gdo2_disable(); } -void cc1100_after_send(void) +void cc110x_after_send(void) { // Enable GDO2 interrupt after sending packet - cc1100_gdo2_enable(); + cc110x_gdo2_enable(); } -int cc1100_get_gdo0(void) { +int cc110x_get_gdo0(void) { return CC1100_GDO0; } -int cc1100_get_gdo1(void) { +int cc110x_get_gdo1(void) { return CC1100_GDO1; } -int cc1100_get_gdo2(void) { +int cc110x_get_gdo2(void) { return CC1100_GDO2; } -void cc1100_spi_cs(void) +void cc110x_spi_cs(void) { CC1100_CS_LOW; } -uint8_t cc1100_txrx(uint8_t data) +uint8_t cc110x_txrx(uint8_t data) { /* Ensure TX Buf is empty */ long c = 0; @@ -103,20 +103,20 @@ uint8_t cc1100_txrx(uint8_t data) while(!(IFG1 & UTXIFG0)) { if (c++ == 1000000) - puts("cc1100_txrx alarm()"); + puts("cc110x_txrx alarm()"); } /* Wait for Byte received */ c = 0; while(!(IFG1 & URXIFG0)) { if (c++ == 1000000) - puts("cc1100_txrx alarm()"); + puts("cc110x_txrx alarm()"); } return RXBUF0; } -void cc1100_spi_select(void) +void cc110x_spi_select(void) { // Switch to GDO mode P3SEL &= ~0x04; @@ -147,11 +147,11 @@ void cc1100_spi_select(void) P3SEL |= 0x04; } -void cc1100_spi_unselect(void) { +void cc110x_spi_unselect(void) { CC1100_CS_HIGH; } -void cc1100_init_interrupts(void) +void cc110x_init_interrupts(void) { unsigned int state = disableIRQ(); /* Disable all interrupts */ P2SEL = 0x00; /* must be <> 1 to use interrupts */ @@ -163,7 +163,7 @@ void cc1100_init_interrupts(void) restoreIRQ(state); /* Enable all interrupts */ } -void cc1100_spi_init(uint8_t clockrate) +void cc110x_spi_init(uint8_t clockrate) { // Switch off async UART while(!(UTCTL0 & TXEPT)); // Wait for empty UxTXBUF register @@ -197,8 +197,8 @@ void cc1100_spi_init(uint8_t clockrate) // #include // #include // #include "type.h" -// #include "cc1100_defines.h" -// #include "driver_cc1100.h" +// #include "cc110x_defines.h" +// #include "driver_cc110x.h" // #include "driver_system.h" // #include "spi0.h" // @@ -213,17 +213,17 @@ void cc1100_spi_init(uint8_t clockrate) // // void spiInitTrx(void) // // // // DESCRIPTION: -// // This function puts the cc1100 into spi mode. You have to call this bevore every spi transaction. +// // This function puts the cc110x into spi mode. You have to call this bevore every spi transaction. // // // //------------------------------------------------------------------------------------------------------- // // -// void drivercc1100_spiwriteburstreg(uint8_t addr, unsigned char *buffer, uint8_t count) +// void drivercc110x_spiwriteburstreg(uint8_t addr, unsigned char *buffer, uint8_t count) // { // uint8_t i; // long c; -// drivercc1100_spiinittrx(); -// drivercc1100_trxspi(addr | CC1100_WRITE_BURST); +// drivercc110x_spiinittrx(); +// drivercc110x_trxspi(addr | CC1100_WRITE_BURST); // for (i = 0; i < count; i++) // { // c = 0; @@ -247,11 +247,11 @@ void cc1100_spi_init(uint8_t clockrate) // CC1100_CS_HIGH; // } // -// void drivercc1100_spireadburstreg(uint8_t addr, char *buffer, uint8_t count) +// void drivercc110x_spireadburstreg(uint8_t addr, char *buffer, uint8_t count) // { // uint8_t i; -// drivercc1100_spiinittrx(); -// drivercc1100_trxspi(addr | CC1100_READ_BURST); +// drivercc110x_spiinittrx(); +// drivercc110x_trxspi(addr | CC1100_READ_BURST); // for (i = 0; i < count; i++) // { // long c = 0; @@ -275,21 +275,21 @@ void cc1100_spi_init(uint8_t clockrate) // CC1100_CS_HIGH; // } // -// void drivercc1100_load(callback_t cs_cb,callback_t paket_cb) +// void drivercc110x_load(callback_t cs_cb,callback_t paket_cb) // { // _paket_cb = paket_cb; // _cs_cb = cs_cb; // spi0_init(0); // } // -// void drivercc1100_aftersend(void) +// void drivercc110x_aftersend(void) // { // CLEAR(P2IFG, 0x01); // SET(P2IE, 0x01); /* Enable interrupts on port 2 pin 0 */ // CLEAR(P4OUT, 0x08); /* Turn off Sending Led*/ // } // -// void drivercc1100_initinterrupts(void) +// void drivercc110x_initinterrupts(void) // { // _DINT(); /* Disable all interrupts */ // P2SEL = 0x00; /* must be <> 1 to use interrupts */ @@ -301,7 +301,7 @@ void cc1100_spi_init(uint8_t clockrate) // _EINT(); /* Enable all interrupts */ // } // -// void drivercc1100_beforesend(void) +// void drivercc110x_beforesend(void) // { // /* Turn on Led while sending paket for debug reasons */ // SET(P4OUT, 0x08); @@ -319,21 +319,21 @@ void cc1100_spi_init(uint8_t clockrate) /* * CC1100 receive interrupt */ -interrupt (PORT2_VECTOR) __attribute__ ((naked)) cc1100_isr(void){ +interrupt (PORT2_VECTOR) __attribute__ ((naked)) cc110x_isr(void){ __enter_isr(); -puts("cc1100_isr()"); +puts("cc110x_isr()"); // if (system_state.POWERDOWN) SPI_INIT; /* Initialize SPI after wakeup */ /* Check IFG */ if ((P2IFG & 0x01) != 0) { P2IFG &= ~0x01; - cc1100_gdo2_irq(); + cc110x_gdo2_irq(); } else if ((P2IFG & 0x02) != 0) { - cc1100_gdo0_irq(); + cc110x_gdo0_irq(); P2IE &= ~0x02; // Disable interrupt for GDO0 P2IFG &= ~0x02; // Clear IFG for GDO0 } else { - puts("cc1100_isr(): unexpected IFG!"); + puts("cc110x_isr(): unexpected IFG!"); /* Should not occur - only Port 2 Pin 0 interrupts are enabled */ // CLEAR(P2IFG, 0xFF); /* Clear all flags */ } diff --git a/msba2-common/drivers/Jamfile b/msba2-common/drivers/Jamfile index c0f4138ab9..ed8e73498a 100644 --- a/msba2-common/drivers/Jamfile +++ b/msba2-common/drivers/Jamfile @@ -1,6 +1,6 @@ SubDir TOP board msba2-common drivers ; -Module board_cc1100 : msba2-cc1100.c : cc110x_spi gpioint ; +Module board_cc110x : msba2-cc110x.c : cc110x_spi gpioint ; Module board_ltc4150 : msba2-ltc4150.c : gpioint ; Module board_uart : msba2-uart0.c : chardev_thread ringbuffer ; diff --git a/msba2-common/drivers/msba2-cc1100.c b/msba2-common/drivers/msba2-cc110x.c similarity index 86% rename from msba2-common/drivers/msba2-cc1100.c rename to msba2-common/drivers/msba2-cc110x.c index 327720c1f3..7d5a6b2196 100644 --- a/msba2-common/drivers/msba2-cc1100.c +++ b/msba2-common/drivers/msba2-cc110x.c @@ -34,7 +34,7 @@ and the mailinglist (subscription via web site) * @author Thomas Hillebrandt * @version $Revision: 1781 $ * - * @note $Id: msba2-cc1100.c 1781 2010-01-26 13:39:36Z hillebra $ + * @note $Id: msba2-cc110x.c 1781 2010-01-26 13:39:36Z hillebra $ */ #include @@ -43,10 +43,10 @@ and the mailinglist (subscription via web site) #include #include // sys -#include "cc1100.h" -#include "arch_cc1100.h" -#include "cc1100_spi.h" -#include "gpioint.h" +#include +#include +#include +#include #define CC1100_GDO0 (FIO0PIN & BIT27) // read serial I/O (GDO0) #define CC1100_GDO1 (FIO1PIN & BIT23) // read serial I/O (GDO1) @@ -82,19 +82,19 @@ static int test_time(int code) { } #endif -int cc1100_get_gdo0(void) { +int cc110x_get_gdo0(void) { return CC1100_GDO0; } -int cc1100_get_gdo1(void) { +int cc110x_get_gdo1(void) { return CC1100_GDO1; } -int cc1100_get_gdo2(void) { +int cc110x_get_gdo2(void) { return CC1100_GDO2; } -void cc1100_spi_init(void) +void cc110x_spi_init(void) { // configure chip-select FIO1DIR |= BIT21; @@ -128,7 +128,7 @@ void cc1100_spi_init(void) } } -uint8_t cc1100_txrx(uint8_t c) { +uint8_t cc110x_txrx(uint8_t c) { uint8_t result; SSP0DR = c; #ifdef DEBUG @@ -159,13 +159,13 @@ uint8_t cc1100_txrx(uint8_t c) { return result; } -void cc1100_spi_cs(void) +void cc110x_spi_cs(void) { FIO1CLR = BIT21; } void -cc1100_spi_select(void) +cc110x_spi_select(void) { volatile int retry_count = 0; volatile int abort_count; @@ -199,44 +199,44 @@ cc1100_spi_select(void) } void -cc1100_spi_unselect(void) +cc110x_spi_unselect(void) { FIO1SET = BIT21; } -void cc1100_before_send(void) +void cc110x_before_send(void) { // Disable GDO2 interrupt before sending packet - cc1100_gdo2_disable(); + cc110x_gdo2_disable(); } -void cc1100_after_send(void) +void cc110x_after_send(void) { // Enable GDO2 interrupt after sending packet - cc1100_gdo2_enable(); + cc110x_gdo2_enable(); } -void cc1100_gdo0_enable(void) { - gpioint_set(0, BIT27, GPIOINT_RISING_EDGE, &cc1100_gdo0_irq); +void cc110x_gdo0_enable(void) { + gpioint_set(0, BIT27, GPIOINT_RISING_EDGE, &cc110x_gdo0_irq); } -void cc1100_gdo0_disable(void) { +void cc110x_gdo0_disable(void) { gpioint_set(0, BIT27, GPIOINT_DISABLE, NULL); } -void cc1100_gdo2_disable(void) { +void cc110x_gdo2_disable(void) { gpioint_set(0, BIT28, GPIOINT_DISABLE, NULL); } -void cc1100_gdo2_enable(void) { - gpioint_set(0, BIT28, GPIOINT_FALLING_EDGE, &cc1100_gdo2_irq); +void cc110x_gdo2_enable(void) { + gpioint_set(0, BIT28, GPIOINT_FALLING_EDGE, &cc110x_gdo2_irq); } -void cc1100_init_interrupts(void) +void cc110x_init_interrupts(void) { // Enable external interrupt on low edge (for GDO2) FIO0DIR &= ~BIT28; - cc1100_gdo2_enable(); + cc110x_gdo2_enable(); // Enable external interrupt on low edge (for GDO0) FIO0DIR &= ~BIT27; } From 8e74db43472219d6fcec1e7b225b9bef554f6c88 Mon Sep 17 00:00:00 2001 From: Oliver Hahm Date: Sat, 11 Dec 2010 13:38:04 +0100 Subject: [PATCH 16/17] [board/chronos/drivers/display] * cleaned up code and documentation [drivers/cc110x_ng] * fixed include pathes --- chronos/drivers/display.c | 550 ++++++++++++++----------------------- chronos/drivers/display.h | 310 ++++++++++++++------- chronos/drivers/display1.c | 219 +++++++-------- 3 files changed, 513 insertions(+), 566 deletions(-) diff --git a/chronos/drivers/display.c b/chronos/drivers/display.c index 1473703e4b..39774279b3 100644 --- a/chronos/drivers/display.c +++ b/chronos/drivers/display.c @@ -1,514 +1,382 @@ -// ************************************************************************************************* -// -// Copyright (C) 2009 Texas Instruments Incorporated - http://www.ti.com/ -// -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions -// are met: -// -// Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the -// distribution. -// -// Neither the name of Texas Instruments Incorporated nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// ************************************************************************************************* -// Display functions. -// ************************************************************************************************* +/* ************************************************************************************************* + * + * Copyright (C) 2009 Texas Instruments Incorporated - http://www.ti.com/ + * + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the + * distribution. + * + * Neither the name of Texas Instruments Incorporated nor the names of + * its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * ************************************************************************************************* + * Basic display functions. + * ************************************************************************************************/ +/* ************************************************************************************************* + * Include section + */ -// ************************************************************************************************* -// Include section - -// system +/* system */ #include -// driver +/* driver */ #include #include -// ************************************************************************************************* -// Prototypes section +/************************************************************************************************** + * Prototypes section */ 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); -// ************************************************************************************************* -// Defines section +/* ************************************************************************************************* + * Global Variable section */ - - -// ************************************************************************************************* -// Global Variable section - -// Display flags +/* Display flags */ volatile s_display_flags display; -// Global return string for itoa function -uint8_t itoa_str[8]; +/* Global return string for itoa function */ +char itoa_str[8]; - - -// ************************************************************************************************* -// @fn lcd_init -// @brief Erase LCD memory. Init LCD peripheral. -// @param none -// @return none -// ************************************************************************************************* -void lcd_init(void) -{ - // Clear entire display memory +void lcd_init(void) { + /* Clear entire display memory */ LCDBMEMCTL |= LCDCLRBM + LCDCLRM; - // LCD_FREQ = ACLK/16/8 = 256Hz - // Frame frequency = 256Hz/4 = 64Hz, LCD mux 4, LCD on + /* LCD_FREQ = ACLK/16/8 = 256Hz */ + /* Frame frequency = 256Hz/4 = 64Hz, LCD mux 4, LCD on */ LCDBCTL0 = (LCDDIV0 + LCDDIV1 + LCDDIV2 + LCDDIV3) | (LCDPRE0 + LCDPRE1) | LCD4MUX | LCDON; - // LCB_BLK_FREQ = ACLK/8/4096 = 1Hz + /* LCB_BLK_FREQ = ACLK/8/4096 = 1Hz */ LCDBBLKCTL = LCDBLKPRE0 | LCDBLKPRE1 | LCDBLKDIV0 | LCDBLKDIV1 | LCDBLKDIV2 | LCDBLKMOD0; - // I/O to COM outputs + /* I/O to COM outputs */ P5SEL |= (BIT5 | BIT6 | BIT7); P5DIR |= (BIT5 | BIT6 | BIT7); - // Activate LCD output - LCDBPCTL0 = 0xFFFF; // Select LCD segments S0-S15 - LCDBPCTL1 = 0x00FF; // Select LCD segments S16-S22 + /* Activate LCD output */ + LCDBPCTL0 = 0xFFFF; /* Select LCD segments S0-S15 */ + LCDBPCTL1 = 0x00FF; /* Select LCD segments S16-S22 */ #ifdef USE_LCD_CHARGE_PUMP - // Charge pump voltage generated internally, internal bias (V2-V4) generation + /* Charge pump voltage generated internally, internal bias (V2-V4) generation */ LCDBVCTL = LCDCPEN | VLCD_2_72; #endif } - -// ************************************************************************************************* -// @fn clear_display_all -// @brief Erase LINE1 and LINE2 segments. Clear also function-specific content. -// @param none -// @return none -// ************************************************************************************************* -void clear_display_all(void) -{ +void clear_display_all(void) { // Clear generic content clear_line(LINE1); clear_line(LINE2); - - } - -// ************************************************************************************************* -// @fn clear_display -// @brief Erase LINE1 and LINE2 segments. Keep icons. -// @param none -// @return none -// ************************************************************************************************* -void clear_display(void) -{ +void clear_display(void) { clear_line(LINE1); clear_line(LINE2); } - -// ************************************************************************************************* -// @fn clear_line -// @brief Erase segments of a given line. -// @param uint8_t line LINE1, LINE2 -// @return none -// ************************************************************************************************* -void clear_line(uint8_t line) -{ +void clear_line(uint8_t line) { display_chars(switch_seg(line, LCD_SEG_L1_3_0, LCD_SEG_L2_5_0), NULL, SEG_OFF); - if (line == LINE1) - { + if (line == LINE1) { display_symbol(LCD_SEG_L1_DP1, SEG_OFF); display_symbol(LCD_SEG_L1_DP0, SEG_OFF); display_symbol(LCD_SEG_L1_COL, SEG_OFF); } - else // line == LINE2 - { + /* line == LINE2 */ + else { display_symbol(LCD_SEG_L2_DP, SEG_OFF); display_symbol(LCD_SEG_L2_COL1, SEG_OFF); display_symbol(LCD_SEG_L2_COL0, SEG_OFF); } } - -// ************************************************************************************************* -// @fn write_segment -// @brief Write to one or multiple LCD segments -// @param lcdmem Pointer to LCD byte memory -// bits Segments to address -// bitmask Bitmask for particular display item -// mode On, off or blink segments -// @return -// ************************************************************************************************* -void write_lcd_mem(uint8_t * lcdmem, uint8_t bits, uint8_t bitmask, uint8_t state) -{ - if (state == SEG_ON) - { - // Clear segments before writing +void write_lcd_mem(uint8_t *lcdmem, uint8_t bits, uint8_t bitmask, uint8_t state) { + if (state == SEG_ON) { + /* Clear segments before writing */ *lcdmem = (uint8_t)(*lcdmem & ~bitmask); - // Set visible segments + /* Set visible segments */ *lcdmem = (uint8_t)(*lcdmem | bits); } - else if (state == SEG_OFF) - { - // Clear segments + else if (state == SEG_OFF) { + /* Clear segments */ *lcdmem = (uint8_t)(*lcdmem & ~bitmask); } - else if (state == SEG_ON_BLINK_ON) - { - // Clear visible / blink segments before writing + else if (state == SEG_ON_BLINK_ON) { + /* Clear visible / blink segments before writing */ *lcdmem = (uint8_t)(*lcdmem & ~bitmask); *(lcdmem+0x20) = (uint8_t)(*(lcdmem+0x20) & ~bitmask); - // Set visible / blink segments + /* Set visible / blink segments */ *lcdmem = (uint8_t)(*lcdmem | bits); *(lcdmem+0x20) = (uint8_t)(*(lcdmem+0x20) | bits); } - else if (state == SEG_ON_BLINK_OFF) - { - // Clear visible segments before writing + else if (state == SEG_ON_BLINK_OFF) { + /* Clear visible segments before writing */ *lcdmem = (uint8_t)(*lcdmem & ~bitmask); - // Set visible segments + /* Set visible segments */ *lcdmem = (uint8_t)(*lcdmem | bits); - // Clear blink segments + /* Clear blink segments */ *(lcdmem+0x20) = (uint8_t)(*(lcdmem+0x20) & ~bitmask); } - else if (state == SEG_OFF_BLINK_OFF) - { - // Clear segments + else if (state == SEG_OFF_BLINK_OFF) { + /* Clear segments */ *lcdmem = (uint8_t)(*lcdmem & ~bitmask); - // Clear blink segments + /* Clear blink segments */ *(lcdmem+0x20) = (uint8_t)(*(lcdmem+0x20) & ~bitmask); } } - -// ************************************************************************************************* -// @fn itoa -// @brief Generic integer to array routine. Converts integer n to string. -// Default conversion result has leading zeros, e.g. "00123" -// Option to convert leading '0' into whitespace (blanks) -// @param uint32_t n integer to convert -// uint8_t digits number of digits -// uint8_t blanks fill up result string with number of whitespaces instead of leading zeros -// @return uint8_t string -// ************************************************************************************************* -uint8_t * itoa(uint32_t n, uint8_t digits, uint8_t blanks) -{ +char *itoa(uint32_t n, uint8_t digits, uint8_t blanks) { uint8_t i; uint8_t digits1 = digits; - // Preset result string + /* Preset result string */ memcpy(itoa_str, "0000000", 7); - // Return empty string if number of digits is invalid (valid range for digits: 1-7) - if ((digits == 0) || (digits > 7)) return (itoa_str); + /* Return empty string if number of digits is invalid (valid range for digits: 1-7) */ + if ((digits == 0) || (digits > 7)) { + return (itoa_str); + } - // Numbers 0 .. 180 can be copied from itoa_conversion_table without conversion - if (n <= 180) - { - if (digits >= 3) - { + /* Numbers 0 .. 180 can be copied from itoa_conversion_table without conversion */ + if (n <= 180) { + if (digits >= 3) { memcpy(itoa_str+(digits-3), itoa_conversion_table[n], 3); } - else // digits == 1 || 2 - { + /* digits == 1 || 2 */ + else { memcpy(itoa_str, itoa_conversion_table[n]+(3-digits), digits); } } - else // For n > 180 need to calculate string content - { - // Calculate digits from least to most significant number - do - { + /* For n > 180 need to calculate string content */ + else { + /* Calculate digits from least to most significant number */ + do { itoa_str[digits-1] = n % 10 + '0'; n /= 10; } while (--digits > 0); } - // Remove specified number of leading '0', always keep last one + /* Remove specified number of leading '0', always keep last one */ i = 0; - while ((itoa_str[i] == '0') && (i < digits1-1)) - { - if (blanks > 0) - { - // Convert only specified number of leading '0' + while ((itoa_str[i] == '0') && (i < digits1-1)) { + if (blanks > 0) { + /* Convert only specified number of leading '0' */ itoa_str[i]=' '; blanks--; } i++; } - return (itoa_str); } - -// ************************************************************************************************* -// @fn display_value1 -// @brief Generic decimal display routine. Used exclusively by set_value function. -// @param uint8_t segments LCD segments where value is displayed -// uint32_t value Integer value to be displayed -// uint8_t digits Number of digits to convert -// uint8_t blanks Number of leadings blanks in itoa result string -// @return none -// ************************************************************************************************* -void display_value1(uint8_t segments, uint32_t value, uint8_t digits, uint8_t blanks, uint8_t disp_mode) -{ - uint8_t* str; +void display_value1(uint8_t segments, uint32_t value, uint8_t digits, uint8_t blanks, uint8_t disp_mode) { + char *str; str = itoa(value, digits, blanks); - // Display string in blink mode - display_chars(segments, (char*) str, disp_mode); + /* Display string in blink mode */ + display_chars(segments, str, disp_mode); } - -// ************************************************************************************************* -// @fn display_symbol -// @brief Switch symbol on or off on LCD. -// @param uint8_t symbol A valid LCD symbol (index 0..42) -// uint8_t state SEG_ON, SEG_OFF, SEG_BLINK -// @return none -// ************************************************************************************************* -void display_symbol(uint8_t symbol, uint8_t mode) -{ - uint8_t * lcdmem; +void display_symbol(uint8_t symbol, uint8_t mode) { + uint8_t *lcdmem; uint8_t bits; uint8_t bitmask; - if (symbol <= LCD_SEG_L2_DP) - { - // Get LCD memory address for symbol from table - lcdmem = (uint8_t *)segments_lcdmem[symbol]; + if (symbol <= LCD_SEG_L2_DP) { + /* Get LCD memory address for symbol from table */ + lcdmem = (uint8_t*)segments_lcdmem[symbol]; - // Get bits for symbol from table + /* Get bits for symbol from table */ bits = segments_bitmask[symbol]; - // Bitmask for symbols equals bits + /* Bitmask for symbols equals bits */ bitmask = bits; - // Write LCD memory + /* Write LCD memory */ write_lcd_mem(lcdmem, bits, bitmask, mode); } } - -// ************************************************************************************************* -// @fn display_char -// @brief Write to 7-segment characters. -// @param uint8_t segment A valid LCD segment -// uint8_t chr Character to display -// uint8_t mode SEG_ON, SEG_OFF, SEG_BLINK -// @return none -// ************************************************************************************************* -void display_char(uint8_t segment, char chr, uint8_t mode) -{ - uint8_t * lcdmem; // Pointer to LCD memory - uint8_t bitmask; // Bitmask for character - uint8_t bits, bits1; // Bits to write +void display_char(uint8_t segment, char chr, uint8_t mode) { + uint8_t *lcdmem; /* Pointer to LCD memory */ + uint8_t bitmask; /* Bitmask for character */ + uint8_t bits, bits1; /* Bits to write */ - // Write to single 7-segment character - if ((segment >= LCD_SEG_L1_3) && (segment <= LCD_SEG_L2_DP)) - { - // Get LCD memory address for segment from table - lcdmem = (uint8_t *)segments_lcdmem[segment]; + /* Write to single 7-segment character */ + if ((segment >= LCD_SEG_L1_3) && (segment <= LCD_SEG_L2_DP)) { + /* Get LCD memory address for segment from table */ + lcdmem = (uint8_t*)segments_lcdmem[segment]; - // Get bitmask for character from table + /* Get bitmask for character from table */ bitmask = segments_bitmask[segment]; - // Get bits from font set - if ((chr >= 0x30) && (chr <= 0x5A)) - { - // Use font set + /* Get bits from font set */ + if ((chr >= 0x30) && (chr <= 0x5A)) { + /* Use font set */ bits = lcd_font[chr-0x30]; } - else if (chr == 0x2D) - { - // '-' not in font set + else if (chr == 0x2D) { + /* '-' not in font set */ bits = BIT1; } - else - { - // Other characters map to ' ' (blank) + else { + /* Other characters map to ' ' (blank) */ bits = 0; } - // When addressing LINE2 7-segment characters need to swap high- and low-nibble, - // because LCD COM/SEG assignment is mirrored against LINE1 - if (segment >= LCD_SEG_L2_5) - { + /* When addressing LINE2 7-segment characters need to swap high- and low-nibble, */ + /* because LCD COM/SEG assignment is mirrored against LINE1 */ + if (segment >= LCD_SEG_L2_5) { bits1 = ((bits << 4) & 0xF0) | ((bits >> 4) & 0x0F); bits = bits1; - // When addressing LCD_SEG_L2_5, need to convert ASCII '1' and 'L' to 1 bit, - // because LCD COM/SEG assignment is special for this incomplete character - if (segment == LCD_SEG_L2_5) - { + /* When addressing LCD_SEG_L2_5, need to convert ASCII '1' and 'L' to 1 bit, */ + /* because LCD COM/SEG assignment is special for this incomplete character */ + if (segment == LCD_SEG_L2_5) { if ((chr == '1') || (chr == 'L')) bits = BIT7; } } - // Physically write to LCD memory + /* Physically write to LCD memory */ write_lcd_mem(lcdmem, bits, bitmask, mode); } } - -// ************************************************************************************************* -// @fn display_chars -// @brief Write to consecutive 7-segment characters. -// @param uint8_t segments LCD segment array -// uint8_t * str Pointer to a string -// uint8_t mode SEG_ON, SEG_OFF, SEG_BLINK -// @return none -// ************************************************************************************************* 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 + uint8_t length = 0; /* Write length */ + uint8_t char_start = 0; /* Starting point for consecutive write */ - switch (segments) - { - // LINE1 - case LCD_SEG_L1_3_0: length=4; char_start=LCD_SEG_L1_3; break; - case LCD_SEG_L1_2_0: length=3; char_start=LCD_SEG_L1_2; break; - case LCD_SEG_L1_1_0: length=2; char_start=LCD_SEG_L1_1; break; - case LCD_SEG_L1_3_1: length=3; char_start=LCD_SEG_L1_3; break; - case LCD_SEG_L1_3_2: length=2; char_start=LCD_SEG_L1_3; break; + switch (segments) { + /* LINE1 */ + case LCD_SEG_L1_3_0: + length=4; + char_start=LCD_SEG_L1_3; + break; + case LCD_SEG_L1_2_0: + length=3; + char_start=LCD_SEG_L1_2; + break; + case LCD_SEG_L1_1_0: + length=2; + char_start=LCD_SEG_L1_1; + break; + case LCD_SEG_L1_3_1: + length=3; + char_start=LCD_SEG_L1_3; + break; + case LCD_SEG_L1_3_2: + length=2; + char_start=LCD_SEG_L1_3; + break; - // LINE2 - case LCD_SEG_L2_5_0: length=6; char_start=LCD_SEG_L2_5; break; - case LCD_SEG_L2_4_0: length=5; char_start=LCD_SEG_L2_4; break; - case LCD_SEG_L2_3_0: length=4; char_start=LCD_SEG_L2_3; break; - case LCD_SEG_L2_2_0: length=3; char_start=LCD_SEG_L2_2; break; - case LCD_SEG_L2_1_0: length=2; char_start=LCD_SEG_L2_1; break; - case LCD_SEG_L2_5_4: length=2; char_start=LCD_SEG_L2_5; break; - case LCD_SEG_L2_5_2: length=4; char_start=LCD_SEG_L2_5; break; - case LCD_SEG_L2_3_2: length=2; char_start=LCD_SEG_L2_3; break; - case LCD_SEG_L2_4_2: length=3; char_start=LCD_SEG_L2_4; break; + /* LINE2 */ + case LCD_SEG_L2_5_0: + length=6; + char_start=LCD_SEG_L2_5; + break; + case LCD_SEG_L2_4_0: + length=5; + char_start=LCD_SEG_L2_4; + break; + case LCD_SEG_L2_3_0: + length=4; + char_start=LCD_SEG_L2_3; + break; + case LCD_SEG_L2_2_0: + length=3; + char_start=LCD_SEG_L2_2; + break; + case LCD_SEG_L2_1_0: + length=2; + char_start=LCD_SEG_L2_1; + break; + case LCD_SEG_L2_5_4: + length=2; + char_start=LCD_SEG_L2_5; + break; + case LCD_SEG_L2_5_2: + length=4; + char_start=LCD_SEG_L2_5; + break; + case LCD_SEG_L2_3_2: + length=2; + char_start=LCD_SEG_L2_3; + break; + case LCD_SEG_L2_4_2: + length=3; + char_start=LCD_SEG_L2_4; + break; } - // Write to consecutive digits - for(i=0; i +#include +/* ************************************************************************************************* */ +/* Global Variable section */ -// driver -#include "display.h" - - -// ************************************************************************************************* -// Prototypes section - - -// ************************************************************************************************* -// Defines section - - - -// ************************************************************************************************* -// Global Variable section - -// Table with memory bit assignment for digits "0" to "9" and characters "A" to "Z" -// A -// F B -// G -// E C -// D -const uint8_t lcd_font[] = -{ - SEG_A+SEG_B+SEG_C+SEG_D+SEG_E+SEG_F, // Displays "0" - SEG_B+SEG_C, // Displays "1" - SEG_A+SEG_B+ SEG_D+SEG_E+ SEG_G, // Displays "2" - SEG_A+SEG_B+SEG_C+SEG_D+ SEG_G, // Displays "3" - SEG_B+SEG_C+ SEG_F+SEG_G, // Displays "4" - SEG_A+ SEG_C+SEG_D+ SEG_F+SEG_G, // Displays "5" - SEG_A+ SEG_C+SEG_D+SEG_E+SEG_F+SEG_G, // Displays "6" - SEG_A+SEG_B+SEG_C, // Displays "7" - SEG_A+SEG_B+SEG_C+SEG_D+SEG_E+SEG_F+SEG_G, // Displays "8" - SEG_A+SEG_B+SEG_C+SEG_D+ SEG_F+SEG_G, // Displays "9" - 0 , // Displays " " (:) - 0 , // Displays " " (;) - SEG_A+ SEG_F+SEG_G, // Displays "<" as high c - SEG_D+ SEG_G, // Displays "=" - 0 , // Displays " " (>) - SEG_A+SEG_B+ SEG_E+ SEG_G, // Displays "?" - 0 , // Displays " " (@) - SEG_A+SEG_B+SEG_C+ SEG_E+SEG_F+SEG_G, // Displays "A" - SEG_C+SEG_D+SEG_E+SEG_F+SEG_G, // Displays "b" - SEG_D+SEG_E+ SEG_G, // Displays "c" - SEG_B+SEG_C+SEG_D+SEG_E+ SEG_G, // Displays "d" - SEG_A+ +SEG_D+SEG_E+SEG_F+SEG_G, // Displays "E" - SEG_A+ SEG_E+SEG_F+SEG_G, // Displays "f" - SEG_A+SEG_B+SEG_C+SEG_D+ SEG_F+SEG_G, // Displays "g" same as 9 - SEG_C+ SEG_E+SEG_F+SEG_G, // Displays "h" - SEG_E , // Displays "i" - SEG_A+SEG_B+SEG_C+SEG_D , // Displays "J" - SEG_D+ SEG_F+SEG_G, // Displays "k" - SEG_D+SEG_E+SEG_F , // Displays "L" - SEG_A+SEG_B+SEG_C+ SEG_E+SEG_F , // Displays "M" - SEG_C+ SEG_E+ SEG_G, // Displays "n" - SEG_C+SEG_D+SEG_E+ SEG_G, // Displays "o" - SEG_A+SEG_B+ SEG_E+SEG_F+SEG_G, // Displays "P" - SEG_A+SEG_B+SEG_C+ SEG_F+SEG_G, // Displays "q" - SEG_E+ SEG_G, // Displays "r" - SEG_A+ SEG_C+SEG_D+ SEG_F+SEG_G, // Displays "S" same as 5 - SEG_D+SEG_E+SEG_F+SEG_G, // Displays "t" - SEG_C+SEG_D+SEG_E , // Displays "u" - SEG_C+SEG_D+SEG_E , // Displays "v" same as u - SEG_B+SEG_C+SEG_D+SEG_E+SEG_F+SEG_G, // Displays "W" - SEG_B+SEG_C+ +SEG_E+SEG_F+SEG_G, // Displays "X" as H - SEG_B+SEG_C+SEG_D+ SEG_F+SEG_G, // Displays "Y" - SEG_A+SEG_B+ SEG_D+SEG_E+ SEG_G, // Displays "Z" same as 2 +/* Table with memory bit assignment for digits "0" to "9" and characters "A" to "Z" */ +/* A */ +/* F B */ +/* G */ +/* E C */ +/* D */ +const uint8_t lcd_font[] = { + SEG_A+SEG_B+SEG_C+SEG_D+SEG_E+SEG_F, /* Displays "0" */ + SEG_B+SEG_C, /* Displays "1" */ + SEG_A+SEG_B+ SEG_D+SEG_E+ SEG_G, /* Displays "2" */ + SEG_A+SEG_B+SEG_C+SEG_D+ SEG_G, /* Displays "3" */ + SEG_B+SEG_C+ SEG_F+SEG_G, /* Displays "4" */ + SEG_A+ SEG_C+SEG_D+ SEG_F+SEG_G, /* Displays "5" */ + SEG_A+ SEG_C+SEG_D+SEG_E+SEG_F+SEG_G, /* Displays "6" */ + SEG_A+SEG_B+SEG_C, /* Displays "7" */ + SEG_A+SEG_B+SEG_C+SEG_D+SEG_E+SEG_F+SEG_G, /* Displays "8" */ + SEG_A+SEG_B+SEG_C+SEG_D+ SEG_F+SEG_G, /* Displays "9" */ + 0 , /* Displays " " (:) */ + 0 , /* Displays " " (;) */ + SEG_A+ SEG_F+SEG_G, /* Displays "<" as high c */ + SEG_D+ SEG_G, /* Displays "=" */ + 0 , /* Displays " " (>) */ + SEG_A+SEG_B+ SEG_E+ SEG_G, /* Displays "?" */ + 0 , /* Displays " " (@) */ + SEG_A+SEG_B+SEG_C+ SEG_E+SEG_F+SEG_G, /* Displays "A" */ + SEG_C+SEG_D+SEG_E+SEG_F+SEG_G, /* Displays "b" */ + SEG_D+SEG_E+ SEG_G, /* Displays "c" */ + SEG_B+SEG_C+SEG_D+SEG_E+ SEG_G, /* Displays "d" */ + SEG_A+ +SEG_D+SEG_E+SEG_F+SEG_G, /* Displays "E" */ + SEG_A+ SEG_E+SEG_F+SEG_G, /* Displays "f" */ + SEG_A+SEG_B+SEG_C+SEG_D+ SEG_F+SEG_G, /* Displays "g" same as 9 */ + SEG_C+ SEG_E+SEG_F+SEG_G, /* Displays "h" */ + SEG_E , /* Displays "i" */ + SEG_A+SEG_B+SEG_C+SEG_D , /* Displays "J" */ + SEG_D+ SEG_F+SEG_G, /* Displays "k" */ + SEG_D+SEG_E+SEG_F , /* Displays "L" */ + SEG_A+SEG_B+SEG_C+ SEG_E+SEG_F , /* Displays "M" */ + SEG_C+ SEG_E+ SEG_G, /* Displays "n" */ + SEG_C+SEG_D+SEG_E+ SEG_G, /* Displays "o" */ + SEG_A+SEG_B+ SEG_E+SEG_F+SEG_G, /* Displays "P" */ + SEG_A+SEG_B+SEG_C+ SEG_F+SEG_G, /* Displays "q" */ + SEG_E+ SEG_G, /* Displays "r" */ + SEG_A+ SEG_C+SEG_D+ SEG_F+SEG_G, /* Displays "S" same as 5 */ + SEG_D+SEG_E+SEG_F+SEG_G, /* Displays "t" */ + SEG_C+SEG_D+SEG_E , /* Displays "u" */ + SEG_C+SEG_D+SEG_E , /* Displays "v" same as u */ + SEG_B+SEG_C+SEG_D+SEG_E+SEG_F+SEG_G, /* Displays "W" */ + SEG_B+SEG_C+ +SEG_E+SEG_F+SEG_G, /* Displays "X" as H */ + SEG_B+SEG_C+SEG_D+ SEG_F+SEG_G, /* Displays "Y" */ + SEG_A+SEG_B+ SEG_D+SEG_E+ SEG_G, /* Displays "Z" same as 2 */ }; - -// Table with memory address for each display element -const uint8_t * segments_lcdmem[] = -{ +/* Table with memory address for each display element */ +const uint8_t * segments_lcdmem[] = { LCD_SYMB_AM_MEM, LCD_SYMB_PM_MEM, LCD_SYMB_ARROW_UP_MEM, @@ -158,10 +142,8 @@ const uint8_t * segments_lcdmem[] = LCD_SEG_L2_DP_MEM, }; - -// Table with bit mask for each display element -const uint8_t segments_bitmask[] = -{ +/* Table with bit mask for each display element */ +const uint8_t segments_bitmask[] = { LCD_SYMB_AM_MASK, LCD_SYMB_PM_MASK, LCD_SYMB_ARROW_UP_MASK, @@ -206,10 +188,10 @@ const uint8_t segments_bitmask[] = LCD_SEG_L2_DP_MASK, }; - -// Quick integer to array conversion table for most common integer values -const uint8_t itoa_conversion_table[][3] = -{ +/* Quick integer to array conversion table for most common integer values + * discarding this would save aprox. 600 bytes codespace but increase cpu time + * for displaying values */ +const uint8_t itoa_conversion_table[][3] = { "000", "001", "002", "003", "004", "005", "006", "007", "008", "009", "010", "011", "012", "013", "014", "015", "016", "017", "018", "019", "020", "021", "022", "023", "024", "025", "026", "027", "028", "029", "030", "031", "032", "033", "034", "035", "036", "037", "038", "039", "040", "041", "042", "043", "044", "045", "046", "047", @@ -223,4 +205,3 @@ const uint8_t itoa_conversion_table[][3] = "160", "161", "162", "163", "164", "165", "166", "167", "168", "169", "170", "171", "172", "173", "174", "175", "176", "177", "178", "179", "180", }; - From 5185fcf7f0fc28f0ea98096de59419dceb9d499f Mon Sep 17 00:00:00 2001 From: Oliver Hahm Date: Mon, 13 Dec 2010 01:30:46 +0100 Subject: [PATCH 17/17] [board/msb-430h] * fixed include --- msb-430h/driver_cc110x.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/msb-430h/driver_cc110x.c b/msb-430h/driver_cc110x.c index a0967b272f..9316e8bf56 100644 --- a/msb-430h/driver_cc110x.c +++ b/msb-430h/driver_cc110x.c @@ -24,7 +24,7 @@ Boston, MA 02111-1307, USA. */ #include #include -#include +#include #define CC1100_GDO0 (P2IN & 0x02) // read serial I/O (GDO0) #define CC1100_GDO1 (P3IN & 0x04) // read serial I/O (GDO1)