STM32H750XB_RT-THREAD/45-DCMI—OV2640摄像头实验/User/mpu/bsp_mpu.c

99 lines
3.7 KiB
C
Raw Normal View History

2025-07-21 06:34:29 +00:00
/**
******************************************************************
* @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;
}
}