📄 dapa.c
字号:
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 + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -