porttimer.c 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. #include "at32f403a_407.h"
  2. #include "FreeRTOS.h"
  3. #include "task.h"
  4. #include "port.h"
  5. #include "mb.h"
  6. #include "mbport.h"
  7. #include "mux.h"
  8. #include <stdbool.h>
  9. static void prvvTIMERExpiredISR( void );
  10. BOOL xMBPortTimersInit( USHORT usTim1Timerout50us )
  11. {
  12. crm_clocks_freq_type crm_clocks_freq_struct = {0};
  13. crm_clocks_freq_get(&crm_clocks_freq_struct);
  14. nvic_irq_disable(TMR7_GLOBAL_IRQn);
  15. crm_periph_clock_enable(CRM_TMR7_PERIPH_CLOCK, TRUE);
  16. tmr_base_init(TMR7, (usTim1Timerout50us * 50) - 1, (crm_clocks_freq_struct.ahb_freq / 1000000) - 1);
  17. tmr_cnt_dir_set(TMR7, TMR_COUNT_UP);
  18. NVIC_ClearPendingIRQ(TMR7_GLOBAL_IRQn);
  19. nvic_irq_enable(TMR7_GLOBAL_IRQn, 5, 0);
  20. return TRUE;
  21. }
  22. /* Create an ISR which is called whenever the timer has expired. This function
  23. * must then call pxMBPortCBTimerExpired( ) to notify the protocol stack that
  24. * the timer has expired.
  25. */
  26. static void prvvTIMERExpiredISR( void )
  27. {
  28. ( void )pxMBPortCBTimerExpired( );
  29. }
  30. //
  31. void TMR7_GLOBAL_IRQHandler(void)
  32. {
  33. if(tmr_flag_get(TMR7, TMR_OVF_FLAG) != RESET)
  34. {
  35. tmr_flag_clear(TMR7, TMR_OVF_FLAG);
  36. vMBPortSetWithinException(TRUE);
  37. prvvTIMERExpiredISR();
  38. leds[RX_G].state = LED_OFF;
  39. vMBPortSetWithinException(FALSE);
  40. }
  41. }
  42. //
  43. void vMBPortTimerClose( void )
  44. {
  45. tmr_interrupt_enable(TMR7, TMR_OVF_INT, FALSE);
  46. tmr_counter_enable(TMR7, FALSE);
  47. }
  48. //
  49. void vMBPortTimersEnable()
  50. {
  51. tmr_flag_clear(TMR7, TMR_OVF_FLAG);
  52. tmr_interrupt_enable(TMR7, TMR_OVF_INT, TRUE);
  53. tmr_counter_value_set(TMR7, 0);
  54. tmr_counter_enable(TMR7, TRUE);
  55. }
  56. //
  57. void vMBPortTimersDisable()
  58. {
  59. tmr_flag_clear(TMR7, TMR_OVF_FLAG);
  60. tmr_interrupt_enable(TMR7, TMR_OVF_INT, FALSE);
  61. tmr_counter_value_set(TMR7, 0);
  62. tmr_counter_enable(TMR7, FALSE);
  63. }
  64. //
  65. void vMBPortTimersDelay( USHORT usTimeOutMS )
  66. {
  67. vTaskDelay( usTimeOutMS / portTICK_RATE_MS );
  68. }