1
0
mirror of https://github.com/RIOT-OS/RIOT.git synced 2024-12-29 04:50:03 +01:00
RIOT/cpu/msp430_common/include/cpu_conf.h
Marian Buschsieweke c5c83cfe3c
cpu/msp430_common: Update to inline-able IRQ API
- Updated to inline-able IRQ API
- Improved robustness of functions
    - Added memory barrier to prevent the compiler from moving code outside of
      a critical section guarded by irq_disable() ... irq_restore()
- Reduced overhead of `irq_disable()`
    - After clearing the global interrupt enable (GIE) bit, IRQs remain enabled
      for up to one CPU cycle
    - The previous implementation just added a nop to fill that cycle
    - This implementation uses the cycle for masking the return value
- Reduced overhead of `irq_restore()`
    - Now only one CPU cycle is needed
- `irq_disable()`, `irq_restore()`, and `irq_enable()` work now in constant time
2020-06-25 21:32:17 +02:00

103 lines
2.4 KiB
C

/*
* Copyright (C) 2013, Freie Universitaet Berlin (FUB). All rights reserved.
*
* This file is subject to the terms and conditions of the GNU Lesser
* General Public License v2.1. See the file LICENSE in the top level
* directory for more details.
*/
/**
* @ingroup cpu_msp430_common
* @{
*
* @file
* @brief Common CPU definitions for MSP430
*
*/
#ifndef CPU_CONF_H
#define CPU_CONF_H
#ifdef __cplusplus
extern "C" {
#endif
/**
* @brief This arch uses the inlined IRQ API.
*/
#define IRQ_API_INLINED (1)
/**
* @name Configure the internal flash memory
* @{
*/
#define FLASHPAGE_SIZE (512U)
#if defined (CPU_MODEL_MSP430F1611)
#define CPU_FLASH_BASE (0x4000)
#define FLASHPAGE_NUMOF (96U) /* 48K */
#elif defined (CPU_MODEL_MSP430F1612)
#define CPU_FLASH_BASE (0x2600) /* first sector is only 256 byte, skip it*/
#define FLASHPAGE_NUMOF (109U) /* 54.5K */
#elif defined (CPU_MODEL_MSP430F2617)
#define CPU_FLASH_BASE (0x3200) /* first sector is only 256 byte, skip it*/
#define FLASHPAGE_NUMOF (103U) /* we can currently only access 51.5K */
#elif defined (CPU_MODEL_CC430F6137)
#define CPU_FLASH_BASE (0x8000)
#define FLASHPAGE_NUMOF (64U) /* 32K */
#endif
/* The minimum block size which can be written is 1B. However, the erase
* block is always FLASHPAGE_SIZE.
*/
#define FLASHPAGE_RAW_BLOCKSIZE (1U)
/* Writing should be always 2 byte aligned */
#define FLASHPAGE_RAW_ALIGNMENT (2U)
/** @} */
/**
* @name Kernel configuration
* @{
*/
#ifndef THREAD_EXTRA_STACKSIZE_PRINTF
# define THREAD_EXTRA_STACKSIZE_PRINTF (256)
#endif
#ifndef THREAD_EXTRA_STACKSIZE_PRINTF
# define THREAD_EXTRA_STACKSIZE_PRINTF_FLOAT (THREAD_EXTRA_STACKSIZE_PRINTF)
#endif
#ifndef THREAD_STACKSIZE_DEFAULT
# define THREAD_STACKSIZE_DEFAULT (256)
#endif
#ifndef THREAD_STACKSIZE_IDLE
# define THREAD_STACKSIZE_IDLE (96)
#endif
#ifndef ISR_STACKSIZE
# define ISR_STACKSIZE (256)
#endif
#ifndef CONFIG_GNRC_PKTBUF_SIZE
/* TODO: Make this value overall MTU dependent */
# define CONFIG_GNRC_PKTBUF_SIZE (2560)
#endif
#ifndef GNRC_IPV6_STACK_SIZE
# define GNRC_IPV6_STACK_SIZE (512)
#endif
/** @} */
/**
* @brief Declare the heap_stats function as available
*/
#define HAVE_HEAP_STATS
#ifdef __cplusplus
}
#endif
#endif /* CPU_CONF_H */
/** @} */