libero ProASIC3 A3P250 JTAG-DirectC 源码分析一 dp_read_idcode

 

0、JTAG C代码 实现文档说明  JTAG-DirectC v2022.1 User Guide , 源码下载 DirectC | Microchip Technology

 

1、  read idcode 

void dp_read_idcode(void)
{
    
    opcode = IDCODE;
    IRSCAN_in();
    goto_jtag_state(JTAG_RUN_TEST_IDLE,0u);
    DRSCAN_out(IDCODE_LENGTH, (DPUCHAR*)DPNULL, global_buf1);
    device_ID = (DPULONG)global_buf1[0] | (DPULONG)global_buf1[1] << 8u | 
    (DPULONG)global_buf1[2] << 16u | (DPULONG)global_buf1[3] << 24u;
    device_rev = (DPUCHAR) (device_ID >> 28);
    
    #ifdef ENABLE_DISPLAY
    dp_display_text("\r\nActID = ");
    dp_display_value(device_ID,HEX);
    #endif
    
    
    return;
}
 
  1. 指令  IDCODE  =  0x0Fu
  2. IRSCAN_in()→  goto_jtag_state(JTAG_SHIFT_IR,0u); 该函数 是 将“JTAG 16种状态” 变成  JTAG_SHIFT_IR 状态;
  3. dp_shift_in(0u, OPCODE_BIT_LENGTH, &opcode, 1u); 函数 将  指令 ‘IDCODE  =  0x0Fu’ 共计 8bit  发送出去,通过  TDI 引脚!
  4. goto_jtag_state(JTAG_PAUSE_IR,0u); 将  将“JTAG 16种状态” 变成  JTAG_PAUSE_IR 状态;
  5. goto_jtag_state(JTAG_RUN_TEST_IDLE,0u); 转换到  JTAG_RUN_TEST_IDLE 状态!
  6. goto_jtag_state(JTAG_SHIFT_DR,0u);  转换到 JTAG_SHIFT_DR 状态!
  7. 保存 TDO 输出的数据 ,共计 32bit  ,存到 global_buf1 数组中,共计4个字节!
  8. goto_jtag_state(JTAG_PAUSE_DR,0u);  转换到 JTAG_PAUSE_DR 状态!
  9. 结束!

JTAG 16种 状态图:

image

 

posted on 2026-01-19 17:14  所长  阅读(1)  评论(0)    收藏  举报

导航