1 /*-----------------------------------------------------------------------------
3 * Purpose: CMSIS CORE validation tests implementation
4 *-----------------------------------------------------------------------------
5 * Copyright (c) 2017 ARM Limited. All rights reserved.
6 *----------------------------------------------------------------------------*/
8 #include "CV_Framework.h"
11 /*-----------------------------------------------------------------------------
13 *----------------------------------------------------------------------------*/
15 #if defined(__MPU_PRESENT) && __MPU_PRESENT
16 static void ClearMpu(void) {
17 for(uint32_t i = 0U; i < 8U; ++i) {
25 /*-----------------------------------------------------------------------------
27 *----------------------------------------------------------------------------*/
29 /*=======0=========1=========2=========3=========4=========5=========6=========7=========8=========9=========0=========1====*/
31 \brief Test case: TC_MPU_SetClear
33 - Check if ARM_MPU_Load correctly loads MPU table to registers.
35 void TC_MPU_SetClear(void)
37 #if defined(__MPU_PRESENT) && __MPU_PRESENT
38 static const ARM_MPU_Region_t table[] = {
39 { .RBAR = 0U, .RASR = 0U },
40 { .RBAR = ARM_MPU_RBAR(2U, 0x30000000U), .RASR = ARM_MPU_RASR(1U, ARM_MPU_AP_FULL, 0U, 0U, 0U, 0U, 0U, ARM_MPU_REGION_SIZE_128MB) },
41 { .RBAR = 0x50000000U, .RASR = ARM_MPU_RASR(0U, ARM_MPU_AP_FULL, 0U, 0U, 0U, 0U, 0U, ARM_MPU_REGION_SIZE_64MB) }
44 #define ASSERT_MPU_REGION(rnr, region) \
46 ASSERT_TRUE((MPU->RBAR & MPU_RBAR_ADDR_Msk) == (region.RBAR & MPU_RBAR_ADDR_Msk)); \
47 ASSERT_TRUE(MPU->RASR == region.RASR)
51 ARM_MPU_SetRegion(table[1].RBAR, table[1].RASR);
53 ASSERT_MPU_REGION(1U, table[0]);
54 ASSERT_MPU_REGION(2U, table[1]);
55 ASSERT_MPU_REGION(3U, table[0]);
57 ARM_MPU_SetRegionEx(5U, table[2].RBAR, table[2].RASR);
59 ASSERT_MPU_REGION(4U, table[0]);
60 ASSERT_MPU_REGION(5U, table[2]);
61 ASSERT_MPU_REGION(6U, table[0]);
63 ARM_MPU_ClrRegion(5U);
66 ASSERT_TRUE((MPU->RASR & MPU_RASR_ENABLE_Msk) == 0U);
68 #undef ASSERT_MPU_REGION
72 /*=======0=========1=========2=========3=========4=========5=========6=========7=========8=========9=========0=========1====*/
74 \brief Test case: TC_MPU_Load
76 - Check if ARM_MPU_Load correctly loads MPU table to registers.
78 void TC_MPU_Load(void)
80 #if defined(__MPU_PRESENT) && __MPU_PRESENT
81 static const ARM_MPU_Region_t table[] = {
82 { .RBAR = ARM_MPU_RBAR(0U, 0x10000000U), .RASR = ARM_MPU_RASR(1U, ARM_MPU_AP_FULL, 0U, 0U, 0U, 0U, 0U, ARM_MPU_REGION_SIZE_32MB) },
83 { .RBAR = ARM_MPU_RBAR(1U, 0x20000000U), .RASR = ARM_MPU_RASR(1U, ARM_MPU_AP_FULL, 0U, 0U, 0U, 0U, 0U, ARM_MPU_REGION_SIZE_64MB) },
84 { .RBAR = ARM_MPU_RBAR(2U, 0x30000000U), .RASR = ARM_MPU_RASR(1U, ARM_MPU_AP_FULL, 0U, 0U, 0U, 0U, 0U, ARM_MPU_REGION_SIZE_128MB) },
85 { .RBAR = ARM_MPU_RBAR(3U, 0x40000000U), .RASR = ARM_MPU_RASR(1U, ARM_MPU_AP_FULL, 0U, 0U, 0U, 0U, 0U, ARM_MPU_REGION_SIZE_256MB) },
86 { .RBAR = ARM_MPU_RBAR(4U, 0x50000000U), .RASR = ARM_MPU_RASR(1U, ARM_MPU_AP_FULL, 0U, 0U, 0U, 0U, 0U, ARM_MPU_REGION_SIZE_512MB) },
87 { .RBAR = ARM_MPU_RBAR(5U, 0x60000000U), .RASR = ARM_MPU_RASR(1U, ARM_MPU_AP_FULL, 0U, 0U, 0U, 0U, 0U, ARM_MPU_REGION_SIZE_16MB) },
88 { .RBAR = ARM_MPU_RBAR(6U, 0x70000000U), .RASR = ARM_MPU_RASR(1U, ARM_MPU_AP_FULL, 0U, 0U, 0U, 0U, 0U, ARM_MPU_REGION_SIZE_8MB) },
89 { .RBAR = ARM_MPU_RBAR(7U, 0x80000000U), .RASR = ARM_MPU_RASR(1U, ARM_MPU_AP_FULL, 0U, 0U, 0U, 0U, 0U, ARM_MPU_REGION_SIZE_4MB) }
92 #define ASSERT_MPU_REGION(rnr, table) \
94 ASSERT_TRUE((MPU->RBAR & MPU_RBAR_ADDR_Msk) == (table[rnr].RBAR & MPU_RBAR_ADDR_Msk)); \
95 ASSERT_TRUE(MPU->RASR == table[rnr].RASR)
99 ARM_MPU_Load(&(table[0]), 1U);
101 ASSERT_MPU_REGION(0U, table);
103 ARM_MPU_Load(&(table[1]), 5U);
105 ASSERT_MPU_REGION(0U, table);
106 ASSERT_MPU_REGION(1U, table);
107 ASSERT_MPU_REGION(2U, table);
108 ASSERT_MPU_REGION(3U, table);
109 ASSERT_MPU_REGION(4U, table);
110 ASSERT_MPU_REGION(5U, table);
112 ARM_MPU_Load(&(table[6]), 2U);
114 ASSERT_MPU_REGION(5U, table);
115 ASSERT_MPU_REGION(6U, table);
116 ASSERT_MPU_REGION(7U, table);
118 #undef ASSERT_MPU_REGION