full_main.c 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208
  1. /*
  2. * Copyright (c) 2022 OpenLuat & AirM2M
  3. *
  4. * Permission is hereby granted, free of charge, to any person obtaining a copy of
  5. * this software and associated documentation files (the "Software"), to deal in
  6. * the Software without restriction, including without limitation the rights to
  7. * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
  8. * the Software, and to permit persons to whom the Software is furnished to do so,
  9. * subject to the following conditions:
  10. *
  11. * The above copyright notice and this permission notice shall be included in all
  12. * copies or substantial portions of the Software.
  13. *
  14. * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  15. * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
  16. * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
  17. * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
  18. * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
  19. * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
  20. */
  21. #include "app_inc.h"
  22. uint32_t SystemCoreClock;
  23. extern const uint32_t __isr_start_address;
  24. extern const uint32_t __os_heap_start;
  25. extern const uint32_t __ram_end;
  26. //struct lfs_config lfs_cfg;
  27. //struct lfs LFS;
  28. void SystemInit(void)
  29. {
  30. SCB->VTOR = (uint32_t)(&__isr_start_address);
  31. SYSCTRL->FREQ_SEL = 0x20000000 | SYSCTRL_FREQ_SEL_HCLK_DIV_1_2 | (1 << 13) | SYSCTRL_FREQ_SEL_CLOCK_SOURCE_INC | SYSCTRL_FREQ_SEL_XTAL_192Mhz;
  32. #ifndef __DEBUG__
  33. WDT_SetReload(SYSCTRL->PCLK_1MS_VAL * __WDT_TO_MS__);
  34. WDT_ModeConfig(WDT_Mode_CPUReset);
  35. WDT_Enable();
  36. #endif
  37. // QSPI->DEVICE_PARA = (QSPI->DEVICE_PARA & 0xFFFF) | (68 << 16);
  38. #if (__FPU_PRESENT) && (__FPU_USED == 1)
  39. SCB->CPACR |= ((3UL << 10 * 2) | (3UL << 11*2));
  40. #endif
  41. SYSCTRL->CG_CTRL1 = SYSCTRL_APBPeriph_ALL;
  42. SYSCTRL->CG_CTRL2 = SYSCTRL_AHBPeriph_DMA|SYSCTRL_AHBPeriph_LCD;
  43. QSPI_Init(NULL);
  44. QSPI_SetLatency(0);
  45. __enable_irq();
  46. }
  47. void SystemCoreClockUpdate (void) /* Get Core Clock Frequency */
  48. {
  49. SystemCoreClock = HSE_VALUE * (((SYSCTRL->FREQ_SEL & SYSCTRL_FREQ_SEL_XTAL_Mask) >> SYSCTRL_FREQ_SEL_XTAL_Pos) + 1);
  50. }
  51. void vApplicationTickHook( void )
  52. {
  53. //PowerOnTickCnt++;
  54. }
  55. void vApplicationIdleHook( void )
  56. {
  57. }
  58. static int32_t prvUartIrqCB(void *pData, void *pParam)
  59. {
  60. DBG("%x", pData);
  61. }
  62. void Heart_Task(void *param)
  63. {
  64. TickType_t xLastWakeTime;
  65. uint8_t UartID = UART_ID1;
  66. uint8_t Stream = DMA1_STREAM_2;
  67. uint32_t channel = SYSCTRL_PHER_CTRL_DMA_CHx_IF_UART1_TX;
  68. uint8_t Buf[128];
  69. uint8_t start = 0, i;
  70. // uint32_t block = 0;
  71. // uint32_t i;
  72. xLastWakeTime = xTaskGetTickCount();
  73. //Uart_GPIOInit(DBG_UART_TX_PORT, (DBG_UART_TX_AF << 24) | DBG_UART_TX_PIN, DBG_UART_RX_PORT, (DBG_UART_RX_AF << 24) | DBG_UART_RX_PIN);
  74. // Uart_BaseInit(UartID, DBG_UART_BR, 1, prvUartIrqCB);
  75. // DMA_TakeStream(Stream);
  76. // Uart_DMATxInit(UartID, Stream, channel);
  77. // FileSystem_Init();
  78. // do
  79. // {
  80. // DBG_INFO("block%d, test %d", block, start);
  81. // //memset(Buf, start, 64 * 1024);
  82. // for(i = 0; i < 16; i++)
  83. // {
  84. // lfs_cfg.erase(&lfs_cfg, block + i);
  85. // }
  86. // lfs_cfg.read(&lfs_cfg, block, 0, Buf, SPI_FLASH_BLOCK_SIZE);
  87. // for(i = 0; i < SPI_FLASH_BLOCK_SIZE; i++)
  88. // {
  89. // if (Buf[i] != 0xff)
  90. // {
  91. // DBG_INFO("erase fail! %u, %02x", i, Buf[i]);
  92. // break;
  93. // }
  94. // }
  95. // DBG_INFO("erase check ok");
  96. // memset(Buf, start, SPI_FLASH_BLOCK_SIZE);
  97. // lfs_cfg.prog(&lfs_cfg, block, 0, Buf, SPI_FLASH_BLOCK_SIZE);
  98. // memset(Buf, 0xff, SPI_FLASH_BLOCK_SIZE);
  99. // lfs_cfg.read(&lfs_cfg, block, 0, Buf, SPI_FLASH_BLOCK_SIZE);
  100. // for(i = 0; i < SPI_FLASH_BLOCK_SIZE; i++)
  101. // {
  102. // if (Buf[i] != start)
  103. // {
  104. // DBG_INFO("write fail! %u, %02x", i, Buf[i]);
  105. // break;
  106. // }
  107. // }
  108. // DBG_INFO("write check ok");
  109. // block += 16;
  110. // start++;
  111. // DBG_INFO("test done");
  112. // }while(block < lfs_cfg.block_count);
  113. DBG("APP Build %s %s!", __DATE__, __TIME__);
  114. DBG("app heap info start 0x%x, len %u!", (uint32_t)(&__os_heap_start), (uint32_t)(&__ram_end) - (uint32_t)(&__os_heap_start));
  115. for(;;)
  116. {
  117. vTaskDelayUntil( &xLastWakeTime, 2000);
  118. DBG("DSFDSGFDGSFHSF %llu", GetSysTickUS());
  119. // start++;
  120. // memset(Buf, start, sizeof(Buf));
  121. // Uart_DMATx(UartID, Stream, Buf, sizeof(Buf));
  122. switch(start)
  123. {
  124. case 0:
  125. start++;
  126. for(i = HAL_GPIO_2; i < HAL_GPIO_MAX; i++)
  127. {
  128. GPIO_Config(i, 0, 1);
  129. }
  130. break;
  131. case 1:
  132. start++;
  133. for(i = HAL_GPIO_2; i < HAL_GPIO_MAX; i++)
  134. {
  135. GPIO_Config(i, 0, 0);
  136. }
  137. break;
  138. case 2:
  139. start++;
  140. for(i = HAL_GPIO_2; i < HAL_GPIO_MAX; i++)
  141. {
  142. GPIO_PullConfig(i, 0, 0);
  143. GPIO_Config(i, 1, 0);
  144. }
  145. for(i = HAL_GPIO_2; i < HAL_GPIO_MAX; i++)
  146. {
  147. Buf[i] = GPIO_Input(i);
  148. }
  149. for(i = 0; i < 6; i++)
  150. {
  151. DBG("Port %d", i);
  152. DBG_HexPrintf(&Buf[i * 16], 16);
  153. }
  154. break;
  155. default:
  156. start = 0;
  157. for(i = HAL_GPIO_2; i < HAL_GPIO_MAX; i++)
  158. {
  159. GPIO_PullConfig(i, 1, 1);
  160. }
  161. for(i = HAL_GPIO_2; i < HAL_GPIO_MAX; i++)
  162. {
  163. Buf[i] = GPIO_Input(i);
  164. }
  165. for(i = 0; i < 6; i++)
  166. {
  167. DBG("Port %d", i);
  168. DBG_HexPrintf(&Buf[i * 16], 16);
  169. }
  170. break;
  171. }
  172. }
  173. }
  174. int main(void)
  175. {
  176. __NVIC_SetPriorityGrouping(7 - __NVIC_PRIO_BITS);//对于freeRTOS必须这样配置
  177. SystemCoreClockUpdate();
  178. CoreTick_Init();
  179. cm_backtrace_init(NULL, NULL, NULL);
  180. bpool((uint32_t)(&__os_heap_start), (uint32_t)(&__ram_end) - (uint32_t)(&__os_heap_start));
  181. DMA_GlobalInit();
  182. DBG_Init(1);
  183. // DBG("APP Build %s %s!", __DATE__, __TIME__);
  184. // DBG("app heap info start 0x%x, len %u!", (uint32_t)(&__os_heap_start), (uint32_t)(&__ram_end) - (uint32_t)(&__os_heap_start));
  185. //
  186. // DBG_Trace("%x,%x,%x", (&__isr_start_address), (&__os_heap_start), (&__ram_end));
  187. // __enable_irq();
  188. xTaskCreate(Heart_Task, "test task", configMINIMAL_STACK_SIZE, NULL, configMAX_PRIORITIES - 1, NULL);
  189. /* 启动调度,开始执行任务 */
  190. vTaskStartScheduler();
  191. /* 如果系统正常启动是不会运行到这里的,运行到这里极有可能是空闲任务heap空间不足造成创建失败 */
  192. while (1)
  193. {
  194. }
  195. }