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

📄 bdm.c

📁 freecale单片机基于bdm接口的一些源代码
💻 C
📖 第 1 页 / 共 5 页
字号:
    SEC           /* set C */
    CLR   ,X      /* bring BDM low */
    STA   ,X      /* assign value from MSB of A to BDM */
    RORA          /* set MSB of A */
    STA   ,X      /* bring BDM high */
    ROLA          /* advance to next bit */
    ROLA          
    /* bit 1 */
    SEC           /* set C */
    CLR   ,X      /* bring BDM low */
    STA   ,X      /* assign value from MSB of A to BDM */
    RORA          /* set MSB of A */
    STA   ,X      /* bring BDM high */
    ROLA          /* advance to next bit */
    ROLA          
    /* bit 0 */
    SEC           /* set C */
    CLR   ,X      /* bring BDM low */
    STA   ,X      /* assign value from MSB of A to BDM */
    RORA          /* set MSB of A */
    STA   ,X      /* bring BDM high */
    MOV   #BDM_DIR2_MASK,BDM_DIR2_PORT              /* stop driving the BDM */
  }
  ACKN_CLR;    /* clear ACKN flag */
  /* it takes 8 cycles from end of the last bit till enable of the ACKN capture */
  /* that is short enough for BDM freq of: (32+16)*3/8 = 18 MHz */
  /* 32+16 comes from minimum delay between command and ACKN (32 BDM cycles) and 16 cycles of the ACKN pulse (capturing its rising edge) */
}
/* target frequency 5.5 - 7 MHz (this is BDM frequency (=crystal/2)) */
void bdm_tx2(unsigned char data) {
  asm {
    CLRX					/* HX points to PTA */
    CLRH
    MOV   #0,BDM_DIR2_PORT    /* start driving the BDM */
    /* bit 7 (MSB) */
    CLR   ,X      /* bring BDM low */
    STA   ,X      /* assign value from MSB of A to BDM */
    ORA   #BDM_OUT_MASK /* set MSB of A */
    STA   ,X      /* bring BDM high */
    LSLA          /* advance to next bit */
    /* bit 6 */
    CLR   ,X      /* bring BDM low */
    STA   ,X      /* assign value from MSB of A to BDM */
    ORA   #BDM_OUT_MASK /* set MSB of A */
    STA   ,X      /* bring BDM high */
    LSLA          /* advance to next bit */
    /* bit 5 */
    CLR   ,X      /* bring BDM low */
    STA   ,X      /* assign value from MSB of A to BDM */
    ORA   #BDM_OUT_MASK /* set MSB of A */
    STA   ,X      /* bring BDM high */
    LSLA          /* advance to next bit */
    /* bit 4 */
    CLR   ,X      /* bring BDM low */
    STA   ,X      /* assign value from MSB of A to BDM */
    ORA   #BDM_OUT_MASK /* set MSB of A */
    STA   ,X      /* bring BDM high */
    LSLA          /* advance to next bit */
    /* bit 3 */
    CLR   ,X      /* bring BDM low */
    STA   ,X      /* assign value from MSB of A to BDM */
    ORA   #BDM_OUT_MASK /* set MSB of A */
    STA   ,X      /* bring BDM high */
    LSLA          /* advance to next bit */
    /* bit 2 */
    CLR   ,X      /* bring BDM low */
    STA   ,X      /* assign value from MSB of A to BDM */
    ORA   #BDM_OUT_MASK /* set MSB of A */
    STA   ,X      /* bring BDM high */
    LSLA          /* advance to next bit */
    /* bit 1 */
    CLR   ,X      /* bring BDM low */
    STA   ,X      /* assign value from MSB of A to BDM */
    ORA   #BDM_OUT_MASK /* set MSB of A */
    STA   ,X      /* bring BDM high */
    LSLA          /* advance to next bit */
    /* bit 0 */
    CLR   ,X      /* bring BDM low */
    STA   ,X      /* assign value from MSB of A to BDM */
    ORA   #BDM_OUT_MASK /* set MSB of A */
    STA   ,X      /* bring BDM high */
    MOV   #BDM_DIR2_MASK,BDM_DIR2_PORT              /* stop driving the BDM */
  }
  ACKN_CLR;    /* clear ACKN flag */
}
/* target frequency 4.714 - 6 MHz (this is BDM frequency (=crystal/2)) */
void bdm_tx3(unsigned char data) {
  asm {
    CLRX					/* HX points to PTA */
    CLRH
    MOV   #0,BDM_DIR2_PORT    /* start driving the BDM */
    /* bit 7 (MSB) */
    CLR   ,X      /* bring BDM low */
    STA   ,X      /* assign value from MSB of A to BDM */
    ORA   #BDM_OUT_MASK /* set MSB of A */
    NOP           /* wait 1 cycle */
    STA   ,X      /* bring BDM high */
    LSLA          /* advance to next bit */
    NOP           /* wait 1 cycle */
    /* bit 6 */
    CLR   ,X      /* bring BDM low */
    STA   ,X      /* assign value from MSB of A to BDM */
    ORA   #BDM_OUT_MASK /* set MSB of A */
    NOP           /* wait 1 cycle */
    STA   ,X      /* bring BDM high */
    LSLA          /* advance to next bit */
    NOP           /* wait 1 cycle */
    /* bit 5 */
    CLR   ,X      /* bring BDM low */
    STA   ,X      /* assign value from MSB of A to BDM */
    ORA   #BDM_OUT_MASK /* set MSB of A */
    NOP           /* wait 1 cycle */
    STA   ,X      /* bring BDM high */
    LSLA          /* advance to next bit */
    NOP           /* wait 1 cycle */
    /* bit 4 */
    CLR   ,X      /* bring BDM low */
    STA   ,X      /* assign value from MSB of A to BDM */
    ORA   #BDM_OUT_MASK /* set MSB of A */
    NOP           /* wait 1 cycle */
    STA   ,X      /* bring BDM high */
    LSLA          /* advance to next bit */
    NOP           /* wait 1 cycle */
    /* bit 3 */
    CLR   ,X      /* bring BDM low */
    STA   ,X      /* assign value from MSB of A to BDM */
    ORA   #BDM_OUT_MASK /* set MSB of A */
    NOP           /* wait 1 cycle */
    STA   ,X      /* bring BDM high */
    LSLA          /* advance to next bit */
    NOP           /* wait 1 cycle */
    /* bit 2 */
    CLR   ,X      /* bring BDM low */
    STA   ,X      /* assign value from MSB of A to BDM */
    ORA   #BDM_OUT_MASK /* set MSB of A */
    NOP           /* wait 1 cycle */
    STA   ,X      /* bring BDM high */
    LSLA          /* advance to next bit */
    NOP           /* wait 1 cycle */
    /* bit 1 */
    CLR   ,X      /* bring BDM low */
    STA   ,X      /* assign value from MSB of A to BDM */
    ORA   #BDM_OUT_MASK /* set MSB of A */
    NOP           /* wait 1 cycle */
    STA   ,X      /* bring BDM high */
    LSLA          /* advance to next bit */
    NOP           /* wait 1 cycle */
    /* bit 0 */
    CLR   ,X      /* bring BDM low */
    STA   ,X      /* assign value from MSB of A to BDM */
    ORA   #BDM_OUT_MASK /* set MSB of A */
    NOP           /* wait 1 cycle */
    STA   ,X      /* bring BDM high */
    MOV   #BDM_DIR2_MASK,BDM_DIR2_PORT              /* stop driving the BDM */
  }
  ACKN_CLR;    /* clear ACKN flag */
}
/* target frequency 4.125 - 5.25 MHz (this is BDM frequency (=crystal/2)) */
void bdm_tx4(unsigned char data) {
  asm {
    CLRX					/* HX points to PTA */
    CLRH
    MOV   #0,BDM_DIR2_PORT    /* start driving the BDM */
    /* bit 7 (MSB) */
    CLR   ,X      /* bring BDM low */
    STA   ,X      /* assign value from MSB of A to BDM */
    ORA   #BDM_OUT_MASK /* set MSB of A */
    BIT   ,X      /* wait 2 cycles */
    STA   ,X      /* bring BDM high */
    LSLA          /* advance to next bit */
    NOP           /* wait 1 cycle */
    /* bit 6 */
    CLR   ,X      /* bring BDM low */
    STA   ,X      /* assign value from MSB of A to BDM */
    ORA   #BDM_OUT_MASK /* set MSB of A */
    BIT   ,X      /* wait 2 cycles */
    STA   ,X      /* bring BDM high */
    LSLA          /* advance to next bit */
    NOP           /* wait 1 cycle */
    /* bit 5 */
    CLR   ,X      /* bring BDM low */
    STA   ,X      /* assign value from MSB of A to BDM */
    ORA   #BDM_OUT_MASK /* set MSB of A */
    BIT   ,X      /* wait 2 cycles */
    STA   ,X      /* bring BDM high */
    LSLA          /* advance to next bit */
    NOP           /* wait 1 cycle */
    /* bit 4 */
    CLR   ,X      /* bring BDM low */
    STA   ,X      /* assign value from MSB of A to BDM */
    ORA   #BDM_OUT_MASK /* set MSB of A */
    BIT   ,X      /* wait 2 cycles */
    STA   ,X      /* bring BDM high */
    LSLA          /* advance to next bit */
    NOP           /* wait 1 cycle */
    /* bit 3 */
    CLR   ,X      /* bring BDM low */
    STA   ,X      /* assign value from MSB of A to BDM */
    ORA   #BDM_OUT_MASK /* set MSB of A */
    BIT   ,X      /* wait 2 cycles */
    STA   ,X      /* bring BDM high */
    LSLA          /* advance to next bit */
    NOP           /* wait 1 cycle */
    /* bit 2 */
    CLR   ,X      /* bring BDM low */
    STA   ,X      /* assign value from MSB of A to BDM */
    ORA   #BDM_OUT_MASK /* set MSB of A */
    BIT   ,X      /* wait 2 cycles */
    STA   ,X      /* bring BDM high */
    LSLA          /* advance to next bit */
    NOP           /* wait 1 cycle */
    /* bit 1 */
    CLR   ,X      /* bring BDM low */
    STA   ,X      /* assign value from MSB of A to BDM */
    ORA   #BDM_OUT_MASK /* set MSB of A */
    BIT   ,X      /* wait 2 cycles */
    STA   ,X      /* bring BDM high */
    LSLA          /* advance to next bit */
    NOP           /* wait 1 cycle */
    /* bit 0 */
    CLR   ,X      /* bring BDM low */
    STA   ,X      /* assign value from MSB of A to BDM */
    ORA   #BDM_OUT_MASK /* set MSB of A */
    BIT   ,X      /* wait 2 cycles */
    STA   ,X      /* bring BDM high */
    MOV   #BDM_DIR2_MASK,BDM_DIR2_PORT              /* stop driving the BDM */
  }
  ACKN_CLR;    /* clear ACKN flag */
}
/* target frequency 3.667 - 4.667 MHz (this is BDM frequency (=crystal/2)) */
void bdm_tx5(unsigned char data) {
  asm {
    CLRX					/* HX points to PTA */
    CLRH
    MOV   #0,BDM_DIR2_PORT    /* start driving the BDM */
    /* bit 7 (MSB) */
    CLR   ,X      /* bring BDM low */
    STA   ,X      /* assign value from MSB of A to BDM */
    ORA   #BDM_OUT_MASK /* set MSB of A */
    BRN   0       /* wait 3 cycles */
    STA   ,X      /* bring BDM high */
    LSLA          /* advance to next bit */
    BIT   ,X      /* wait 2 cycles */
    /* bit 6 */
    CLR   ,X      /* bring BDM low */
    STA   ,X      /* assign value from MSB of A to BDM */
    ORA   #BDM_OUT_MASK /* set MSB of A */
    BRN   0       /* wait 3 cycles */
    STA   ,X      /* bring BDM high */
    LSLA          /* advance to next bit */
    BIT   ,X      /* wait 2 cycles */
    /* bit 5 */
    CLR   ,X      /* bring BDM low */
    STA   ,X      /* assign value from MSB of A to BDM */
    ORA   #BDM_OUT_MASK /* set MSB of A */
    BRN   0       /* wait 3 cycles */
    STA   ,X      /* bring BDM high */
    LSLA          /* advance to next bit */
    BIT   ,X      /* wait 2 cycles */
    /* bit 4 */
    CLR   ,X      /* bring BDM low */
    STA   ,X      /* assign value from MSB of A to BDM */
    ORA   #BDM_OUT_MASK /* set MSB of A */
    BRN   0       /* wait 3 cycles */
    STA   ,X      /* bring BDM high */
    LSLA          /* advance to next bit */
    BIT   ,X      /* wait 2 cycles */
    /* bit 3 */
    CLR   ,X      /* bring BDM low */
    STA   ,X      /* assign value from MSB of A to BDM */
    ORA   #BDM_OUT_MASK /* set MSB of A */
    BRN   0       /* wait 3 cycles */
    STA   ,X      /* bring BDM high */
    LSLA          /* adv

⌨️ 快捷键说明

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