You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

77 lines
3.8 KiB

  1. /***************************************************************************
  2. * Copyright (C) 2008 Lou Deluxe *
  3. * lou.openocd012@fixit.nospammail.net *
  4. * *
  5. * This program is free software; you can redistribute it and/or modify *
  6. * it under the terms of the GNU General Public License as published by *
  7. * the Free Software Foundation; either version 2 of the License, or *
  8. * (at your option) any later version. *
  9. * *
  10. * This program is distributed in the hope that it will be useful, *
  11. * but WITHOUT ANY WARRANTY; without even the implied warranty of *
  12. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
  13. * GNU General Public License for more details. *
  14. * *
  15. * You should have received a copy of the GNU General Public License *
  16. * along with this program. If not, see <http://www.gnu.org/licenses/>. *
  17. ***************************************************************************/
  18. #ifndef OPENOCD_JTAG_DRIVERS_RLINK_DTC_CMD_H
  19. #define OPENOCD_JTAG_DRIVERS_RLINK_DTC_CMD_H
  20. /* A command position with the high nybble of 0x0 is reserved for an error condition.
  21. * If executed, it stops the DTC and raises the ERROR flag */
  22. #define DTC_CMD_SHIFT_TMS_BYTES(bytes) ((0x1 << 4) | ((bytes) - 1))
  23. /* Shift 1-16 bytes out TMS. TDI is 0. */
  24. /* Bytes to shift follow. */
  25. #define DTC_CMD_SHIFT_TDI_BYTES(bytes) ((0x2 << 4) | ((bytes) - 1))
  26. /* Shift 1-16 bytes out TDI. TMS is 0. */
  27. /* Bytes to shift follow. */
  28. #define DTC_CMD_SHIFT_TDI_AND_TMS_BYTES(bytes) ((0x3 << 4) | ((bytes) - 1))
  29. /* Shift 1-16 byte pairs out TDI and TMS. */
  30. /* Byte pairs to shift follow in TDI, TMS order. */
  31. #define DTC_CMD_SHIFT_TDO_BYTES(bytes) ((0x4 << 4) | ((bytes) - 1))
  32. /* Shift 1-16 bytes in TDO. TMS is unaffected. */
  33. /* Reply buffer contains bytes shifted in. */
  34. #define DTC_CMD_SHIFT_TDIO_BYTES(bytes) ((0x6 << 4) | ((bytes) - 1))
  35. /* Shift 1-16 bytes out TDI and in TDO. TMS is unaffected. */
  36. #define DTC_CMD_SHIFT_TMS_TDI_BIT_PAIR(tms, tdi, tdo) ((0x8 << 4) | (\
  37. (tms) ? (1 << 0) : 0 \
  38. ) | (\
  39. (tdi) ? (1 << 1) : 0 \
  40. ) | (\
  41. (tdo) ? (1 << 3) : 0 \
  42. ))
  43. /* Single bit shift.
  44. * tms and tdi are the levels shifted out on TMS and TDI, respectively.
  45. * tdo indicates whether a byte will be returned in the reply buffer with its
  46. * least significant bit set to reflect TDO
  47. * Care should be taken when tdo is zero, as the underlying code actually does put
  48. * that byte in the reply buffer. Setting tdo to zero just moves the pointer back.
  49. * The result is that if this command is executed when the reply buffer is already full,
  50. * a byte will be written erroneously to memory not belonging to the reply buffer.
  51. * This could be worked around at the expense of DTC code space and speed. */
  52. #define DTC_CMD_SHIFT_TMS_BITS(bits) ((0x9 << 4) | ((bits) - 1))
  53. /* Shift 1-8 bits out TMS. */
  54. /* Bits to be shifted out are left justified in the following byte. */
  55. #define DTC_CMD_SHIFT_TDIO_BITS(bits) ((0xe << 4) | ((bits) - 1))
  56. /* Shift 1-8 bits out TDI and in TDO, TMS is unaffected. */
  57. /* Bits to be shifted out are left justified in the following byte. */
  58. /* Bits shifted in are right justified in the byte placed in the reply buffer. */
  59. #define DTC_CMD_STOP (0xf << 4)
  60. /* Stop processing the command buffer and wait for the next one. */
  61. /* A shared status byte is updated with bit 0 set when this has happened,
  62. * and it is cleared when a new command buffer becomes ready.
  63. * The host can poll that byte to see when it is safe to read a reply. */
  64. #endif /* OPENOCD_JTAG_DRIVERS_RLINK_DTC_CMD_H */