📄 device.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 + -