From 2f505cf183ad47f6b25677e864e2f426b28c7f6f Mon Sep 17 00:00:00 2001 From: gdisirio Date: Sat, 5 Dec 2009 09:07:21 +0000 Subject: MSP430 HAL integration git-svn-id: svn://svn.code.sf.net/p/chibios/svn/trunk@1375 35acf78f-673a-0410-8e92-d51de3d6d3f4 --- os/hal/platforms/MSP430/hal_lld.c | 96 +++++++++++++++++++++++++++++++++++++ os/hal/platforms/MSP430/hal_lld.h | 99 +++++++++++++++++++++++++++++++++++++++ 2 files changed, 195 insertions(+) create mode 100644 os/hal/platforms/MSP430/hal_lld.c create mode 100644 os/hal/platforms/MSP430/hal_lld.h (limited to 'os/hal/platforms/MSP430') diff --git a/os/hal/platforms/MSP430/hal_lld.c b/os/hal/platforms/MSP430/hal_lld.c new file mode 100644 index 000000000..b8ca618d7 --- /dev/null +++ b/os/hal/platforms/MSP430/hal_lld.c @@ -0,0 +1,96 @@ +/* + ChibiOS/RT - Copyright (C) 2006-2007 Giovanni Di Sirio. + + This file is part of ChibiOS/RT. + + ChibiOS/RT 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. + + ChibiOS/RT 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 . +*/ + +/** + * @file MSP430/hal_lld.c + * @brief MSP430 HAL subsystem low level driver source + * @addtogroup MSP430_HAL + * @{ + */ + +#include "ch.h" +#include "hal.h" + +/*===========================================================================*/ +/* Low Level Driver exported variables. */ +/*===========================================================================*/ + +/* + * Digital I/O ports static configuration as defined in @p board.h. + */ +const MSP430DIOConfig pal_default_config = +{ +#if defined(__MSP430_HAS_PORT1__) || defined(__MSP430_HAS_PORT1_R__) + {VAL_P1OUT, VAL_P1DIR}, +#endif +#if defined(__MSP430_HAS_PORT2__) || defined(__MSP430_HAS_PORT2_R__) + {VAL_P2OUT, VAL_P2DIR}, +#endif +#if defined(__MSP430_HAS_PORT3__) || defined(__MSP430_HAS_PORT3_R__) + {VAL_P3OUT, VAL_P3DIR}, +#endif +#if defined(__MSP430_HAS_PORT4__) || defined(__MSP430_HAS_PORT4_R__) + {VAL_P4OUT, VAL_P4DIR}, +#endif +#if defined(__MSP430_HAS_PORT5__) || defined(__MSP430_HAS_PORT5_R__) + {VAL_P5OUT, VAL_P5DIR}, +#endif +#if defined(__MSP430_HAS_PORT6__) || defined(__MSP430_HAS_PORT6_R__) + {VAL_P6OUT, VAL_P6DIR}, +#endif +}; + +/*===========================================================================*/ +/* Low Level Driver local variables. */ +/*===========================================================================*/ + +/*===========================================================================*/ +/* Low Level Driver local functions. */ +/*===========================================================================*/ + +/*===========================================================================*/ +/* Low Level Driver interrupt handlers. */ +/*===========================================================================*/ + +/*===========================================================================*/ +/* Low Level Driver exported functions. */ +/*===========================================================================*/ + +/** + * @brief Low level HAL driver initialization. + */ +void hal_lld_init(void) { + + /* + * Clock sources setup. + */ + DCOCTL = VAL_DCOCTL; + BCSCTL1 = VAL_BCSCTL1; +#if MSP430_USE_CLOCK == MSP430_CLOCK_SOURCE_XT2CLK + do { + int i; + IFG1 &= ~OFIFG; + for (i = 255; i > 0; i--) + asm("nop"); + } while (IFG1 & OFIFG); +#endif + BCSCTL2 = VAL_BCSCTL2; +} + +/** @} */ diff --git a/os/hal/platforms/MSP430/hal_lld.h b/os/hal/platforms/MSP430/hal_lld.h new file mode 100644 index 000000000..07c5863eb --- /dev/null +++ b/os/hal/platforms/MSP430/hal_lld.h @@ -0,0 +1,99 @@ +/* + ChibiOS/RT - Copyright (C) 2006-2007 Giovanni Di Sirio. + + This file is part of ChibiOS/RT. + + ChibiOS/RT 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. + + ChibiOS/RT 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 . +*/ + +/** + * @file MSP430/hal_lld.h + * @brief MSP430 HAL subsystem low level driver header. + * @addtogroup MSP430_HAL + * @{ + */ + +#ifndef _HAL_LLD_H_ +#define _HAL_LLD_H_ + +#include "msp430x16x.h" + +/*===========================================================================*/ +/* Driver constants. */ +/*===========================================================================*/ + +#define MSP430_CLOCK_SOURCE_XT2CLK 0 /** @brief XT2CLK clock selector. */ +#define MSP430_CLOCK_SOURCE_DCOCLK 1 /** @brief DCOCLK clock selector. */ + +/*===========================================================================*/ +/* Driver pre-compile time settings. */ +/*===========================================================================*/ + +/** + * @brief Clock source. + * @details The clock source can be selected from: + * - @p MSP430_CLOCK_SOURCE_XT2CLK. + * - @p MSP430_CLOCK_SOURCE_DCOCLK. + * . + */ +#if !defined(MSP430_USE_CLOCK) || defined(__DOXYGEN__) +#define MSP430_USE_CLOCK MSP430_CLOCK_SOURCE_XT2CLK +#endif + +/* + * Calculating the derived clock constants. + */ +#define ACLK LFXT1CLK +#if MSP430_USE_CLOCK == MSP430_CLOCK_SOURCE_XT2CLK +#define MCLK XT2CLK +#define SMCLK (XT2CLK / 8) +#elif MSP430_USE_CLOCK == MSP430_CLOCK_SOURCE_DCOCLK +#define MCLK DCOCLK +#define SMCLK DCOCLK +#else +#error "unknown clock source specified" +#endif + +/* + * Calculating the initialization values. + */ +#define VAL_DCOCTL (DCO0 | DCO1) +#if MSP430_USE_CLOCK == MSP430_CLOCK_SOURCE_XT2CLK +#define VAL_BCSCTL1 (RSEL2) +#define VAL_BCSCTL2 (SELM_2 | DIVM_0 | DIVS_3 | SELS) +#endif +#if MSP430_USE_CLOCK == MSP430_CLOCK_SOURCE_DCOCLK +#define VAL_BCSCTL1 (XT2OFF | RSEL2) +#define VAL_BCSCTL2 (SELM_0 | DIVM_0 | DIVS_0) +#endif + +/*===========================================================================*/ +/* Driver data structures and types. */ +/*===========================================================================*/ + +/*===========================================================================*/ +/* External declarations. */ +/*===========================================================================*/ + +#ifdef __cplusplus +extern "C" { +#endif + void hal_lld_init(void); +#ifdef __cplusplus +} +#endif + +#endif /* _HAL_LLD_H_ */ + +/** @} */ -- cgit v1.2.3