📄 jtag.cpp
字号:
readData += ReadBit() << bit;
}
readData += ReadLastBit() << (bits-1); // do last bit
NextState(TMS_UPDATE);
NextState(TMS_IDLE);
return readData;
}
//////////////////////////////////////////////////////////////////////////////
// Read //
//////////////////////////////////////////////////////////////////////////////
void Read(void *readData)
{
NextState(TMS_SELECT);
NextState(TMS_CAPTURE);
NextState(TMS_SHIFT);
unsigned int *pReadData = (unsigned int *)readData;
int bits = dataLength;
//printf("Read %d\n", bits);
while (bits)
{
unsigned int tmpReadData = 0;
for (int bit=0; bit<32; bit++)
{
if (!bits) break; // do all bits
if (--bits)
tmpReadData += ReadBit() << bit;
else
tmpReadData += ReadLastBit() << bit; // do last bit
}
*pReadData++ = tmpReadData;
}
NextState(TMS_UPDATE);
NextState(TMS_IDLE);
}
//////////////////////////////////////////////////////////////////////////////
// Read //
//////////////////////////////////////////////////////////////////////////////
void Read(unsigned char *readData)
{
NextState(TMS_SELECT);
NextState(TMS_CAPTURE);
NextState(TMS_SHIFT);
int bits = dataLength;
//printf("Read %d\n", bits);
while (--bits)
{
*readData++ = ReadBit();
}
*readData++ = ReadLastBit(); // do last bit
NextState(TMS_UPDATE);
NextState(TMS_IDLE);
}
//////////////////////////////////////////////////////////////////////////////
// Write //
//////////////////////////////////////////////////////////////////////////////
void Write(unsigned int writeData)
{
NextState(TMS_SELECT);
NextState(TMS_CAPTURE);
NextState(TMS_SHIFT);
int bits = dataLength;
//printf("Write %d\n", bits);
while (--bits) // do all except last bit
{
WriteBit(writeData & 1);
writeData >>= 1;
}
WriteLastBit(writeData & 1); // do last bit
NextState(TMS_UPDATE);
NextState(TMS_IDLE);
}
//////////////////////////////////////////////////////////////////////////////
// Write //
//////////////////////////////////////////////////////////////////////////////
void Write(const void *writeData)
{
NextState(TMS_SELECT);
NextState(TMS_CAPTURE);
NextState(TMS_SHIFT);
int bits = dataLength;
//printf("Write %d\n", bits);
const unsigned int *pWriteData = (const unsigned int *)writeData;
while (bits)
{
unsigned int tmpWriteData = *pWriteData++;
for (int intbits=32; intbits; intbits--)
{
if (!bits) break; // do all bits
if (--bits)
WriteBit(tmpWriteData & 1);
else
WriteLastBit(tmpWriteData & 1); // do last bit
tmpWriteData >>= 1;
}
}
NextState(TMS_UPDATE);
NextState(TMS_IDLE);
}
//////////////////////////////////////////////////////////////////////////////
// Write //
//////////////////////////////////////////////////////////////////////////////
void Write(const unsigned char *writeData)
{
NextState(TMS_SELECT);
NextState(TMS_CAPTURE);
NextState(TMS_SHIFT);
int bits = dataLength;
//printf("Write %d\n", bits);
while (--bits) // do all except last bit
{
WriteBit(*writeData++);
}
WriteLastBit(*writeData++); // do last bit
NextState(TMS_UPDATE);
NextState(TMS_IDLE);
}
//////////////////////////////////////////////////////////////////////////////
// Transfer //
//////////////////////////////////////////////////////////////////////////////
unsigned int Transfer(unsigned int writeData)
{
NextState(TMS_SELECT);
NextState(TMS_CAPTURE);
NextState(TMS_SHIFT);
int bits = dataLength;
//printf("Transfer %d\n", bits);
unsigned int readData = 0;
for (int bit=0; bit<bits-1; bit++) // do all except last bit
{
readData += TransferBit(writeData & 1) << bit;
}
readData += TransferLastBit(writeData & 1) << (bits-1); // do last bit
NextState(TMS_UPDATE);
NextState(TMS_IDLE);
return readData;
}
//////////////////////////////////////////////////////////////////////////////
// Transfer //
//////////////////////////////////////////////////////////////////////////////
void Transfer(const void *writeData, void *readData)
{
NextState(TMS_SELECT);
NextState(TMS_CAPTURE);
NextState(TMS_SHIFT);
const unsigned int *pWriteData = (const unsigned int *)writeData;
unsigned int *pReadData = (unsigned int *)readData;
int bits = dataLength;
//printf("Transfer %d\n", bits);
while (bits)
{
unsigned int tmpReadData = 0;
unsigned int tmpWriteData = *pWriteData++;
for (int bit=0; bit<32; bit++)
{
if (!bits) break; // do all bits
if (--bits)
tmpReadData += TransferBit(tmpWriteData & 1) << bit;
else
tmpReadData += TransferLastBit(tmpWriteData & 1) << bit; // do last bit
tmpWriteData >>= 1;
}
*pReadData++ = tmpReadData;
}
NextState(TMS_UPDATE);
NextState(TMS_IDLE);
}
//////////////////////////////////////////////////////////////////////////////
// Transfer //
//////////////////////////////////////////////////////////////////////////////
void Transfer(void *transferData)
{
NextState(TMS_SELECT);
NextState(TMS_CAPTURE);
NextState(TMS_SHIFT);
unsigned int *pTransferData = (unsigned int *)transferData;
int bits = dataLength;
//printf("Transfer %d\n", bits);
while (bits)
{
unsigned int tmpReadData = 0;
unsigned int tmpWriteData = *pTransferData;
for (int bit=0; bit<32; bit++)
{
if (!bits) break; // do all bits
if (--bits)
tmpReadData += TransferBit(tmpWriteData & 1) << bit;
else
tmpReadData += TransferLastBit(tmpWriteData & 1) << bit; // do last bit
tmpWriteData >>= 1;
}
*pTransferData++ = tmpReadData;
}
NextState(TMS_UPDATE);
NextState(TMS_IDLE);
}
//////////////////////////////////////////////////////////////////////////////
// Transfer //
//////////////////////////////////////////////////////////////////////////////
void Transfer(const unsigned char *writeData, unsigned char *readData)
{
NextState(TMS_SELECT);
NextState(TMS_CAPTURE);
NextState(TMS_SHIFT);
int bits = dataLength;
//printf("Transfer %d\n", bits);
while (--bits) // do all except last bit
{
*readData++ = TransferBit(*writeData++);
}
*readData++ = TransferLastBit(*writeData++); // do last bit
NextState(TMS_UPDATE);
NextState(TMS_IDLE);
}
//////////////////////////////////////////////////////////////////////////////
// Transfer //
//////////////////////////////////////////////////////////////////////////////
void Transfer(unsigned char *data)
{
NextState(TMS_SELECT);
NextState(TMS_CAPTURE);
NextState(TMS_SHIFT);
int bits = dataLength;
//printf("Transfer %d\n", bits);
while (--bits) // do all except last bit
{
*data = TransferBit(*data);
data++;
}
*data = TransferLastBit(*data); // do last bit
NextState(TMS_UPDATE);
NextState(TMS_IDLE);
}
//////////////////////////////////////////////////////////////////////////////
// Close //
//////////////////////////////////////////////////////////////////////////////
void Close()
{
printf("JTAG::Close\n");
Reset();
OUTP(1,1,1);
//_outp(PORT+2, 0); // ~2G
}
//////////////////////////////////////////////////////////////////////////////
// InitGiveIO //
//////////////////////////////////////////////////////////////////////////////
// activate GIVEIO driver for direct port access
int InitGiveIO()
{
OSVERSIONINFO osvi;
osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
GetVersionEx(&osvi);
if (osvi.dwPlatformId != VER_PLATFORM_WIN32_NT) return 0;
HANDLE h = CreateFile("\\\\.\\giveio", GENERIC_READ, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
if (h == INVALID_HANDLE_VALUE) { fprintf(stderr, "Error opening giveio driver!\n"); return -1; }
CloseHandle(h);
return 0;
}
//////////////////////////////////////////////////////////////////////////////
// Init //
//////////////////////////////////////////////////////////////////////////////
int Init()
{
// init direct I/O access
if (InitGiveIO()) return -1;
// init port
OUTP(1,1,1);
_outp(PORT+2, 2); // ~2G
// test JTAG interface
/*
if ((_inp(PORT+1) & (1<<6 | 1<<5)) != (1<<6 | 1<<5)) { fprintf(stderr, "Cannot detect JTAG interface or is unpowered!\n"); return -1; }
_outp(PORT, 0xFF ^ (1<<5 | 1<<7));
if (_inp(PORT+1) & (1<<6 | 1<<5)) { fprintf(stderr, "Cannot detect JTAG interface or is unpowered!\n"); return -1; }
*/
// reset
ResetToIdle();
// default command/chain after reset
currentCommand = -1; //Device::IDCODE;
currentDataChain = -1; //Device::EBS_CHAIN;
//dataLength = ;
return 0;
}
//////////////////////////////////////////////////////////////////////////////
// ~Namespace //
//////////////////////////////////////////////////////////////////////////////
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -