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

📄 jp1.c

📁 嵌入式开发板连接程序源码
💻 C
📖 第 1 页 / 共 3 页
字号:
/* Initialize a new connection to the or1k board, and make sure we are   really connected.  */static intjtag_init () {  int tmp, i;  unsigned int npc, ppc, r1, insn, result;  current_chain = -1;  jp1_reset_JTAG ();#if 0#define MC_BASE_ADD     0x60000000#define MC_CSR_VAL      0x0f300300#define MC_MASK_VAL     0x000000e0#define FLASH_BASE_ADD  0x04000000#define FLASH_TMS_VAL   0x0010a10a#define SDRAM_BASE_ADD  0x00000000#define SDRAM_TMS_VAL   0x07248230  jtag_set_chain (SC_REGISTER);  jtag_write_reg (4, 0x00000001);  jtag_set_chain (SC_WISHBONE);  jtag_write_reg (MC_BASE_ADD + MC_CSC(0), (((FLASH_BASE_ADD & 0xffff0000) >> 5) | 0x25));  jtag_write_reg (MC_BASE_ADD + MC_TMS(0), FLASH_TMS_VAL);  jtag_write_reg (MC_BASE_ADD + MC_BA_MASK, MC_MASK_VAL);  jtag_write_reg (MC_BASE_ADD + MC_CSR, MC_CSR_VAL);  jtag_write_reg (MC_BASE_ADD + MC_TMS(1), SDRAM_TMS_VAL);  jtag_write_reg (MC_BASE_ADD + MC_CSC(1), (((SDRAM_BASE_ADD & 0xffff0000) >> 5) | 0x0411));  sleep(1);#endif#if 1#define RAM_BASE 0x00000000  /* Stall risc */  jtag_set_chain (SC_REGISTER);  jtag_write_reg (4, 0x00000001);  jtag_set_chain (SC_WISHBONE);  jtag_write_reg (RAM_BASE + 0x00, 0x9c200000);                                /* l.addi  r1,r0,0x0       */  jtag_write_reg (RAM_BASE + 0x04, 0x18400000 + (RAM_BASE >> 16));             /* l.movhi r2,0x4000       */  jtag_write_reg (RAM_BASE + 0x08, 0xa8420000 + ((RAM_BASE + 0x30) & 0xffff)); /* l.ori   r2,r2,0x0000    */  jtag_write_reg (RAM_BASE + 0x0c, 0x9c210001);                                /* l.addi  r1,r1,1         */  jtag_write_reg (RAM_BASE + 0x10, 0x9c210001);                                /* l.addi  r1,r1,1         */  jtag_write_reg (RAM_BASE + 0x14, 0xd4020800);                                /* l.sw    0(r2),r1        */  jtag_write_reg (RAM_BASE + 0x18, 0x9c210001);                                /* l.addi  r1,r1,1         */  jtag_write_reg (RAM_BASE + 0x1c, 0x84620000);                                /* l.lwz   r3,0(r2)        */  jtag_write_reg (RAM_BASE + 0x20, 0x03fffffb);                                /* l.j     loop2           */  jtag_write_reg (RAM_BASE + 0x24, 0xe0211800);                                /* l.add   r1,r1,r3        */  jtag_write_reg (RAM_BASE + 0x24, 0xe0211800);                                /* l.add   r1,r1,r3        */  /* Enable exceptions */  jtag_set_chain (SC_RISC_DEBUG);  jtag_write_reg ((0 << 11) + 17, 0x01);  /* Trap causes stall */  jtag_set_chain (SC_RISC_DEBUG);  jtag_write_reg ((6 << 11) + 20, 0x2000);  /* Set PC */  jtag_set_chain (SC_RISC_DEBUG);  jtag_write_reg ((0 << 11) + 16, RAM_BASE);  /* Set step bit */  jtag_set_chain (SC_RISC_DEBUG);  jtag_write_reg ((6 << 11) + 16, 1 << 22);  for (i = 0; i < 10; i++)    {      /* Unstall */      jtag_set_chain (SC_REGISTER);      jtag_write_reg (4, 0x00000000);      jtag_set_chain (SC_RISC_DEBUG);    }  /* Read NPC */  jtag_set_chain (SC_RISC_DEBUG);  npc = jtag_read_reg ((0 << 11) + 16);  npc = jtag_read_reg ((0 << 11) + 16);  /* Read PPC */  jtag_set_chain (SC_RISC_DEBUG);  ppc = jtag_read_reg ((0 << 11) + 18);  ppc = jtag_read_reg ((0 << 11) + 18);  /* Read R1 */  jtag_set_chain (SC_RISC_DEBUG);  r1 = jtag_read_reg (0x401);  r1 = jtag_read_reg (0x401);  printf("Read      npc = %.8lx ppc = %.8lx r1 = %.8lx\n", npc, ppc, r1);  printf("Expected  npc = %.8lx ppc = %.8lx r1 = %.8lx\n", 0x4000000c, 0x40000024, 5);  result = npc + ppc + r1;  /* Reset step bit */  jtag_set_chain (SC_RISC_DEBUG);  jtag_write_reg ((6 << 11) + 16, 0);  /* Set trap insn in delay slot */  jtag_set_chain (SC_WISHBONE);  insn = jtag_read_reg (RAM_BASE + 0x24);  insn = jtag_read_reg (RAM_BASE + 0x24);  jtag_write_reg (RAM_BASE + 0x24, 0x21000001);   /* Unstall */  jtag_set_chain (SC_REGISTER);  jtag_write_reg (4, 0x00000000);  jtag_set_chain (SC_RISC_DEBUG);   /* Read NPC */  jtag_set_chain (SC_RISC_DEBUG);  npc = jtag_read_reg ((0 << 11) + 16);  npc = jtag_read_reg ((0 << 11) + 16);  /* Read PPC */  jtag_set_chain (SC_RISC_DEBUG);  ppc = jtag_read_reg ((0 << 11) + 18);  ppc = jtag_read_reg ((0 << 11) + 18);  /* Read R1 */  jtag_set_chain (SC_RISC_DEBUG);  r1 = jtag_read_reg (0x401);  r1 = jtag_read_reg (0x401);  /* Set back original insn */  jtag_set_chain (SC_WISHBONE);  jtag_write_reg (RAM_BASE + 0x24, insn);  printf("Read      npc = %.8lx ppc = %.8lx r1 = %.8lx\n", npc, ppc, r1);  printf("Expected  npc = %.8lx ppc = %.8lx r1 = %.8lx\n", 0x4000000c, 0x40000024, 8);  result = npc + ppc + r1 + result;  /* Set trap insn in place of branch insn */  jtag_set_chain (SC_WISHBONE);  insn = jtag_read_reg (RAM_BASE + 0x20);  insn = jtag_read_reg (RAM_BASE + 0x20);  jtag_write_reg (RAM_BASE + 0x20, 0x21000001);   /* Set PC */  jtag_set_chain (SC_RISC_DEBUG);  jtag_write_reg ((0 << 11) + 16, RAM_BASE + 0x0c);  /* Unstall */  jtag_set_chain (SC_REGISTER);  jtag_write_reg (4, 0x00000000);  jtag_set_chain (SC_RISC_DEBUG);   /* Read NPC */  jtag_set_chain (SC_RISC_DEBUG);  npc = jtag_read_reg ((0 << 11) + 16);  npc = jtag_read_reg ((0 << 11) + 16);  /* Read PPC */  jtag_set_chain (SC_RISC_DEBUG);  ppc = jtag_read_reg ((0 << 11) + 18);  ppc = jtag_read_reg ((0 << 11) + 18);  /* Read R1 */  jtag_set_chain (SC_RISC_DEBUG);  r1 = jtag_read_reg (0x401);  r1 = jtag_read_reg (0x401);  /* Set back original insn */  jtag_set_chain (SC_WISHBONE);  jtag_write_reg (RAM_BASE + 0x20, insn);  printf("Read      npc = %.8lx ppc = %.8lx r1 = %.8lx\n", npc, ppc, r1);  printf("Expected  npc = %.8lx ppc = %.8lx r1 = %.8lx\n", 0x40000024, 0x40000020, 11);  result = npc + ppc + r1 + result;  /* Set trap insn before branch insn */  jtag_set_chain (SC_WISHBONE);  insn = jtag_read_reg (RAM_BASE + 0x1c);  insn = jtag_read_reg (RAM_BASE + 0x1c);  jtag_write_reg (RAM_BASE + 0x1c, 0x21000001);   /* Set PC */  jtag_set_chain (SC_RISC_DEBUG);  jtag_write_reg ((0 << 11) + 16, RAM_BASE + 0x20);  /* Unstall */  jtag_set_chain (SC_REGISTER);  jtag_write_reg (4, 0x00000000);  jtag_set_chain (SC_RISC_DEBUG);   /* Read NPC */  jtag_set_chain (SC_RISC_DEBUG);  npc = jtag_read_reg ((0 << 11) + 16);  npc = jtag_read_reg ((0 << 11) + 16);  /* Read PPC */  jtag_set_chain (SC_RISC_DEBUG);  ppc = jtag_read_reg ((0 << 11) + 18);  ppc = jtag_read_reg ((0 << 11) + 18);  /* Read R1 */  jtag_set_chain (SC_RISC_DEBUG);  r1 = jtag_read_reg (0x401);  r1 = jtag_read_reg (0x401);  /* Set back original insn */  jtag_set_chain (SC_WISHBONE);  jtag_write_reg (RAM_BASE + 0x1c, insn);  printf("Read      npc = %.8lx ppc = %.8lx r1 = %.8lx\n", npc, ppc, r1);  printf("Expected  npc = %.8lx ppc = %.8lx r1 = %.8lx\n", 0x40000020, 0x4000001c, 24);  result = npc + ppc + r1 + result;  /* Set trap insn behind lsu insn */  jtag_set_chain (SC_WISHBONE);  insn = jtag_read_reg (RAM_BASE + 0x18);  insn = jtag_read_reg (RAM_BASE + 0x18);  jtag_write_reg (RAM_BASE + 0x18, 0x21000001);   /* Set PC */  jtag_set_chain (SC_RISC_DEBUG);  jtag_write_reg ((0 << 11) + 16, RAM_BASE + 0x1c);  /* Unstall */  jtag_set_chain (SC_REGISTER);  jtag_write_reg (4, 0x00000000);  jtag_set_chain (SC_RISC_DEBUG);   /* Read NPC */  jtag_set_chain (SC_RISC_DEBUG);  npc = jtag_read_reg ((0 << 11) + 16);  npc = jtag_read_reg ((0 << 11) + 16);  /* Read PPC */  jtag_set_chain (SC_RISC_DEBUG);  ppc = jtag_read_reg ((0 << 11) + 18);  ppc = jtag_read_reg ((0 << 11) + 18);  /* Read R1 */  jtag_set_chain (SC_RISC_DEBUG);  r1 = jtag_read_reg (0x401);  r1 = jtag_read_reg (0x401);  /* Set back original insn */  jtag_set_chain (SC_WISHBONE);  jtag_write_reg (RAM_BASE + 0x18, insn);  printf("Read      npc = %.8lx ppc = %.8lx r1 = %.8lx\n", npc, ppc, r1);  printf("Expected  npc = %.8lx ppc = %.8lx r1 = %.8lx\n", 0x4000001c, 0x40000018, 49);  result = npc + ppc + r1 + result;  /* Set trap insn very near previous one */  jtag_set_chain (SC_WISHBONE);  insn = jtag_read_reg (RAM_BASE + 0x1c);  insn = jtag_read_reg (RAM_BASE + 0x1c);  jtag_write_reg (RAM_BASE + 0x1c, 0x21000001);   /* Set PC */  jtag_set_chain (SC_RISC_DEBUG);  jtag_write_reg ((0 << 11) + 16, RAM_BASE + 0x18);  /* Unstall */  jtag_set_chain (SC_REGISTER);  jtag_write_reg (4, 0x00000000);  jtag_set_chain (SC_RISC_DEBUG);   /* Read NPC */  jtag_set_chain (SC_RISC_DEBUG);  npc = jtag_read_reg ((0 << 11) + 16);  npc = jtag_read_reg ((0 << 11) + 16);  /* Read PPC */  jtag_set_chain (SC_RISC_DEBUG);  ppc = jtag_read_reg ((0 << 11) + 18);  ppc = jtag_read_reg ((0 << 11) + 18);  /* Read R1 */  jtag_set_chain (SC_RISC_DEBUG);  r1 = jtag_read_reg (0x401);  r1 = jtag_read_reg (0x401);  /* Set back original insn */  jtag_set_chain (SC_WISHBONE);  jtag_write_reg (RAM_BASE + 0x1c, insn);  printf("Read      npc = %.8lx ppc = %.8lx r1 = %.8lx\n", npc, ppc, r1);  printf("Expected  npc = %.8lx ppc = %.8lx r1 = %.8lx\n", 0x40000020, 0x4000001c, 50);  result = npc + ppc + r1 + result;  /* Set trap insn to the start */  jtag_set_chain (SC_WISHBONE);  insn = jtag_read_reg (RAM_BASE + 0x0c);  insn = jtag_read_reg (RAM_BASE + 0x0c);  jtag_write_reg (RAM_BASE + 0x0c, 0x21000001);   /* Set PC */  jtag_set_chain (SC_RISC_DEBUG);  jtag_write_reg ((0 << 11) + 16, RAM_BASE + 0x1c);  /* Unstall */  jtag_set_chain (SC_REGISTER);  jtag_write_reg (4, 0x00000000);  jtag_set_chain (SC_RISC_DEBUG);   /* Read NPC */  jtag_set_chain (SC_RISC_DEBUG);  npc = jtag_read_reg ((0 << 11) + 16);  npc = jtag_read_reg ((0 << 11) + 16);  /* Read PPC */  jtag_set_chain (SC_RISC_DEBUG);  ppc = jtag_read_reg ((0 << 11) + 18);  ppc = jtag_read_reg ((0 << 11) + 18);  /* Read R1 */  jtag_set_chain (SC_RISC_DEBUG);  r1 = jtag_read_reg (0x401);  r1 = jtag_read_reg (0x401);  /* Set back original insn */  jtag_set_chain (SC_WISHBONE);  jtag_write_reg (RAM_BASE + 0x0c, insn);  printf("Read      npc = %.8lx ppc = %.8lx r1 = %.8lx\n", npc, ppc, r1);  printf("Expected  npc = %.8lx ppc = %.8lx r1 = %.8lx\n", 0x40000010, 0x4000000c, 99);  result = npc + ppc + r1 + result;  /* Set step bit */  jtag_set_chain (SC_RISC_DEBUG);  jtag_write_reg ((6 << 11) + 16, 1 << 22);  for (i = 0; i < 5; i++)    {      /* Unstall */      jtag_set_chain (SC_REGISTER);      jtag_write_reg (4, 0x00000000);      jtag_set_chain (SC_RISC_DEBUG);    }  /* Read NPC */  jtag_set_chain (SC_RISC_DEBUG);  npc = jtag_read_reg ((0 << 11) + 16);  npc = jtag_read_reg ((0 << 11) + 16);  /* Read PPC */  jtag_set_chain (SC_RISC_DEBUG);  ppc = jtag_read_reg ((0 << 11) + 18);  ppc = jtag_read_reg ((0 << 11) + 18);  /* Read R1 */  jtag_set_chain (SC_RISC_DEBUG);  r1 = jtag_read_reg (0x401);  r1 = jtag_read_reg (0x401);  printf("Read      npc = %.8lx ppc = %.8lx r1 = %.8lx\n", npc, ppc, r1);  printf("Expected  npc = %.8lx ppc = %.8lx r1 = %.8lx\n", 0x40000024, 0x40000020, 101);  result = npc + ppc + r1 + result;  /* Set PC */  jtag_set_chain (SC_RISC_DEBUG);  jtag_write_reg ((0 << 11) + 16, RAM_BASE + 0x20);  for (i = 0; i < 2; i++)    {      /* Unstall */      jtag_set_chain (SC_REGISTER);      jtag_write_reg (4, 0x00000000);      jtag_set_chain (SC_RISC_DEBUG);    }  /* Read NPC */  jtag_set_chain (SC_RISC_DEBUG);  npc = jtag_read_reg ((0 << 11) + 16);  npc = jtag_read_reg ((0 << 11) + 16);  /* Read PPC */  jtag_set_chain (SC_RISC_DEBUG);  ppc = jtag_read_reg ((0 << 11) + 18);  ppc = jtag_read_reg ((0 << 11) + 18);  /* Read R1 */  jtag_set_chain (SC_RISC_DEBUG);  r1 = jtag_read_reg (0x401);  r1 = jtag_read_reg (0x401);  printf("Read      npc = %.8lx ppc = %.8lx r1 = %.8lx\n", npc, ppc, r1);  printf("Expected  npc = %.8lx ppc = %.8lx r1 = %.8lx\n", 0x4000000c, 0x40000024, 201);  result = npc + ppc + r1 + result;  printf("result = %.8lx\n", result + 0x5eaddaa9);#endif  return err;}main(argc, argv)  int argc;  char *argv[];{  char *redirstr;  int trace_fd = 0;  char *s;    int c;  const char *args;  char *port;  char *cable;  srand(getpid());  if ((argc < 3) || (argv[1][0] == '-') || (argv[2][0] == '-')) {    printf("JTAG protocol via parallel port for linux.\n");    printf("Copyright (C) 2001 Marko Mlinar, markom@opencores.org\n\n");    printf("Usage: %s [cable] [JTAG port_number]\n", argv[0]);    jp_print_cable_help();    return -1;  }  cable = argv[1];  port = argv[2];  if (!jp_select_cable(cable)) {    fprintf(stderr,"Error selecting cable %s\n", cable);    return -1;  }  /* Get the cable-arguments */  args = jp_get_cable_args();  /* Parse the cable arguments (if-any) */  for(;;) {    c = getopt(argc, argv, args);    if(c == -1)      break;    if(c == '?')      return 1;    if(!jp_cable_opt(c, optarg))      return 1;  }  if(!jp_init_cable())    return 1;    /* Test the connection.  */  if (jtag_init()) {    fprintf(stderr,"Connection with jtag via %s failed.\n", cable);    exit(-1);  }      /* We have a connection.  Establish server.  */  printf ("Dropping root privileges.\n");  serverPort = strtol(port,&s,10);  if(*s)    return -1;  if(server_fd = GetServerSocket("or1ksim","tcp", serverPort)) {    printf("JTAG Proxy server started on port %d\n", serverPort);    printf("Press CTRL+c to exit.\n");  } else {    fprintf(stderr,"Cannot start JTAG Proxy server on port %d\n", serverPort);    exit(-1);  }    /* Do endless loop of checking and handle GDB requests.  Ctrl-c exits.  */  HandleServerSocket(true);}/************************   JTAG Server Routines ************************/static int tcp_level = 0;/* Added by CZ 24/05/01 */int GetServerSocket(const char* name,const char* proto,int port){  struct servent *service;  struct protoent *protocol;  struct sockaddr_in sa;  struct hostent *hp;    int sockfd;  char myname[256];  int flags;  char sTemp[256];  /* First, get the protocol number of TCP */  if(!(protocol = getprotobyname(proto)))    {      sprintf(sTemp,"Unable to load protocol \"%s\"",proto);      perror(sTemp);      return 0;    }  tcp_level = protocol->p_proto; /* Save for later */  /* If we weren't passed a non standard port, get the port     from the services directory. */  if(!port)    {      if(service = getservbyname(name,protocol->p_name))  port = ntohs(service->s_port);    }   /* Create the socket using the TCP protocol */  if((sockfd = socket(PF_INET,SOCK_STREAM,protocol->p_proto)) < 0)    {      perror("Unable to create socket");      return 0;    }   flags = 1;  if(setsockopt(sockfd,SOL_SOCKET,SO_REUSEADDR,(const char*)&flags,sizeof(int)) < 0)    {      sprintf(sTemp,"Can not set SO_REUSEADDR option on socket %d",sockfd);      perror(sTemp);      close(sockfd);      return 0;    }  /* The server should also be non blocking. Get the current flags. */  if((flags = fcntl(sockfd,F_GETFL,0)) < 0)    {      sprintf(sTemp,"Unable to get flags for socket %d",sockfd);      perror(sTemp);      close(sockfd);      return 0;

⌨️ 快捷键说明

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