📄 bdm.c
字号:
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 + -