board_profile.h 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. #pragma once
  2. #include <stdint.h>
  3. #ifndef MECOFFEE_ARDUINO_16MHZ
  4. #define MECOFFEE_ARDUINO_16MHZ 0
  5. #endif
  6. namespace meCoffee::hardware::board {
  7. constexpr bool kUsesExternalClock = MECOFFEE_ARDUINO_16MHZ != 0;
  8. constexpr uint32_t kClockFrequency = kUsesExternalClock ? 16000000UL : 8000000UL;
  9. constexpr uint16_t kPulseTimerCompare = static_cast<uint16_t>(129UL * (kClockFrequency / 8000000UL) - 1);
  10. constexpr uint8_t kAdcPrescaler = 128;
  11. constexpr uint8_t kGenerationParityPin = kUsesExternalClock ? 11 : 14;
  12. inline uint8_t physicalPin(uint8_t logicalPin) {
  13. if (!kUsesExternalClock) {
  14. return logicalPin;
  15. }
  16. switch (logicalPin) {
  17. case 3: return 3;
  18. case 10: return 4;
  19. case 9: return 5;
  20. case 4: return 6;
  21. case 5: return 7;
  22. case 8: return 8;
  23. case 15: return 9;
  24. case 19: return 10;
  25. case 16: return 12;
  26. default: return logicalPin;
  27. }
  28. }
  29. inline uint8_t analogChannel(uint8_t logicalChannel) {
  30. if (kUsesExternalClock) {
  31. if (logicalChannel == 3) {
  32. return 0;
  33. }
  34. if (logicalChannel == 4) {
  35. return 1;
  36. }
  37. }
  38. return logicalChannel;
  39. }
  40. } // namespace meCoffee::hardware::board