board.c 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138
  1. /*
  2. * Copyright (c) 2006-2018, RT-Thread Development Team
  3. *
  4. * SPDX-License-Identifier: Apache-2.0
  5. *
  6. * Change Logs:
  7. * Date Author Notes
  8. * 2009-01-05 Bernard first implementation
  9. */
  10. #include <rthw.h>
  11. #include <rtthread.h>
  12. #include "board.h"
  13. #include "pin_mux.h"
  14. #ifdef BSP_USING_DMA
  15. #include "fsl_dmamux.h"
  16. #include "fsl_edma.h"
  17. #endif
  18. #define NVIC_PRIORITYGROUP_0 0x00000007U /*!< 0 bits for pre-emption priority
  19. 4 bits for subpriority */
  20. #define NVIC_PRIORITYGROUP_1 0x00000006U /*!< 1 bits for pre-emption priority
  21. 3 bits for subpriority */
  22. #define NVIC_PRIORITYGROUP_2 0x00000005U /*!< 2 bits for pre-emption priority
  23. 2 bits for subpriority */
  24. #define NVIC_PRIORITYGROUP_3 0x00000004U /*!< 3 bits for pre-emption priority
  25. 1 bits for subpriority */
  26. #define NVIC_PRIORITYGROUP_4 0x00000003U /*!< 4 bits for pre-emption priority
  27. 0 bits for subpriority */
  28. /* MPU configuration. */
  29. static void BOARD_ConfigMPU(void)
  30. {
  31. /* Disable I cache and D cache */
  32. SCB_DisableICache();
  33. SCB_DisableDCache();
  34. /* Disable MPU */
  35. ARM_MPU_Disable();
  36. /* Region 0 setting */
  37. MPU->RBAR = ARM_MPU_RBAR(0, 0xC0000000U);
  38. MPU->RASR = ARM_MPU_RASR(0, ARM_MPU_AP_FULL, 2, 0, 0, 0, 0, ARM_MPU_REGION_SIZE_512MB);
  39. /* Region 1 setting */
  40. MPU->RBAR = ARM_MPU_RBAR(1, 0x80000000U);
  41. MPU->RASR = ARM_MPU_RASR(0, ARM_MPU_AP_FULL, 2, 0, 0, 0, 0, ARM_MPU_REGION_SIZE_1GB);
  42. /* Region 2 setting */
  43. // spi flash: normal type, cacheable, no bufferable, no shareable
  44. MPU->RBAR = ARM_MPU_RBAR(2, 0x60000000U);
  45. MPU->RASR = ARM_MPU_RASR(0, ARM_MPU_AP_FULL, 0, 0, 1, 0, 0, ARM_MPU_REGION_SIZE_512MB);
  46. /* Region 3 setting */
  47. MPU->RBAR = ARM_MPU_RBAR(3, 0x00000000U);
  48. MPU->RASR = ARM_MPU_RASR(0, ARM_MPU_AP_FULL, 2, 0, 0, 0, 0, ARM_MPU_REGION_SIZE_1GB);
  49. /* Region 4 setting */
  50. MPU->RBAR = ARM_MPU_RBAR(4, 0x00000000U);
  51. MPU->RASR = ARM_MPU_RASR(0, ARM_MPU_AP_FULL, 0, 0, 1, 1, 0, ARM_MPU_REGION_SIZE_128KB);
  52. /* Region 5 setting */
  53. MPU->RBAR = ARM_MPU_RBAR(5, 0x20000000U);
  54. MPU->RASR = ARM_MPU_RASR(0, ARM_MPU_AP_FULL, 0, 0, 1, 1, 0, ARM_MPU_REGION_SIZE_128KB);
  55. /* Region 6 setting */
  56. MPU->RBAR = ARM_MPU_RBAR(6, 0x20200000U);
  57. MPU->RASR = ARM_MPU_RASR(0, ARM_MPU_AP_FULL, 0, 0, 1, 1, 0, ARM_MPU_REGION_SIZE_256KB);
  58. #if defined(BSP_USING_SDRAM)
  59. /* Region 7 setting */
  60. MPU->RBAR = ARM_MPU_RBAR(7, 0x80000000U);
  61. MPU->RASR = ARM_MPU_RASR(0, ARM_MPU_AP_FULL, 0, 0, 1, 1, 0, ARM_MPU_REGION_SIZE_32MB);
  62. /* Region 8 setting */
  63. MPU->RBAR = ARM_MPU_RBAR(8, 0x81E00000U);
  64. MPU->RASR = ARM_MPU_RASR(0, ARM_MPU_AP_FULL, 1, 1, 0, 0, 0, ARM_MPU_REGION_SIZE_2MB);
  65. #endif
  66. /* Enable MPU */
  67. ARM_MPU_Enable(MPU_CTRL_PRIVDEFENA_Msk);
  68. /* Enable I cache and D cache */
  69. SCB_EnableDCache();
  70. SCB_EnableICache();
  71. }
  72. /* This is the timer interrupt service routine. */
  73. void SysTick_Handler(void)
  74. {
  75. /* enter interrupt */
  76. rt_interrupt_enter();
  77. rt_tick_increase();
  78. /* leave interrupt */
  79. rt_interrupt_leave();
  80. }
  81. #ifdef BSP_USING_DMA
  82. void imxrt_dma_init(void)
  83. {
  84. edma_config_t config;
  85. DMAMUX_Init(DMAMUX);
  86. EDMA_GetDefaultConfig(&config);
  87. EDMA_Init(DMA0, &config);
  88. }
  89. #endif
  90. void rt_hw_board_init()
  91. {
  92. BOARD_ConfigMPU();
  93. BOARD_InitPins();
  94. BOARD_BootClockRUN();
  95. NVIC_SetPriorityGrouping(NVIC_PRIORITYGROUP_4);
  96. SysTick_Config(SystemCoreClock / RT_TICK_PER_SECOND);
  97. #ifdef BSP_USING_DMA
  98. imxrt_dma_init();
  99. #endif
  100. #ifdef RT_USING_HEAP
  101. rt_system_heap_init((void *)HEAP_BEGIN, (void *)HEAP_END);
  102. #endif
  103. #ifdef RT_USING_COMPONENTS_INIT
  104. rt_components_board_init();
  105. #endif
  106. #if defined(RT_USING_CONSOLE) && defined(RT_USING_DEVICE)
  107. rt_console_set_device(RT_CONSOLE_DEVICE_NAME);
  108. #endif
  109. }