华大电子CIU32M010、CIU32M030存储器映射

该32位处理器具有4GB的地址空间,用于指令、数据、寄存器和IO端口。存储器映射预定义了系统外设的地址,片上SRAM为8K字节,起始于0x2000_0000。FLASH分为主、副存储块,其中副块包含选项字节和系统存储器。位带功能允许原子比特操作,位带别名区映射到SRAM和外设区的低1MB地址,简化了位操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

此 32 位处理器采用同一套总线来读取指令和加载/存储数据。指令代码和数据都位于相同的存储器地址空间,但在不同的地址范围。程序存储器,数据存储器,寄存器和 IO 端口都在同一个线性的 4GB 的地址空间之内。这是 32 位处理器的最大地址范围,因为它的地址总线宽度是 32 位。此外,为了降低不同客户在相同应用时的软件复杂度,存储映射是按 32 位处理器提供的规则预先定义的。在存储器映射表中, 一部分地址空间由 32 位处理器的系统外设所占用,且不可更改。此外,其余部分地址空间可由芯片供应商定义使用。CIU32M010、CIU32M030 器件的存储器映射表显示了 CIU32M010、CIU32M030 器件的存储器映射,包括代码、SRAM、外设和其他预先定义的区域。简化了每个外设的地址译码。
在这里插入图片描述
片上 SRAM
芯片内置 8K 字节的 SRAM。它可以按字节(8 位)、半字(16 位)或字(32 位)进行访问。 SRAM 起始地址为 0x2000_0000。
片上 FLASH 概述
闪存存储器有两个不同存储区域
• 主闪存存储块,它包括应用程序和用户数据区(若需要时)
• 副闪存存储块,也叫信息块,其包含两个部分
– 选项字节(Option bytes)-内含硬件及存储保护用户配置选项。
– 系统存储器(System memory) - 闪存接口基于 AHB 协议执行指令和数据存取。
引导配置
芯片复位后,通过客户自己在副闪存的配置,选择 SWDCLK 默认工作是上拉还是下拉。正常启动后, CPU 从地址 0x0000_0000 获取堆栈顶的地址,并从存储器0x0000_0004 位置指示的地址开始执行代码。
位带操作
为了减少“读-改-写”操作的次数,32 位 RISC 处理器提供了一个可以执行单原子比特操作的位带功能。存储器映射包含了两个支持位带操作的区域。其中一个是 SRAM 区的最低 1MB 范围,第二个是片内外设区的最低 1MB 范围。这两个区域中的地址除了普通应用外,还有自己的“位带别名区”。位带别名区把每个比特扩展成一个 32 位的字。当用户访问位带别名区时,就可以达到访问原始比特的目的。
下面的公式表明了位带别名区中的每个字如何对应位带区的相应比特或目标比特。
bit_word_addr =bit_band_base +(byte_offset×32)+(bit_number×4)
其中:
• bit_word_addr 指的是位带区目标比特对应在位带别名区的地址;
• bit_band_base 指的是位带别名区的起始地址;
• byte_offset 指的是位带区目标比特所在的字节的字节地址偏移量;
• bit_number 指的是目标比特在对应字节中的位置(0-7)。
例如,要想访问 0x2000 0200 地址的第 7 位, 可访问的位带别名区地址是:
bit_word_addr = 0x2200 0000 + (0x200 * 32)+ (7 * 4)= 0x2200 401C
如果对 0x2200 401C 进行写操作,那么 0x2000 0200 的第 7 位将会相应变化;如果对 0x2200 401C进行读操作,那么视 0x2000 0200 的第 7 位状态而返回 0x01 或 0x00。

华大CIU32系列MCU例程的使用方法通常包括以下几个步骤: 1. **开发环境搭建**: - 安装适用于CIU32系列的集成开发环境(IDE),如Keil MDK或IAR Embedded Workbench。这些工具支持CIU32系列MCU,能够提供强大的调试功能和项目管理能力[^1]。 - 下载并安装华大官方提供的标准库或HAL库。这些库文件为开发者提供了丰富的API接口,简化了底层寄存器的操作,使得开发者可以更加专注于应用程序的开发[^1]。 2. **获取例程**: - 访问华大官方网站或官方论坛,查找CIU32系列的相关资源,下载官方提供的例程包。这些例程通常包含了各种外设的基本使用示例,如GPIO、UART、SPI等,非常适合初学者学习和理解如何配置和使用这些外设。 3. **例程配置与编译**: - 打开IDE,导入相应的例程项目。根据实际使用的MCU型号和硬件平台,可能需要调整一些配置选项,比如系统时钟设置、外设初始化参数等。 - 配置完成后,进行项目的编译。如果编译过程中遇到错误,应仔细检查配置是否正确以及所有必要的库文件是否已正确安装。 4. **烧录与调试**: - 使用编程器将编译好的程序烧录到CIU32 MCU中。常见的编程接口有SWD和JTAG,具体取决于目标板的设计。 - 利用IDE内置的调试工具对程序进行在线调试,解决可能出现的问题。通过设置断点、查看变量值等方式,确保程序按预期运行。 5. **扩展应用开发**: - 在成功运行基础例程的基础上,可以根据自己的项目需求对外设功能进行扩展,开发更复杂的应用程序。 - 对于希望快速验证创意想法的学生或创客来说,还可以考虑利用Arduino Core适配方案,这可以让基于CIU32的开发变得更加简单快捷。 ### 示例代码:点亮LED 假设有一个简单的LED控制例程,其核心代码可能如下所示(基于C语言): ```c #include "stm32f0xx_hal.h" // 假设使用的是类似STM32F0系列的HAL库 int main(void) { HAL_Init(); // 初始化HAL库 SystemClock_Config(); // 配置系统时钟 __HAL_RCC_GPIOA_CLK_ENABLE(); // 使能GPIOA时钟 GPIO_InitTypeDef GPIO_InitStruct = {0}; GPIO_InitStruct.Pin = GPIO_PIN_5; // 假设LED连接到PA5 GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; // 推挽输出模式 GPIO_InitStruct.Pull = GPIO_NOPULL; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); // 初始化GPIO while (1) { HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, GPIO_PIN_SET); // 点亮LED HAL_Delay(1000); // 延时1秒 HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, GPIO_PIN_RESET); // 关闭LED HAL_Delay(1000); // 再次延时1秒 } } ``` 这段代码演示了如何使用HAL库来初始化一个GPIO引脚作为输出,并通过循环控制该引脚高低电平的变化,从而实现LED的闪烁效果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值