AVRPort23.h 1.4 KB

1234567891011121314151617181920212223242526272829303132333435
  1. /*
  2. * kekse23.de AVRPort23
  3. * Copyright (c) 2017, Nicholas Regitz
  4. *
  5. * Diese Datei ist Lizensiert unter der Creative Commons 4.0 CC BY-NC-SA
  6. * https://creativecommons.org/licenses/by-nc-sa/4.0/legalcode
  7. */
  8. /*
  9. portMode(port, pin, mode, state)
  10. portMode2(port, pin, mode)
  11. portRead(port, pin)
  12. portWrite(port, pin, value)
  13. portToggle(port, pin)
  14. */
  15. #define __portGet(port, pin) ((PIN##port >> pin) & 0x01)
  16. #define __portSet(port, pin) ((PORT##port) |= (1 << pin))
  17. #define __portClear(port, pin) ((PORT##port) &= ~(1 << pin))
  18. #define __portToggle(port, pin) ((PIN##port) |= (1 << pin))
  19. #define __portToggle2(port, pin) ((PORT##port) ^= (1 << pin)) //Belegt 4 byte mehr
  20. #define __portInput(port, pin) ((DDR##port) &= ~(1 << pin))
  21. #define __portOutput(port, pin) ((DDR##port) |= (1 << pin))
  22. #define __portMode(port, pin, mode, state) (mode ? __portOutput(port, pin) : __portInput(port, pin)) & (state ? __portSet(port, pin) : __portClear(port, pin))
  23. #define __portModeS(port, pin, mode) (mode ? __portOutput(port, mode) : __portInput(port, mode))
  24. #define __portWrite(port, pin, value) (value ? __portSet(port, pin) : __portClear(port, pin))
  25. #define portMode(args...) __portMode(args)
  26. #define portModeS(args...) __portModeS(args)
  27. #define portRead(args...) __portGet(args)
  28. #define portWrite(args...) __portWrite(args)
  29. #define portToggle(args...) __portToggle(args)