dapa.c

来自「Micro In-System Programmer Brief Install」· C语言 代码 · 共 1,286 行 · 第 1/3 页

C
1,286
字号
  ser_ctrl = 0;#endif}voidTDAPA::SerialWriteCtrl(){#ifdef TIOCMGET  ioctl(ppdev_fd, TIOCMSET, &ser_ctrl);#endif}voidTDAPA::OutReset(int b)  /* FALSE means active Reset at the AVR */ {  if (reset_invert)    b = !b;  Info(4, "Reseting: %d\n", b);  switch (pa_type) {  case PAT_DAPA:    if (b) par_ctrl |= DAPA_RESET; else par_ctrl &= ~DAPA_RESET;    ParportWriteCtrl();    break;  case PAT_STK200:    if (b) par_data |= STK2_RESET; else par_data &= ~STK2_RESET;    ParportWriteData();    break;  case PAT_ABB:    if (b) par_data |= ABB_RESET; else par_data &= ~ABB_RESET;    ParportWriteData();    break;  case PAT_ATDH:    if (b) par_ctrl |= ATDH_RESET; else par_ctrl &= ~ATDH_RESET;    ParportWriteCtrl();    break;  case PAT_PARAVRISP:    if (b) par_data |= AISP_RESET; else par_data &= ~AISP_RESET;    ParportWriteData();    break;  case PAT_BSD:    if (b) par_data |= BSD_RESET; else par_data &= ~BSD_RESET;    ParportWriteData();    break;  case PAT_FBPRG:    if (b) par_data |= FBPRG_RESET; else par_data &= ~FBPRG_RESET;    ParportWriteData();    break;  case PAT_DT006:    if (b) par_data |= DT006_RESET; else par_data &= ~DT006_RESET;    ParportWriteData();    break;  case PAT_ETT:    if (b) par_data |= ETT_RESET; else par_data &= ~ETT_RESET;    ParportWriteData();    break;  case PAT_MAXI:    if (b) par_data |= MAXI_RESET; else par_data &= ~MAXI_RESET;    ParportWriteData();    break;  case PAT_XIL:    if (b) par_data |= XIL_RESET; else par_data &= ~XIL_RESET;    ParportWriteData();    break;  case PAT_DM04:    break;  case PAT_DASA:#ifdef TIOCMGET    SerialReadCtrl();    if (b) ser_ctrl |= TIOCM_RTS; else ser_ctrl &= ~TIOCM_RTS;    SerialWriteCtrl();#endif /* TIOCMGET */    break;  case PAT_DASA2:#if defined(TIOCMGET) && defined(TIOCCBRK)    ioctl(ppdev_fd, b ? TIOCCBRK : TIOCSBRK, 0);#endif /* TIOCMGET */    break; case PAT_DASA3:#if defined(TIOCMGET)    if (!b) ser_ctrl |= TIOCM_DTR; else ser_ctrl &= ~TIOCM_DTR;    SerialWriteCtrl();#endif /* TIOCMGET */    break;  }  Delay_usec(b ? reset_high_time : RESET_LOW_TIME );}voidTDAPA::OutSck(int b){  if (sck_invert)    b = !b;#ifdef DEBUG1  printf("%c",(b)?'S':'s');#endif  switch (pa_type) {  case PAT_DAPA:    if (b) par_ctrl &= ~DAPA_SCK; else par_ctrl |= DAPA_SCK;    ParportWriteCtrl();    break;  case PAT_DM04:    if (b) par_ctrl &= ~DM04_SCK; else par_ctrl |= DM04_SCK;    ParportWriteCtrl();    break;  case PAT_STK200:    if (b) par_data |= STK2_SCK; else par_data &= ~STK2_SCK;    ParportWriteData();    break;  case PAT_ABB:    if (b) par_data |= ABB_SCK; else par_data &= ~ABB_SCK;    ParportWriteData();    break;  case PAT_ATDH:    if (b) par_ctrl |= ATDH_SCK; else par_ctrl &= ~ATDH_SCK;    ParportWriteCtrl();    break;  case PAT_PARAVRISP:    if (b) par_data |= AISP_SCK; else par_data &= ~AISP_SCK;    ParportWriteData();    break;  case PAT_BSD:    if (b) par_data |= BSD_SCK; else par_data &= ~BSD_SCK;    ParportWriteData();    break;  case PAT_FBPRG:    if (b) par_data |= FBPRG_SCK; else par_data &= ~FBPRG_SCK;    ParportWriteData();    break;  case PAT_DT006:    if (b) par_data |= DT006_SCK; else par_data &= ~DT006_SCK;    ParportWriteData();    break;  case PAT_ETT:    if (b) par_data |= ETT_SCK; else par_data &= ~ETT_SCK;    ParportWriteData();    break;    case PAT_MAXI:    if (b) par_data |= MAXI_SCK; else par_data &= ~MAXI_SCK;    ParportWriteData();    break;  case PAT_XIL:    if (b) par_data |= XIL_SCK; else par_data &= ~XIL_SCK;    ParportWriteData();    break;  case PAT_DASA:#if defined(TIOCMGET)    SerialReadCtrl();    if (b) ser_ctrl |= TIOCM_DTR; else ser_ctrl &= ~TIOCM_DTR;    SerialWriteCtrl();#endif /* TIOCMGET */    break;  case PAT_DASA2:  case PAT_DASA3:#if defined(TIOCMGET)    if (b) ser_ctrl |= TIOCM_RTS; else ser_ctrl &= ~TIOCM_RTS;    SerialWriteCtrl();#endif /* TIOCMGET */    break;  }}voidTDAPA::OutEnaReset(int b){  bool no_ps2_hack = GetCmdParam("-dno-ps2-hack", false);  switch (pa_type) {  case PAT_DAPA:  case PAT_FBPRG:  case PAT_ATDH:  case PAT_DT006:  case PAT_ETT:  case PAT_MAXI:    if (b) {      ParportSetDir(0);    } else if (!no_ps2_hack) {      /* No special enable line on these interfaces, for PAT_DAPA         this only disables the data line (MOSI) and not SCK.  */      ParportSetDir(1);    }    break;  case PAT_STK200:    if (b) {      /* Make sure outputs are enabled.  */      ParportSetDir(0);      SckDelay();      par_data &= ~STK2_ENA1;      ParportWriteData();    } else {      par_data |= STK2_ENA1;      ParportWriteData();      if (!no_ps2_hack) {        /* Experimental: disable outputs (PS/2 parallel port), for cheap	   STK200-like cable without the '244.  Should work with the real           STK200 too (disabled outputs should still have pull-up resistors,	   ENA1 and ENA2 are high, and the '244 remains disabled).	   This way the SPI pins can be used by the application too.	   Please report if it doesn't work on some parallel ports.  */	SckDelay();	ParportSetDir(1);      }    }    break;  case PAT_ABB:    if (b) {      ParportSetDir(0);      par_ctrl |= ABB_EN;      ParportWriteCtrl();    } else {      par_ctrl &= ~ABB_EN;      ParportWriteCtrl();      if (!no_ps2_hack) {	SckDelay();	ParportSetDir(1);      }    }    break;  case PAT_PARAVRISP:    if (b) {      ParportSetDir(0);      SckDelay();      par_data &= ~AISP_ENA;      ParportWriteData();    } else {      par_data |= AISP_ENA;      ParportWriteData();      if (!no_ps2_hack) {	SckDelay();	ParportSetDir(1);      }    }    break;  case PAT_BSD:    if (b) {      ParportSetDir(0);      SckDelay();      par_data &= ~BSD_ENA;      ParportWriteData();    } else {      par_data |= BSD_ENA;      ParportWriteData();      if (!no_ps2_hack) {	SckDelay();	ParportSetDir(1);      }    }    break;  case PAT_XIL:    if (b) {      ParportSetDir(0);      par_data &= ~XIL_ENA;      ParportWriteData();    } else {      par_data |= XIL_ENA;      ParportWriteData();      if (!no_ps2_hack) {	SckDelay();	ParportSetDir(1);      }    }    break;  case PAT_DASA:  case PAT_DASA2:  case PAT_DASA3:  case PAT_DM04:    break;  }}voidTDAPA::OutEnaSck(int b){  switch (pa_type) {  case PAT_STK200:    if (b)      par_data &= ~(STK2_ENA2 | STK2_LED);    else      par_data |= (STK2_ENA2 | STK2_LED);    ParportWriteData();    break;  case PAT_DAPA:  case PAT_ABB:  case PAT_ATDH:  case PAT_PARAVRISP:  case PAT_BSD:  case PAT_FBPRG:  case PAT_DT006:  case PAT_ETT:  case PAT_MAXI:  case PAT_XIL:  case PAT_DM04:  case PAT_DASA:  case PAT_DASA2:  case PAT_DASA3:    /* no separate enable for SCK and MOSI */    break;  }}voidTDAPA::PulseSck(){  SckDelay();  OutSck(1);  SckDelay();  OutSck(0);}voidTDAPA::PulseReset(){  /* necessary delays already included in these methods */  OutReset(1);  OutReset(0);}voidTDAPA::OutData(int b){  if (mosi_invert)    b = !b;#ifdef DEBUG1  printf("%c",(b)?'D':'d');#endif  switch (pa_type) {  case PAT_DAPA:    if (b) par_data |= DAPA_DOUT; else par_data &= ~DAPA_DOUT;    ParportWriteData();    break;  case PAT_STK200:    if (b) par_data |= STK2_DOUT; else par_data &= ~STK2_DOUT;    ParportWriteData();    break;  case PAT_ABB:    if (b) par_data |= ABB_DOUT; else par_data &= ~ABB_DOUT;    ParportWriteData();    break;  case PAT_ATDH:    if (b) par_data |= ATDH_DOUT; else par_data &= ~ATDH_DOUT;    ParportWriteData();    break;  case PAT_PARAVRISP:    if (b) par_data |= AISP_DOUT; else par_data &= ~AISP_DOUT;    ParportWriteData();    break;  case PAT_BSD:    if (b) par_data |= BSD_DOUT; else par_data &= ~BSD_DOUT;    ParportWriteData();    break;  case PAT_FBPRG:    if (b) par_data |= FBPRG_DOUT; else par_data &= ~FBPRG_DOUT;    ParportWriteData();    break;  case PAT_DT006:    if (b) par_data |= DT006_DOUT; else par_data &= ~DT006_DOUT;    ParportWriteData();    break;  case PAT_ETT:    if (b) par_ctrl |= ETT_DOUT; else par_ctrl &= ~ETT_DOUT;    ParportWriteCtrl();    break;  case PAT_MAXI:    if (b) par_data |= MAXI_DOUT; else par_data &= ~MAXI_DOUT;    ParportWriteData();    break;  case PAT_XIL:    if (b) par_data |= XIL_DOUT; else par_data &= ~XIL_DOUT;    ParportWriteData();    break;  case PAT_DM04:    if (b) par_ctrl |= DM04_DOUT; else par_ctrl &= ~DM04_DOUT;    ParportWriteCtrl();    break;  case PAT_DASA:#if defined(TIOCMGET) && defined(TIOCCBRK)    ioctl(ppdev_fd, b ? TIOCSBRK : TIOCCBRK, 0);#endif /* TIOCMGET */    break;  case PAT_DASA2:

⌨️ 快捷键说明

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