当前位置: 首页 > wzjs >正文

免费模板app下载企业seo排名有 名

免费模板app下载,企业seo排名有 名,WordPress中文改英文版,沈阳市住房和城乡建设部网站ARM-M7的Memory架构: 在Cortex-M7中,存储器一共有4GB的地址空间,4GB的地址空间又被划分为8个区域块,每个块有512M的内存。 Note:4GB的地址空间为 0x0000 0000 - 0xFFFF FFFF,可寻址的512M的地址空间为 0x00…

ARM-M7的Memory架构:

在Cortex-M7中,存储器一共有4GB的地址空间,4GB的地址空间又被划分为8个区域块,每个块有512M的内存。

Note:4GB的地址空间为 0x0000 0000 - 0xFFFF FFFF,可寻址的512M的地址空间为 0x0000 0000 - 0x1FFF FFFF,可寻址的地址是指处理器可以直接访问和寻址的存储区域,如flash,SRAM,寄存器。

外部External RAM 通常映射到0x6000_0000到0x9FFF_FFFF的外部存储区域。

为何Cortex-M7外部Memory Region仅1GB,却能扩展更大SDRAM(8GB)?

通过址复用与Bank切换:复用地址线和切换存储体(Banks),1GB逻辑地址空间可管理更大的物理内存,但需软件参与地址管理。(可以理解为通过MMU实现物理地址与逻辑地址的切换)Cortex-M7的外部RAM的1GB地址空间是​逻辑地址空间,SDRAM是物理地址,软件通过控制BA0/BA1和RAS/CAS信号,动态切换不同的物理存储区域。

从 FMC 的角度,外部存储器被划分为固定大小的存储区域,每个存储区域的大小为 256 MB, Cortex-M7支持4个FMC,实际连接的SDRAM芯片容量可以小于或等于 256MB,只要不超过该区域的大小。

举例W9825G6KH:

根据数据手册,SDRAM一共有4个Bank,每个Bank有4M world的内存,每个world有16bit的数据宽度,相等于数据线的数量。SDRAM的实际内存是32M(4 bank * 4M world * 2 byte)

W9825G6KH 的一个bank存储结构为:行地址:8192 个;列地址: 512 个(8192*512*16bit=8M)

在 SDRAM 内部寻址的时候,先指定 BANK 号和行地址,然后再指定列地址,就可以查找到目标地址。

硬件连接:

地址空间映射:W9825G6KH 的 32MB 映射到 FMC 的 Bank1(0xC0000000 ~ 0xC1FFFFFF),剩余地址未使用。也就是逻辑地址直接mapping物理地址,不需要软件实现复杂管理(不超过256MB)

代码实现:

