Слияние кода завершено, страница обновится автоматически
/**
******************************************************************
* @file bsp_mpu.c
* @author fire
* @version V1.0
* @date 2018-xx-xx
* @brief 配置MPU区域属性和大小
******************************************************************
* @attention
*
* 实验平台:野火 STM32H750开发板
* 论坛 :http://www.firebbs.cn
* 淘宝 :http://firestm32.taobao.com
*
******************************************************************
*/
#include "./mpu/bsp_mpu.h"
/**
* @brief 配置MPU区域属性和大小寄存器值
* @param Region MPU保护区域,取值范围(0—7)
* @param DisableExec 指令访问禁用位,0=允许指令访问,1=禁止指令访问。
* @param AccessPermission 数据访问权限,取值范围(MPU_NO_ACCESS—MPU_PRIV_RO_URO)
* @param TypeExtField 键入扩展字段,允许您配置内存访问类型,例如强排序,外设。
* 可以取值(0,1,2)
* @param Address MPU保护区域基地址,特别注意配置的Address需要被Size整除
* @param Size MPU保护区域大小,可以取值(MPU_1KB,MPU_4KB ...MPU_512MB)
* @param IsShareable 保护的存储空间是否可以共享,1=允许共享,0=禁止共享。
* @param IsCacheable 保护的存储空间是否可以缓存,1=允许缓存,0=禁止缓存。
* @param IsBufferable 使能Cache之后,策略是write-through还是write-back(bufferable)
* 1=允许缓冲,即回写(write-back),0=禁止缓冲,即直写(write-through)。
* @retval None
*/
void BSP_MPU_ConfigRegion( uint8_t Region,
uint8_t DisableExec,
uint8_t AccessPermission,
uint8_t TypeExtField,
uint32_t Address,
uint32_t Size,
uint8_t IsShareable,
uint8_t IsCacheable,
uint8_t IsBufferable )
{
MPU_Region_InitTypeDef MPU_InitStruct;
/* 禁用MPU */
HAL_MPU_Disable();
/* 配置MPU属性*/
MPU_InitStruct.Enable = MPU_REGION_ENABLE;
MPU_InitStruct.BaseAddress = Address; //区域基地址。
MPU_InitStruct.Size = Size; //要配置的区域的区域大小。
MPU_InitStruct.AccessPermission = AccessPermission; //数据访问权限允许您配置用户和特权模式的读/写访问权限。
MPU_InitStruct.IsBufferable = IsBufferable; //区域是可缓冲的,即使用回写缓存。 可缓存但不可缓冲的区域使用直写策略。
MPU_InitStruct.IsCacheable = IsCacheable; //区域是否可缓存的,即其值是否可以保存在缓存中。
MPU_InitStruct.IsShareable = IsShareable; //区域是否可以在多个总线主控器之间共享。
MPU_InitStruct.Number = Region; //区域保护。
MPU_InitStruct.TypeExtField = TypeExtField; //键入扩展字段,允许您配置内存访问类型。
MPU_InitStruct.SubRegionDisable = 0x00; //子区域禁用字段。
MPU_InitStruct.DisableExec = DisableExec; //指令访问禁用位。
HAL_MPU_ConfigRegion(&MPU_InitStruct);
/* 启用MPU */
HAL_MPU_Enable(MPU_PRIVILEGED_DEFAULT);
}
void Board_MPU_Config(uint8_t Region ,uint8_t Mode,uint32_t Address,uint32_t Size)
{
switch(Mode)
{
case MPU_Normal_WB:
/* 设置内存为Normal类型,禁用共享, 回写模式不带写入读取分配*/
BSP_MPU_ConfigRegion(Region,0,MPU_FULL_ACCESS,0,Address,Size,0,1,1);
break;
case MPU_Normal_WBWARA:
/* 设置内存为Normal类型,禁用共享, 回写模式带写入读取分配*/
BSP_MPU_ConfigRegion(Region,0,MPU_FULL_ACCESS,1,Address,Size,0,1,1);
break;
case MPU_Normal_WT:
/* 设置内存为Normal类型,禁用共享, 直写模式*/
BSP_MPU_ConfigRegion(Region,0,MPU_FULL_ACCESS,0,Address,Size,0,1,0);
break;
case MPU_Normal_NonCache:
/* 设置内存为Normal类型,禁用共享,禁用缓存模式*/
BSP_MPU_ConfigRegion(Region,0,MPU_FULL_ACCESS,1,Address,Size,0,0,0);
break;
case MPU_Device_NonCache:
/*设置内存为Device类型,共享设置无效,禁止共享,禁用缓存模式*/
BSP_MPU_ConfigRegion(Region,0,MPU_FULL_ACCESS,2,Address,Size,0,0,0);
break;
}
}
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарий ( 0 )