Line 1... |
Line 1... |
//----------------------------------------------------------------------------
|
//----------------------------------------------------------------------------
|
// Copyright (C) 2001 Authors
|
// Copyright (C) 2009 , Olivier Girard
|
//
|
//
|
// This source file may be used and distributed without restriction provided
|
// Redistribution and use in source and binary forms, with or without
|
// that this copyright statement is not removed from the file and that any
|
// modification, are permitted provided that the following conditions
|
// derivative work contains the original copyright notice and the associated
|
// are met:
|
// disclaimer.
|
// * Redistributions of source code must retain the above copyright
|
//
|
// notice, this list of conditions and the following disclaimer.
|
// This source file is free software; you can redistribute it and/or modify
|
// * Redistributions in binary form must reproduce the above copyright
|
// it under the terms of the GNU Lesser General Public License as published
|
// notice, this list of conditions and the following disclaimer in the
|
// by the Free Software Foundation; either version 2.1 of the License, or
|
// documentation and/or other materials provided with the distribution.
|
// (at your option) any later version.
|
// * Neither the name of the authors nor the names of its contributors
|
//
|
// may be used to endorse or promote products derived from this software
|
// This source is distributed in the hope that it will be useful, but WITHOUT
|
// without specific prior written permission.
|
// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
//
|
// FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
|
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
// License for more details.
|
// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
//
|
// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
// You should have received a copy of the GNU Lesser General Public License
|
// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
|
// along with this source; if not, write to the Free Software Foundation,
|
// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
|
// Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
// 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
|
//
|
//
|
//----------------------------------------------------------------------------
|
//----------------------------------------------------------------------------
|
//
|
//
|
// *File Name: openMSP430_defines.v
|
// *File Name: openMSP430_defines.v
|
//
|
//
|
Line 101... |
Line 106... |
// ADVANCED SYSTEM CONFIGURATION (FOR EXPERIENCED USERS)
|
// ADVANCED SYSTEM CONFIGURATION (FOR EXPERIENCED USERS)
|
//============================================================================
|
//============================================================================
|
//============================================================================
|
//============================================================================
|
|
|
//-------------------------------------------------------
|
//-------------------------------------------------------
|
|
// Custom user version number
|
|
//-------------------------------------------------------
|
|
// This 5 bit field can be freely used in order to allow
|
|
// custom identification of the system through the debug
|
|
// interface.
|
|
// (see CPU_ID.USER_VERSION field in the documentation)
|
|
//-------------------------------------------------------
|
|
`define USER_VERSION 5'b00011
|
|
|
|
|
|
//-------------------------------------------------------
|
|
// Include/Exclude Watchdog timer
|
|
//-------------------------------------------------------
|
|
// When excluded, the following functionality will be
|
|
// lost:
|
|
// - Watchog (both interval and watchdog modes)
|
|
// - NMI interrupt edge selection
|
|
// - Possibility to generate a software PUC reset
|
|
//-------------------------------------------------------
|
|
`define WATCHDOG
|
|
|
|
|
|
///-------------------------------------------------------
|
|
// Include/Exclude Non-Maskable-Interrupt support
|
|
//-------------------------------------------------------
|
|
`define NMI
|
|
|
|
|
|
//-------------------------------------------------------
|
|
// Input synchronizers
|
|
//-------------------------------------------------------
|
|
// In some cases, the asynchronous input ports might
|
|
// already be synchronized externally.
|
|
// If an extensive CDC design review showed that this
|
|
// is really the case, the individual synchronizers
|
|
// can be disabled with the following defines.
|
|
//
|
|
// Notes:
|
|
// - all three signals are all sampled in the MCLK domain
|
|
//
|
|
// - the dbg_en signal reset the debug interface
|
|
// when 0. Therefore make sure it is glitch free.
|
|
//
|
|
//-------------------------------------------------------
|
|
`define SYNC_NMI
|
|
`define SYNC_CPU_EN
|
|
`define SYNC_DBG_EN
|
|
|
|
|
|
//-------------------------------------------------------
|
// Peripheral Memory Space:
|
// Peripheral Memory Space:
|
//-------------------------------------------------------
|
//-------------------------------------------------------
|
// The original MSP430 architecture map the peripherals
|
// The original MSP430 architecture map the peripherals
|
// from 0x0000 to 0x01FF (i.e. 512B of the memory space).
|
// from 0x0000 to 0x01FF (i.e. 512B of the memory space).
|
// The following defines allow you to expand this space
|
// The following defines allow you to expand this space
|
Line 125... |
Line 180... |
//-------------------------------------------------------
|
//-------------------------------------------------------
|
// Defines the debugger CPU_CTL.RST_BRK_EN reset value
|
// Defines the debugger CPU_CTL.RST_BRK_EN reset value
|
// (CPU break on PUC reset)
|
// (CPU break on PUC reset)
|
//-------------------------------------------------------
|
//-------------------------------------------------------
|
// When defined, the CPU will automatically break after
|
// When defined, the CPU will automatically break after
|
// a PUC occurrence by default. This is typically usefull
|
// a PUC occurrence by default. This is typically useful
|
// when the program memory can only be initialized through
|
// when the program memory can only be initialized through
|
// the serial debug interface.
|
// the serial debug interface.
|
//-------------------------------------------------------
|
//-------------------------------------------------------
|
//`define DBG_RST_BRK_EN
|
`define DBG_RST_BRK_EN
|
|
|
|
|
//-------------------------------------------------------
|
|
// Custom user version number
|
|
//-------------------------------------------------------
|
|
// This 5 bit field can be freely used in order to allow
|
|
// custom identification of the system through the debug
|
|
// interface.
|
|
// (see CPU_ID.USER_VERSION field in the documentation)
|
|
//-------------------------------------------------------
|
|
`define USER_VERSION 5'b00011
|
|
|
|
|
|
//============================================================================
|
//============================================================================
|
//============================================================================
|
//============================================================================
|
// EXPERT SYSTEM CONFIGURATION ( !!!! EXPERTS ONLY !!!! )
|
// EXPERT SYSTEM CONFIGURATION ( !!!! EXPERTS ONLY !!!! )
|
Line 156... |
Line 200... |
// you are doing :-P
|
// you are doing :-P
|
//
|
//
|
//============================================================================
|
//============================================================================
|
|
|
//-------------------------------------------------------
|
//-------------------------------------------------------
|
// Number of hardware breakpoint units (each unit contains
|
// Number of hardware breakpoint/watchpoint units
|
// two hardware address breakpoints):
|
// (each unit contains two hardware addresses available
|
|
// for breakpoints or watchpoints):
|
// - DBG_HWBRK_0 -> Include hardware breakpoints unit 0
|
// - DBG_HWBRK_0 -> Include hardware breakpoints unit 0
|
// - DBG_HWBRK_1 -> Include hardware breakpoints unit 1
|
// - DBG_HWBRK_1 -> Include hardware breakpoints unit 1
|
// - DBG_HWBRK_2 -> Include hardware breakpoints unit 2
|
// - DBG_HWBRK_2 -> Include hardware breakpoints unit 2
|
// - DBG_HWBRK_3 -> Include hardware breakpoints unit 3
|
// - DBG_HWBRK_3 -> Include hardware breakpoints unit 3
|
//-------------------------------------------------------
|
//-------------------------------------------------------
|
// Please keep in mind that hardware breakpoints only
|
// Please keep in mind that hardware breakpoints only
|
// make sense whenever the program memory is not an SRAM
|
// make sense whenever the program memory is not an SRAM
|
// (i.e. Flash/OTP/ROM/...) or when you are interested
|
// (i.e. Flash/OTP/ROM/...) or when you are interested
|
// in data breakpoints (btw. not supported by GDB).
|
// in data breakpoints.
|
//-------------------------------------------------------
|
//-------------------------------------------------------
|
//`define DBG_HWBRK_0
|
//`define DBG_HWBRK_0
|
//`define DBG_HWBRK_1
|
//`define DBG_HWBRK_1
|
//`define DBG_HWBRK_2
|
//`define DBG_HWBRK_2
|
//`define DBG_HWBRK_3
|
//`define DBG_HWBRK_3
|
Line 186... |
Line 231... |
//-------------------------------------------------------
|
//-------------------------------------------------------
|
//`define DBG_HWBRK_RANGE
|
//`define DBG_HWBRK_RANGE
|
|
|
|
|
//-------------------------------------------------------
|
//-------------------------------------------------------
|
// Input synchronizers
|
// ASIC version
|
//-------------------------------------------------------
|
//-------------------------------------------------------
|
// In some cases, the asynchronous input ports might
|
// When uncommented, this define will enable the
|
// already be synchronized externally.
|
// ASIC system configuration section (see below) and
|
// If an extensive CDC design review showed that this
|
// will activate scan support for production test.
|
// is really the case, the individual synchronizers
|
|
// can be disabled with the following defines.
|
|
//
|
//
|
// Notes:
|
// WARNING: if you target an FPGA, leave this define
|
// - the dbg_en signal will reset the debug interface
|
// commented.
|
// when 0. Therefore make sure it is glitch free.
|
|
//
|
|
// - the dbg_uart_rxd synchronizer must be set to 1
|
|
// when its reset is active.
|
|
//-------------------------------------------------------
|
//-------------------------------------------------------
|
`define SYNC_CPU_EN
|
//`define ASIC
|
`define SYNC_DBG_EN
|
|
`define SYNC_DBG_UART_RXD
|
|
`define SYNC_NMI
|
//============================================================================
|
|
//============================================================================
|
|
// ASIC SYSTEM CONFIGURATION ( !!!! EXPERTS/PROFESSIONALS ONLY !!!! )
|
|
//============================================================================
|
|
//============================================================================
|
|
`ifdef ASIC
|
|
|
|
//===============================================================
|
|
// FINE GRAINED CLOCK GATING
|
|
//===============================================================
|
|
|
|
//-------------------------------------------------------
|
|
// When uncommented, this define will enable the fine
|
|
// grained clock gating of all registers in the core.
|
|
//-------------------------------------------------------
|
|
`define CLOCK_GATING
|
|
|
|
|
|
//===============================================================
|
|
// LFXT CLOCK DOMAIN
|
|
//===============================================================
|
|
|
|
//-------------------------------------------------------
|
|
// When uncommented, this define will enable the lfxt_clk
|
|
// clock domain.
|
|
// When commented out, the whole chip is clocked with dco_clk.
|
|
//-------------------------------------------------------
|
|
`define LFXT_DOMAIN
|
|
|
|
|
|
//===============================================================
|
|
// CLOCK MUXES
|
|
//===============================================================
|
|
|
|
//-------------------------------------------------------
|
|
// MCLK: Clock Mux
|
|
//-------------------------------------------------------
|
|
// When uncommented, this define will enable the
|
|
// MCLK clock MUX allowing the selection between
|
|
// DCO_CLK and LFXT_CLK with the BCSCTL2.SELMx register.
|
|
// When commented, DCO_CLK is selected.
|
|
//-------------------------------------------------------
|
|
`define MCLK_MUX
|
|
|
|
//-------------------------------------------------------
|
|
// SMCLK: Clock Mux
|
|
//-------------------------------------------------------
|
|
// When uncommented, this define will enable the
|
|
// SMCLK clock MUX allowing the selection between
|
|
// DCO_CLK and LFXT_CLK with the BCSCTL2.SELS register.
|
|
// When commented, DCO_CLK is selected.
|
|
//-------------------------------------------------------
|
|
`define SMCLK_MUX
|
|
|
|
//-------------------------------------------------------
|
|
// WATCHDOG: Clock Mux
|
|
//-------------------------------------------------------
|
|
// When uncommented, this define will enable the
|
|
// Watchdog clock MUX allowing the selection between
|
|
// ACLK and SMCLK with the WDTCTL.WDTSSEL register.
|
|
// When commented out, ACLK is selected if the
|
|
// WATCHDOG_NOMUX_ACLK define is uncommented, SMCLK is
|
|
// selected otherwise.
|
|
//-------------------------------------------------------
|
|
`define WATCHDOG_MUX
|
|
//`define WATCHDOG_NOMUX_ACLK
|
|
|
|
|
|
//===============================================================
|
|
// CLOCK DIVIDERS
|
|
//===============================================================
|
|
|
|
//-------------------------------------------------------
|
|
// MCLK: Clock divider
|
|
//-------------------------------------------------------
|
|
// When uncommented, this define will enable the
|
|
// MCLK clock divider (/1/2/4/8)
|
|
//-------------------------------------------------------
|
|
`define MCLK_DIVIDER
|
|
|
|
//-------------------------------------------------------
|
|
// SMCLK: Clock divider (/1/2/4/8)
|
|
//-------------------------------------------------------
|
|
// When uncommented, this define will enable the
|
|
// SMCLK clock divider
|
|
//-------------------------------------------------------
|
|
`define SMCLK_DIVIDER
|
|
|
|
//-------------------------------------------------------
|
|
// ACLK: Clock divider (/1/2/4/8)
|
|
//-------------------------------------------------------
|
|
// When uncommented, this define will enable the
|
|
// ACLK clock divider
|
|
//-------------------------------------------------------
|
|
`define ACLK_DIVIDER
|
|
|
|
|
|
//===============================================================
|
|
// LOW POWER MODES
|
|
//===============================================================
|
|
|
|
//-------------------------------------------------------
|
|
// LOW POWER MODE: CPUOFF
|
|
//-------------------------------------------------------
|
|
// When uncommented, this define will include the
|
|
// clock gate allowing to switch off MCLK in
|
|
// all low power modes: LPM0, LPM1, LPM2, LPM3, LPM4
|
|
//-------------------------------------------------------
|
|
`define CPUOFF_EN
|
|
|
|
//-------------------------------------------------------
|
|
// LOW POWER MODE: SCG0
|
|
//-------------------------------------------------------
|
|
// When uncommented, this define will enable the
|
|
// DCO_ENABLE/WKUP port control (always 1 when commented).
|
|
// This allows to switch off the DCO oscillator in the
|
|
// following low power modes: LPM1, LPM3, LPM4
|
|
//-------------------------------------------------------
|
|
`define SCG0_EN
|
|
|
|
//-------------------------------------------------------
|
|
// LOW POWER MODE: SCG1
|
|
//-------------------------------------------------------
|
|
// When uncommented, this define will include the
|
|
// clock gate allowing to switch off SMCLK in
|
|
// the following low power modes: LPM2, LPM3, LPM4
|
|
//-------------------------------------------------------
|
|
`define SCG1_EN
|
|
|
|
//-------------------------------------------------------
|
|
// LOW POWER MODE: OSCOFF
|
|
//-------------------------------------------------------
|
|
// When uncommented, this define will include the
|
|
// LFXT_CLK clock gate and enable the LFXT_ENABLE/WKUP
|
|
// port control (always 1 when commented).
|
|
// This allows to switch off the low frequency oscillator
|
|
// in the following low power modes: LPM4
|
|
//-------------------------------------------------------
|
|
`define OSCOFF_EN
|
|
|
|
|
|
|
|
`endif
|
|
|
//==========================================================================//
|
//==========================================================================//
|
//==========================================================================//
|
//==========================================================================//
|
//==========================================================================//
|
//==========================================================================//
|
//==========================================================================//
|
//==========================================================================//
|
//===== SYSTEM CONSTANTS --- !!!!!!!! DO NOT EDIT !!!!!!!! =====//
|
//===== SYSTEM CONSTANTS --- !!!!!!!! DO NOT EDIT !!!!!!!! =====//
|
Line 434... |
Line 613... |
`define I_EXT1 3'h3
|
`define I_EXT1 3'h3
|
`define I_EXT2 3'h4
|
`define I_EXT2 3'h4
|
`define I_IDLE 3'h5
|
`define I_IDLE 3'h5
|
|
|
// Execution state machine
|
// Execution state machine
|
`define E_IRQ_0 4'h0
|
// (swapped E_IRQ_0 and E_IRQ_2 values to suppress glitch generation warning from lint tool)
|
|
`define E_IRQ_0 4'h2
|
`define E_IRQ_1 4'h1
|
`define E_IRQ_1 4'h1
|
`define E_IRQ_2 4'h2
|
`define E_IRQ_2 4'h0
|
`define E_IRQ_3 4'h3
|
`define E_IRQ_3 4'h3
|
`define E_IRQ_4 4'h4
|
`define E_IRQ_4 4'h4
|
`define E_SRC_AD 4'h5
|
`define E_SRC_AD 4'h5
|
`define E_SRC_RD 4'h6
|
`define E_SRC_RD 4'h6
|
`define E_SRC_WR 4'h7
|
`define E_SRC_WR 4'h7
|
Line 496... |
Line 676... |
|
|
// Basic clock module: BCSCTL1 Control Register
|
// Basic clock module: BCSCTL1 Control Register
|
`define DIVAx 5:4
|
`define DIVAx 5:4
|
|
|
// Basic clock module: BCSCTL2 Control Register
|
// Basic clock module: BCSCTL2 Control Register
|
|
`define SELMx 7
|
|
`define DIVMx 5:4
|
`define SELS 3
|
`define SELS 3
|
`define DIVSx 2:1
|
`define DIVSx 2:1
|
|
|
|
// MCLK Clock gate
|
|
`ifdef CPUOFF_EN
|
|
`define MCLK_CGATE
|
|
`else
|
|
`ifdef MCLK_DIVIDER
|
|
`define MCLK_CGATE
|
|
`endif
|
|
`endif
|
|
|
|
// SMCLK Clock gate
|
|
`ifdef SCG1_EN
|
|
`define SMCLK_CGATE
|
|
`else
|
|
`ifdef SMCLK_DIVIDER
|
|
`define SMCLK_CGATE
|
|
`endif
|
|
`endif
|
|
|
//
|
//
|
// DEBUG INTERFACE EXTRA CONFIGURATION
|
// DEBUG INTERFACE EXTRA CONFIGURATION
|
//======================================
|
//======================================
|
|
|
// Debug interface: CPU version
|
// Debug interface: CPU version
|
`define CPU_VERSION 3'h1
|
`define CPU_VERSION 3'h2
|
|
|
// Debug interface: Software breakpoint opcode
|
// Debug interface: Software breakpoint opcode
|
`define DBG_SWBRK_OP 16'h4343
|
`define DBG_SWBRK_OP 16'h4343
|
|
|
// Debug UART interface auto data synchronization
|
// Debug UART interface auto data synchronization
|
Line 541... |
Line 740... |
// `define DBG_JTAG -> DON'T UNCOMMENT, NOT SUPPORTED
|
// `define DBG_JTAG -> DON'T UNCOMMENT, NOT SUPPORTED
|
//
|
//
|
`define DBG_UART
|
`define DBG_UART
|
//`define DBG_JTAG
|
//`define DBG_JTAG
|
|
|
|
// Debug interface input synchronizer
|
|
`define SYNC_DBG_UART_RXD
|
|
|
// Enable/Disable the hardware breakpoint RANGE mode
|
// Enable/Disable the hardware breakpoint RANGE mode
|
`ifdef DBG_HWBRK_RANGE
|
`ifdef DBG_HWBRK_RANGE
|
`define HWBRK_RANGE 1'b1
|
`define HWBRK_RANGE 1'b1
|
`else
|
`else
|
`define HWBRK_RANGE 1'b0
|
`define HWBRK_RANGE 1'b0
|
Line 575... |
Line 777... |
// If uncommented, the following define selects
|
// If uncommented, the following define selects
|
// the 16x16 multiplier (1 cycle) instead of the
|
// the 16x16 multiplier (1 cycle) instead of the
|
// default 16x8 multplier (2 cycles)
|
// default 16x8 multplier (2 cycles)
|
//`define MPY_16x16
|
//`define MPY_16x16
|
|
|
No newline at end of file
|
No newline at end of file
|
|
//======================================
|
|
// CONFIGURATION CHECKS
|
|
//======================================
|
|
`ifdef LFXT_DOMAIN
|
|
`else
|
|
`ifdef MCLK_MUX
|
|
CONFIGURATION ERROR: THE MCLK_MUX CAN ONLY BE ENABLED IF THE LFXT_DOMAIN IS ENABLED AS WELL
|
|
`endif
|
|
`ifdef SMCLK_MUX
|
|
CONFIGURATION ERROR: THE SMCLK_MUX CAN ONLY BE ENABLED IF THE LFXT_DOMAIN IS ENABLED AS WELL
|
|
`endif
|
|
`ifdef WATCHDOG_MUX
|
|
CONFIGURATION ERROR: THE WATCHDOG_MUX CAN ONLY BE ENABLED IF THE LFXT_DOMAIN IS ENABLED AS WELL
|
|
`else
|
|
`ifdef WATCHDOG_NOMUX_ACLK
|
|
CONFIGURATION ERROR: THE WATCHDOG_NOMUX_ACLK CAN ONLY BE ENABLED IF THE LFXT_DOMAIN IS ENABLED AS WELL
|
|
`endif
|
|
`endif
|
|
`ifdef OSCOFF_EN
|
|
CONFIGURATION ERROR: THE OSCOFF LOW POWER MODE CAN ONLY BE ENABLED IF THE LFXT_DOMAIN IS ENABLED AS WELL
|
|
`endif
|
|
`endif
|
|
|
No newline at end of file
|
No newline at end of file
|