​
#include "stm32h7xx_hal.h"
#include "main.h"#define SDRAM_BASE_ADDR    0xC0000000
#define SDRAM_SIZE         (32 * 1024 * 1024) // 32MBSDRAM_HandleTypeDef hsdram;// FMC GPIO配置(根据实际硬件调整)
void FMC_GPIO_Init() {GPIO_InitTypeDef GPIO_InitStruct = {0};__HAL_RCC_GPIOD_CLK_ENABLE();__HAL_RCC_GPIOE_CLK_ENABLE();__HAL_RCC_GPIOF_CLK_ENABLE();__HAL_RCC_GPIOG_CLK_ENABLE();// 配置数据线 D0-D15(示例引脚)// PD0-D1, PE7-PE15, PF0-PF1, PG0-PG1 等GPIO_InitStruct.Pin = GPIO_PIN_0 | GPIO_PIN_1;GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;GPIO_InitStruct.Pull = GPIO_NOPULL;GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;GPIO_InitStruct.Alternate = GPIO_AF12_FMC;HAL_GPIO_Init(GPIOD, &GPIO_InitStruct);// ... 其他数据线、地址线、控制信号引脚配置
}// SDRAM初始化(严格遵循时序)
void SDRAM_Init() {FMC_SDRAM_TimingTypeDef timing = {.LoadToActiveDelay    = 2,   // tMRD=2周期.ExitSelfRefreshDelay = 7,   // tXSR=7周期.SelfRefreshTime      = 4,   // tRAS=4周期.RowCycleDelay        = 7,   // tRC=7周期.WriteRecoveryTime    = 2,   // tWR=2周期.RPDelay              = 2,   // tRP=2周期.RCDDelay             = 2    // tRCD=2周期};hsdram.Instance = FMC_SDRAM_DEVICE;hsdram.Init.SDBank             = FMC_SDRAM_BANK1;hsdram.Init.ColumnBitsNumber   = FMC_SDRAM_COLUMN_BITS_NUM_9; // 9位列地址hsdram.Init.RowBitsNumber      = FMC_SDRAM_ROW_BITS_NUM_12;  // 12位行地址hsdram.Init.MemoryDataWidth    = FMC_SDRAM_MEM_BUS_WIDTH_16;hsdram.Init.InternalBankNumber = FMC_SDRAM_INTERN_BANKS_NUM_4;hsdram.Init.CASLatency         = FMC_SDRAM_CAS_LATENCY_3;hsdram.Init.SDClockPeriod      = FMC_SDRAM_CLOCK_PERIOD_2;   // 100MHzHAL_SDRAM_Init(&hsdram, &timing);// 发送初始化命令序列HAL_SDRAM_SendCommand(&hsdram, FMC_SDRAM_CMD_CLK_ENABLE, 0, 0xFFFF);HAL_Delay(1); // 等待100μsHAL_SDRAM_SendCommand(&hsdram, FMC_SDRAM_CMD_PALL, 0, 0xFFFF);HAL_SDRAM_SendCommand(&hsdram, FMC_SDRAM_CMD_AUTOREFRESH_MODE, 0, 0xFFFF);HAL_SDRAM_SendCommand(&hsdram, FMC_SDRAM_CMD_AUTOREFRESH_MODE, 0, 0xFFFF);// 配置模式寄存器(突发长度=1,顺序访问)FMC_SDRAM_CommandTypeDef cmd = {.CommandMode = FMC_SDRAM_CMD_LOAD_MODE,.CommandTarget = FMC_SDRAM_CMD_TARGET_BANK1,.AutoRefreshNumber = 1,.ModeRegisterDefinition = (3 << 9) | (0 << 0) // CAS=3,BL=1};HAL_SDRAM_SendCommand(&hsdram, &cmd, 0xFFFF);HAL_SDRAM_ProgramRefreshRate(&hsdram, 8192); // 64ms刷新
}// 单点写入(16位数据)
void SDRAM_Write16(uint32_t addr_offset, uint16_t data) {volatile uint16_t *ptr = (volatile uint16_t*)(SDRAM_BASE_ADDR + addr_offset);*ptr = data;
}// 单点读取(16位数据)
uint16_t SDRAM_Read16(uint32_t addr_offset) {volatile uint16_t *ptr = (volatile uint16_t*)(SDRAM_BASE_ADDR + addr_offset);return *ptr;
}// 块写入(16位数据,长度单位为字)
void SDRAM_WriteBlock16(uint32_t addr_offset, uint16_t *data, uint32_t len) {volatile uint16_t *ptr = (volatile uint16_t*)(SDRAM_BASE_ADDR + addr_offset);for (uint32_t i = 0; i < len; i++) {ptr[i] = data[i];}
}// 块读取(16位数据,长度单位为字)
void SDRAM_ReadBlock16(uint32_t addr_offset, uint16_t *buffer, uint32_t len) {volatile uint16_t *ptr = (volatile uint16_t*)(SDRAM_BASE_ADDR + addr_offset);for (uint32_t i = 0; i < len; i++) {buffer[i] = ptr[i];}
}​
http://www.dtcms.com/wzjs/15693.html

相关文章:

  • 建设b2c商城网站湖南网站托管
  • dede网站版权信息西安今日头条新闻消息
  • 做网站服务器系统武汉seo网站推广培训
  • 国外网站为什么不用备案友情链接建立遵循的原则包括
  • 海口的网站建设免费推广渠道有哪些
  • 万网虚拟服务器怎么做网站内容国外免费网站域名服务器查询软件
  • 资料下载网站建设怎么免费给自己建网站
  • 微信开店免费平台seo推广怎么样
  • 自己在百度上可以做网站吗深圳市龙华区
  • 建设网站如入什么费站长之家seo查询官方网站
  • 淄博营销网站建设广州seo推广优化
  • 如何用word做简单的网站市场营销模式有哪些
  • 做直播网站软件有哪些软件有哪些成人短期就业培训班
  • 做问卷用哪个网站新闻软文自助发布平台
  • 南京电商网站开发万网域名官网
  • 做县城门户网站网站怎样优化seo
  • 厦门免费网站建设网站排名怎么搜索靠前
  • 苏州做网站哪家好重庆seo网络推广优化
  • 清远短视频推广东莞搜索优化十年乐云seo
  • 美女图片用网站源码二手交易平台
  • 李沧网站建设电话关键词排名软件
  • 个人网站做音乐网要备文化西安官网seo
  • 平面设计基础知识怎么优化电脑系统
  • 做58一样的网站百度网络科技有限公司
  • 长春微建站是哪个平台的it培训班
  • 音乐网站毕业设计代码网站优化课程培训
  • 做推广哪个网站最热门seo排名软件
  • 手机网站html手机建站平台
  • 武汉公司建站外链工具软件
  • 旅游网站做seo推广策划方案模板