亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? bdm.c

?? HCS08仿真器資料:資料詳細
?? C
?? 第 1 頁 / 共 5 頁
字號:
    bdm_status.sync_length=(time<<1)+(time<<3);   /* multiply by 10 to get the time in 60MHz ticks */
  #else
    bdm_status.sync_length=time*(60/BUS_FREQUENCY); /* if not 3 or 6 then do it the stupid way... */
  #endif
  bdm_status.speed = SYNC_SUPPORTED; /* SYNC feature is supported by the target */
  return(0);
}

/* waits 64 BDM cycles of the target MCU */
void bdm_wait64(void) {
  asm {
    LDA  bdm_status.wait64_cnt  /* number of loop iterations to wait */
  loop:  
    DBNZA loop                  /* 3 cycles per iteration */
  }
}

/* waits 150 BDM cycles of the target MCU */
void bdm_wait150(void) {
  asm {
    LDA  bdm_status.wait150_cnt  /* number of loop iterations to wait */
  loop:  
    DBNZA loop                  /* 3 cycles per iteration */
  }
}

/* enables ACKN and prepares the timer for easy ACKN timeout use */
void bdm_ackn_init(void) {
  T1MOD = ACKN_TIMEOUT * BUS_FREQUENCY;  /* the timer will set the TOF flag as soon as the timeout time is reached */
  T1SC = T1SC_TRST_MASK;    /* start the timer, prescaler = 1 */
  T1SC0 = T1SC0_ELS0A_MASK;	/* capture rising edges */
  bdm_status.ackn = ACKN; /* switch ACKN on */
  BDM_CMD_ACK_ENABLE();   /* send the enable command to the target */
}

/* waits for ACKN pulse from the target */
void bdm_ackn(void) {
  T1SC = T1SC_TRST_MASK;                      /* clear the TOF flag if set and restart the timer */
  T1SC_TOF = 0;                              /* clear TOF */
  while ((T1SC0_CH0F==0)&&(T1SC_TOF==0));     /* wait for capture or timeout */  
  T1SC0 = T1SC0_ELS0A_MASK;                   /* capture rising edge, clear capture flag */
  if (T1SC_TOF) {
    /* timeout */
    bdm_status.ackn = WAIT;                 /* switch the ackn feature off */
  }
}

/* selects Rx and Tx routine to be used according to SYNC length in bdm_status structure */
/* returns 0 on success and 1 when no appropriate function can be found */
unsigned char bdm_rx_tx_select(void) {
  signed char i;
  bdm_rx_ptr = bdm_empty_rx_tx;                         /* clear the pointers */
  bdm_tx_ptr = bdm_empty_rx_tx;
  for (i=(sizeof(bdm_tx_sel_tresholds)/2)-1;i>=0;i--) { /* search through the table */
    if ((bdm_status.sync_length*2)>=bdm_tx_sel_tresholds[i]) {
      bdm_tx_ptr = bdm_tx_sel_ptrs[i];                  /* is SYNC is >=, select this routine */
      break;                                            /* and finish the search */
    }
  }
  if (bdm_tx_ptr==bdm_empty_rx_tx) return(1);           /* check if valid routine has been found */
  for (i=(sizeof(bdm_rx_sel_tresholds)/2)-1;i>=0;i--) { /* do the same for Rx as well */
    if ((bdm_status.sync_length*2)>=bdm_rx_sel_tresholds[i]) {
      bdm_rx_ptr = bdm_rx_sel_ptrs[i];
      break;
    }
  }
  if (bdm_rx_ptr==bdm_empty_rx_tx) return(1);
  /* there is plenty of overhead: JSR, LDA and RTS of the WAIT, RTS from the previous routine, JSR to the next routine: at least 21 cycles */
  /* cannot subtract more than the smallest possible result -1 as the number must be > 0 */
  bdm_status.wait64_cnt = (bdm_status.sync_length*2)/(3*(60/BUS_FREQUENCY)*128/64)-6; 
  bdm_status.wait150_cnt =(bdm_status.sync_length*2)/(3*(60/BUS_FREQUENCY)*128/150)-7; 
  return(0);
}

