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

📄 jtag.c

📁 深圳市微逻辑电子有限公司 巨果&#8226 Kingmos&reg 系统核心
💻 C
字号:
/* - 16/05/2002 [Jaewook Cheong] : first writing for S3C2410                 *//*****************************************************************************//*	    [[ JTAG PIN assignment	]]                                   *//*---------------------------------------------------------------------------*//* JTAG Pin          Parallel Port Pin                                       *//*---------------------------------------------------------------------------*//*   TCK---------------->DATA0   (2)                                         *//*   TDI---------------->DATA1   (2)                                         *//*   TMS---------------->DATA2   (2)                                         *//*   TDO---------------->STATUS7 (11)                                        *//*****************************************************************************/  #include <stdio.h>#include <stdlib.h>#include <string.h>#include "def.h"#include "jtag.h"#include "ppt.h"//No delay#define JTAG_DELAY()		    //delay=0 //#define JTAG_DELAY() Delay(1)	    //delay=delayLoopCountvoid JTAG_Reset(void);void JTAG_RunTestldleState( void );void JTAG_RunTestldleState( void ){	JTAG_Reset();	JTAG_SET(TDI_H|TMS_L|TCK_L);JTAG_DELAY(); // Why 3 times?	JTAG_SET(TDI_H|TMS_L|TCK_H);JTAG_DELAY(); // Run-Test/Idle Status	JTAG_SET(TDI_H|TMS_L|TCK_L);JTAG_DELAY();	JTAG_SET(TDI_H|TMS_L|TCK_H);JTAG_DELAY(); // Run-Test/Idle Status	JTAG_SET(TDI_H|TMS_L|TCK_L);JTAG_DELAY();	JTAG_SET(TDI_H|TMS_L|TCK_H);JTAG_DELAY(); // Run-Test/Idle Status}void  JTAG_ShiftIRState(char *wrIR){	int size;	int i;	int tdi;	JTAG_SET(TDI_H|TMS_H|TCK_L);JTAG_DELAY();	JTAG_SET(TDI_H|TMS_H|TCK_H);JTAG_DELAY(); 	// Select-DR-Scan 		JTAG_SET(TDI_H|TMS_H|TCK_L);JTAG_DELAY();	JTAG_SET(TDI_H|TMS_H|TCK_H);JTAG_DELAY(); 	//Select-IR-Scan 	JTAG_SET(TDI_H|TMS_L|TCK_L);JTAG_DELAY();	JTAG_SET(TDI_H|TMS_L|TCK_H);JTAG_DELAY(); 	//Capture-IR 	JTAG_SET(TDI_H|TMS_L|TCK_L);JTAG_DELAY();	JTAG_SET(TDI_H|TMS_L|TCK_H);JTAG_DELAY(); 	//Shift-IR 	size=strlen(wrIR);		for( i=0;i<(size-1);i++)	{	    tdi= (wrIR[i] ==HIGH) ? TDI_H:TDI_L;	    JTAG_SET(tdi|TMS_L|TCK_L);JTAG_DELAY();	    JTAG_SET(tdi|TMS_L|TCK_H);JTAG_DELAY(); 	//Shift-IR 	}	tdi=(wrIR[i] ==HIGH) ? TDI_H:TDI_L; //i=3	JTAG_SET(tdi|TMS_H|TCK_L);JTAG_DELAY();	JTAG_SET(tdi|TMS_H|TCK_H);JTAG_DELAY(); 	//Exit1-IR	JTAG_SET(TDI_H|TMS_H|TCK_L);JTAG_DELAY();	JTAG_SET(TDI_H|TMS_H|TCK_H);JTAG_DELAY(); 	//Update-IR	JTAG_SET(TDI_H|TMS_L|TCK_L);JTAG_DELAY();	JTAG_SET(TDI_H|TMS_L|TCK_H);JTAG_DELAY(); 	//Run-Test/Idle}void  JTAG_ShiftDRState(char *wrDR, char *rdDR){	int size;	int i;	int tdi;	JTAG_SET(TDI_H|TMS_H|TCK_L);JTAG_DELAY();	JTAG_SET(TDI_H|TMS_H|TCK_H);JTAG_DELAY(); 	//Select-DR-Scan 	JTAG_SET(TDI_H|TMS_L|TCK_L);JTAG_DELAY();	JTAG_SET(TDI_H|TMS_L|TCK_H);JTAG_DELAY(); 	//Capture-DR 	JTAG_SET(TDI_H|TMS_L|TCK_L);JTAG_DELAY();	JTAG_SET(TDI_H|TMS_L|TCK_H);JTAG_DELAY(); 	//Shift-DR 	size=strlen(wrDR);	for(i=0;i<(size-1);i++)	{	    tdi=(wrDR[i]==HIGH) ? TDI_H:TDI_L;	    JTAG_SET(tdi|TMS_L|TCK_L);JTAG_DELAY();	    JTAG_SET(tdi|TMS_L|TCK_H);JTAG_DELAY(); 	//Shift-DR 	    rdDR[i]=JTAG_GET_TDO();	}	tdi=(wrDR[i]==HIGH) ? TDI_H:TDI_L;	//i=S3C2410_MAX_CELL_INDEX	JTAG_SET(tdi|TMS_H|TCK_L);JTAG_DELAY();	JTAG_SET(tdi|TMS_H|TCK_H);JTAG_DELAY(); 	//Exit1-DR	rdDR[i] = JTAG_GET_TDO();		JTAG_SET(TDI_H|TMS_H|TCK_L);JTAG_DELAY();	JTAG_SET(TDI_H|TMS_H|TCK_H);JTAG_DELAY(); 	//Update-DR	//Run-Test/Idle	JTAG_SET(TDI_H|TMS_L|TCK_L);JTAG_DELAY();	JTAG_SET(TDI_H|TMS_L|TCK_H);JTAG_DELAY(); 	//Update-DR}void  JTAG_ShiftDRStateNoTdo(char *wrDR){	int size;	int i;	int tdi;	JTAG_SET(TDI_H|TMS_H|TCK_L);JTAG_DELAY();	JTAG_SET(TDI_H|TMS_H|TCK_H);JTAG_DELAY(); 	//Select-DR-Scan 	JTAG_SET(TDI_H|TMS_L|TCK_L);JTAG_DELAY();	JTAG_SET(TDI_H|TMS_L|TCK_H);JTAG_DELAY(); 	//Capture-DR 	JTAG_SET(TDI_H|TMS_L|TCK_L);JTAG_DELAY();	JTAG_SET(TDI_H|TMS_L|TCK_H);JTAG_DELAY(); 	//Shift-DR 	size=strlen(wrDR);	for(i=0;i<(size-1);i++)	{	    tdi=(wrDR[i]==HIGH) ? TDI_H:TDI_L;	    JTAG_SET(tdi|TMS_L|TCK_L);JTAG_DELAY();	    JTAG_SET(tdi|TMS_L|TCK_H);JTAG_DELAY(); 	//Shift-DR 	    //rdDR[i]=JTAG_GET_TDO();	}	tdi=(wrDR[i]==HIGH) ? TDI_H:TDI_L;	//i=S3C2410_MAX_CELL_INDEX	JTAG_SET(tdi|TMS_H|TCK_L);JTAG_DELAY();	JTAG_SET(tdi|TMS_H|TCK_H);JTAG_DELAY(); 	//Exit1-DR	//rdDR[i] = JTAG_GET_TDO();	JTAG_SET(TDI_H|TMS_H|TCK_L);JTAG_DELAY();	JTAG_SET(TDI_H|TMS_H|TCK_H);JTAG_DELAY(); 	//Update-DR	//Run-Test/Idle	JTAG_SET(TDI_H|TMS_L|TCK_L);JTAG_DELAY();	JTAG_SET(TDI_H|TMS_L|TCK_H);JTAG_DELAY(); 	//Update-DR}void JTAG_Reset(void){	JTAG_SET(TDI_H|TMS_H|TCK_L);JTAG_DELAY();	JTAG_SET(TDI_H|TMS_H|TCK_H);JTAG_DELAY();	JTAG_SET(TDI_H|TMS_H|TCK_L);JTAG_DELAY();	JTAG_SET(TDI_H|TMS_H|TCK_H);JTAG_DELAY();	JTAG_SET(TDI_H|TMS_H|TCK_L);JTAG_DELAY();	JTAG_SET(TDI_H|TMS_H|TCK_H);JTAG_DELAY();	JTAG_SET(TDI_H|TMS_H|TCK_L);JTAG_DELAY();	JTAG_SET(TDI_H|TMS_H|TCK_H);JTAG_DELAY();		JTAG_SET(TDI_H|TMS_H|TCK_L);JTAG_DELAY();	JTAG_SET(TDI_H|TMS_H|TCK_H);JTAG_DELAY();	JTAG_SET(TDI_H|TMS_H|TCK_L);JTAG_DELAY();	JTAG_SET(TDI_H|TMS_H|TCK_H);JTAG_DELAY();}void JTAG_ReadId(void){	int i;	char id[32];	U32 id32;		JTAG_Reset();	JTAG_SET(TDI_H|TMS_L|TCK_L);JTAG_DELAY(); // Why 4 times?	JTAG_SET(TDI_H|TMS_L|TCK_H);JTAG_DELAY(); // Run-Test/Idle Status	JTAG_SET(TDI_H|TMS_L|TCK_L);JTAG_DELAY();	JTAG_SET(TDI_H|TMS_L|TCK_H);JTAG_DELAY(); // Run-Test/Idle Status	JTAG_SET(TDI_H|TMS_L|TCK_L);JTAG_DELAY();	JTAG_SET(TDI_H|TMS_L|TCK_H);JTAG_DELAY(); // Run-Test/Idle Status	JTAG_SET(TDI_H|TMS_L|TCK_L);JTAG_DELAY();	JTAG_SET(TDI_H|TMS_L|TCK_H);JTAG_DELAY(); // Run-Test/Idle Status  	JTAG_SET(TDI_H|TMS_H|TCK_L);JTAG_DELAY();	JTAG_SET(TDI_H|TMS_H|TCK_H);JTAG_DELAY(); // Select-DR Scan Status		JTAG_SET(TDI_H|TMS_H|TCK_L);JTAG_DELAY();	JTAG_SET(TDI_H|TMS_H|TCK_H);JTAG_DELAY(); // Select-IR Scan Status	JTAG_SET(TDI_H|TMS_L|TCK_L);JTAG_DELAY();	JTAG_SET(TDI_H|TMS_L|TCK_H);JTAG_DELAY(); // Capture-IR Status	JTAG_SET(TDI_H|TMS_L|TCK_L);JTAG_DELAY();	JTAG_SET(TDI_H|TMS_L|TCK_H);JTAG_DELAY(); // Shift-IR Status	//S3C2410 IDCODE Instruction "1110"	JTAG_SET(TDI_L|TMS_L|TCK_L);JTAG_DELAY();	JTAG_SET(TDI_L|TMS_L|TCK_H);JTAG_DELAY(); // '0'	JTAG_SET(TDI_H|TMS_L|TCK_L);JTAG_DELAY();	JTAG_SET(TDI_H|TMS_L|TCK_H);JTAG_DELAY(); // '1'	JTAG_SET(TDI_H|TMS_L|TCK_L);JTAG_DELAY();	JTAG_SET(TDI_H|TMS_L|TCK_H);JTAG_DELAY(); // '1'	JTAG_SET(TDI_H|TMS_H|TCK_L);JTAG_DELAY();	JTAG_SET(TDI_H|TMS_H|TCK_H);JTAG_DELAY(); // '1', //Exit1-IR	JTAG_SET(TDI_H|TMS_H|TCK_L);JTAG_DELAY();	JTAG_SET(TDI_H|TMS_H|TCK_H);JTAG_DELAY(); // Update_IR	JTAG_SET(TDI_H|TMS_H|TCK_L);JTAG_DELAY();	JTAG_SET(TDI_H|TMS_H|TCK_H);JTAG_DELAY(); // Select-DR-Scan	JTAG_SET(TDI_H|TMS_L|TCK_L);JTAG_DELAY();	JTAG_SET(TDI_H|TMS_L|TCK_H);JTAG_DELAY(); //Capture-DR	JTAG_SET(TDI_H|TMS_L|TCK_L);JTAG_DELAY();	JTAG_SET(TDI_H|TMS_L|TCK_H);JTAG_DELAY(); //Shift-DR// 	Read IDcode..	for( i=0 ; i<=30 ; i++)	{	    JTAG_SET(TDI_H|TMS_L|TCK_L);JTAG_DELAY();	    JTAG_SET(TDI_H|TMS_L|TCK_H);JTAG_DELAY(); //Shift-DR	    id[i]=(char)JTAG_GET_TDO();	}	JTAG_SET(TDI_H|TMS_H|TCK_L);JTAG_DELAY();	JTAG_SET(TDI_H|TMS_H|TCK_H);JTAG_DELAY(); //Exit1_DR	id[i]=(char)JTAG_GET_TDO();	JTAG_SET(TDI_H|TMS_H|TCK_L);JTAG_DELAY();	JTAG_SET(TDI_H|TMS_H|TCK_H);JTAG_DELAY(); // Update_DR	JTAG_SET(TDI_H|TMS_L|TCK_L);JTAG_DELAY(); // Why 3 times?		JTAG_SET(TDI_H|TMS_L|TCK_H);JTAG_DELAY(); // Run-Test/Idle	JTAG_SET(TDI_H|TMS_L|TCK_L);JTAG_DELAY();	JTAG_SET(TDI_H|TMS_L|TCK_H);JTAG_DELAY(); // Run-Test/Idle	JTAG_SET(TDI_H|TMS_L|TCK_L);JTAG_DELAY();	JTAG_SET(TDI_H|TMS_L|TCK_H);JTAG_DELAY(); // Run-Test/Idle	id32=0;                          	for(i=31 ;i>=0 ;i--)	{	    if(id[i]==HIGH)		id32|=(1<<i);	}	switch(id32)	{	case 0x0032409d: //S3C2410X is detected.	    printf("> S3C2410X(ID=0x%08x) is detected.\n",id32);	    break;	default:	    printf("ERROR: No CPU is detected(ID=0x%08x).\n",id32);	    break;	}}int delayLoopCount;void Delay(int count) // unit = 100ns{        int i,j;    for(i=0 ; i<count ; i++)        for(j=0;j<delayLoopCount;j++);}

⌨️ 快捷键说明

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