103 lines
4.6 KiB
C
Raw Normal View History

2021-07-28 13:15:22 +08:00
#include "mpu.h"
#include "led.h"
#include "delay.h"
//////////////////////////////////////////////////////////////////////////////////
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֻ<EFBFBD><D6BB>ѧϰʹ<CFB0>ã<EFBFBD>δ<EFBFBD><CEB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɣ<EFBFBD><C9A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>κ<EFBFBD><CEBA><EFBFBD>;
//ALIENTEK STM32H7<48><37><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//MPU<50><55><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//<2F><><EFBFBD><EFBFBD>ԭ<EFBFBD><D4AD>@ALIENTEK
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̳:www.openedv.com
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:2017/8/15
//<2F><EFBFBD><E6B1BE>V1.0
//<2F><>Ȩ<EFBFBD><C8A8><EFBFBD>У<EFBFBD><D0A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ؾ<EFBFBD><D8BE><EFBFBD>
//Copyright(C) <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӿƼ<D3BF><C6BC><EFBFBD><EFBFBD>޹<EFBFBD>˾ 2014-2024
//All rights reserved
//////////////////////////////////////////////////////////////////////////////////
//<2F><><EFBFBD><EFBFBD>ij<EFBFBD><C4B3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>MPU<50><55><EFBFBD><EFBFBD>
//baseaddr:MPU<50><55><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ļ<EFBFBD>ַ(<28>׵<EFBFBD>ַ)
//size:MPU<50><55><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ĵ<EFBFBD>С(<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>32<33>ı<EFBFBD><C4B1><EFBFBD>,<2C><>λΪ<CEBB>ֽ<EFBFBD>),<2C><><EFBFBD><EFBFBD><EFBFBD>õ<EFBFBD>ֵ<EFBFBD>ο<EFBFBD>:CORTEX_MPU_Region_Size
//rnum:MPU<50><55><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<2C><>Χ:0~7,<2C><><EFBFBD><EFBFBD>֧<EFBFBD><D6A7>8<EFBFBD><38><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<2C><><EFBFBD><EFBFBD><EFBFBD>õ<EFBFBD>ֵ<EFBFBD>ο<EFBFBD><CEBF><EFBFBD>CORTEX_MPU_Region_Number
//ap:<3A><><EFBFBD><EFBFBD>Ȩ<EFBFBD><C8A8>,<2C><><EFBFBD>ʹ<EFBFBD>ϵ<EFBFBD><CFB5><EFBFBD><EFBFBD>:<3A><><EFBFBD><EFBFBD><EFBFBD>õ<EFBFBD>ֵ<EFBFBD>ο<EFBFBD><CEBF><EFBFBD>CORTEX_MPU_Region_Permission_Attributes
//MPU_REGION_NO_ACCESS,<2C>޷<EFBFBD><DEB7>ʣ<EFBFBD><CAA3><EFBFBD>Ȩ&<26>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɷ<EFBFBD><C9B7>ʣ<EFBFBD>
//MPU_REGION_PRIV_RW,<2C><>֧<EFBFBD><D6A7><EFBFBD><EFBFBD>Ȩ<EFBFBD><C8A8>д<EFBFBD><D0B4><EFBFBD><EFBFBD>
//MPU_REGION_PRIV_RW_URO,<2C><>ֹ<EFBFBD>û<EFBFBD>д<EFBFBD><D0B4><EFBFBD>ʣ<EFBFBD><CAA3><EFBFBD>Ȩ<EFBFBD>ɶ<EFBFBD>д<EFBFBD><D0B4><EFBFBD>ʣ<EFBFBD>
//MPU_REGION_FULL_ACCESS,ȫ<><C8AB><EFBFBD>ʣ<EFBFBD><CAA3><EFBFBD>Ȩ&<26>û<EFBFBD><C3BB><EFBFBD><EFBFBD>ɷ<EFBFBD><C9B7>ʣ<EFBFBD>
//MPU_REGION_PRIV_RO,<2C><>֧<EFBFBD><D6A7><EFBFBD><EFBFBD>Ȩ<EFBFBD><C8A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//MPU_REGION_PRIV_RO_URO,ֻ<><D6BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ȩ&<26>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>д<EFBFBD><D0B4>
//<2F><><EFBFBD><EFBFBD>:STM32F7<46><37><EFBFBD><EFBFBD><EFBFBD>ֲ<EFBFBD>.pdf,4.6<EFBFBD><EFBFBD>,Table 89.
//sen:<3A>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>;MPU_ACCESS_NOT_SHAREABLE,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>;MPU_ACCESS_SHAREABLE,<2C><><EFBFBD><EFBFBD>
//cen:<3A>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD>cache;MPU_ACCESS_NOT_CACHEABLE,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>;MPU_ACCESS_CACHEABLE,<2C><><EFBFBD><EFBFBD>
//ben:<3A>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>;MPU_ACCESS_NOT_BUFFERABLE,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>;MPU_ACCESS_BUFFERABLE,<2C><><EFBFBD><EFBFBD>
//<2F><><EFBFBD><EFBFBD>ֵ;0,<2C>ɹ<EFBFBD>.
// <20><><EFBFBD><EFBFBD>,<2C><><EFBFBD><EFBFBD>.
u8 MPU_Set_Protection(u32 baseaddr,u32 size,u32 rnum,u8 ap,u8 sen,u8 cen,u8 ben)
{
MPU_Region_InitTypeDef MPU_Initure;
HAL_MPU_Disable(); //<2F><><EFBFBD><EFBFBD>MPU֮ǰ<D6AE>ȹر<C8B9>MPU,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ժ<EFBFBD><D4BA><EFBFBD>ʹ<EFBFBD><CAB9>MPU
MPU_Initure.Enable=MPU_REGION_ENABLE; //ʹ<>ܸñ<DCB8><C3B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
MPU_Initure.Number=rnum; //<2F><><EFBFBD>ñ<EFBFBD><C3B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
MPU_Initure.BaseAddress=baseaddr; //<2F><><EFBFBD>û<EFBFBD>ַ
MPU_Initure.Size=size; //<2F><><EFBFBD>ñ<EFBFBD><C3B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>С
MPU_Initure.SubRegionDisable=0X00; //<2F><>ֹ<EFBFBD><D6B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
MPU_Initure.TypeExtField=MPU_TEX_LEVEL0; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>չ<EFBFBD><D5B9>Ϊlevel0
MPU_Initure.AccessPermission=(u8)ap; //<2F><><EFBFBD>÷<EFBFBD><C3B7><EFBFBD>Ȩ<EFBFBD><C8A8>,
MPU_Initure.DisableExec=MPU_INSTRUCTION_ACCESS_ENABLE; //<2F><><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡָ<C8A1><D6B8>)
MPU_Initure.IsShareable=sen; //<2F>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD>?
MPU_Initure.IsCacheable=cen; //<2F>Ƿ<EFBFBD>cache?
MPU_Initure.IsBufferable=ben; //<2F>Ƿ񻺳<C7B7>?
HAL_MPU_ConfigRegion(&MPU_Initure); //<2F><><EFBFBD><EFBFBD>MPU
HAL_MPU_Enable(MPU_PRIVILEGED_DEFAULT); //<2F><><EFBFBD><EFBFBD>MPU
return 0;
}
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD><EFBFBD>Ĵ洢<C4B4><E6B4A2>
//<2F><><EFBFBD><EFBFBD><EFBFBD>Բ<EFBFBD><D4B2>ִ洢<D6B4><E6B4A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>MPU<50><55><EFBFBD><EFBFBD>,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ܵ<EFBFBD><DCB5>³<EFBFBD><C2B3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//<2F><><EFBFBD><EFBFBD>MCU<43><55><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ,<2C><><EFBFBD><EFBFBD>ͷ<EFBFBD>ɼ<EFBFBD><C9BC><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD><EFBFBD>ȵ<EFBFBD><C8B5><EFBFBD><EFBFBD><EFBFBD>...
void MPU_Memory_Protection(void)
{
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>DTCM,<2C><>128K<38>ֽ<EFBFBD>,<2C><>ֹ<EFBFBD><D6B9><EFBFBD><EFBFBD>,<2C><><EFBFBD><EFBFBD>cache,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
MPU_Set_Protection( 0x20000000, //<2F><><EFBFBD><EFBFBD>ַ
MPU_REGION_SIZE_128KB, //<2F><><EFBFBD><EFBFBD>--128K
MPU_REGION_NUMBER1, //NUMER1
MPU_REGION_FULL_ACCESS, //ȫ<><C8AB><EFBFBD><EFBFBD>
MPU_ACCESS_SHAREABLE, //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
MPU_ACCESS_CACHEABLE, //<2F><><EFBFBD><EFBFBD>cache
MPU_ACCESS_NOT_BUFFERABLE); //<2F><>ֹ<EFBFBD><D6B9><EFBFBD><EFBFBD>
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>AXI SRAM,<2C><>512K<32>ֽ<EFBFBD>,<2C><>ֹ<EFBFBD><D6B9><EFBFBD><EFBFBD>,<2C><><EFBFBD><EFBFBD>cache,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
MPU_Set_Protection( 0x24000000, //<2F><><EFBFBD><EFBFBD>ַ
MPU_REGION_SIZE_512KB, //<2F><><EFBFBD><EFBFBD>--512K
MPU_REGION_NUMBER2, //NUMER2
MPU_REGION_FULL_ACCESS, //ȫ<><C8AB><EFBFBD><EFBFBD>
MPU_ACCESS_SHAREABLE, //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
MPU_ACCESS_CACHEABLE, //<2F><><EFBFBD><EFBFBD>cache
MPU_ACCESS_NOT_BUFFERABLE); //<2F><>ֹ<EFBFBD><D6B9><EFBFBD><EFBFBD>
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>SRAM1~SRAM3,<2C><>288K<38>ֽ<EFBFBD>,<2C><>ֹ<EFBFBD><D6B9><EFBFBD><EFBFBD>,<2C><><EFBFBD><EFBFBD>cache,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
MPU_Set_Protection( 0x30000000, //<2F><><EFBFBD><EFBFBD>ַ
MPU_REGION_SIZE_512KB, //<2F><><EFBFBD><EFBFBD>
MPU_REGION_NUMBER3, //NUMER3
MPU_REGION_FULL_ACCESS, //ȫ<><C8AB><EFBFBD><EFBFBD>
MPU_ACCESS_SHAREABLE, //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
MPU_ACCESS_CACHEABLE, //<2F><><EFBFBD><EFBFBD>cache
MPU_ACCESS_NOT_BUFFERABLE); //<2F><>ֹ<EFBFBD><D6B9><EFBFBD><EFBFBD>
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>SRAM4,<2C><>64K<34>ֽ<EFBFBD>,<2C><>ֹ<EFBFBD><D6B9><EFBFBD><EFBFBD>,<2C><><EFBFBD><EFBFBD>cache,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
MPU_Set_Protection( 0x38000000, //<2F><><EFBFBD><EFBFBD>ַ
MPU_REGION_SIZE_64KB, //<2F><><EFBFBD><EFBFBD>--64K
MPU_REGION_NUMBER4, //NUMER4
MPU_REGION_FULL_ACCESS, //ȫ<><C8AB><EFBFBD><EFBFBD>
MPU_ACCESS_SHAREABLE, //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
MPU_ACCESS_CACHEABLE, //<2F><><EFBFBD><EFBFBD>cache
MPU_ACCESS_NOT_BUFFERABLE); //<2F><>ֹ<EFBFBD><D6B9><EFBFBD><EFBFBD>
}