Files
mkrtos-real/mkrtos_knl/arch/armv7m/stm32f203/mpu.c
2023-08-26 23:12:31 +08:00

48 lines
1.1 KiB
C
Executable File

/*
* mpu.c
*
* Created on: zhangzheng
* Author: Administrator
*/
#include "types.h"
#include "assert.h"
#include "mpu.h"
#include <stm32f2xx.h>
#include <mpu_armv7.h>
#include "task.h"
static volatile umword_t *MPUCR = (umword_t *)0xE000ED94;
void mpu_disable(void)
{
ARM_MPU_Disable();
}
void mpu_enable(void)
{
ARM_MPU_Enable(4);
}
void mpu_calc_regs(region_info_t *region, umword_t addr, int ffs, uint8_t attrs, uint8_t regions_bits)
{
region->rbar = ARM_MPU_RBAR(region->region_inx, addr);
region->rasr = ARM_MPU_RASR(0, attrs, 0UL, 0UL,
1UL, 1UL, regions_bits, ffs - 1);
}
void mpu_switch_to(void)
{
struct task *tk = thread_get_current_task();
mpu_disable();
for (int i = 0; i < REGION_NUM; i++)
{
if (tk->mm_space.pt_regions[i].region_inx >= 0)
{
ARM_MPU_SetRegion(tk->mm_space.pt_regions[i].rbar,
tk->mm_space.pt_regions[i].rasr);
}
else
{
ARM_MPU_ClrRegion(i);
}
}
mpu_enable();
}