mirror of https://github.com/rusefi/ChibiOS.git
MSP430 HAL integration
git-svn-id: svn://svn.code.sf.net/p/chibios/svn/trunk@1375 35acf78f-673a-0410-8e92-d51de3d6d3f4
This commit is contained in:
parent
03a0255b04
commit
2f505cf183
|
@ -21,40 +21,12 @@
|
|||
#define _BOARD_H_
|
||||
|
||||
/*
|
||||
* Clock settings.
|
||||
* Clock constants.
|
||||
*/
|
||||
//#define MSP_USE_XT2CLK
|
||||
#define MSP_USE_DCOCLK
|
||||
|
||||
#if defined(MSP_USE_XT2CLK) && defined(MSP_USE_DCOCLK)
|
||||
#error "Define MSP_USE_XT2CLK or MSP_USE_DCOCLK, not both"
|
||||
#endif
|
||||
|
||||
#define LFXT1CLK 32768
|
||||
#define XT2CLK 8000000
|
||||
#define DCOCLK 750000
|
||||
|
||||
#define ACLK LFXT1CLK
|
||||
#if defined(MSP_USE_XT2CLK)
|
||||
#define MCLK XT2CLK
|
||||
#define SMCLK (XT2CLK / 8)
|
||||
#elif defined(MSP_USE_DCOCLK)
|
||||
#define MCLK DCOCLK
|
||||
#define SMCLK DCOCLK
|
||||
#else
|
||||
#error "Default clock source not selected"
|
||||
#endif
|
||||
|
||||
#define VAL_DCOCTL (DCO0 | DCO1)
|
||||
#if defined(MSP_USE_XT2CLK)
|
||||
#define VAL_BCSCTL1 (RSEL2)
|
||||
#define VAL_BCSCTL2 (SELM_2 | DIVM_0 | DIVS_3 | SELS)
|
||||
#endif
|
||||
#if defined(MSP_USE_DCOCLK)
|
||||
#define VAL_BCSCTL1 (XT2OFF | RSEL2)
|
||||
#define VAL_BCSCTL2 (SELM_0 | DIVM_0 | DIVS_0)
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Pin definitions for the Olimex MSP430-P1611 board.
|
||||
*/
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
***************************************************************************
|
||||
Options: -O2 -fomit-frame-pointer
|
||||
Settings: MCLK=DCOCLK 750Khz
|
||||
Settings: MCLK=DCOCLK 750KHz
|
||||
***************************************************************************
|
||||
|
||||
*** ChibiOS/RT test suite
|
||||
|
|
|
@ -0,0 +1,153 @@
|
|||
***************************************************************************
|
||||
Options: -O2 -fomit-frame-pointer
|
||||
Settings: MCLK=XT2CLK 8MHz
|
||||
***************************************************************************
|
||||
|
||||
*** ChibiOS/RT test suite
|
||||
***
|
||||
*** Kernel: 1.3.5unstable
|
||||
*** Architecture: MSP430
|
||||
*** GCC Version: 3.2.3
|
||||
|
||||
----------------------------------------------------------------------------
|
||||
--- Test Case 1.1 (Threads, enqueuing test #1)
|
||||
--- Result: SUCCESS
|
||||
----------------------------------------------------------------------------
|
||||
--- Test Case 1.2 (Threads, enqueuing test #2)
|
||||
--- Result: SUCCESS
|
||||
----------------------------------------------------------------------------
|
||||
--- Test Case 1.3 (Threads, priority change)
|
||||
--- Result: SUCCESS
|
||||
----------------------------------------------------------------------------
|
||||
--- Test Case 1.4 (Threads, delays)
|
||||
--- Result: SUCCESS
|
||||
----------------------------------------------------------------------------
|
||||
--- Test Case 2.1 (Semaphores, enqueuing)
|
||||
--- Result: SUCCESS
|
||||
----------------------------------------------------------------------------
|
||||
--- Test Case 2.2 (Semaphores, timeout)
|
||||
--- Result: SUCCESS
|
||||
----------------------------------------------------------------------------
|
||||
--- Test Case 2.3 (Semaphores, atomic signal-wait)
|
||||
--- Result: SUCCESS
|
||||
----------------------------------------------------------------------------
|
||||
--- Test Case 3.1 (Mutexes, priority enqueuing test)
|
||||
--- Result: SUCCESS
|
||||
----------------------------------------------------------------------------
|
||||
--- Test Case 3.2 (Mutexes, priority inheritance, simple case)
|
||||
--- Result: SUCCESS
|
||||
----------------------------------------------------------------------------
|
||||
--- Test Case 3.3 (Mutexes, priority inheritance, complex case)
|
||||
--- Result: SUCCESS
|
||||
----------------------------------------------------------------------------
|
||||
--- Test Case 3.4 (Mutexes, priority return)
|
||||
--- Result: SUCCESS
|
||||
----------------------------------------------------------------------------
|
||||
--- Test Case 3.5 (Mutexes, status)
|
||||
--- Result: SUCCESS
|
||||
----------------------------------------------------------------------------
|
||||
--- Test Case 3.6 (CondVar, signal test)
|
||||
--- Result: SUCCESS
|
||||
----------------------------------------------------------------------------
|
||||
--- Test Case 3.7 (CondVar, broadcast test)
|
||||
--- Result: SUCCESS
|
||||
----------------------------------------------------------------------------
|
||||
--- Test Case 3.8 (CondVar, boost test)
|
||||
--- Result: SUCCESS
|
||||
----------------------------------------------------------------------------
|
||||
--- Test Case 4.1 (Messages, loop)
|
||||
--- Result: SUCCESS
|
||||
----------------------------------------------------------------------------
|
||||
--- Test Case 5.1 (Mailboxes, queuing and timeouts)
|
||||
--- Result: SUCCESS
|
||||
----------------------------------------------------------------------------
|
||||
--- Test Case 6.1 (Events, registration and dispatch)
|
||||
--- Result: SUCCESS
|
||||
----------------------------------------------------------------------------
|
||||
--- Test Case 6.2 (Events, wait and broadcast)
|
||||
--- Result: SUCCESS
|
||||
----------------------------------------------------------------------------
|
||||
--- Test Case 6.3 (Events, timeouts)
|
||||
--- Result: SUCCESS
|
||||
----------------------------------------------------------------------------
|
||||
--- Test Case 7.1 (Heap, allocation and fragmentation test)
|
||||
--- Result: SUCCESS
|
||||
----------------------------------------------------------------------------
|
||||
--- Test Case 8.1 (Memory Pools, queue/dequeue)
|
||||
--- Result: SUCCESS
|
||||
----------------------------------------------------------------------------
|
||||
--- Test Case 9.1 (Dynamic APIs, threads creation from heap)
|
||||
--- Result: SUCCESS
|
||||
----------------------------------------------------------------------------
|
||||
--- Test Case 9.2 (Dynamic APIs, threads creation from memory pool)
|
||||
--- Result: SUCCESS
|
||||
----------------------------------------------------------------------------
|
||||
--- Test Case 10.1 (Queues, input queues)
|
||||
--- Result: SUCCESS
|
||||
----------------------------------------------------------------------------
|
||||
--- Test Case 10.2 (Queues, output queues)
|
||||
--- Result: SUCCESS
|
||||
----------------------------------------------------------------------------
|
||||
--- Test Case 11.1 (Benchmark, messages #1)
|
||||
--- Score : 20960 msgs/S, 41920 ctxswc/S
|
||||
--- Result: SUCCESS
|
||||
----------------------------------------------------------------------------
|
||||
--- Test Case 11.2 (Benchmark, messages #2)
|
||||
--- Score : 17361 msgs/S, 34722 ctxswc/S
|
||||
--- Result: SUCCESS
|
||||
----------------------------------------------------------------------------
|
||||
--- Test Case 11.3 (Benchmark, messages #3)
|
||||
--- Score : 17361 msgs/S, 34722 ctxswc/S
|
||||
--- Result: SUCCESS
|
||||
----------------------------------------------------------------------------
|
||||
--- Test Case 11.4 (Benchmark, context switch)
|
||||
--- Score : 64272 ctxswc/S
|
||||
--- Result: SUCCESS
|
||||
----------------------------------------------------------------------------
|
||||
--- Test Case 11.5 (Benchmark, threads, full cycle)
|
||||
--- Score : 14284 threads/S
|
||||
--- Result: SUCCESS
|
||||
----------------------------------------------------------------------------
|
||||
--- Test Case 11.6 (Benchmark, threads, create only)
|
||||
--- Score : 18397 threads/S
|
||||
--- Result: SUCCESS
|
||||
----------------------------------------------------------------------------
|
||||
--- Test Case 11.7 (Benchmark, mass reschedulation, 5 threads)
|
||||
--- Score : 5347 reschedulations/S, 32082 ctxswc/S
|
||||
--- Result: SUCCESS
|
||||
----------------------------------------------------------------------------
|
||||
--- Test Case 11.8 (Benchmark, round robin context switching)
|
||||
--- Score : 46344 reschedulations/S, 46344 ctxswc/S
|
||||
--- Result: SUCCESS
|
||||
----------------------------------------------------------------------------
|
||||
--- Test Case 11.9 (Benchmark, I/O Queues throughput)
|
||||
--- Score : 54360 bytes/S
|
||||
--- Result: SUCCESS
|
||||
----------------------------------------------------------------------------
|
||||
--- Test Case 11.10 (Benchmark, virtual timers set/reset)
|
||||
--- Score : 60944 timers/S
|
||||
--- Result: SUCCESS
|
||||
----------------------------------------------------------------------------
|
||||
--- Test Case 11.11 (Benchmark, semaphores wait/signal)
|
||||
--- Score : 150640 wait+signal/S
|
||||
--- Result: SUCCESS
|
||||
----------------------------------------------------------------------------
|
||||
--- Test Case 11.12 (Benchmark, mutexes lock/unlock)
|
||||
--- Score : 84048 lock+unlock/S
|
||||
--- Result: SUCCESS
|
||||
----------------------------------------------------------------------------
|
||||
--- Test Case 11.13 (Benchmark, RAM footprint)
|
||||
--- System: 202 bytes
|
||||
--- Thread: 30 bytes
|
||||
--- Timer : 10 bytes
|
||||
--- Semaph: 6 bytes
|
||||
--- EventS: 2 bytes
|
||||
--- EventL: 6 bytes
|
||||
--- Mutex : 8 bytes
|
||||
--- CondV.: 4 bytes
|
||||
--- Queue : 16 bytes
|
||||
--- MailB.: 20 bytes
|
||||
--- Result: SUCCESS
|
||||
----------------------------------------------------------------------------
|
||||
|
||||
Final result: SUCCESS
|
|
@ -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 <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
/**
|
||||
* @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;
|
||||
}
|
||||
|
||||
/** @} */
|
|
@ -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 <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
/**
|
||||
* @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_ */
|
||||
|
||||
/** @} */
|
|
@ -13,6 +13,8 @@
|
|||
both AT91SAM7S and AT91SAM7X families.
|
||||
- NEW: Extended the support to all the SAM7X and SAM7S devices thanks to
|
||||
code contributed by Liam Staskawicz.
|
||||
- NEW: Added test report for MSP430 running off the external high speed
|
||||
oscillator.
|
||||
- CHANGE: Removed the MII from the standard drivers, now it is part of the
|
||||
AT91SAM7 support, the header mii.h is still part of the HAL.
|
||||
- CHANGE: In the STM32 drivers now the DMA errors are handled by hook macros
|
||||
|
|
Loading…
Reference in New Issue