gpio.c 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. #include "gpio.h"
  2. //#include "hal.h"
  3. #include "bsp_hal.h"
  4. struct gpio_dev_t *gpio_p;
  5. //static void _gpio_lisr(int vector)
  6. //{
  7. // DEBUG(0, 1, "Enter\n");
  8. // if (vector != IRQ_GPIO_VECTOR)
  9. // hal_system_error(HAL_ERR_UNHANDLED_INTERRUPT);
  10. //
  11. // /* Disable GPIO interrupt */
  12. // uint32_t prv_msk = hal_intc_irq_mask(IRQ_GPIO_VECTOR);
  13. //
  14. // /* Get int state and then clear it */
  15. // unsigned int int_sr = IN32(GPIOC_INT_RAW_STATE);
  16. // gpio_p->int_data = int_sr;
  17. // OUT32(GPIOC_INT_CLEAR, int_sr);
  18. //
  19. // /* Clean GPIO pending */
  20. // hal_intc_irq_clean(IRQ_GPIO_VECTOR);
  21. //
  22. // /* Enable higher priority interrupt */
  23. // /* comment it to disable nested interrupt */
  24. // GIE_ENABLE();
  25. // hal_raise_bh(&gpio_p->hisr);
  26. //
  27. // GIE_DISABLE();
  28. // /* - Enable GPIO interrupt */
  29. // hal_intc_irq_unmask(prv_msk);
  30. //}
  31. int gpio_init(struct gpio_dev_t *gpio)
  32. {
  33. // int status = HAL_SUCCESS;
  34. // int core_intl;
  35. //
  36. // /* initialize global gpio pointer */
  37. // gpio_p = gpio;
  38. // core_intl = hal_global_int_ctl(HAL_DISABLE_INTERRUPTS);
  39. //
  40. // /* INTC */
  41. // // - Disable GPIO interrupt
  42. // hal_intc_irq_disable(IRQ_GPIO_VECTOR);
  43. // // - Clear GPIO interrupt status
  44. // hal_intc_irq_clean(IRQ_GPIO_VECTOR);
  45. // // - Setup #PENIRQ trigger mode - edge trigger
  46. // // - Setup #PENIRQ trigger level - active high
  47. // hal_intc_irq_config(IRQ_GPIO_VECTOR, IRQ_EDGE_TRIGGER, IRQ_ACTIVE_HIGH);
  48. //
  49. //
  50. // /* GPIO */
  51. // /* falling, interrupt when pressed */
  52. // //OUT32(GPIOC_INT_RISE_NEG, 0xFFFFFFFF);
  53. // /* rising, interrupt when released */
  54. // OUT32(GPIOC_INT_RISE_NEG, 0x0);
  55. // /* enable all gpio interrupt GPIO1-5*/
  56. // OUT32(GPIOC_INT_ENABLE, 0x3E);
  57. // /* set the max value to debounce */
  58. // OUT32(GPIOC_INT_BOUNCE_PRESCALE, 0xFFFF);
  59. // /* enable debounce */
  60. // OUT32(GPIOC_INT_BOUNCE_ENABLE, 0x3E);
  61. //
  62. // status = hal_register_isr(IRQ_GPIO_VECTOR, _gpio_lisr, (void*)0);
  63. //
  64. // if (status != HAL_SUCCESS){
  65. // DEBUG(1, 1, "Failed to register GPIO driver LISR!\n");
  66. // return status;
  67. // }
  68. //
  69. // status = hal_create_bh(&gpio->hisr);
  70. // if (status != HAL_SUCCESS){
  71. // DEBUG(1, 1, "Failed to create GPIO driver HISR!\n");
  72. // return status;
  73. // }
  74. //
  75. // // - Enable GPIO interrupt
  76. // hal_intc_irq_enable(IRQ_GPIO_VECTOR);
  77. //
  78. // /* Restore CPU interrupt controller to previous level */
  79. // hal_global_int_ctl(core_intl);
  80. // return status;
  81. return 0;
  82. }