/* MSPDebug - debugging tool for MSP430 MCUs * Copyright (C) 2009-2011 Daniel Beer * * 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 2 of the License, or * (at your option) any later version. * * This program 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, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #ifndef TILIB_DEFS_H_ #define TILIB_DEFS_H_ /* This header file contains various constants used by the TI MSP430 * library. The original copyright notice is: * * Copyright (C) 2004 - 2011 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. */ #include /* this is the definition for the DLL functions return value */ typedef long STATUS_T; typedef long LONG; typedef unsigned long ULONG; typedef char CHAR; typedef uint16_t WORD; typedef uint8_t BYTE; enum READ_WRITE { WRITE = 0, READ = 1, }; enum RESET_METHOD { PUC_RESET = (1 << 0), /**< Power up clear (i.e., a "soft") reset */ RST_RESET = (1 << 1), /**< RST/NMI (i.e., "hard") reset */ VCC_RESET = (1 << 2), /**< Cycle Vcc (i.e., a "power on") reset */ FORCE_RESET = (1 << 3) }; /* FLASH erase type. */ enum ERASE_TYPE { ERASE_SEGMENT = 0, /**< Erase a segment */ ERASE_MAIN = 1, /**< Erase all MAIN memory */ ERASE_ALL = 2, /**< Erase all MAIN and INFORMATION memory */ }; /* Run modes. */ enum RUN_MODES { /* Run the device. Set breakpoints (if any) are disabled */ FREE_RUN = 1, /* A single device instruction is executed. Interrupt * processing is supported */ SINGLE_STEP = 2, /* Run the device. Set breakpoints (if any) are enabled */ RUN_TO_BREAKPOINT = 3 }; /* State modes. */ enum STATE_MODES { /* The device is stopped */ STOPPED = 0, /* The device is running or is being single stepped */ RUNNING = 1, /* The device is stopped after the single step operation is * complete */ SINGLE_STEP_COMPLETE = 2, /* The device is stopped as a result of hitting an enabled * breakpoint */ BREAKPOINT_HIT = 3, /* The device is in LPMx.5 low power mode */ LPMX5_MODE = 4, /* The device woke up from LPMx.5 low power mode */ LPMX5_WAKEUP = 5 }; /* Configurations to set with MSP430_Configure. */ enum CONFIG_MODE { /* Verify data downloaded to FLASH memories */ VERIFICATION_MODE = 0, /* 4xx emulation mode */ EMULATION_MODE = 1, /* Clock control mode (on emulation stop) */ CLK_CNTRL_MODE = 2, /* Module Clock control mode (on emulation stop) */ MCLK_CNTRL_MODE = 3, /* Flash test mode for Automotive Devices - Marginal Read */ FLASH_TEST_MODE = 4, /* Allows Locked Info Mem Segment A access (if set to '1') */ LOCKED_FLASH_ACCESS = 5, /* Flash Swop mode for Automotive Devices */ FLASH_SWOP = 6, /* Trace mode in EDT file format */ EDT_TRACE_MODE = 7, /* Configure interface protocol: JTAG or Spy-bi-Wire * (see enum INTERFACE_TYPE) */ INTERFACE_MODE = 8, /* Configure a value that will be placed on the devices' * MemoryDataBus right before the device gets released from JTAG. * Useful fro supporting Emulated Hardware Breakpoints. */ SET_MDB_BEFORE_RUN = 9, /* * Configure whether RAM content should be preserved/restored * in MSP430_Erase() and MSP430_Memory() or not. * RAM_PRESERVE_MODE is set to ENABLE by default. * Usage Example for initial flash programming: * (1) MSP430_Configure(RAM_PRESERVE_MODE, DISABLE); * (2) MSP430_Erase(ERASE_ALL,..,..); * (3) MSP430_Memory(..., ..., ..., WRITE ); * (4) MSP430_Memory(..., ..., ..., READ ); * ..... Flash Programming/Download finished * (n) MSP430_Configure(RAM_PRESERVE_MODE, ENABLE); */ RAM_PRESERVE_MODE = 10, /* Configure the DLL to allow read/write/erase access to the 5xx * Bootstrap Loader (BSL) memory segments. */ UNLOCK_BSL_MODE =11, /* just used internal for the device code of L092 and C092 */ DEVICE_CODE = 12, /* set true to write the external SPI image of the L092 */ WRITE_EXTERNAL_MEMORY = 13, /* set DEBUG_LPM_X true to start debugging of LPMx.5 */ DEBUG_LPM_X = 14 }; typedef void (*DLL430_EVENTNOTIFY_FUNC) (unsigned int MsgId, unsigned int wParam, long lParam, long clientHandle); typedef struct MESSAGE_ID { ULONG uiMsgIdSingleStep; ULONG uiMsgIdBreakpoint; ULONG uiMsgIdStorage; ULONG uiMsgIdState; ULONG uiMsgIdWarning; ULONG uiMsgIdCPUStopped; } MessageID_t; typedef enum BpMode { BP_CLEAR = 0, BP_CODE = 1, BP_RANGE = 2, BP_COMPLEX = 3 } BpMode_t; typedef enum BpType { BP_MAB = 0, BP_MDB = 1, BP_REGISTER = 2 } BpType_t; typedef enum BpAccess { BP_FETCH = 0, BP_FETCH_HOLD = 1, BP_NO_FETCH = 2, BP_DONT_CARE = 3, BP_NO_FETCH_READ = 4, BP_NO_FETCH_WRITE = 5, BP_READ = 6, BP_WRITE = 7, BP_NO_FETCH_NO_DMA = 8, BP_DMA = 9, BP_NO_DMA = 10, BP_WRITE_NO_DMA = 11, BP_NO_FETCH_READ_NO_DMA = 12, BP_READ_NO_DMA = 13, BP_READ_DMA = 14, BP_WRITE_DMA = 15 } BpAccess_t; typedef enum BpOperat { BP_EQUAL = 0, BP_GREATER = 1, BP_LOWER = 2, BP_UNEQUAL = 3 } BpOperat_t; typedef enum BpRangeAction { BP_INSIDE = 0, BP_OUTSIDE = 1 } BpRangeAction_t; typedef enum BpCondition { BP_NO_COND = 0, BP_COND = 1 } BpCondition_t; typedef enum BpAction { BP_NONE = 0, BP_BRK = 1, BP_STO = 2, BP_BRK_STO = 3 } BpAction_t; typedef struct BREAKPOINT { /* Breakpoint modes */ BpMode_t bpMode; /* Breakpoint address/value (ignored for clear breakpoint) */ LONG lAddrVal; /* Breakpoint type (used for range and complex breakpoints) */ BpType_t bpType; /* Breakpoint register (used for complex breakpoints with * register-write trigger) */ LONG lReg; /* Breakpoint access (used only for range and complex * breakpoints) */ BpAccess_t bpAccess; /* Breakpoint action (break/storage) (used for range and complex * breakpoints) */ BpAction_t bpAction; /* Breakpoint operator (used for complex breakpoints) */ BpOperat_t bpOperat; /* Breakpoint mask (used for complex breakpoints) */ LONG lMask; /* Range breakpoint end address (used for range breakpoints) */ LONG lRangeEndAdVa; /* Range breakpoint action (inside/outside) (used for range * breakpoints) */ BpRangeAction_t bpRangeAction; /* Complex breakpoint: Condition available */ BpCondition_t bpCondition; /* Complex breakpoint: MDB value (used for complex breakpoints) */ ULONG lCondMdbVal; /* Complex breakpoint: Access (used for complex breakpoints) */ BpAccess_t bpCondAccess; /* Complex breakpoint: Mask Value(used for complex breakpoints) */ LONG lCondMask; /* Complex breakpoint: Operator (used for complex breakpoints) */ BpOperat_t bpCondOperat; /* Combine breakpoint: Reference of a combination handle */ WORD wExtCombine; } BpParameter_t; typedef void (*DLL430_FET_NOTIFY_FUNC) (unsigned int MsgId, unsigned long wParam, unsigned long lParam, long clientHandle); typedef enum UPDATE_STATUS_MESSAGES { /* Initializing Update Bootloader */ BL_INIT = 0, /* Erasing mapped interrupt vectors */ BL_ERASE_INT_VECTORS = 1, /* Erasing firmware memory section */ BL_ERASE_FIRMWARE = 2, /* Program new firmware */ BL_PROGRAM_FIRMWARE = 3, /* One data block of the new firmware was successfully programmed */ BL_DATA_BLOCK_PROGRAMMED = 4, /* Exit Update Bootlader and reboot firmware */ BL_EXIT = 5, /* Update was successfully finished */ BL_UPDATE_DONE = 6, /* An error occured during firmware update */ BL_UPDATE_ERROR = 7, /* An error occured during firmware update */ BL_WAIT_FOR_TIMEOUT = 8 } UPDATE_STATUS_MESSAGES_t; union DEVICE_T { /* this buffer holds the complete device information */ /* and is overlayed by the following information structure */ CHAR buffer[110]; struct { /* actually 106 Bytes */ /* The value 0xaa55. */ WORD endian; /* Identification number. */ WORD id; /* Identification string. */ BYTE string[32]; /* MAIN MEMORY (FLASH) starting address. */ WORD mainStart; /* INFORMATION MEMORY (FLASH) starting address. */ WORD infoStart; /* RAM ending address. */ WORD ramEnd; /* Number of breakpoints. */ WORD nBreakpoints; /* Emulation level. */ WORD emulation; /* Clock control level. */ WORD clockControl; /* LCD starting address. */ WORD lcdStart; /* LCD ending address. */ WORD lcdEnd; /* Vcc minimum during operation [mVolts]. */ WORD vccMinOp; /* Vcc maximum during operation [mVolts]. */ WORD vccMaxOp; /* Device has TEST/VPP. */ WORD hasTestVpp; /* RAM starting address. */ WORD ramStart; /* RAM2 starting address. */ WORD ram2Start; /* RAM2 ending address. */ WORD ram2End; /* INFO ending address. */ WORD infoEnd; /* MAIN ending address. */ ULONG mainEnd; /* BSL starting address. */ WORD bslStart; /* BSL ending address. */ WORD bslEnd; /* Number of CPU Register Trigger. */ WORD nRegTrigger; /* Number of EEM Trigger Combinations. */ WORD nCombinations; /* The MSP430 architecture (non-X, X or Xv2). */ BYTE cpuArch; /* The JTAG ID - value returned on an instruction shift. */ BYTE jtagId; /* The CoreIP ID. */ WORD coreIpId; /* The Device-ID Pointer. */ ULONG deviceIdPtr; /* The EEM Version Number. */ WORD eemVersion; /* Breakpoint Modes */ WORD nBreakpointsOptions; WORD nBreakpointsReadWrite; WORD nBreakpointsDma; /* Trigger Mask for Breakpoint */ WORD TrigerMask; /* Register Trigger modes */ WORD nRegTriggerOperations; /* MSP430 has Stage Storage */ WORD nStateStorage ; /* Numbr of cycle counters of MSP430 */ WORD nCycleCounter; /* Cycle couter modes */ WORD nCycleCounterOperations; /* Msp430 has Sqeuncer */ WORD nSequencer; /* Msp430 has FRAM Memroy */ WORD HasFramMemroy; } __attribute__((packed)); }; #endif