99 lines
3.7 KiB
C
99 lines
3.7 KiB
C
|
/**
|
|||
|
******************************************************************
|
|||
|
* @file bsp_mpu.c
|
|||
|
* @author fire
|
|||
|
* @version V1.0
|
|||
|
* @date 2018-xx-xx
|
|||
|
* @brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD>MPU<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ժʹ<EFBFBD>С
|
|||
|
******************************************************************
|
|||
|
* @attention
|
|||
|
*
|
|||
|
* ʵ<EFBFBD><EFBFBD>ƽ̨:Ұ<EFBFBD><EFBFBD> STM32H750<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
* <EFBFBD><EFBFBD>̳ :http://www.firebbs.cn
|
|||
|
* <EFBFBD>Ա<EFBFBD> :http://firestm32.taobao.com
|
|||
|
*
|
|||
|
******************************************************************
|
|||
|
*/
|
|||
|
#include "./mpu/bsp_mpu.h"
|
|||
|
|
|||
|
/**
|
|||
|
* @brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD>MPU<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ժʹ<EFBFBD>С<EFBFBD>Ĵ<EFBFBD><EFBFBD><EFBFBD>ֵ
|
|||
|
* @param Region MPU<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡֵ<EFBFBD><EFBFBD>Χ<EFBFBD><EFBFBD>0<EFBFBD><EFBFBD>7<EFBFBD><EFBFBD>
|
|||
|
* @param DisableExec ָ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʽ<EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><EFBFBD>0=<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʣ<EFBFBD>1=<EFBFBD><EFBFBD>ָֹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʡ<EFBFBD>
|
|||
|
* @param AccessPermission <EFBFBD><EFBFBD><EFBFBD>ݷ<EFBFBD><EFBFBD><EFBFBD>Ȩ<EFBFBD>ޣ<EFBFBD>ȡֵ<EFBFBD><EFBFBD>Χ<EFBFBD><EFBFBD>MPU_NO_ACCESS<EFBFBD><EFBFBD>MPU_PRIV_RO_URO<EFBFBD><EFBFBD>
|
|||
|
* @param TypeExtField <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>չ<EFBFBD>ֶΣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>衣
|
|||
|
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡֵ<EFBFBD><EFBFBD>0<EFBFBD><EFBFBD>1<EFBFBD><EFBFBD>2<EFBFBD><EFBFBD>
|
|||
|
* @param Address MPU<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><EFBFBD><EFBFBD>ر<EFBFBD>ע<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>õ<EFBFBD>Address<EFBFBD><EFBFBD>Ҫ<EFBFBD><EFBFBD>Size<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
* @param Size MPU<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>С,<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡֵ<EFBFBD><EFBFBD>MPU_1KB<EFBFBD><EFBFBD>MPU_4KB ...MPU_512MB<EFBFBD><EFBFBD>
|
|||
|
* @param IsShareable <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ĵ洢<EFBFBD>ռ<EFBFBD><EFBFBD>Ƿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Թ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>1=<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>0=<EFBFBD><EFBFBD>ֹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
* @param IsCacheable <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ĵ洢<EFBFBD>ռ<EFBFBD><EFBFBD>Ƿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ի<EFBFBD><EFBFBD>棬1=<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>棬0=<EFBFBD><EFBFBD>ֹ<EFBFBD><EFBFBD><EFBFBD>档
|
|||
|
* @param IsBufferable ʹ<EFBFBD><EFBFBD>Cache֮<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>write-through<EFBFBD><EFBFBD><EFBFBD><EFBFBD>write-back(bufferable)
|
|||
|
* 1=<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>壬<EFBFBD><EFBFBD><EFBFBD><EFBFBD>д<EFBFBD><EFBFBD>write-back<EFBFBD><EFBFBD><EFBFBD><EFBFBD>0=<EFBFBD><EFBFBD>ֹ<EFBFBD><EFBFBD><EFBFBD>壬<EFBFBD><EFBFBD>ֱд<EFBFBD><EFBFBD>write-through<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
* @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;
|
|||
|
|
|||
|
/* <20><><EFBFBD><EFBFBD>MPU */
|
|||
|
HAL_MPU_Disable();
|
|||
|
|
|||
|
/* <20><><EFBFBD><EFBFBD>MPU<50><55><EFBFBD><EFBFBD>*/
|
|||
|
MPU_InitStruct.Enable = MPU_REGION_ENABLE;
|
|||
|
MPU_InitStruct.BaseAddress = Address; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7>
|
|||
|
MPU_InitStruct.Size = Size; //Ҫ<><D2AA><EFBFBD>õ<EFBFBD><C3B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>С<EFBFBD><D0A1>
|
|||
|
MPU_InitStruct.AccessPermission = AccessPermission; //<2F><><EFBFBD>ݷ<EFBFBD><DDB7><EFBFBD>Ȩ<EFBFBD><C8A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD>Ȩģʽ<C4A3>Ķ<EFBFBD>/д<><D0B4><EFBFBD><EFBFBD>Ȩ<EFBFBD>ޡ<EFBFBD>
|
|||
|
MPU_InitStruct.IsBufferable = IsBufferable; //<2F><><EFBFBD><EFBFBD><EFBFBD>ǿɻ<C7BF><C9BB><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3><EFBFBD>ʹ<EFBFBD>û<EFBFBD>д<EFBFBD><D0B4><EFBFBD>档 <20>ɻ<EFBFBD><C9BB>浫<EFBFBD><E6B5AB><EFBFBD>ɻ<EFBFBD><C9BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9>ֱд<D6B1><D0B4><EFBFBD>ԡ<EFBFBD>
|
|||
|
MPU_InitStruct.IsCacheable = IsCacheable; //<2F><><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7>ɻ<EFBFBD><C9BB><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD>Ա<EFBFBD><D4B1><EFBFBD><EFBFBD>ڻ<EFBFBD><DABB><EFBFBD><EFBFBD>С<EFBFBD>
|
|||
|
MPU_InitStruct.IsShareable = IsShareable; //<2F><><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڶ<EFBFBD><DAB6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֮<EFBFBD>乲<EFBFBD><E4B9B2><EFBFBD><EFBFBD>
|
|||
|
MPU_InitStruct.Number = Region; //<2F><><EFBFBD><EFBFBD><F2B1A3BB><EFBFBD>
|
|||
|
MPU_InitStruct.TypeExtField = TypeExtField; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>չ<EFBFBD>ֶΣ<D6B6><CEA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>͡<EFBFBD>
|
|||
|
MPU_InitStruct.SubRegionDisable = 0x00; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֶΡ<D6B6>
|
|||
|
MPU_InitStruct.DisableExec = DisableExec; //ָ<><D6B8><EFBFBD><EFBFBD><EFBFBD>ʽ<EFBFBD><CABD><EFBFBD>λ<EFBFBD><CEBB>
|
|||
|
|
|||
|
HAL_MPU_ConfigRegion(&MPU_InitStruct);
|
|||
|
|
|||
|
/* <20><><EFBFBD><EFBFBD>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:
|
|||
|
/* <20><><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD>ΪNormal<61><6C><EFBFBD><EFBFBD>,<2C><><EFBFBD>ù<EFBFBD><C3B9><EFBFBD>, <20><>дģʽ<C4A3><CABD><EFBFBD><EFBFBD>д<EFBFBD><D0B4><EFBFBD><EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>*/
|
|||
|
BSP_MPU_ConfigRegion(Region,0,MPU_FULL_ACCESS,0,Address,Size,0,1,1);
|
|||
|
break;
|
|||
|
|
|||
|
case MPU_Normal_WBWARA:
|
|||
|
/* <20><><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD>ΪNormal<61><6C><EFBFBD><EFBFBD>,<2C><><EFBFBD>ù<EFBFBD><C3B9><EFBFBD>, <20><>дģʽ<C4A3><CABD>д<EFBFBD><D0B4><EFBFBD><EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>*/
|
|||
|
BSP_MPU_ConfigRegion(Region,0,MPU_FULL_ACCESS,1,Address,Size,0,1,1);
|
|||
|
break;
|
|||
|
|
|||
|
case MPU_Normal_WT:
|
|||
|
/* <20><><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD>ΪNormal<61><6C><EFBFBD><EFBFBD>,<2C><><EFBFBD>ù<EFBFBD><C3B9><EFBFBD>, ֱдģʽ*/
|
|||
|
BSP_MPU_ConfigRegion(Region,0,MPU_FULL_ACCESS,0,Address,Size,0,1,0);
|
|||
|
break;
|
|||
|
|
|||
|
case MPU_Normal_NonCache:
|
|||
|
/* <20><><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD>ΪNormal<61><6C><EFBFBD><EFBFBD>,<2C><><EFBFBD>ù<EFBFBD><C3B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD>ģʽ*/
|
|||
|
BSP_MPU_ConfigRegion(Region,0,MPU_FULL_ACCESS,1,Address,Size,0,0,0);
|
|||
|
break;
|
|||
|
|
|||
|
case MPU_Device_NonCache:
|
|||
|
/*<2A><><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD>ΪDevice<63><65><EFBFBD><EFBFBD>,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ч<EFBFBD><D0A7><EFBFBD><EFBFBD>ֹ<EFBFBD><D6B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD>ģʽ*/
|
|||
|
BSP_MPU_ConfigRegion(Region,0,MPU_FULL_ACCESS,2,Address,Size,0,0,0);
|
|||
|
break;
|
|||
|
}
|
|||
|
|
|||
|
}
|