/sys/arm/stm32l031x6/rtc_test/u8x8cb.c

https://github.com/olikraus/u8g2 · C · 112 lines · 62 code · 13 blank · 37 comment · 5 complexity · 166c4ad91e75437abb6993af3728fe85 MD5 · raw file

  1. /*
  2. u8x8cb.c
  3. STM32L031
  4. PA9: Clock
  5. PA10: Data
  6. Both lines have a pullup resistor
  7. */
  8. #include "stm32l031xx.h"
  9. #include "delay.h"
  10. #include "u8x8.h"
  11. uint8_t u8x8_gpio_and_delay_stm32l0(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr)
  12. {
  13. switch(msg)
  14. {
  15. case U8X8_MSG_GPIO_AND_DELAY_INIT:
  16. /* only support for software I2C*/
  17. RCC->IOPENR |= RCC_IOPENR_IOPAEN; /* Enable clock for GPIO Port A */
  18. __NOP();
  19. __NOP();
  20. GPIOA->MODER &= ~GPIO_MODER_MODE10; /* clear mode for PA10 */
  21. //GPIOA->MODER |= GPIO_MODER_MODE10_0; /* Output mode for PA10 */
  22. GPIOA->OTYPER &= ~GPIO_OTYPER_OT_10; /* no open drain for PA10 */
  23. GPIOA->OSPEEDR &= ~GPIO_OSPEEDER_OSPEED10; /* low speed for PA10 */
  24. GPIOA->PUPDR &= ~GPIO_PUPDR_PUPD10; /* no pullup/pulldown for PA10 */
  25. //GPIOA->BSRR = GPIO_BSRR_BS_10; /* atomic set PA10 */
  26. GPIOA->MODER &= ~GPIO_MODER_MODE9; /* clear mode for PA9 */
  27. //GPIOA->MODER |= GPIO_MODER_MODE9_0; /* Output mode for PA9 */
  28. GPIOA->OTYPER &= ~GPIO_OTYPER_OT_9; /* no open drain for PA9 */
  29. GPIOA->OSPEEDR &= ~GPIO_OSPEEDER_OSPEED9; /* low speed for PA9 */
  30. GPIOA->PUPDR &= ~GPIO_PUPDR_PUPD9; /* no pullup/pulldown for PA9 */
  31. //GPIOA->BSRR = GPIO_BSRR_BS_9; /* atomic set PA9 */
  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. GPIOA->MODER &= ~GPIO_MODER_MODE9; /* clear mode for PA10 */
  53. GPIOA->MODER |= GPIO_MODER_MODE9_0; /* Output mode for PA10 */
  54. GPIOA->BSRR = GPIO_BSRR_BR_9; /* atomic clr PA9 */
  55. }
  56. else
  57. {
  58. //GPIOA->BSRR = GPIO_BSRR_BS_9; /* atomic set PA9 */
  59. GPIOA->MODER &= ~GPIO_MODER_MODE9; /* clear mode for PA9: input mode */
  60. }
  61. break;
  62. case U8X8_MSG_GPIO_I2C_DATA:
  63. if ( arg_int == 0 )
  64. {
  65. GPIOA->MODER &= ~GPIO_MODER_MODE10; /* clear mode for PA10 */
  66. GPIOA->MODER |= GPIO_MODER_MODE10_0; /* Output mode for PA10 */
  67. GPIOA->BSRR = GPIO_BSRR_BR_10; /* atomic clr PA10 */
  68. }
  69. else
  70. {
  71. //GPIOA->BSRR = GPIO_BSRR_BS_10; /* atomic set PA10 */
  72. // input mode
  73. GPIOA->MODER &= ~GPIO_MODER_MODE10; /* clear mode for PA10: input mode */
  74. }
  75. break;
  76. /*
  77. case U8X8_MSG_GPIO_MENU_SELECT:
  78. u8x8_SetGPIOResult(u8x8, Chip_GPIO_GetPinState(LPC_GPIO, KEY_SELECT_PORT, KEY_SELECT_PIN));
  79. break;
  80. case U8X8_MSG_GPIO_MENU_NEXT:
  81. u8x8_SetGPIOResult(u8x8, Chip_GPIO_GetPinState(LPC_GPIO, KEY_NEXT_PORT, KEY_NEXT_PIN));
  82. break;
  83. case U8X8_MSG_GPIO_MENU_PREV:
  84. u8x8_SetGPIOResult(u8x8, Chip_GPIO_GetPinState(LPC_GPIO, KEY_PREV_PORT, KEY_PREV_PIN));
  85. break;
  86. case U8X8_MSG_GPIO_MENU_HOME:
  87. u8x8_SetGPIOResult(u8x8, Chip_GPIO_GetPinState(LPC_GPIO, KEY_HOME_PORT, KEY_HOME_PIN));
  88. break;
  89. */
  90. default:
  91. u8x8_SetGPIOResult(u8x8, 1);
  92. break;
  93. }
  94. return 1;
  95. }