My Marlin configs for Fabrikator Mini and CTC i3 Pro B
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.

HAL_LCD_pin_routines.c 3.6KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113
  1. /**
  2. * Marlin 3D Printer Firmware
  3. * Copyright (C) 2019 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
  4. *
  5. * Based on Sprinter and grbl.
  6. * Copyright (C) 2011 Camiel Gubbels / Erik van der Zalm
  7. *
  8. * This program is free software: you can redistribute it and/or modify
  9. * it under the terms of the GNU General Public License as published by
  10. * the Free Software Foundation, either version 3 of the License, or
  11. * (at your option) any later version.
  12. *
  13. * This program is distributed in the hope that it will be useful,
  14. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  15. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  16. * GNU General Public License for more details.
  17. *
  18. * You should have received a copy of the GNU General Public License
  19. * along with this program. If not, see <http://www.gnu.org/licenses/>.
  20. *
  21. */
  22. /**
  23. * Low level pin manipulation routines - used by all the drivers.
  24. *
  25. * These are based on the LPC1768 pinMode, digitalRead & digitalWrite routines.
  26. *
  27. * Couldn't just call exact copies because the overhead killed the LCD update speed
  28. * With an intermediate level the softspi was running in the 10-20kHz range which
  29. * resulted in using about about 25% of the CPU's time.
  30. */
  31. #ifdef TARGET_LPC1768
  32. #include <LPC17xx.h>
  33. #include <lpc17xx_pinsel.h>
  34. #include "../../../core/macros.h"
  35. //#include <pinmapping.h>
  36. #define LPC_PORT_OFFSET (0x0020)
  37. #define LPC_PIN(pin) (1UL << pin)
  38. #define LPC_GPIO(port) ((volatile LPC_GPIO_TypeDef *)(LPC_GPIO0_BASE + LPC_PORT_OFFSET * port))
  39. #define INPUT 0
  40. #define OUTPUT 1
  41. #define INPUT_PULLUP 2
  42. uint8_t LPC1768_PIN_PORT(const uint8_t pin);
  43. uint8_t LPC1768_PIN_PIN(const uint8_t pin);
  44. #ifdef __cplusplus
  45. extern "C" {
  46. #endif
  47. // I/O functions
  48. // As defined by Arduino INPUT(0x0), OUTPUT(0x1), INPUT_PULLUP(0x2)
  49. void pinMode_LCD(uint8_t pin, uint8_t mode) {
  50. #define LPC1768_PIN_PORT(pin) ((uint8_t)((pin >> 5) & 0b111))
  51. #define LPC1768_PIN_PIN(pin) ((uint8_t)(pin & 0b11111))
  52. PINSEL_CFG_Type config = { LPC1768_PIN_PORT(pin),
  53. LPC1768_PIN_PIN(pin),
  54. PINSEL_FUNC_0,
  55. PINSEL_PINMODE_TRISTATE,
  56. PINSEL_PINMODE_NORMAL };
  57. switch(mode) {
  58. case INPUT:
  59. LPC_GPIO(LPC1768_PIN_PORT(pin))->FIODIR &= ~LPC_PIN(LPC1768_PIN_PIN(pin));
  60. PINSEL_ConfigPin(&config);
  61. break;
  62. case OUTPUT:
  63. LPC_GPIO(LPC1768_PIN_PORT(pin))->FIODIR |= LPC_PIN(LPC1768_PIN_PIN(pin));
  64. PINSEL_ConfigPin(&config);
  65. break;
  66. case INPUT_PULLUP:
  67. LPC_GPIO(LPC1768_PIN_PORT(pin))->FIODIR &= ~LPC_PIN(LPC1768_PIN_PIN(pin));
  68. config.Pinmode = PINSEL_PINMODE_PULLUP;
  69. PINSEL_ConfigPin(&config);
  70. break;
  71. default:
  72. break;
  73. }
  74. }
  75. void u8g_SetPinOutput(uint8_t internal_pin_number) {
  76. pinMode_LCD(internal_pin_number, 1); // OUTPUT
  77. }
  78. void u8g_SetPinInput(uint8_t internal_pin_number) {
  79. pinMode_LCD(internal_pin_number, 0); // INPUT
  80. }
  81. void u8g_SetPinLevel(uint8_t pin, uint8_t pin_status) {
  82. #define LPC1768_PIN_PORT(pin) ((uint8_t)((pin >> 5) & 0b111))
  83. #define LPC1768_PIN_PIN(pin) ((uint8_t)(pin & 0b11111))
  84. if (pin_status)
  85. LPC_GPIO(LPC1768_PIN_PORT(pin))->FIOSET = LPC_PIN(LPC1768_PIN_PIN(pin));
  86. else
  87. LPC_GPIO(LPC1768_PIN_PORT(pin))->FIOCLR = LPC_PIN(LPC1768_PIN_PIN(pin));
  88. }
  89. uint8_t u8g_GetPinLevel(uint8_t pin) {
  90. #define LPC1768_PIN_PORT(pin) ((uint8_t)((pin >> 5) & 0b111))
  91. #define LPC1768_PIN_PIN(pin) ((uint8_t)(pin & 0b11111))
  92. return (uint32_t)LPC_GPIO(LPC1768_PIN_PORT(pin))->FIOPIN & LPC_PIN(LPC1768_PIN_PIN(pin)) ? 1 : 0;
  93. }
  94. #ifdef __cplusplus
  95. }
  96. #endif
  97. #endif // TARGET_LPC1768