/* when no function appropriate for the target speed can be found the following routine is selected */
/* this is just to make things safe and to make sure there is a place to jump to in such a case */
unsigned char bdm_empty_rx_tx(void) {
  command_buffer[0]=CMD_FAILED; /* if BDM command is executed with this routine set as either Tx or Rx it has failed... */
  return(0);
}

/* initialises I/O pins and internal variables of the module */
void bdm_init() {
  bdm_status.ackn = WAIT;				  /* select default behaviour & values */
  bdm_status.target_type = HC12; 
  bdm_status.reset = NO_RESET_ACTIVITY;
  bdm_status.speed = NO_INFO;
  POCR_PAP=1;                     /* enable pullups on RESET_OUT, RESET_IN and BDM_DRIVE */
  RESET_IN_DDR &= ~RESET_IN_MASK; /* RESET_IN is input */
  RESET_OUT = 1;                  /* RESET_OUT inactive */
  RESET_OUT_DDR &= ~RESET_OUT_MASK;/* RESET_OUT is input for the moment, only turn it out when needed as Rx routines interfere with RESET_OUT */  
  
  RESET_DR = 0; //Default is B to A for Input
  RESET_DR_DDR |= RESET_DR_MASK;  // Set as output to Drive the buffer
 
  BDM_IN_DDR &= ~BDM_IN_MASK;     /* BDM_IN is input */
  BDM_OUT = 1;                    /* idle state of BDM line is high */
  BDM_OUT_DDR |= BDM_OUT_MASK;    /* BDM_OUT is output */     
  BDM_DIR2 = 1;                   /* prepare to drive the BDM once DIR2 is turned to output */
  BDM_DIR2_DDR &= ~BDM_DIR2_MASK; /* turn BDM_DIR2 to input */
  BDM_DIR1 = 0;                   /* do not drive the BDM */
  BDM_DIR1_DDR |= BDM_DIR1_MASK;  /* turn BDM_DIR1 to output */  
  /* now give the BDM interface enough time to soft reset in case it was doing something before */
  T1MOD = SOFT_RESET * BUS_FREQUENCY;  /* load T1MOD with the longest SOFT RESET time possible */
  T1SC = T1SC_TRST_MASK;                /* restart the timer */
  T1SC_TOF = 0;                        /* clear TOF */
  while(T1SC_TOF==0);                  /* wait for timeout */
  KBIER = RESET_IN_MASK;          /* enable RESET_IN as keyboard pin */
  KBSCR = KBSCR_ACKK_MASK;        /* acknowledge any pending interrupt and enable KBD to cause IRQ (once enabled) */
}

/* prepares transmit of BDM data */
/* assumes that BDM_OUT is 1 */
/* interrupts need to be disabled for the duration of all BDM commands */
/* it is up to the caller to see to this */
void bdm_tx_prepare(void) {
  BDM_OUT_PORT = BDM_OUT_MASK | RESET_OUT_MASK; /* make sure BDM will be driven high once the driver is enabled */
  BDM_OUT_DDR = BDM_OUT_MASK;     /* turn DIR1 & RESET_OUT to input (now the only output in PTA register is BDM_OUT) */  
  BDM_DIR2_DDR |= BDM_DIR2_MASK;   /* bring DIR low (start driving the BDM) */
}

/* finishes transmit of BDM data */
void bdm_tx_finish(void) {
  BDM_OUT_PORT =  BDM_OUT_MASK | RESET_OUT_MASK;  /* do not drive RESET nor BDM once DIR1 is output again */
  BDM_DIR2_DDR &= ~BDM_DIR2_MASK;                                              /* stop driving DIR2 low */
  BDM_DIR1_DDR = BDM_DIR1_MASK | BDM_OUT_MASK;                   /* enable DIR1 again, leave RESET_OUT as input */  
}

/* receive 8 bit of data, MSB first */
/* expects DIR1 active and DIR2 inactive */
/* 6.75 - 9.75 MHz */
unsigned char bdm_rx1(void) {
  #pragma NO_RETURN
  asm {
    LDA   #RESET_OUT_MASK	/* contents of A will be driven to PTA in order to switch the driver off */
    
    CLRX                    /* prepare HX to point to PTA */  
    CLRH
    /* bit 7 (MSB) */
   bset 7,0
   com  ,x
   
   //mov #0x10,0
    //STX   ,X                /* drive BDM low */
    STA   ,X                /* switch BDM to high impedance */
    LDX   ,X                /* load X with value on the PTA port (including BDM_IN) */
    PSHX                    /* store the value on the stack */
    CLRX                    /* clear X again */
    /* bit 6 */                
     bset 7,0
   com  ,x
   //mov #0x10,0
    //STX   ,X                /* drive BDM low */
    STA   ,X                /* switch BDM to high impedance */
    LDX   ,X                /* load X with value on the PTA port (including BDM_IN) */
    PSHX                    /* store the value on the stack */
    CLRX                    /* clear X again */
    /* bit 5 */                
     bset 7,0
   com  ,x//mov #0x10,0
    //STX   ,X                /* drive BDM low */
    STA   ,X                /* switch BDM to high impedance */
    LDX   ,X                /* load X with value on the PTA port (including BDM_IN) */
    PSHX                    /* store the value on the stack */
    CLRX                    /* clear X again */
    /* bit 4 */                
     bset 7,0
   com  ,x//mov #0x10,0
    //STX   ,X                /* drive BDM low */
    STA   ,X                /* switch BDM to high impedance */
    LDX   ,X                /* load X with value on the PTA port (including BDM_IN) */
    PSHX                    /* store the value on the stack */
    CLRX                    /* clear X again */
    /* bit 3 */                
     bset 7,0
   com  ,x//mov #0x10,0
    //STX   ,X                /* drive BDM low */
    STA   ,X                /* switch BDM to high impedance */
    LDX   ,X                /* load X with value on the PTA port (including BDM_IN) */
    PSHX                    /* store the value on the stack */
    CLRX                    /* clear X again */
    /* bit 2 */                
     bset 7,0
   com  ,x
   //mov #0x10,0
    //STX   ,X                /* drive BDM low */
    STA   ,X                /* switch BDM to high impedance */
    LDX   ,X                /* load X with value on the PTA port (including BDM_IN) */
    PSHX                    /* store the value on the stack */
    CLRX                    /* clear X again */
    /* bit 1 */                
     bset 7,0
   com  ,x
   //mov #0x10,0
    //STX   ,X                /* drive BDM low */
    STA   ,X                /* switch BDM to high impedance */
    LDX   ,X                /* load X with value on the PTA port (including BDM_IN) */
    PSHX                    /* store the value on the stack */
    CLRX                    /* clear X again */
    /* bit 0 */                
     bset 7,0
   com  ,x
   //mov #0x10,0
    //STX   ,X                /* drive BDM low */
    STA   ,X                /* switch BDM to high impedance */
    LDX   ,X                /* load X with value on the PTA port (including BDM_IN) */
    /* now get the bit values (last value is in X, previous 7 on stack) */
    JMP   rx_stack_decode
  }
}
/* 5.4 - 7.8 MHz */
unsigned char bdm_rx2(void) {
  #pragma NO_RETURN
  asm {
    LDA   #RESET_OUT_MASK	/* contents of A will be driven to PTA in order to switch the driver off */
    CLRX                    /* prepare HX to point to PTA */  
    CLRH
    /* bit 7 (MSB) */
    mov #0x10,0
    //STX   ,X                /* drive BDM low */
    STA   ,X                /* switch BDM to high impedance */
    NOP                     /* wait 1 cycle */
    LDX   ,X                /* load X with value on the PTA port (including BDM_IN) */
    PSHX                    /* store the value on the stack */
    CLRX                    /* clear X again */
    /* bit 6 */                
    mov #0x10,0
    //STX   ,X                /* drive BDM low */
    STA   ,X                /* switch BDM to high impedance */
    NOP                     /* wait 1 cycle */
    LDX   ,X                /* load X with value on the PTA port (including BDM_IN) */
    PSHX                    /* store the value on the stack */
    CLRX                    /* clear X again */
    /* bit 5 */                
    mov #0x10,0
    //STX   ,X                /* drive BDM low */
    STA   ,X                /* switch BDM to high impedance */
    NOP                     /* wait 1 cycle */
    LDX   ,X                /* load X with value on the PTA port (including BDM_IN) */
    PSHX                    /* store the value on the stack */
    CLRX                    /* clear X again */
    /* bit 4 */                
    mov #0x10,0
    //STX   ,X                /* drive BDM low */
    STA   ,X                /* switch BDM to high impedance */
    NOP                     /* wait 1 cycle */
    LDX   ,X                /* load X with value on the PTA port (including BDM_IN) */
    PSHX                    /* store the value on the stack */
    CLRX                    /* clear X again */
    /* bit 3 */                
    mov #0x10,0
    //STX   ,X                /* drive BDM low */
    STA   ,X                /* switch BDM to high impedance */
    NOP                     /* wait 1 cycle */
    LDX   ,X                /* load X with value on the PTA port (including BDM_IN) */
    PSHX                    /* store the value on the stack */
    CLRX                    /* clear X again */
    /* bit 2 */                
    mov #0x10,0
    //STX   ,X                /* drive BDM low */
    STA   ,X                /* switch BDM to high impedance */
    NOP                     /* wait 1 cycle */
    LDX   ,X                /* load X with value on the PTA port (including BDM_IN) */
    PSHX                    /* store the value on the stack */
    CLRX                    /* clear X again */
    /* bit 1 */                
    mov #0x10,0
    //STX   ,X                /* drive BDM low */
    STA   ,X                /* switch BDM to high impedance */
    NOP                     /* wait 1 cycle */
    LDX   ,X                /* load X with value on the PTA port (including BDM_IN) */
    PSHX                    /* store the value on the stack */
    CLRX                    /* clear X again */
    /* bit 0 */                
    mov #0x10,0
    //STX   ,X                /* drive BDM low */
    STA   ,X                /* switch BDM to high impedance */
    NOP                     /* wait 1 cycle */
    LDX   ,X                /* load X with value on the PTA port (including BDM_IN) */
    /* now get the bit values (last value is in X, previous 7 on stack) */
    JMP   rx_stack_decode
  }
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
a4yy欧美一区二区三区| 久久久99久久| 国产欧美一区在线| 亚洲一区二区精品3399| 国产精品一二三| 在线综合视频播放| 亚洲色图一区二区三区| 国产精品一区二区三区四区| 欧美三级视频在线| 亚洲欧洲精品一区二区精品久久久| 五月天网站亚洲| 91香蕉视频mp4| 国产肉丝袜一区二区| 玖玖九九国产精品| 99国产精品99久久久久久| 日韩精品一区二区三区三区免费 | 91精品国产福利在线观看| 亚洲欧洲精品一区二区精品久久久| 激情综合一区二区三区| 欧美高清性hdvideosex| 亚洲一区二区欧美日韩| 色综合色综合色综合色综合色综合| 亚洲精品一区二区三区影院| 美女一区二区视频| 56国语精品自产拍在线观看| 亚洲电影中文字幕在线观看| 色婷婷一区二区三区四区| 中文字幕一区在线观看| av午夜精品一区二区三区| 久久蜜桃av一区精品变态类天堂 | 欧美一区二区三区喷汁尤物| 亚洲丶国产丶欧美一区二区三区| 日本精品一区二区三区高清| 日韩一区有码在线| 色综合色狠狠综合色| 亚洲毛片av在线| 91久久国产最好的精华液| 亚洲精品中文字幕在线观看| 色久综合一二码| 亚洲永久精品大片| 欧美日韩mp4| 丝袜美腿亚洲一区| 日韩欧美的一区| 韩国av一区二区| 中文字幕免费不卡在线| 99免费精品视频| 一区二区三区欧美视频| 欧美精品99久久久**| 久久草av在线| 欧美高清在线一区| 在线观看亚洲精品视频| 亚洲第一在线综合网站| 精品国产一区二区精华| 国产风韵犹存在线视精品| 国产精品久久久久久久久图文区| 91片在线免费观看| 亚洲va国产va欧美va观看| 日韩三级中文字幕| 国产成人精品一区二| 一区二区久久久| 精品久久久久99| 成人动漫视频在线| 亚洲超碰97人人做人人爱| 精品成人私密视频| 99riav一区二区三区| 全部av―极品视觉盛宴亚洲| 中文在线一区二区| 欧美日韩国产精选| 成人午夜看片网址| 日韩黄色免费电影| 中文无字幕一区二区三区| 欧美色爱综合网| 国产综合色在线| 亚洲国产精品久久不卡毛片| 国产欧美一区二区三区在线老狼| 91福利国产精品| 国产精品影音先锋| 五月天中文字幕一区二区| 欧美激情综合五月色丁香| 666欧美在线视频| 99v久久综合狠狠综合久久| 精品在线观看免费| 亚洲国产一区视频| 国产欧美日韩三级| 欧美一级艳片视频免费观看| 91玉足脚交白嫩脚丫在线播放| 狠狠色2019综合网| 亚洲午夜电影网| 中文字幕在线免费不卡| 日韩欧美电影一区| 91.com视频| 日本道在线观看一区二区| 国产精品一二三四五| 蜜臀99久久精品久久久久久软件 | 国产精品青草综合久久久久99| 欧美日韩精品一区二区| 不卡影院免费观看| 国产电影一区在线| 国产一本一道久久香蕉| 日韩影院在线观看| 午夜激情一区二区| 亚洲超碰97人人做人人爱| 亚洲裸体在线观看| 国产精品看片你懂得| 国产亚洲精品福利| 久久影院午夜片一区| 欧美一区二区网站| 777午夜精品免费视频| 欧美性猛交xxxxxxxx| 欧美在线不卡一区| 91福利社在线观看| 欧美在线综合视频| 色激情天天射综合网| 91免费观看在线| 色婷婷亚洲婷婷| 欧美性生活一区| 在线观看一区二区视频| 欧美视频一区二| 欧美猛男男办公室激情| 欧美伦理视频网站| 日韩一级成人av| 久久综合久久鬼色| 国产精品成人一区二区三区夜夜夜| 国产精品美女视频| 亚洲精品欧美激情| 五月婷婷综合在线| 久久99国产精品免费| 国产精品主播直播| av爱爱亚洲一区| 欧美性做爰猛烈叫床潮| 91精品国产免费久久综合| 欧美刺激午夜性久久久久久久| 精品国产欧美一区二区| 久久久国产精品午夜一区ai换脸| 国产精品视频线看| 一区二区三区四区不卡在线| 亚洲成人在线网站| 免费在线观看视频一区| 国产iv一区二区三区| 91捆绑美女网站| 日韩欧美综合一区| 国产三级一区二区| 亚洲综合在线视频| 久久国产精品第一页| 成人国产精品免费| 欧美日韩精品一区二区天天拍小说| 精品久久久久久无| 亚洲人成网站精品片在线观看| 视频一区免费在线观看| 国产精一品亚洲二区在线视频| 91香蕉视频污| 亚洲精品在线观看网站| 亚洲欧美视频在线观看| 久久99国产精品免费| 99久久国产免费看| 欧美一级午夜免费电影| 成人欧美一区二区三区视频网页 | 中文天堂在线一区| 五月综合激情婷婷六月色窝| 国产精品香蕉一区二区三区| 欧洲人成人精品| 国产精品青草综合久久久久99| 五月激情六月综合| av午夜一区麻豆| 欧美成人r级一区二区三区| 亚洲色图19p| 久久国产精品第一页| 欧美视频在线不卡| 亚洲欧美日韩中文播放 | 日韩精品一级中文字幕精品视频免费观看| 精品一区二区三区免费毛片爱| 色女孩综合影院| 中文字幕高清不卡| 国产在线精品一区二区| 欧美三级中文字| 亚洲精品成人悠悠色影视| 精品在线观看免费| 欧美一区二区三区喷汁尤物| 亚洲精品成人精品456| 成人国产免费视频| 国产亚洲欧美日韩在线一区| 免费在线观看不卡| 91精品在线一区二区| 一区二区欧美精品| 日本精品裸体写真集在线观看| 国产精品每日更新在线播放网址| 狠狠色丁香久久婷婷综| 777亚洲妇女| 视频一区视频二区中文| 欧美久久久一区| 五月天亚洲婷婷| 欧美日本一道本| 亚洲国产精品久久久久婷婷884 | 91精品国产综合久久福利| 亚洲男同1069视频| 99re在线视频这里只有精品| 国产午夜精品久久| 成人免费av网站| 国产精品伦理一区二区| 国产成人自拍网|