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

📄 bdmcf.c

📁 bdm源代码. coldfire处理器用
💻 C
📖 第 1 页 / 共 3 页
字号:
    #else
      lda   #(BDMCF_IDLE/2)
    #endif      
    #ifdef INVERT
      bclr  DSCLK_OUT_BITNUM,DSCLK_OUT_PORT  /* create rising edge on DSCLK */
    #else
      bset  DSCLK_OUT_BITNUM,DSCLK_OUT_PORT
    #endif
    /* transmit bit 5 */
    lslx    		  /* shift MSB into C */
    #ifdef DEBUG
      rora        /* rotate C into A */
    #else
			rola
    #endif      
    sta     PTA   /* create falling edge on DSCLK and write the next bit value to the port */  
    #ifdef DEBUG
      lda   #(BDMCF_IDLE*2)  /* reload idle value into A */
    #else
      lda   #(BDMCF_IDLE/2)
    #endif      
    #ifdef INVERT
      bclr  DSCLK_OUT_BITNUM,DSCLK_OUT_PORT  /* create rising edge on DSCLK */
    #else
      bset  DSCLK_OUT_BITNUM,DSCLK_OUT_PORT
    #endif
    /* transmit bit 4 */
    lslx    		  /* shift MSB into C */
    #ifdef DEBUG
      rora        /* rotate C into A */
    #else
			rola
    #endif      
    sta     PTA   /* create falling edge on DSCLK and write the next bit value to the port */  
    #ifdef DEBUG
      lda   #(BDMCF_IDLE*2)  /* reload idle value into A */
    #else
      lda   #(BDMCF_IDLE/2)
    #endif      
    #ifdef INVERT
      bclr  DSCLK_OUT_BITNUM,DSCLK_OUT_PORT  /* create rising edge on DSCLK */
    #else
      bset  DSCLK_OUT_BITNUM,DSCLK_OUT_PORT
    #endif
    /* transmit bit 3 */
    lslx    		  /* shift MSB into C */
    #ifdef DEBUG
      rora        /* rotate C into A */
    #else
			rola
    #endif      
    sta     PTA   /* create falling edge on DSCLK and write the next bit value to the port */  
    #ifdef DEBUG
      lda   #(BDMCF_IDLE*2)  /* reload idle value into A */
    #else
      lda   #(BDMCF_IDLE/2)
    #endif      
    #ifdef INVERT
      bclr  DSCLK_OUT_BITNUM,DSCLK_OUT_PORT  /* create rising edge on DSCLK */
    #else
      bset  DSCLK_OUT_BITNUM,DSCLK_OUT_PORT
    #endif
    /* transmit bit 2 */
    lslx    		  /* shift MSB into C */
    #ifdef DEBUG
      rora        /* rotate C into A */
    #else
			rola
    #endif      
    sta     PTA   /* create falling edge on DSCLK and write the next bit value to the port */  
    #ifdef DEBUG
      lda   #(BDMCF_IDLE*2)  /* reload idle value into A */
    #else
      lda   #(BDMCF_IDLE/2)
    #endif      
    #ifdef INVERT
      bclr  DSCLK_OUT_BITNUM,DSCLK_OUT_PORT  /* create rising edge on DSCLK */
    #else
      bset  DSCLK_OUT_BITNUM,DSCLK_OUT_PORT
    #endif
     /* transmit bit 1 */
    lslx    		  /* shift MSB into C */
    #ifdef DEBUG
      rora        /* rotate C into A */
    #else
			rola
    #endif      
    sta     PTA   /* create falling edge on DSCLK and write the next bit value to the port */  
    #ifdef DEBUG
      lda   #(BDMCF_IDLE*2)  /* reload idle value into A */
    #else
      lda   #(BDMCF_IDLE/2)
    #endif      
    #ifdef INVERT
      bclr  DSCLK_OUT_BITNUM,DSCLK_OUT_PORT  /* create rising edge on DSCLK */
    #else
      bset  DSCLK_OUT_BITNUM,DSCLK_OUT_PORT
    #endif
    /* transmit bit 0 */
    lslx    		  /* shift MSB into C */
    #ifdef DEBUG
      rora        /* rotate C into A */
    #else
			rola
    #endif      
    sta     PTA   /* create falling edge on DSCLK and write the next bit value to the port */  
    #ifdef DEBUG
      lda   #(BDMCF_IDLE*2)  /* reload idle value into A */
    #else
      lda   #(BDMCF_IDLE/2)
    #endif      
    #ifdef INVERT
      bclr  DSCLK_OUT_BITNUM,DSCLK_OUT_PORT  /* create rising edge on DSCLK */
    #else
      bset  DSCLK_OUT_BITNUM,DSCLK_OUT_PORT
    #endif
		/* finish the transmission */
    #ifdef INVERT
      sec           /* bring the DSI_OUT low, we need to spend 2 cycles doing something anyway to make the timing right */
    #else
      clc
    #endif
    #ifdef DEBUG
      rora        /* rotate C into A */
    #else
			rola
    #endif      
    sta     PTA   /* create falling edge on DSCLK */
  }
}

/* receives 8 bits */
unsigned char bdmcf_rx8_1(void) {
  asm {
    lda     #BDMCF_IDLE /* preload idle state of signals into A */
    sta     PTA         /* bring DSCLK and DSI low */  
    clrh                /* load address of PTC to H:X */
    ldx     @DSO_IN_PORT    
    /* receive bit 7 */
    #ifdef INVERT
      bclr  DSCLK_OUT_BITNUM,DSCLK_OUT_PORT  /* create rising edge on DSCLK */
    #else
      bset  DSCLK_OUT_BITNUM,DSCLK_OUT_PORT
    #endif
    rola          /* shift the sampled bit into A from the bottom */
    #ifdef INVERT
      bset  DSCLK_OUT_BITNUM,DSCLK_OUT_PORT  /* create falling edge on DSCLK */
    #else
      bclr  DSCLK_OUT_BITNUM,DSCLK_OUT_PORT
    #endif
    lsr     ,X    /* shift the input data bit (PTC0) into C */
    /* receive bit 6 */
    #ifdef INVERT
      bclr  DSCLK_OUT_BITNUM,DSCLK_OUT_PORT  /* create rising edge on DSCLK */
    #else
      bset  DSCLK_OUT_BITNUM,DSCLK_OUT_PORT
    #endif
    rola          /* shift the sampled bit into A from the bottom */
    #ifdef INVERT
      bset  DSCLK_OUT_BITNUM,DSCLK_OUT_PORT  /* create falling edge on DSCLK */
    #else
      bclr  DSCLK_OUT_BITNUM,DSCLK_OUT_PORT
    #endif
    lsr     ,X    /* shift the input data bit (PTC0) into C */
    /* receive bit 5 */
    #ifdef INVERT
      bclr  DSCLK_OUT_BITNUM,DSCLK_OUT_PORT  /* create rising edge on DSCLK */
    #else
      bset  DSCLK_OUT_BITNUM,DSCLK_OUT_PORT
    #endif
    rola          /* shift the sampled bit into A from the bottom */
    #ifdef INVERT
      bset  DSCLK_OUT_BITNUM,DSCLK_OUT_PORT  /* create falling edge on DSCLK */
    #else
      bclr  DSCLK_OUT_BITNUM,DSCLK_OUT_PORT
    #endif
    lsr     ,X    /* shift the input data bit (PTC0) into C */
    /* receive bit 4 */
    #ifdef INVERT
      bclr  DSCLK_OUT_BITNUM,DSCLK_OUT_PORT  /* create rising edge on DSCLK */
    #else
      bset  DSCLK_OUT_BITNUM,DSCLK_OUT_PORT
    #endif
    rola          /* shift the sampled bit into A from the bottom */
    #ifdef INVERT
      bset  DSCLK_OUT_BITNUM,DSCLK_OUT_PORT  /* create falling edge on DSCLK */
    #else
      bclr  DSCLK_OUT_BITNUM,DSCLK_OUT_PORT
    #endif
    lsr     ,X    /* shift the input data bit (PTC0) into C */
    /* receive bit 3 */
    #ifdef INVERT
      bclr  DSCLK_OUT_BITNUM,DSCLK_OUT_PORT  /* create rising edge on DSCLK */
    #else
      bset  DSCLK_OUT_BITNUM,DSCLK_OUT_PORT
    #endif
    rola          /* shift the sampled bit into A from the bottom */
    #ifdef INVERT
      bset  DSCLK_OUT_BITNUM,DSCLK_OUT_PORT  /* create falling edge on DSCLK */
    #else
      bclr  DSCLK_OUT_BITNUM,DSCLK_OUT_PORT
    #endif
    lsr     ,X    /* shift the input data bit (PTC0) into C */
    /* receive bit 2 */
    #ifdef INVERT
      bclr  DSCLK_OUT_BITNUM,DSCLK_OUT_PORT  /* create rising edge on DSCLK */
    #else
      bset  DSCLK_OUT_BITNUM,DSCLK_OUT_PORT
    #endif
    rola          /* shift the sampled bit into A from the bottom */
    #ifdef INVERT
      bset  DSCLK_OUT_BITNUM,DSCLK_OUT_PORT  /* create falling edge on DSCLK */
    #else
      bclr  DSCLK_OUT_BITNUM,DSCLK_OUT_PORT
    #endif
    lsr     ,X    /* shift the input data bit (PTC0) into C */
    /* receive bit 1 */
    #ifdef INVERT
      bclr  DSCLK_OUT_BITNUM,DSCLK_OUT_PORT  /* create rising edge on DSCLK */
    #else
      bset  DSCLK_OUT_BITNUM,DSCLK_OUT_PORT
    #endif
    rola          /* shift the sampled bit into A from the bottom */
    #ifdef INVERT
      bset  DSCLK_OUT_BITNUM,DSCLK_OUT_PORT  /* create falling edge on DSCLK */
    #else
      bclr  DSCLK_OUT_BITNUM,DSCLK_OUT_PORT
    #endif
    lsr     ,X    /* shift the input data bit (PTC0) into C */
    /* receive bit 0 */
    #ifdef INVERT
      bclr  DSCLK_OUT_BITNUM,DSCLK_OUT_PORT  /* create rising edge on DSCLK */
    #else
      bset  DSCLK_OUT_BITNUM,DSCLK_OUT_PORT
    #endif
    rola          /* shift the sampled bit into A from the bottom */
    #ifdef INVERT
      bset  DSCLK_OUT_BITNUM,DSCLK_OUT_PORT  /* create falling edge on DSCLK */
    #else
      bclr  DSCLK_OUT_BITNUM,DSCLK_OUT_PORT
    #endif
    lsr     ,X    /* shift the input data bit (PTC0) into C */
    rola          /* shift the sampled bit into A from the bottom */
    #ifdef INVERT
      coma        /* invert the data */
    #endif
  }
}

/* transmits and receives 8 bits */
unsigned char bdmcf_txrx8_1(unsigned char data) {
  asm {
    tax           /* move the input data to X */
    #ifdef INVERT
      comx        /* invert the data */
    #endif
    #ifdef DEBUG       
      lda   #(BDMCF_IDLE*2)    
    #else      
      lda   #(BDMCF_IDLE/2)    
    #endif      
    lslx    		  /* shift MSB into C */
    #ifdef DEBUG
      rora        /* rotate C into A */
    #else
			rola
    #endif      
    sta     PTA   /* bring DSCLK low and write the first (MSB) bit value to the port */  
     /* transmit and receive bit 7 */
    #ifdef INVERT
      bclr  DSCLK_OUT_BITNUM,DSCLK_OUT_PORT  /* create rising edge on DSCLK */
    #else
      bset  DSCLK_OUT_BITNUM,DSCLK_OUT_PORT
    #endif
    #ifdef DEBUG
      lda   #(BDMCF_IDLE*2)  /* reload idle value into A */
    #else
      lda   #(BDMCF_IDLE/2)
    #endif      
    lslx    		  /* shift MSB into C */
    #ifdef DEBUG
      rora        /* rotate C into A */
    #else
			rola
    #endif      
    lsrx          /* shift X back to what it was */
    sta     PTA   /* create falling edge on DSCLK and write the next bit value to the port */  
    lsr     PTC   /* shift the input data bit (PTC0) into C */
		rolx          /* shift the sample into X from the bottom */
     /* transmit and receive bit 6 */
    #ifdef INVERT
      bclr  DSCLK_OUT_BITNUM,DSCLK_OUT_PORT  /* create rising edge on DSCLK */
    #else
      bset  DSCLK_OUT_BITNUM,DSCLK_OUT_PORT
    #endif
    #ifdef DEBUG
      lda   #(BDMCF_IDLE*2)  /* reload idle value into A */
    #else
      lda   #(BDMCF_IDLE/2)
    #endif      
    lslx    		  /* shift MSB into C */
    #ifdef DEBUG
      rora        /* rotate C into A */
    #else
			rola
    #endif      
    lsrx          /* shift X back to what it was */
    sta     PTA   /* create falling edge on DSCLK and write the next bit value to the port */  
    lsr     PTC   /* shift the input data bit (PTC0) into C */
		rolx          /* shift the sample into X from the bottom */
     /* transmit and receive bit 5 */
    #ifdef INVERT
      bclr  DSCLK_OUT_BITNUM,DSCLK_OUT_PORT  /* create rising edge on DSCLK */
    #else

⌨️ 快捷键说明

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