u8x8cb.c 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  1. /*
  2. u8x8cb.c
  3. */
  4. #include "chip.h"
  5. #include "delay.h"
  6. #include "u8x8.h"
  7. /* although we use SW I2C, use the HW pins for later upgrade */
  8. #define I2C_CLOCK_PIN 13
  9. #define I2C_CLOCK_PORT 0
  10. #define I2C_DATA_PIN 17
  11. #define I2C_DATA_PORT 0
  12. uint8_t u8x8_gpio_and_delay_lpc824(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr)
  13. {
  14. switch(msg)
  15. {
  16. case U8X8_MSG_GPIO_AND_DELAY_INIT:
  17. /* only support for software I2C*/
  18. Chip_IOCON_PinMuxSet(LPC_IOCON, IOCON_PIO13, PIN_MODE_PULLUP); /* clk */
  19. Chip_IOCON_PinMuxSet(LPC_IOCON, IOCON_PIO17, PIN_MODE_PULLUP); /* data */
  20. Chip_GPIO_SetPinDIRInput(LPC_GPIO_PORT, I2C_CLOCK_PORT, I2C_CLOCK_PIN);
  21. Chip_GPIO_SetPinDIRInput(LPC_GPIO_PORT, I2C_DATA_PORT, I2C_DATA_PIN);
  22. /*
  23. Chip_IOCON_PinMuxSet(LPC_IOCON, KEY_SELECT_PORT, KEY_SELECT_PIN, KEY_SELECT_FN|IOCON_MODE_PULLUP);
  24. Chip_GPIO_SetPinDIRInput(LPC_GPIO, KEY_SELECT_PORT, KEY_SELECT_PIN);
  25. Chip_IOCON_PinMuxSet(LPC_IOCON, KEY_PREV_PORT, KEY_PREV_PIN, IOCON_MODE_PULLUP);
  26. Chip_GPIO_SetPinDIRInput(LPC_GPIO, KEY_PREV_PORT, KEY_PREV_PIN);
  27. Chip_IOCON_PinMuxSet(LPC_IOCON, KEY_NEXT_PORT, KEY_NEXT_PIN, IOCON_MODE_PULLUP);
  28. Chip_GPIO_SetPinDIRInput(LPC_GPIO, KEY_NEXT_PORT, KEY_NEXT_PIN);
  29. Chip_IOCON_PinMuxSet(LPC_IOCON, KEY_HOME_PORT, KEY_HOME_PIN, KEY_HOME_FN|IOCON_MODE_PULLUP);
  30. Chip_GPIO_SetPinDIRInput(LPC_GPIO, KEY_HOME_PORT, KEY_HOME_PIN);
  31. */
  32. break;
  33. case U8X8_MSG_DELAY_NANO:
  34. /* not required for SW I2C */
  35. break;
  36. case U8X8_MSG_DELAY_10MICRO:
  37. /* not used at the moment */
  38. break;
  39. case U8X8_MSG_DELAY_100NANO:
  40. /* not used at the moment */
  41. break;
  42. case U8X8_MSG_DELAY_MILLI:
  43. delay_micro_seconds(arg_int*1000UL);
  44. break;
  45. case U8X8_MSG_DELAY_I2C:
  46. /* arg_int is 1 or 4: 100KHz (5us) or 400KHz (1.25us) */
  47. delay_micro_seconds(arg_int<=2?5:1);
  48. break;
  49. case U8X8_MSG_GPIO_I2C_CLOCK:
  50. if ( arg_int == 0 )
  51. {
  52. Chip_GPIO_SetPinDIROutput(LPC_GPIO_PORT, I2C_CLOCK_PORT, I2C_CLOCK_PIN);
  53. Chip_GPIO_SetPinOutLow(LPC_GPIO_PORT, I2C_CLOCK_PORT, I2C_CLOCK_PIN);
  54. }
  55. else
  56. {
  57. //Chip_GPIO_SetPinOutHigh(LPC_GPIO, I2C_CLOCK_PORT, I2C_CLOCK_PIN);
  58. Chip_GPIO_SetPinDIRInput(LPC_GPIO_PORT, I2C_CLOCK_PORT, I2C_CLOCK_PIN);
  59. }
  60. break;
  61. case U8X8_MSG_GPIO_I2C_DATA:
  62. if ( arg_int == 0 )
  63. {
  64. Chip_GPIO_SetPinDIROutput(LPC_GPIO_PORT, I2C_DATA_PORT, I2C_DATA_PIN);
  65. Chip_GPIO_SetPinOutLow(LPC_GPIO_PORT, I2C_DATA_PORT, I2C_DATA_PIN);
  66. }
  67. else
  68. {
  69. //Chip_GPIO_SetPinOutHigh(LPC_GPIO, I2C_DATA_PORT, I2C_DATA_PIN);
  70. Chip_GPIO_SetPinDIRInput(LPC_GPIO_PORT, I2C_DATA_PORT, I2C_DATA_PIN);
  71. }
  72. break;
  73. /*
  74. case U8X8_MSG_GPIO_MENU_SELECT:
  75. u8x8_SetGPIOResult(u8x8, Chip_GPIO_GetPinState(LPC_GPIO, KEY_SELECT_PORT, KEY_SELECT_PIN));
  76. break;
  77. case U8X8_MSG_GPIO_MENU_NEXT:
  78. u8x8_SetGPIOResult(u8x8, Chip_GPIO_GetPinState(LPC_GPIO, KEY_NEXT_PORT, KEY_NEXT_PIN));
  79. break;
  80. case U8X8_MSG_GPIO_MENU_PREV:
  81. u8x8_SetGPIOResult(u8x8, Chip_GPIO_GetPinState(LPC_GPIO, KEY_PREV_PORT, KEY_PREV_PIN));
  82. break;
  83. case U8X8_MSG_GPIO_MENU_HOME:
  84. u8x8_SetGPIOResult(u8x8, Chip_GPIO_GetPinState(LPC_GPIO, KEY_HOME_PORT, KEY_HOME_PIN));
  85. break;
  86. */
  87. default:
  88. u8x8_SetGPIOResult(u8x8, 1);
  89. break;
  90. }
  91. return 1;
  92. }