📄 lowlevelfuncsbw.h
字号:
/*==========================================================================*\
| |
| LowLevelFunc.h |
| |
| Low Level function prototypes, macros, and pin-to-signal assignments |
| regarding to user's hardware |
|----------------------------------------------------------------------------|
| Project: MSP430 Replicator |
| Developed using: IAR Embedded Workbench 3.40B |
|----------------------------------------------------------------------------|
| Author: STO |
| Version: 1.5 |
| Initial Version: 04-17-02 |
| Last Change: 01-21-05 |
|----------------------------------------------------------------------------|
| Version history: |
| 1.0 04/02 FRGR Initial version. |
| 1.1 04/02 FRGR Included SPI mode to speed up shifting function by 2.|
| (JTAG control now on Port5) |
| 1.2 06/02 ALB2 Formatting changes, added comments. Removed code used|
| for debug purposes during development. |
| 1.3 08/02 ALB2 Initial code release with Lit# SLAA149. |
| 1.4 09/05 SUN1 Software delays redesigned to use TimerA harware; |
| see MsDelay() routine. Added TA constant. |
| 1.5 01/05 STO Adapted for SpyBiWire |
|----------------------------------------------------------------------------|
| Designed 2002 by Texas Instruments Germany |
\*==========================================================================*/
/****************************************************************************/
/* Macros and Pin-to-Signal assignments which have to be programmed */
/* by the user. This implementation assumes use of an MSP430F149 as the host*/
/* controller and the corresponding hardware given in the application */
/* report TBD Appendix A. */
/* */
/* The following MSP430 example acts as a hint of how to generally */
/* implement a micro-controller programmer solution for the MSP430 flash- */
/* based devices. */
/****************************************************************************/
#include <msp430x14x.h>
#include "JTAGfuncSBW.h"
#ifndef __BYTEWORD__
#define __BYTEWORD__
typedef unsigned int word;
typedef unsigned char byte;
#endif
// Constants for runoff status
#define STATUS_ERROR 0 // false
#define STATUS_OK 1 // true
#define STATUS_FUSEBLOWN 2 // GetDevice returns if the security fuse is blown
#define STATUS_ACTIVE 2
#define STATUS_IDLE 3
/****************************************************************************/
/* Define section for user, related to the controller used (here MSP430F149)*/
/****************************************************************************/
#define FREQUENCY 8000 // CPU frequency in kHz
//----------------------------------------------------------------------------
// Pin-to-Signal Assignments
//----------------------------------------------------------------------------
// Constants for JTAG and supply control port pins:
#define JTAGIN P5IN // Control ports are on P5.x
#define JTAGOUT P5OUT
#define JTAGDIR P5DIR
#define JTAGSEL P5SEL
#define TMS 0x01 // P5.0 JTAG TMS input pin
#define TDO 0x04 // P5.2 JTAG TDO output pin
#define TCK 0x08 // P5.3 JTAG TCK input pin
#define TDICTRL2 0x10 // P5.4 switch TDO to TDI
#define TDICTRL1 0x20 // P5.5 connects TDI
#define TEST 0x40 // P5.6 TEST pin (20 & 28-pin devices only)
#define VCCTGT 0x80 // P5.7 Supply voltage of target board
// Constants for Error LED control port:
#define LEDOUT P1OUT // LED ports are P1.x
#define LEDDIR P1DIR
#define LEDSEL P1SEL
#define LEDRED 0x40 // P1.6 Red LED (ERROR)
#define LEDGREEN 0x80 // P1.7 Green LED (OK)
// Constants for VPP (Fuse blowing voltage) control port:
#define VPPOUT P3OUT // VPP ports are P3.x
#define VPPDIR P3DIR
#define VPPSEL P3SEL
#define VPPONTEST 0x01 // P3.0 Fuse voltage switched to TEST
#define VPPONTDI 0x02 // P3.1 Fuse voltage switched to TDI
// Constants for Setting up Timer A
#define ONEMS 0x03E8 // CCR0 delay for 1ms with a 1MHz TA clock
/*----------------------------------------------------------------------------
Macros for processing the JTAG port and Vpp pins
*/
/*----------------------------------------------------------------------------
Macros for processing the JTAG port and Vpp pins
*/
#define ScanTDO() ((JTAGIN & TDO)) // assumes TDO to be bit0
#define VPPon(x) (x == VPP_ON_TEST ? (VPPOUT |= VPPONTEST) : (VPPOUT |= VPPONTDI))
#define VPPoff() ((VPPOUT) &= (~(VPPONTDI | VPPONTEST)))
/*----------------------------------------------------------------------------
Macros to control spy-by-wire-IF
*/
#define SBWDATO /*TDI*/ 0x04 // P5.2 JTAG data_out pin in SBW mode
#define SBWDATI /*TDO*/ 0x04 // P5.2 JTAG data in pin in SBW mode
#define SBWCLK /*TCK*/ 0x08 // P5.3 JTAG clock pin in SBW mode
#define TMSH JTAGOUT |= SBWDATO; JTAGOUT &= ~SBWCLK; JTAGOUT |= SBWCLK; // TMS = 1
#define TMSL JTAGOUT &= ~SBWDATO; JTAGOUT &= ~SBWCLK; JTAGOUT |= SBWCLK; // TMS = 0
#define TMSLDH JTAGOUT &= ~SBWDATO; JTAGOUT &= ~SBWCLK; JTAGOUT |= SBWDATO; JTAGOUT |= SBWCLK; // TMS = 0, then TCLK(TDI) immediately = 1
#define TDIH JTAGOUT |= SBWDATO; JTAGOUT &= ~SBWCLK; JTAGOUT |= SBWCLK; // TDI = 1
#define TDIL JTAGOUT &= ~SBWDATO; JTAGOUT &= ~SBWCLK; JTAGOUT |= SBWCLK; // TDI = 0
#define TDOsbw JTAGDIR &= ~SBWDATO; JTAGOUT &= ~SBWCLK; JTAGOUT |= SBWCLK; JTAGDIR |= SBWDATO; // TDO cycle without reading TDO
#define TDO_RD JTAGDIR &= ~SBWDATO; JTAGOUT &= ~SBWCLK; _NOP(); tdo_bit = JTAGIN; JTAGOUT |= SBWCLK; JTAGDIR |= SBWDATO; // TDO cycle with TDO read
#define SetSBWTCK() (JTAGOUT |= SBWCLK)
#define ClrSBWTCK() (JTAGOUT &= ~SBWCLK)
#define SetSBWTDIO() (JTAGOUT |= SBWDATO)
#define ClrSBWTDIO() (JTAGOUT &= ~SBWDATO)
/*----------------------------------------------------------------------------
Definition of global variables
*/
extern byte TCLK_saved; // holds the last value of TCLK before entering a JTAG sequence
/*----------------------------------------------------------------------------
Low Level function prototypes
*/
void TMSL_TDIL(void);
void TMSH_TDIL(void);
void TMSL_TDIH(void);
void TMSH_TDIH(void);
void TMSL_TDIH_TDOrd(void);
void TMSL_TDIL_TDOrd(void);
void TMSH_TDIH_TDOrd(void);
void TMSH_TDIL_TDOrd(void);
void TCLKs_sbw(word clks);
void ClrTCLK_sbw(void);
#define ClrTCLK() ClrTCLK_sbw()
void SetTCLK_sbw(void);
#define SetTCLK() SetTCLK_sbw()
void TCLKstrobes_sbw(word Amount);
#define TCLKstrobes(n) TCLKstrobes_sbw(n)
void MsDelay(word milliseconds); // millisecond delay loop, uses Timer_A
void InitController(void);
void InitTarget(void);
void ReleaseTarget(void);
word Shift_sbw(word Format, word Data); // used for IR- as well as DR-shift
//void TDOisInput(void);
void ShowStatus(word Status, word Index);
void TriggerPulse(word Mode); // optional for test
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -