utility.c 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128
  1. #include "FreeRTOS.h"
  2. #include "task.h"
  3. #include "queue.h"
  4. #include "semphr.h"
  5. #include "utility.h"
  6. #include "at32f403a_407_int.h"
  7. #include <stdio.h>
  8. #include <string.h>
  9. volatile unsigned long ulHighFrequencyTimerTicks;
  10. #if 1
  11. // OS stack overflow hook
  12. #if (configCHECK_FOR_STACK_OVERFLOW > 0)
  13. void vApplicationStackOverflowHook( xTaskHandle *pxTask, signed char *pcTaskName )
  14. {
  15. NVIC_SystemReset();
  16. }
  17. #endif
  18. #endif
  19. // OS malloc failed hook
  20. #if (configUSE_MALLOC_FAILED_HOOK > 0)
  21. void vApplicationMallocFailedHook(void)
  22. {
  23. NVIC_SystemReset();
  24. while(1);
  25. }
  26. #endif
  27. //
  28. void print_binary_byte(uint8_t val)
  29. {
  30. for (int i = 7; i >= 0; i--) {
  31. if (val & (1 << i))
  32. printf("1");
  33. else
  34. printf("0");
  35. if (i == 4)
  36. printf(" ");
  37. }
  38. printf("\r\n");
  39. }
  40. //
  41. void print_binary_half_word(uint16_t val)
  42. {
  43. for (int i = 15; i >= 0; i--) {
  44. if (val & (1 << i))
  45. printf("1");
  46. else
  47. printf("0");
  48. if ((i == 12) || (i == 8) || (i == 4))
  49. printf(" ");
  50. }
  51. printf("\r\n");
  52. }
  53. //
  54. void utl_stat_timer_init(void)
  55. {
  56. crm_clocks_freq_type crm_clocks_freq_struct = {0};
  57. crm_periph_clock_enable(CRM_TMR4_PERIPH_CLOCK, TRUE);
  58. crm_clocks_freq_get(&crm_clocks_freq_struct);
  59. tmr_base_init(TMR4, 999, 240 - 1);
  60. tmr_cnt_dir_set(TMR4, TMR_COUNT_UP);
  61. tmr_flag_clear(TMR4, TMR_OVF_FLAG);
  62. NVIC_ClearPendingIRQ(TMR4_GLOBAL_IRQn);
  63. nvic_irq_enable(TMR4_GLOBAL_IRQn, 5, 0);
  64. tmr_counter_enable(TMR4, TRUE);
  65. tmr_interrupt_enable(TMR4, TMR_OVF_INT, TRUE);
  66. }
  67. //
  68. void print_os_stat(void)
  69. {
  70. char *ptr;
  71. ptr = (char*)pvPortMalloc(800);
  72. vTaskList(ptr);
  73. printf(ptr);
  74. printf((char*)"\r\n");
  75. printf((char*)"xPortGetFreeHeapSize = %d\n\r\r\n", xPortGetFreeHeapSize());
  76. memset(ptr, 0, 800);
  77. vTaskGetRunTimeStats(ptr);
  78. printf(ptr);
  79. printf((char*)"\r\n");
  80. vPortFree(ptr);
  81. }
  82. //
  83. void TMR4_GLOBAL_IRQHandler(void)
  84. {
  85. //static uint32_t cnt = 0;
  86. //static uint32_t sec_cnt = 0;
  87. if (tmr_flag_get(TMR4, TMR_OVF_FLAG) != RESET)
  88. {
  89. tmr_flag_clear(TMR4, TMR_OVF_FLAG);
  90. ulHighFrequencyTimerTicks++;
  91. #if 0
  92. cnt++;
  93. if (cnt == 1000) {
  94. cnt = 0;
  95. sec_cnt++;
  96. printf("TIM4 cnt: %u\r\n", sec_cnt);
  97. }
  98. tmr_flag_clear(TMR4, TMR_OVF_FLAG);
  99. ulHighFrequencyTimerTicks++;
  100. #endif
  101. }
  102. }