main.c 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133
  1. /*
  2. * Copyright (c) 2021-2021, RT-Thread Development Team
  3. *
  4. * SPDX-License-Identifier: Apache-2.0
  5. *
  6. * Change Logs:
  7. * Date Author Notes
  8. * 2022-04-24 supperthomas first version
  9. */
  10. #include <stdio.h>
  11. #include "driver/gpio.h"
  12. #include "esp_private/panic_internal.h"
  13. #include "hal/uart_hal.h"
  14. #include "driver/timer.h"
  15. #include "soc/periph_defs.h"
  16. #include "hal/systimer_hal.h"
  17. #include "hal/systimer_ll.h"
  18. #include "esp_intr_alloc.h"
  19. #include "rtthread.h"
  20. #include "rthw.h"
  21. void main_thread_entry(void *parameter)
  22. {
  23. #define BLINK_GPIO 12
  24. gpio_reset_pin(BLINK_GPIO);
  25. gpio_set_direction(BLINK_GPIO, GPIO_MODE_OUTPUT);
  26. while (1)
  27. {
  28. gpio_set_level(BLINK_GPIO, 1);
  29. rt_thread_mdelay(1000);
  30. gpio_set_level(BLINK_GPIO, 0);
  31. rt_thread_mdelay(1000);
  32. }
  33. }
  34. void rt_application_init(void)
  35. {
  36. rt_thread_t tid;
  37. #define RT_MAIN_THREAD_STACK_SIZE 2048
  38. #define RT_MAIN_THREAD_PRIORITY 10
  39. tid = rt_thread_create("main", main_thread_entry, RT_NULL,
  40. RT_MAIN_THREAD_STACK_SIZE, RT_MAIN_THREAD_PRIORITY, 20);
  41. RT_ASSERT(tid != RT_NULL);
  42. rt_thread_startup(tid);
  43. }
  44. //component
  45. static uint32_t uwTick = 0;
  46. static systimer_hal_context_t systimer_hal;
  47. IRAM_ATTR void rt_SysTickIsrHandler(void *arg)
  48. {
  49. systimer_ll_clear_alarm_int(systimer_hal.dev, 1);
  50. rt_interrupt_enter();
  51. rt_tick_increase();
  52. uwTick++;
  53. /* leave interrupt */
  54. rt_interrupt_leave();
  55. systimer_ll_is_alarm_int_fired(systimer_hal.dev, 1);
  56. }
  57. void rt_hw_systick_init(void)
  58. {
  59. uint8_t system_timer_counter=1;
  60. //rt_hw_interrupt_enable(0);
  61. esp_intr_alloc(ETS_SYSTIMER_TARGET1_EDGE_INTR_SOURCE, ESP_INTR_FLAG_IRAM | ESP_INTR_FLAG_LEVEL1, rt_SysTickIsrHandler, &systimer_hal, NULL);
  62. systimer_hal_init(&systimer_hal);
  63. systimer_ll_set_counter_value(systimer_hal.dev, system_timer_counter, 0);
  64. systimer_ll_apply_counter_value(systimer_hal.dev, system_timer_counter);
  65. uint32_t alarm_id = 1 ;
  66. systimer_hal_connect_alarm_counter(&systimer_hal, alarm_id, system_timer_counter);
  67. systimer_hal_set_alarm_period(&systimer_hal, alarm_id, 1000000UL / 1000);
  68. systimer_hal_select_alarm_mode(&systimer_hal, alarm_id, SYSTIMER_ALARM_MODE_PERIOD);
  69. systimer_hal_counter_can_stall_by_cpu(&systimer_hal, 1, 0, true);
  70. systimer_hal_enable_alarm_int(&systimer_hal, alarm_id);
  71. systimer_hal_enable_counter(&systimer_hal, SYSTIMER_LL_COUNTER_OS_TICK);
  72. }
  73. void rt_hw_board_init(void)
  74. {
  75. rt_hw_systick_init();
  76. extern int __heap_start__;
  77. extern int __heap_end__;
  78. printf("%s:%d__heap_start__:%p,__heap_end__:%p\n",__func__,__LINE__,&__heap_start__,&__heap_end__);
  79. rt_system_heap_init((void *)&__heap_start__, (void *)&__heap_end__);
  80. }
  81. static void rtthread_startup(void)
  82. {
  83. rt_hw_interrupt_disable();
  84. /* init board */
  85. rt_hw_board_init();
  86. /* show RT-Thread version */
  87. rt_show_version();
  88. /* timer system initialization */
  89. rt_system_timer_init();
  90. /* scheduler system initialization */
  91. rt_system_scheduler_init();
  92. /* create init_thread */
  93. rt_application_init();
  94. /* timer thread initialization */
  95. rt_system_timer_thread_init();
  96. /* idle thread initialization */
  97. rt_thread_idle_init();
  98. /* start scheduler */
  99. rt_system_scheduler_start();
  100. /* init scheduler system */
  101. /* never reach here */
  102. return ;
  103. }
  104. void app_main(void)
  105. {
  106. /* startup RT-Thread RTOS */
  107. rtthread_startup();
  108. return;
  109. }