luat_mcu_air101.c 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  1. #include "luat_base.h"
  2. #include "luat_mcu.h"
  3. #include "wm_include.h"
  4. #include "wm_cpu.h"
  5. #include "wm_internal_flash.h"
  6. #include "FreeRTOS.h"
  7. #include "task.h"
  8. #define LUAT_LOG_TAG "mcu"
  9. #include "luat_log.h"
  10. /*
  11. enum CPU_CLK{
  12. CPU_CLK_240M = 2,
  13. CPU_CLK_160M = 3,
  14. CPU_CLK_80M = 6,
  15. CPU_CLK_40M = 12,
  16. CPU_CLK_2M = 240,
  17. };
  18. */
  19. int luat_mcu_set_clk(size_t mhz) {
  20. switch(mhz) {
  21. case 240:
  22. tls_sys_clk_set(CPU_CLK_240M);
  23. break;
  24. case 160:
  25. tls_sys_clk_set(CPU_CLK_160M);
  26. break;
  27. case 80:
  28. tls_sys_clk_set(CPU_CLK_80M);
  29. break;
  30. case 40:
  31. tls_sys_clk_set(CPU_CLK_40M);
  32. break;
  33. case 2:
  34. tls_sys_clk_set(CPU_CLK_2M);
  35. break;
  36. default :
  37. return -1;
  38. }
  39. return 0;
  40. }
  41. int luat_mcu_get_clk(void) {
  42. tls_sys_clk sysclk;
  43. tls_sys_clk_get(&sysclk);
  44. return sysclk.cpuclk;
  45. }
  46. static u8 unique_id[18] = {0};
  47. static u8 unique_id_got = 0;
  48. const char* luat_mcu_unique_id(size_t* t) {
  49. if (!unique_id_got && tls_fls_read_unique_id(unique_id) == 0)
  50. unique_id_got = 1;
  51. *t = unique_id_got ? unique_id[1]+2 : 0;
  52. return unique_id;
  53. }
  54. long luat_mcu_ticks(void) {
  55. return xTaskGetTickCount();
  56. }
  57. uint32_t luat_mcu_hz(void) {
  58. return configTICK_RATE_HZ;
  59. }
  60. #include "wm_include.h"
  61. #include "wm_timer.h"
  62. #include "wm_regs.h"
  63. uint32_t us_timer_ticks = 0;
  64. u8 u64_tick_timer_id = 0;
  65. static void utimer_cb(void* arg) {
  66. us_timer_ticks ++;
  67. }
  68. void luat_mcu_tick64_init(void) {
  69. struct tls_timer_cfg cfg = {0};
  70. cfg.unit = TLS_TIMER_UNIT_US;
  71. cfg.timeout = (u32)(-1);
  72. cfg.is_repeat = 1;
  73. cfg.callback = utimer_cb;
  74. cfg.arg = NULL;
  75. u64_tick_timer_id = tls_timer_create(&cfg);
  76. tls_timer_start(u64_tick_timer_id);
  77. }
  78. uint64_t luat_mcu_tick64(void) {
  79. uint64_t ret = ((uint64_t) us_timer_ticks) << 32;
  80. ret += M32(HR_TIMER0_CNT + 4*u64_tick_timer_id);
  81. return ret;
  82. }
  83. int luat_mcu_us_period(void) {
  84. return 1;
  85. }
  86. uint64_t luat_mcu_tick64_ms(void) {
  87. return luat_mcu_tick64() / 1000;
  88. }
  89. void luat_mcu_set_clk_source(uint8_t source_main, uint8_t source_32k, uint32_t delay) {
  90. LLOGE("not support setXTAL");
  91. }