⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 device.h

📁 ARM核的边界扫描(JTAG)的实现,此代码在s3c2400上测试通过
💻 H
字号:
//////////////////////////////////////////////////////////////////////////////
// Device.h                                                                 //
//////////////////////////////////////////////////////////////////////////////
#ifndef _DEVICE_H
#define _DEVICE_H

//////////////////////////////////////////////////////////////////////////////
// Includes                                                                 //
//////////////////////////////////////////////////////////////////////////////
#include "JTAG.h"		// for some inline tests
#include <stdio.h>		// for debug output

//////////////////////////////////////////////////////////////////////////////
// Device                                                                   //
//////////////////////////////////////////////////////////////////////////////
namespace Device
{

//////////////////////////////////////////////////////////////////////////////
// Defines                                                                  //
//////////////////////////////////////////////////////////////////////////////
// instructions
#define NOP				0xe1a00000
#define LDR_R0__R0_		0xe5900000

enum Commands
{
	EXTEST	=		0x0,			// selects boundary scan register. system-logic signals are captured. new data is updated to system-logic signals.
	SCAN_N	=		0x2,			// selects scan chain register. default=3 ?
	SAMPLE	=		0x3,			// selects boundary scan register. system-logic signals are captured. / make snapshot of boundary scan
	PRELOAD	=		0x3,			// same as SAMPLE
	RESTART	=		0x4,			// restart processor on exit from debug state
	CLAMP	=		0x5,			// state of all output signals is defined by values previously loaded into the currently-loaded scan chain. chain 0 should be selected.
	HIGHZ	=		0x7,			// output signals are driven to high-impedance state
	CLAMPZ	=		0x9,			// all 3-state outputs are made inactive but data supplied the outputs is derived from scan-cells. chain 0 should be selected.
	INTEST	=		0xC,			// selects boundary scan register. internal core-logic signals are captured. new data is updated to system-logic signals.
	IDCODE	=		0xE,			// selects ID register
	BYPASS	=		0xF,			// selects bypass register
};

enum Chains
{
	IBS_CHAIN,			// ARM9TDMI macrocell scan test (INTEST)
	DEBUG_CHAIN,		// Debug
	EICE_CHAIN,			// EmbeddedICE programming
	EBS_CHAIN,			// External boundary scan (EXTEST)
	PA_TAG_RAM_CHAIN,	// Physical address TAG RAM
	RESERVED5,			// Reserved
	ETM_CHAIN,			// Embedded Trace Macrocell
	CP15_CHAIN=15,		// memory config: cache, MMU
	//16..31: unassigned
};

//////////////////////////////////////////////////////////////////////////////
// Debug                                                                    //
//////////////////////////////////////////////////////////////////////////////
//#define DEBUG_

//////////////////////////////////////////////////////////////////////////////
// Prototypes                                                               //
//////////////////////////////////////////////////////////////////////////////
unsigned int Reverse(unsigned int data);

//////////////////////////////////////////////////////////////////////////////
// Typedefs                                                                 //
//////////////////////////////////////////////////////////////////////////////
#pragma pack(1)

//////////////////////////////////////////////////////////////////////////////
// Chain                                                                    //
//////////////////////////////////////////////////////////////////////////////
class Chain
{
	public:
		operator void *() { return (void *)this; }
};

#include "IDChain.h"
#include "DebugChain.h"

#pragma pack()

//////////////////////////////////////////////////////////////////////////////
// Variables                                                                //
//////////////////////////////////////////////////////////////////////////////

// -1 is non-default, not used or whatever
extern int commandChain[];
extern int commandDataLength[];
extern int chainLength[];
extern const char *sCommands[];
extern const char *sChains[];
//unsigned int regs[16];		// r0..r15//unsigned int cpsr;//EBS ebs;extern IDChain id;
extern ETMChain etm;
extern EICEChain eice;
extern DebugChain debug;
//////////////////////////////////////////////////////////////////////////////
// Prototypes                                                               //
//////////////////////////////////////////////////////////////////////////////
//unsigned int GetMappedValue(const unsigned char *ebs, const unsigned short *map, int bits);
//void SetMappedValue(unsigned char *ebs, const unsigned short *map, int bits, unsigned int data);

int Init();
void Close();		// for example: atexit(Device::Close);

//void Sample();

//void SetAddress(unsigned int address);
//unsigned int GetAddress();

void Chain(int n);

int Halt();
int Reset();
int Test();

//unsigned int ReadRegister(int regnum);
//void WriteRegister(int regnum, unsigned int data);


/*
these pins are configurable:

ADDR16..24/GPA1..9
DATA16..31/GPB0..15/nXBACK,nXBREQ,TCLK1,TXD1,RXD1,nCTS1,nRTS1,-,-,I2SSDI,nSS,-,-,-,-,-
CLKOUT/GPF6
SPIMOSI/GPG8/IICSCL
SPIMISO/GPG7/IICSDA
SPICLK/GPG9/MMCCLK
MMCCLK/GPG4/I2CSDI
MMCCMD/GPG5/IICSDA
I2SSDO/GPG3/I2SSDI
CDCLK/GPG2
I2SSCLK/GPG1
I2SLRCK/GPG0
nXDREQ0/GPE10
nXDACK0/GPE8
nXDREQ1/GPE11/nXBREQ
nXDACK1/GPE9/nXBACK
TCLK0/GPD9
TOUT3/GPD8
TOUT2/GPD7
TOUT1/GPD6
TOUT0/GPD5
CLKOUT/GPF6
nCAS2:nSCAS
nCAS1/GPA12
nCAS0/GPA11
ADDR0/GPA0
EINT0/GPE0
EINT1/GPE1/nSS
EINT2/GPE2/I2SSDI
EINT3/GPE3/nCTS1
EINT4/GPE4/nRTS1
EINT5/GPE5/TCLK1
EINT6/GPE6
EINT7/GPE7
SCKE/GPA10
nWAIT/GPD10
nGCS7:nSCS1:nRAS1
nGCS6:nSCS0:nRAS0
nGCS5:GPA17
nGCS4:GPA16
nGCS3:GPA15
nGCS2:GPA14
nGCS1:GPA13
nBE0:nWBE0:DQM0
nBE1:nWBE1:DQM1
nBE2:nWBE2:DQM2
nBE3:nWBE3:DQM3
nCAS3:nSRAS
RXD1/GPF1/IICSDA
TXD1/GPF3/IICSCL
RXD0/GPF0
TXD0/GPF2
nRTS0/GPF4/nXBACK
nCTS0/GPF5/nXBREQ
DN1/PDN0
DP1/PDP0
VD0..15/GPC0..15
VFRAME/GPD0
VM/GPD1
VLINE/GPD2
VCLK/GPD3
LEND/GPD4
*/

//////////////////////////////////////////////////////////////////////////////
// ~Device                                                                  //
//////////////////////////////////////////////////////////////////////////////
}

#endif // _DEVICE_H

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -