《GD32F4xx系列MCU用户手册》阅读笔记

 

国产CPU GD32阅读笔记,因为项目关系要用到这款MCU,现在把阅读的笔记记录在这里

国产CPU GD32阅读笔记,因为项目关系要用到这款MCU,现在把阅读的笔记记录在这里

系统及存储器架构

GD32F4xx系列器件是基于Arm ® Cortex ® -M4处理器的32位通用微控制器。处理器包括三条 AHB总线 分别称为I-CODE总线、D-Code总线和系统总线。Cortex ® -M4处理器的所有存储访问,根据不同的目的和目标存储空间,都会在这三条总线上执行。

1.1 Arm® Cortex®-M4 处理器

Cortex ® -M4处理器基于ARMv7架构

图 1-1. Cortex®-M4结构框图

1.2 系统架构

GD32F4xx系列器件采用32位多层总线结构,包括一个AHB互联矩阵、两个AHB总线和两个APB总线。

表1-1. AHB 互联矩阵的互联关系列表

表1-1. AHB 互联矩阵的互联关系列表

  • AHB互联矩阵共连接 11个主机
  • IBUS是Cortex® -M4内核的指令总线,用于从代码区域(``0x0000 0000 ~ 0x1FFF FFFF`)中取 指令和向量
  • DBUS是Cortex ® -M4内核的数据总线,用于加载和存储数据,以及代码区域的调试访问
  • SBUS是Cortex ® -M4内核的系统总线,用于指令和向量获取、数据加载和存储以及系统区域的调试访问
    • 系统区域包括内部SRAM区域和外设区域
  • DMA0M和DMA1M分别是DMA0和DMA1的存储器总线
  • DMA0P和DMA1P分别是DMA0和DMA1的外设总线
  • DMA0P和DMA1P分别是DMA0和DMA1的外设总线。
  • ENET是以太网。
  • TLI是TFT LCD接口。
  • USBHS是高速USB。
  • IPA是图像处理加速器

AHB互联矩阵也连接了12个从机,分别为: FMC-I、 FMC-D、 TCMSRAM、 SRAM0、 SRAM1、SRAM2、ADDSRAM、EXMC、AHB1、AHB2、APB1和APB2。FMC-I是闪存存储器控制器的指令总线,而FMC-D是闪存存储器的数据总线。TCMSRAM是紧耦合存储器SRAM,只可通过DBUS访问。SRAM0、SRAM1和SRAM2是片上静态随机存取存储器。ADDSRAM是附加的SRAM,仅在一些特殊的GD32F4xx器件中有效。EXMC是外部存储器控制器。AHB1和AHB2是连接所有AHB从机的两条AHB总线,而APB1和APB2是连接所有APB从机的两条APB总线。

图 1-2. GD32F4xx 器件的系统架构示意图

1.3 存储器映射

哈佛结构,使用相互独立的总线来读取指令和加载/存储数据。程序存储器,数据存储器,寄存器和I/O端口都在同一个线性的4 GB的地址空间之内。存储映射是按Cortex ® -M4处理器提供的规则预先定义的。《表 1-2. GD32F4xx 系列器件的存储器映射表》显示了GD32F4xx系列器件的存储器映射,包括代码、SRAM、外设和其他预先定义的区域。

1.3.1 位带操作

执行单原子比特操作的位带功能:

  • 一个是SRAM区的最低1MB范围,
  • 第二个是片内外设区的最低1MB范围

这两个区域中的地址除了普通应用外,还有自己的“位带别名区”。位带别名区把每个比特扩展成一个32位的字。当用户访问位带别名区时,就可以达到访问原始比特的目的。

要想访问0x2000 0200地址的第7位, 可访问的位带别名区地址是:

bit_word_addr = 0x2200 0000 + (0x200 * 32)+ (7 * 4)= 0x2200 401C

如果对 0x2200401C 进行读操作,那么视 0x2000 0200 的第7位状态而返回0x01或0x00。

1.3.2. 片上 SRAM 存储器

GD32F4xx系列微控制器含有高达256KB片上SRAM、 4KB备份SRAM和256KB附加SRAM,所有的SRAM均支持字节、半字(16比特)和整字(32比特)访问

  1. 片上SRAM可分为4块
    • SRAM0(112KB)
    • SRAM1(16KB)
    • SRAM2(64KB)
    • TCMSRAM(64KB)
    • SRAM0、SRAM1和SRAM2可以被所有的AHB主机访问
    • TCMSRAM(紧耦合存储器SRAM)只可被Cortex®-M4内核的数据总线访问
  2. BKPSRAM(备份SRAM)应用于备份域
    • 即使当VDD供电电源掉电时,该SRAM仍可保持其内容
  3. 附加SRAM(ADDSRAM)只在一些特殊的GD32F4xx器件中可用
  4. 由于采用AHB互联矩阵,上述SRAM块可以同时被不同的AHB主机访问

1.3.3 片上 FLASH 存储器概述

GD32F4xx系列微控制器可以提供高密度片上FLASH存储器,按以下分类进行组织:

  • 高达3072KB主FLASH存储器
  • 高达30KB引导装载程序(boot loader)信息块存储器
  • 高达512B OTP(一次性可编程)存储器
  • 器件配置的选项字节

1.4 引导配置

GD32F4xx系列微控制器提供了三种引导源,可以 通过 BOOT0和BOOT1引脚来进行选择。该两个引脚的电平状态会在复位后的第四个CK_SYS(系统时钟)的上升沿进行锁存

引导源选择 Boot1 Boot2
主FLASH存储器 X 0
引导装载程序 0 1
片上SRAM 1 1

启动顺序:

  1. 上电序列或系统复位后,ARM ® Cortex ® -M4处理器先从 0x0000 0000 地址获取栈顶值
  2. 再从 0x0000 0004 地址获得引导代码的基地址
  3. 然后从引导代码的基地址开始执行程序
  4. 所选引导源对应的存储空间会被映射到引导存储空间,即从0x0000 0000开始的地址空间

启动介质映射:

  1. 片上SRAM 0x2000 0000

    用户必须将向量表重置到SRAM中

  2. 主FLASH 0x0800 0000

    0x0800 0000 开始的存储空间会被映射到引导存储空间 0x0000_0000

    由于主FLASH存储 器 的 Bank0 或 Bank1 均 可 映 射 到 地 址 0x0800 0000( 通 过 配 置 SYSCFG_CFG0 寄 存 器 的FMC_SWP控制位,具体参考1.5.1 节 ),所以,微控制器可以使用该方法从Bank0或Bank1中启动。

  3. 引导装载程序

    在生产器件的过程中已经被编程,用于通过以下其中一个通信接口重新编程主FLASH存储器:

    USART0(PA9和PA10)、USART2(PB10和PB11或PC10和PC11)。

1.5系统配置寄存器 (SYSCFG)

SYSCFG基地址: 0x4001 3800

1.5.1 配置寄存器 0 (SYSCFG_CFG0)

配置启动介质

1.6 设备电子签名

设备的电子签名中包含的存储容量信息和96位的唯一设备ID。96位唯一设备ID对于每颗芯片而言都是唯一的。它可以用作序列号,或安全密钥的一部分等等。

地址 内容
0x1FFF 7A20 存储容量信息:Flash存储器容量,SRAM 存储器容量
0x1FFF 7A10 ~ 0x1FFF 7A18 设备唯一 ID(96 位)
   

2. 闪存控制器(FMC)

2.1 简介

闪存控制器(FMC),提供了片上闪存需要的所有功能。在闪存的前512K字节空间内,CPU执行指令零等待。FMC也提供了扇区擦除,整片擦除,以及32位整字或16位半字、字节编程等闪存操作。

2.3 功能说明

2.3.1 闪存结构

对于主存储闪存容量不多于3072KB的GD32F4xx,包含8个16KB的扇区、 2个64KB的扇区、 14个128KB的扇区、4个256KB的扇区。主存储闪存的每个扇区都可以单独擦除。

2.3.2 读操作

闪存 可以像普通存储空间一样直接寻址访问。对闪存取指令和取数据分别使用CPU的IBUS或DBUS总线

2.3.3 FMC_CTL/FMC_OBCTLx 寄存器解锁

  • 复位后,FMC_CTL寄存器进入锁定状态,LK位置为1。
  • 通过先后向FMC_KEY寄存器写入 0x456701230xCDEF89AB,可以使得FMC_CTL解锁

2.3.4 扇区擦除

2.3.5 整片擦除

2.3.6 主存储闪存块编程

FMC提供了一个32位整字/16位半字/8位字节编程功能,用来修改主存储闪存块内容。

编程就是写操作:D-bus写一个32位整字/16位半字/8位字节(必须与 FMC_CTL 寄存器中的PSZ位匹配)到目的绝对地址( 0x08XX XXXX );

通过检查FMC_STAT寄存器的BUSY位是否清0,来确定写操作执行完毕

2.3.7 OTP 闪存块编程

FMC提供了一个32位整字/16位半字/8位字节编程功能,用来修改OTP闪存块内容,OTP闪存块不可进行擦除操作。

2.3.8 选项字节修改

FMC提供了一个擦除功能用来修改闪存中的选项字节 FMC_OBCTL

2.3.9 选项字节说明

每次系统复位后,闪存的选项字节被重加载到FMC_OBCTL0FMC_OBCTL1寄存器后,可选字节生效

2.3.10 扇区擦除/编程保护

FMC的扇区擦除/编程保护功能可以阻止对闪存的意外操作。

当FMC对被保护扇区进行扇区擦除 或 编 程 操 作 时 , 操 作 本 身 无 效 且 FMC_STAT 寄 存 器 的WPERR 位 将 被 置 1 。

表 2-3. 扇区保护 WP0/WP1 位

2.3.11 DBUS 读保护

FMC提供了一个DBUS保护功能,当DRP设置为1时禁止对相应扇区进行DBUS读操作。

如果DBUS读命令被发送至FMC一个被保护扇区,FMC_STAT寄存器中的RDDERR位会被置位

2.3.12 安全保护

FMC提供了一个安全保护功能来阻止非法读取闪存。此功能可以很好地保护软件和固件免受非法的用户操作。

  • 无保护状态
    • 将SPC字节设置为0xAA,闪存将处于非安全保护状态
    • 主存储块和选项字节可以被所有操作模式访问
  • 保护等级低
    • SPC字节为除0xAA或0xCC外的任何值,激活低安全保护等级
    • 主存储闪存块仅能被用户代码访问
    • 在调试模式下
      • 从SRAM中启动时,或者从boot loader模式启动时,这些模式下对主存储块的操作都被禁止
    • 在低安全保护等级下,对于选项字节的所有操作都被允许
    • 如果通过设置SPC字节为0xAA进入无保护状态,主存储闪存块将进行整片擦除操作
  • 保护等级高
    • SPC字节为0xCC,激活高安全保护等级
    • 调试模式,从SRAM中启动,或者从boot loader启动都被禁止
    • 主存储闪存块可由用户代码的所有操作进行访问
    • SPC字节禁止再次编程
    • 如果高保护等级被激活,将不能再降回到低保护等级或无保护等级

2.4 FMC 寄存器

3 电源管理单元(PMU)

3.1 简介

电源管理单元提供了三种省电模式:

  • 睡眠模式
  • 深度睡眠模式
  • 待机模式

GD32F4xx系列设备有三个电源域:

  • $V_{DD}/V_{DDA}$ 域
    • $V_{DD}/V_{DDA}$ 域由电源直接供电
  • 1.2V域
    • 在$V_{DD}/V_{DDA}$域中嵌入了一个LDO(内部电压调节器),用来为1.2V域供电
  • 备份域
    • 在备份域中有一个电源切换器,当 $V_{DD}$ 电源关闭时,电源切换器可以将备份域的电源切换到 $V_{BAT}$ 引脚,此时备份域由$V_{BAT}$引脚(电池)供电
  • 低驱动模式用于在深度睡眠模式下超低功耗。高驱动模式用在高频模式

3.3 功能描述

图3-1. 电源域概览

3.3.1 电池备份域

3.3.3 VDD/VDDA 电源域

$V_{DD}/V_{DDA}$域包括 $V_{DD}$ 域和 $V_{DDA}$ 域两部分:

电源域 内容
$V_{DD}$ 域 - HXTAL(高速外部晶体振荡器)
- LDO(电压调节器)
- POR/PDR(上电/掉电复位)
- FWDGT(独立看门狗定时器)
- 除 PC13、PC14、 PC15 和 PI8 之外的所有 PAD
$V_{DDA}$域 - ADC/DAC (AD/DA 转换器)
- IRC16M(内部 16M RC 振荡器)
- IRC48(内部 48M RC 振荡器)
- IRC32K(内部 32K RC 振荡器)
- PLLs(锁相环)
- LVD(低电压检测器)

3.3.4 1.2V 电源域

3.3.5 省电模式

3.4 PMU 寄存器

4 复位和时钟单元(RCU)

4.1 复位控制单元(RCTL)

4.1.1 简介

GD32F4xx复位控制包括三种控制方式:

  • 电源复位
    • 冷复位,其复位除了备份域的所有系统
  • 系统复位
    • 复位除了SW-DP控制器和备份域之外的其余部分
    • 两者都掉电的前提下,V DD 或V BAT 上电)包括处理器内核和外设IP
  • 备份域复位
    • 复位备份区域

4.1.2 功能描述

电源复位

当以下事件中之一发生时,产生电源复位:

  • 上电/掉电复位(POR/PDR 复位)
  • 欠压复位(BOR 复位)3
  • 从待机模式中返回后由内部复位发生器产生

电源复位复位除了备份域所有的寄存器。电源复位为低电平有效,当内部LDO电源基准准备好提供1.2V电压时,电源复位电平将变为无效

复位入口向量被固定在存储器映射的地址 0x0000_0004

系统复位

系统复位将复位除了SW-DP控制器和备份域之外的其余部分,包括处理器内核和外设IP。

系统复位脉冲发生器保证每一个复位源(外部或内部)都能有至少20μs的低电平脉冲延时。

图 4-1. 系统复位电路

备份域复位

当以下事件之一发生时,产生备份域复位:

  • 设置备份域控制寄存器中的BKPRST位为‘1’
  • 备份域电源上电复位(在$V_{DD}$ 和$V_{BAT}$ 两者都掉电的前提下,$V_{DD}$ 或$V_{BAT}$ 上电)

4.2 时钟控制单元(CCTL)

4.2.1 简介

时钟控制单元提供了一系列频率的时钟功能:

  • 一个内部16M RC振荡器时钟(IRC16M)
  • 一个内部48M RC 振荡器时钟(IRC48M)
  • 一个内部32KRC振荡器时钟(IRC32K)
    • 独立看门狗定时器
  • 一个外部高速晶体振荡器时钟(HXTAL)
  • 一个外部低速晶体振荡器时钟(LXTAL)
  • 三个锁相环(PLL)
  • 一个HXTAL时钟监视器
  • 时钟预分频器
  • 时钟多路复用器
  • 时钟门控电路

AHB、 APB和Cortex ® -M4时钟都源自系统时钟(CK_SYS)

  • 系统时钟的时钟源可以选择IRC16M、HXTAL或PLL
  • 系统时钟的最大运行时钟频率可以达到200MHz

实 时 时 钟 (RTC) 使 用

  • IRC32K
  • LXTAL 或
  • HXTAL 的 分 频 作为时钟源
  • ( 通 过 配 置RCU_CFG0寄存器的RTCDIV位)

4.2.3 功能描述

外部高速晶体振荡器时钟(HXTAL)

4到32MHz的外部高速晶体振荡器,HXTAL晶体振荡器可以通过设置控制寄存器RCU_CTLHXTALEN位来启动或关闭

图 4-3. HXTAL 时钟源

锁相环(PLL)

  • 三个内部锁相环, PLL 、 PLLI2S 和 PLLSAI
    • PLLP时钟可做为系统时钟 (不超过200MHz)
    • PLLQ时钟可以做为USBFS/USBHS/TRNG/SDIO模块的时钟源
    • PLLI2S时钟可以做为I2S模块的时钟源
    • PLLSAI可以做为CK48M或TLI模块的时钟源
  • PLL可以通过设置 RCU_CTL寄存器中的PLLEN位被启动和关闭
  • RCU_CTL寄存器中的PLLSTB位用来指示PLL时钟是否稳定
  • 如果RCU_INT寄存器中的相应中断使能位PLLSTBIE被置‘1’,在PLL稳定以后,将产生一个中断
  • 当进入Deepsleep/Standby模式或者HXTAL监视器检测到时钟阻塞时(HXTAL做为锁相环的输入时钟),这三路PLL将被关闭。

系统时钟(CK_SYS)选择

系统复位后,IRC16M时钟默认做为CK_SYS的时钟源,改变配置寄存器0,RCU_CFG0中的系统时钟变换位SCS可以切换系统时钟源为HXTALCK_PLLP

HXTAL 时钟监视器(CKM)

一旦监测到HXTAL故障,HXTAL将自动被禁止,中断寄存器RCU_INT中的HXTAL时钟阻塞中断标志位CKMIF将被置‘1’,产生HXTAL故障事件

时钟输出能力

时钟输出功能输出从[32kHz, 200MHz]的时钟

RTC 时钟测量

RTC时钟的三种时钟源:LXTAL、IRC32K和HXTAL时钟的2-31分频,可以通过TIMER模块测量频率。用户可以根据计算得到的时钟频率调整RTC和独立看门狗计数器。

电压控制

深度睡眠模式电压寄存器(RCU_DSV)中的DSLPVS[2:0]位域可以控制1.2V域在深度睡眠模式下的电压

4.3 RCU 寄存器

5 时钟校准控制器(CTC)

5.1 简介

  • 时钟校准控制器(CTC)采用硬件的方式,自动校准内部48MHz RC晶振(IRC48M)
  • 当USBFS/USBHS模块使用IRC48M时钟作为时钟源时
    • 必须要求IRC48M时钟频率在48MHz±500ppm的范围内
    • 但是没有经过校准的内部晶振无法满足这么高的精度
  • CTC模块基于外部高精度的参考信号源来校准IRC48M的时钟频率
    • 通过自动的或手动的调整校准值,以得到一个精准的IRC48M时钟

5.3 功能描述

CTC的四个外部参考信号源:GPIO,LXTAL时钟,USBFS_SOF 或者 USBHS_SOF

图 5-1. CTC 简介

5.3.1 REF 同步脉冲发生器

  1. 通过设置CTC_CTL1寄存器(CTC控制寄存器1)中的REFSEL位来选择参考信号源
    • GPIO,LXTAL时钟输出或者USBSOF
  2. 可以通过设置CTC_CTL1寄存器中的REFPOL位来配置参考信号源同步时的信号极性

5.3.3 频率评估和自动校准过程

当REF同步脉冲信号出现时,时钟频率评估功能开始执行。

5.3.4 软件编程指南

CTC_CTL1中RLVALUE位和CKLIM位是时钟频率评估和硬件自动校准的关键。它们的数值由期望时钟的频率(IRC48M:48 MHz)和REF同步脉冲信号的频率计算得到

5.4 CTC 寄存器

6 中断/事件控制器(EXTI)

6.1 简介

Cortex ® -M4 集成了嵌套式矢量型中断控制器(Nested Vectored Interrupt Controller (NVIC))来实现高效的异常和中断处理。

EXTI(中断/事件控制器)包括 23 个相互独立的边沿检测电路并且能够向处理器内核产生中断请求或唤醒事件。

EXTI 有三种触发类型:上升沿触发、下降沿触发和任意沿触发。

EXTI 中的每一个边沿检测电路都可以独立配置和屏蔽

6.2 中断功能描述

Arm® Cortex®-M4处理器和嵌套式矢量型中断控制器(NVIC)在处理(Handler)模式下对所有异常进行优先级区分以及处理。当异常发生时,系统自动将当前处理器工作状态压栈,在执行完中断服务子程序 (ISR)后自动将其出栈。

取向量是和当前工作态压栈并行进行的,从而提高了中断入口效率

处理器支持咬尾中断,可实现背靠背中断,大幅削减了反复切换工作态所带来的开销

SysTick校准值设为25000,SysTick时钟频率配置为HCLK/8,此时若HCLK时钟被配置为200MHz,则SysTick中断会1ms响应一次

6.4 结构框图

图 6-1. EXTI 的结构框图

6.5 外部中断及事件功能概述

EXTI包含23个相互独立的边沿检测电路并且可以向处理器产生中断请求或事件唤醒。

除了中断, EXTI还可以向处理器提供事件信号。Cortex ® -M4内核完全支持等待中断(WFI),等待事件(WFE)和发送事件(SEV)指令。

芯片内部有一个唤醒中断控制器(WIC),识别中断和事件以及判断优先级。当某些预期的事件发生时,例如一个特定的I/O 管脚电平翻转或者RTC闹钟动作,EXTI能唤醒处理器及整个系统。

6.6 EXTI 寄存器

7 通用和备用输入/输出接口(GPIO 和 AFIO)

7.1 简介

GPIO 端口和其他的备用功能(AFs)备用引脚,在特定的封装下获得最大的灵活性。GPIO 引脚通过配置相关的寄存器可以用作备用功能引脚,备用功能输入/输出都可以。

每个 GPIO 引脚可以由软件配置为输出(推挽或开漏)、输入、外设备用功能或者模拟模式。每个 GPIO 引脚都可以配置为上拉、下拉或无上拉/下拉。除模拟模式外,所有的 GPIO 引脚都具备大电流驱动能力。

图 7-1. 标准 I/O 端口位的基本结构

7.3.1 GPIO 引脚配置

在复位期间或复位之后,备用功能并未激活,所有 GPIO 端口都被配置成输入浮空模式,这种输入模式禁用上拉(PU)/下拉(PD)电阻。

复位后,串行线调试端口(JTAG/Serial-WiredDebug pins)为输入 PU/PD 模式:

GPIO 引脚可以配置为输入输出模式:

  • 当 GPIO 引脚配置为输入引脚时
    • 所有的 GPIO 引脚内部都有一个可选择的弱上拉弱下拉电阻
    • 外部引脚上的数据在每个 AHB 时钟周期时都会装载到数据输入寄存器(GPIOx_ISTAT)
  • 当 GPIO 引脚配置为输出引脚
    • 用户可以配置端口的输出速度
    • 选择输出驱动模式
      • 推挽或开漏模式
  • 当对 GPIOx_OCTL 进行位操作时
    • 不需要先读再写
    • 用户可以通过写‘1’到位操作寄存器
    • 修改一位或几位

7.3.2 外部中断/事件线

7.3.3 备用功能(AF)

7.3.4 附加功能

7.3.5 输入配置

当 GPIO 引脚配置为输入时:

  1. 施密特触发输入使能;
  2. 可选择的弱上拉和下拉电阻;
  3. 当前I/O引脚上的数据在每个AHB时钟周期都会被采样并存入端口输入状态寄存器;
  4. 输出缓冲器禁用

7.3.6 输出配置

当 GPIO 配置为输出时:

  1. 开漏模式
    • 输出控制寄存器设置为“0”时,相应引脚输出低电平;
    • 输出控制寄存器设置为“1”,相应管脚处于高阻状态;
  2. 推挽模式
    • 输出控制寄存器设置为“0”时,相应引脚输出低电平
    • 输出控制寄存器设置为“1”,相应引脚输出高电平
  3. 对端口输出控制寄存器进行读操作,将返回上次写入的值
  4. 对端口输入状态寄存器进行读操作,将获得当前I/O口的状态

7.3.7 模拟配置

7.3.8 备用功能(AF)配置

7.3.9 GPIO 锁定功能

GPIO 的锁定机制可以保护 I/O 端口的配置.通过配置 32 位锁定寄存器(GPIOx_LOCK)可以锁定 I/O 端口的配置。

建议在电源驱动模块的配置中使用锁定功能。

7.3.10 GPIO 单周期输出翻转功能

通过将 GPIOx_TG 寄存器中对应的位写 1,GPIO 可以在一个 AHB 时钟周期内翻转 I/O 的输出电平。输出信号的频率可以达到 AHB 时钟的一半。

7.4 GPIO 寄存器

8 循环冗余校验计算单元(CRC)

8.1 简介

循环冗余校验码是一种用在数字网络和存储设备上的差错校验码,可以校验原始数据的偶然差错。

CRC 计算单元使用固定多项式计算 32 位 CRC 校验码。

8.2 主要特征

  • 固定的计算多项式: 0x4C11DB7

图 8-1. CRC 计算单元框图

8.3 功能说明

  • CRC计算单元可以用来计算32位的原始数据
  • CRC_DATA寄存器接收原始数据并存储计算结果
    • 如果不通过软件设置CRC_CTL寄存器的方式来清除CRC_DATA寄存器
    • CRC计算单元将基于新输入的原始数据和前一次CRC_DATA寄存器中的结果进行计算
  • 对于32位的数据,CRC的计算需要4个AHB的时钟周期
  • 此模块提供了一个8位的独立数据寄存器CRC_FDATA

8.4 CRC 寄存器

9 真随机数生成器(TRNG)

真随机数发生器模块(TRNG)能够通过连续模拟噪声生成一个 32 位的随机数值。

10 直接存储器访问控制器(DMA)

10.1 简介

DMA控制器提供了一种硬件的方式在外设和存储器之间或者存储器和存储器之间传输数据,而无需MCU的介入,避免了MCU多次进入中断进行大规模的数据拷贝,最终提高整体的系统性能。

每个DMA控制器包含了

  • 两个AHB总线接口
  • 8个4字深度的FIFO,使DMA可以高效的传输数据。
  • DMA控制器(DMA0,DMA1)共有16个通道
    • 每个通道可以被分配给一个或多个特定的外设进行数据传输
  • 两个内置的总线仲裁器用来处理DMA请求的优先级问题

M4内核与DMA控制器都是通过系统总线来处理数据,引入仲裁机制来处理它们之间的竞争关系

  • 当MCU和DMA指定相同的外设的时候,MCU将会在特定的总线周期挂起
  • 总线矩阵使用了轮询的算法保证MCU至少占用了一半的带宽

10.3 结构框图

图 10-1. 系统架构

  • DMA 控制器由 4 部分组成:
    • AHB 从接口配置 DMA;
    • 两个 AHB 主接口进行数据传输
    • 两个仲裁器进行 DMA 请求的优先级管理
    • 数据处理和计数

10.4 功能描述

DMA控制器在没有MCU参与的情况下从一个地址向另一个地址传输数据,所有的寄存器都可以通过AHB从机接口进行32位的操作

寄存器DMA_CHxCTL的TM位域决定了DMA的数据传输模式

传输模式 TM[1:0] 源地址 目的地址
外设到存储器 00 DMA_CHxPADDR DMA_CHxM0ADDR/DMA_CHxM1ADDR
存储器到外设 01 DMA_CHxM0ADDR/DMA_CHxM1ADDR DMA_CHxPADDR
存储器到存储器 10 DMA_CHxPADDR DMA_CHxM0ADDR/DMA_CHxM1ADDR
  1. 寄存器DMA_CHxCTLMBS位选择DMA_CHxM0ADDR或者DMA_CHxM1ADDR作为存储器地址
  2. 寄存器DMA_CHxCTL的TM位域禁止配置成‘0b11’,否则通道将会自动关闭

三种传输模式的数据流

10.4.1 外设握手

为了保证数据的有效传输, DMA控制器中引入了外设和存储器的握手机制,包括请求信号和应答信号:

  • 请求信号
    • 外设发出,表明外设已经准备好发送或接收数据
  • 应答信号
    • DMA 控制器响应
    • 表明 DMA 控制器已经发送 AHB 命令去访问外设

图 10-3. 握手机制

每个 DMA 控制器有 8 个通道,每个通道有多个外设请求。寄存器 DMA_CHxCTLPERIEN位域决定了 DMA 通道选中的外设请求。

同一个外设请求可以连接到两个DMA 通道上,但必须禁止两个 DMA 通道选择相同的外设请求。

例如,在 DMA0 控制器中,SPI2_RX 外设请求连接到通道 0 和通道 2。当寄存器 DMA_CH0CTL,DMA_CH2CTLPERIEN 位域同时配置为‘0b000’时,使能通道 0 和通道 2,当 SPI2 发出 DMA 请求时,会造成通道 0 和通道 2 的响应混乱,及数据传输错误

表 10-2. DMA0 外设请求

10.4.2 数据处理

仲裁

每个DMA控制器有两个分别对应于外设和存储器的仲裁器。当DMA控制器在同一时间接收到多个外设请求时,仲裁器将根据外设请求的优先级来决定响应哪一个外设请求。

传输宽度,突发传输和计数

寄存器DMA_CHxCTLPWIDTHMWIDTH位域决定了外设和存储器的数据传输宽度。

在多数据传输模式中,如果PWIDTHMWIDTH不相等,DMA会自动的打包/解包数据来进行完整的数据传输

突发传输类型

寄存器DMA_CHxCTLPBURSTMBURST位域决定了外设和存储器的突发传输方式

AMBA协议指定突发传输不能超过1KB的地址边界,否则会产生传输错误。对于外设和存储器,当突发传输超过1KB的地址边界,硬件会自动的把4拍,8拍,16拍(由PBURSTMBURST决定)的突发传输拆分为单一传输。

传输计数

DMA作为传输控制器的时候,寄存器DMA_CHxCNCNT位域决定了需要传输数据的数量,在使能DMA通道之前,数据的传输量必须完成配置。当外设作为传输控制器的时候,在使能通道后,CNT位会被强制设置为‘4bFFFF’。

在传输过程中,CNT表示剩余需要传输的数据数量。

FIFO

DMA控制器的每个通道都有一个4字深度的FIFO用于缓冲数据,从源地址读取的数据会先暂时存在FIFO中,再传输到目的地址。

在存储器到存储器模式下, DMA控制器仅支持多数据传输模式。

多数据传输模式

多数据传输模式通过把寄存器DMA_CHxFCTLMDMEN位置1来实现

当FIFO有足够的空间时,DMA控制器响应源端的请求,从源地址读取数据存储进FIFO。

  • 如果目的端是外设,当FIFO内的数据量满足外设的一次突发传输时,DMA会响应外设的请求。
  • 如果目标端是存储器,寄存器DMA_CHxFCTLFCCV位设置的FIFO临界值决定DMA控制器何时进行将FIFO中的数据写入存储器,当FIFO计数器达到配置的临界值时,FIFO中的所有数据会被写入目标存储器地址
    • 为了保证正确的数据传输,FIFO 的临界值必须配置为存储器一次突发传输数据量的整数倍。
    • FIFO 计数器的临界值的设置与存储器数据传输宽度和存储器突发传输类型有关
    • 1 wrod = 32bit, Mwidth x Mburst = 8bit x 4(INCR) = 32bit

表 10-5. FIFO 计数器临界值配置

注意:

当传输模式是外设到存储器时,如果$PBURST_{beats} \times PWIDTH_{bytes} = 16$,FIFO计数器临界值不能设置成‘2b10

如果设置成‘2b10’,当接收到外设请求时,DMA控制器从外设中读取数据并填满FIFO,然后DMA会向存储器中写入3个字的数据(这个是由FIFO的临界值决定),同时剩余一个字的数据

这时当新的外设请求来临时,FIFO中没有足够的空间进行下一次的外设突发传输,同时FIFO中的数据没有达到FIFO临界值也不会进行存储器突发传输,会使通道数据传输冻结

单数据传输模式

单数据传输模式通过把寄存器DMA_CHxFCTLMDMEN位清0来实现

在这个模式中,DMA控制器一次只能传输一个数据,FIFO计数器临界值的配置(寄存器DMA_CHxFCTLFCCV位域)没有意义

在这个模式中,当且仅当FIFO空的时候,DMA会响应源端的请求,从源地址读取数据进入FIFO。

当FIFO非空时, DMA响应目的端的请求,把FIFO中的数据写入目的地址

打包/解包

  • 在单数据传输模式中
    • MWIDTH会被硬件强制设置与PWIDTH相等,无需使用数据的打包/解包功能
  • 在多数据传输模式中
    • MWIDTH与PWIDTH相互独立
    • 在传输过程中,外设和寄存器都只支持小端操作。

10.4.3 地址生成

存储器和外设都独立的支持两种地址生成算法:固定模式和增量模式

寄存器DMA_CHxCTLPNAGAMNAGA位用来设置存储器和外设的地址生成算法。

  • 在固定模式中
    • 地址一直固定为初始化的基地址
    • DMA_CHxPADDR,DMA_CHxM0ADDR,DMA_CHxM1ADDR
  • 在增量模式中
    • 下一次传输数据的地址是当前地址加1(或者2,4)
  • 在多数据传输模式中,
    • 若寄存器DMA_CHxCTLPBURST 配置为‘2b00
    • 当寄存器DMA_CHxCTLPAIF位置1使能时
    • 外设的下一次传输的地址增量被固定为4,与外设的数据传输宽度无关
    • PAIF与存储器地址生成无关
    • 注意:若PAIF配置为’1‘,外设的基地址(寄存器DMA_CHxPADDR)必须配置为4字节对齐

10.4.4 循环模式

通过寄存器DMA_CHxCTLCMEN位置1使能

在循环模式中,当每次DMA传输完成后,CNT值会被重新载入,且传输完成标志位会被置1

10.4.5 存储切换模式

存储切换模式也是用来处理连续的外设请求。可以通过寄存器DMA_CHxCTLSBMEN位置1使能。

若打开了存储切换模式,在通道使能后,硬件会自动打开循环模式

存储切换模式只能应用于外设与存储器之间的数据传输,在存储器到存储器模式中禁止使用。

存储切换模式支持两个存储器缓冲区,两个存储器基地址可以分别在寄存器DMA_CHxM0ADDRDMA_CHxM1ADDR中配置。

在每次DMA传输完成后,存储器指针指向另一个存储器缓冲区。在DMA传输过程中,没有被DMA占用的缓冲区可以被其他的AHB主机接口操作,且其基地址可以改变

软件可以通过设定寄存器 DMA_CHxCTLMBS 位来指定第一次数据传输 DMA 使用的缓冲区。

图 10-7. 存储切换模式

10.4.6 传输控制器

数据传输量的大小由传输控制器决定。寄存器DMA_CHxCTLTFCS位决定了传输控制器是外设还是DMA

  • DMA 为传输控制器
    • 寄存器 DMA_CHxCNTCNT 位域决定传输数据量的大小,必须在通道使能前配置
    • 注意:当传输模式是存储器到存储器时,传输控制器只能是DMA
  • 外设为传输控制器
    • 在通道使能后寄存器 DMA_CHxCNTCNT 位域为会被硬件强制配置为‘FFFF’, 因此配置 CNT 没有意义
    • DMA 数据传输完成由外设发送最后一次传输请求决定

10.4.7 传输操作

数据传输支持三种操作方式:

  • 外设到存储器
  • 存储器到外设
  • 存储器到存储器

存储器端数据传输

  • 外设到存储器
    • 单数据传输模式
      • 当 FIFO 非空时,DMA 启动存储器数据传输,写数据到相应的存储器地址中
    • 多数据传输模式
      • 当 FIFO 计数器达到临界值时,DMA 启动单一或突发数据传输
  • 存储器到外设
    • 单数据传输模式
      • 当通道使能时 DMA 会立刻进行存储器数据传输,读取数据到 FIFO
      • 数据传输过程中,当且仅当 FIFO 为空时,DMA 控制器就会进行存储器读取操作
    • 多数据传输模式
      • 当通道使能后,不论是否有外设请求,DMA 都会进行单一或突发数据传输填满 FIFO
      • 在数据传输过程中,当 FIFO 有足够的空间进行一次单一或突发传输时,DMA 控制器就会进行存储器读取操作
  • 存储器到存储器
    • 只支持多数据传输模
    • 当 FIFO 计数器到达临界值,DMA 进行单一或突发传输把 FIFO 的数据全部写入存储器中

外设端数据传输

10.4.8 传输完成

当寄存器DMA_CHxCNTCNT中配置的数据量传输完成或处理完最后一次外设请求以后,DMA传输结束,寄存器DMA_CHxCTLCHEN位自动清零。

软件清除

DMA传输可以通过对寄存器DMA_CHxCTLCHEN位清0停止

在清0操作之后,若CHEN仍然为1,代表存储器或者外设仍然处在传输状态,或者FIFO中还有剩余的数据没有传输

10.4.9 通道配置

10.5 中断

每个DMA通道都有专有的中断,包括5个中断事件:

  • 传输完成中断
  • 半传输完成中断
  • 传输错误中断
  • 单数据传输模式异常中断
  • FIFO错误和异常中断

图 10-8. DMA0 与 DMA1 的系统连接

11 图像处理加速器IPA

12 调试(DBG)

12.1 简介

GD32F4xx 系列产品提供的调试,跟踪和测试功能通过 ARM CoreSight 组件的标准配置和链状连接的 TAP 控制器来实现的。

调试和跟踪功能集成在 ARM Cortex®-M4内核中。调试系统支持串行(SW)调试和跟踪功能,也支持 JTAG 调试。

调试和跟踪功能请参考下列文档:

  • Cortex ® -M4技术参考手册
  • ARM调试接口v5结构规范

12.2 JTAG/SW 功能描述

调试工具可以通过串行(SW)调试接口或者 JTAG 调试接口来访问调试功能

12.2.2 引脚分配

JTAG 调试提供五个引脚的接口

引脚 JTAG引脚 说明
PA15 JTDI JTAG 数据输入引脚
PA14 JTCK/SWCLK JTAG 时钟引脚(JTCK)
PA13 JTMS/SWDIO JTAG 模式选择引脚
PB4 NJTRST JTAG 复位引脚 (NJTRST,低电平有效)
PB3 JTDO JTAG 数据输出引脚(JTDO)

13 可编程参考电流(IREF)

13.1 简介

在使用参考电流时,有两种不同的运行模式:低功耗模式和大电流模式

  • 在低功耗模式下,电流步长为 1uA,最大电流 63uA
  • 在大电流模式下,电流步长为 8uA,最大电流为 504uA

14 模数转换器(ADC)

16 看门狗定时器(WDGT)

片上有两个看门狗定时器外设,独立看门狗定时器(FWDGT)和窗口看门狗定时器(WWDGT)

看门狗定时器在内部计数值达到了预设的门限的时候,会触发一个复位(对于窗口看门狗定时器来说,会产生一个中断)。当处理器工作在调试模式的时候看门狗定时器定时计数器可以停止计数。

16.1 独立看门狗定时器(FWDGT)

独立看门狗定时器(FWDGT)有独立时钟源(IRC32K),独立看门狗定时器带有一个 8 级预分频器和一个 12 位的向下递减计数器。

图 16-1. 独立看门狗定时器框图

向控制寄存器(FWDGT_CTL)中写0xCCCC可以开启独立看门狗定时器,计数器开始向下计数。当计数器记到0x000,产生一次复位。

在任何时候向控制寄存器(FWDGT_CTL)中写0xAAAA都可以重装载计数器,重装载值来源于FWDGT_RLD寄存器。

16.2 窗口看门狗定时器(WWDGT)

窗口看门狗定时器(WWDGT)用来监测由软件故障导致的系统故障。

窗口看门狗定时器开启后,7位向下递减计数器值逐渐减小。计数值达到0x3F时会产生复位(CNT[6]位被清0)。

配置寄存器 (WWDGT_CFG)中的WIN[6:0]位用来设定窗口值。当计数器的值小于窗口值,且大于0x3F的时候,重装载向下计数器可以避免复位,否则在其他时候进行重加载就会引起复位。

窗口看门狗定时器在计数器计数值达到0x40或者在计数值达到窗口寄存器之前更新计数器,都会产生一个提前唤醒标志,如果使能中断也将会产生中断

窗口看门狗定时器时钟是由APB1时钟预分频而来

17 实时时钟(RTC)

RTC模块提供了一个包含日期(年/月/日)和时间(时/分/秒/亚秒)的日历功能

18 定时器(TIMER)

18.1 高级定时器(TIMERx, x=0, 7)

高级定时器(TIMER0TIMER7)是四通道定时器,支持输入捕获和输出比较。可以产生 PWM信号控制电机和电源管理。

高级定时器包含了一个死区时间插入模块,非常适合电机控制

时钟源选择

高级定时器可以由内部时钟源 TIMER_CK 或者由 SMC(TIMERx_SMCFG 寄存器位[2:0])控制的复用时钟源驱动。

19 通用同步异步收发器(USART)