OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 3705|回复: 1

感觉这个 mpu 就是个麻烦 ??

[复制链接]

260

主题

810

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1898
金钱
1898
注册时间
2012-10-28
在线时间
357 小时
发表于 2017-3-26 18:40:29 | 显示全部楼层 |阅读模式
3金钱
感觉这个  mpu 就是个麻烦,有时吧这个功能设置好了,但是另外一个又不能够使用了,哎,悲惨

static void MPU_Set_Protection(uint32_t baseaddr,
                               uint32_t size,
                               uint32_t rnum,
                               uint32_t ap,
                               u8 sen,
                               u8 cen,
                               u8 ben)
{
        MPU_Region_InitTypeDef MPU_Initure;
      
        HAL_MPU_Disable();                                                                                      //配置MPU之前先关闭MPU,配置完成以后在使能MPU

        MPU_Initure.Enable           = MPU_REGION_ENABLE;                                  //使能该保护区域
        MPU_Initure.Number           = rnum;                                              //设置保护区域
        MPU_Initure.BaseAddress      = baseaddr;                              //设置基址
        MPU_Initure.Size             = size;                                                    //设置保护区域大小
        MPU_Initure.SubRegionDisable = 0x00;                            //禁止子区域
        MPU_Initure.TypeExtField     = MPU_TEX_LEVEL0;                  //设置类型扩展域为level0
        MPU_Initure.AccessPermission = (uint8_t)ap;                                  //设置访问权限,
        MPU_Initure.DisableExec      = MPU_INSTRUCTION_ACCESS_ENABLE;          //允许指令访问(允许读取指令)
        MPU_Initure.IsShareable      = sen;                            //是否允许共用
        MPU_Initure.IsCacheable      = cen;                            //是否允许cache
        MPU_Initure.IsBufferable     = ben;                             //是否允许缓冲
        HAL_MPU_ConfigRegion(&MPU_Initure);                           //配置MPU
        HAL_MPU_Enable(MPU_PRIVILEGED_DEFAULT);                                          //开启MPU

}




        MPU_Set_Protection(0xC0000000,
                     MPU_REGION_SIZE_16MB,
                     MPU_REGION_NUMBER2,
                     MPU_REGION_FULL_ACCESS,
                     MPU_ACCESS_NOT_SHAREABLE,
                     MPU_ACCESS_CACHEABLE,    // 此处设置为 MPU_ACCESS_NOT_CACHEABLE 在申请 外部SDRAM内存进行读写时完全正确,
                                                                  //   但 设置MPU_ACCESS_CACHEABLE 为这个时,申请 外部SDRAM内存进行读写时错误,                                                                   // 如果不设置为 MPU_ACCESS_CACHEABLE  这个,那么外部设置单片机的 Heap 使用时,速度又跟不上
                                                                  // 请教下此处该如何设置才稳妥 ?????????????????????????????
                     MPU_ACCESS_BUFFERABLE);    //保护SDRAM区域,共128M字节






正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2017-3-27 00:48:21 | 显示全部楼层
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-19 06:03

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表