| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121 |
- /*-----------------------------------------------------------------------------
- * Name: CV_MPU_ARMv7.c
- * Purpose: CMSIS CORE validation tests implementation
- *-----------------------------------------------------------------------------
- * Copyright (c) 2017 ARM Limited. All rights reserved.
- *----------------------------------------------------------------------------*/
- #include "CV_Framework.h"
- #include "cmsis_cv.h"
- /*-----------------------------------------------------------------------------
- * Test implementation
- *----------------------------------------------------------------------------*/
- #if defined(__MPU_PRESENT) && __MPU_PRESENT
- static void ClearMpu(void) {
- for(uint32_t i = 0U; i < 8U; ++i) {
- MPU->RNR = i;
- MPU->RBAR = 0U;
- MPU->RASR = 0U;
- }
- }
- #endif
- /*-----------------------------------------------------------------------------
- * Test cases
- *----------------------------------------------------------------------------*/
- /*=======0=========1=========2=========3=========4=========5=========6=========7=========8=========9=========0=========1====*/
- /**
- \brief Test case: TC_MPU_SetClear
- \details
- - Check if ARM_MPU_Load correctly loads MPU table to registers.
- */
- void TC_MPU_SetClear(void)
- {
- #if defined(__MPU_PRESENT) && __MPU_PRESENT
- static const ARM_MPU_Region_t table[] = {
- { .RBAR = 0U, .RASR = 0U },
- { .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) },
- { .RBAR = 0x50000000U, .RASR = ARM_MPU_RASR(0U, ARM_MPU_AP_FULL, 0U, 0U, 0U, 0U, 0U, ARM_MPU_REGION_SIZE_64MB) }
- };
-
- #define ASSERT_MPU_REGION(rnr, region) \
- MPU->RNR = rnr; \
- ASSERT_TRUE((MPU->RBAR & MPU_RBAR_ADDR_Msk) == (region.RBAR & MPU_RBAR_ADDR_Msk)); \
- ASSERT_TRUE(MPU->RASR == region.RASR)
-
- ClearMpu();
-
- ARM_MPU_SetRegion(table[1].RBAR, table[1].RASR);
-
- ASSERT_MPU_REGION(1U, table[0]);
- ASSERT_MPU_REGION(2U, table[1]);
- ASSERT_MPU_REGION(3U, table[0]);
-
- ARM_MPU_SetRegionEx(5U, table[2].RBAR, table[2].RASR);
-
- ASSERT_MPU_REGION(4U, table[0]);
- ASSERT_MPU_REGION(5U, table[2]);
- ASSERT_MPU_REGION(6U, table[0]);
-
- ARM_MPU_ClrRegion(5U);
-
- MPU->RNR = 5U;
- ASSERT_TRUE((MPU->RASR & MPU_RASR_ENABLE_Msk) == 0U);
-
- #undef ASSERT_MPU_REGION
- #endif
- }
-
- /*=======0=========1=========2=========3=========4=========5=========6=========7=========8=========9=========0=========1====*/
- /**
- \brief Test case: TC_MPU_Load
- \details
- - Check if ARM_MPU_Load correctly loads MPU table to registers.
- */
- void TC_MPU_Load(void)
- {
- #if defined(__MPU_PRESENT) && __MPU_PRESENT
- static const ARM_MPU_Region_t table[] = {
- { .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) },
- { .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) },
- { .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) },
- { .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) },
- { .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) },
- { .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) },
- { .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) },
- { .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) }
- };
-
- #define ASSERT_MPU_REGION(rnr, table) \
- MPU->RNR = rnr; \
- ASSERT_TRUE((MPU->RBAR & MPU_RBAR_ADDR_Msk) == (table[rnr].RBAR & MPU_RBAR_ADDR_Msk)); \
- ASSERT_TRUE(MPU->RASR == table[rnr].RASR)
- ClearMpu();
-
- ARM_MPU_Load(&(table[0]), 1U);
-
- ASSERT_MPU_REGION(0U, table);
-
- ARM_MPU_Load(&(table[1]), 5U);
- ASSERT_MPU_REGION(0U, table);
- ASSERT_MPU_REGION(1U, table);
- ASSERT_MPU_REGION(2U, table);
- ASSERT_MPU_REGION(3U, table);
- ASSERT_MPU_REGION(4U, table);
- ASSERT_MPU_REGION(5U, table);
- ARM_MPU_Load(&(table[6]), 2U);
- ASSERT_MPU_REGION(5U, table);
- ASSERT_MPU_REGION(6U, table);
- ASSERT_MPU_REGION(7U, table);
- #undef ASSERT_MPU_REGION
- #endif
- }
|