MCU

MCU是Microcontroller Unit(微控制器单元)的缩写,它是一种集成了中央处理器(CPU)、存储器(ROM、RAM)、输入/输出端口(I/O)、定时器(Timer)、串行通信接口(UART、SPI、I2C等)和其他外围设备控制器的单个芯片。MCU通常用于嵌入式系统中,用于控制各种电子设备和系统。

由于其集成度高、体积小、功耗低以及成本相对较低等特点,MCU被广泛应用于各种嵌入式系统中,例如智能家居设备、医疗设备、汽车电子系统、工业自动化等。MCU的选择通常基于应用的需求,如处理性能、功耗、外设接口等因素。

在现代电子产品设计中,芯片的集成度和复杂度越来越高,如何充分利用芯片的资源,满足不同场景的需求,是每位工程师和设计师需要面对的挑战。芯片IO重映射功能恰好解决了这一问题,为用户提供更加灵活、便捷、可定制的芯片使用方式,助推产品创新和突破。

IO口是MCU内部模块和外部硬件唯一的进出口。每个内置外设都有若干个输入输出引脚,一般这些引脚的输出端口都是固定不变的,芯片IO重映射就是将芯片原有的通用IO端口重新定义为特定功能用途。例如,在硬件设计之初,开发人员通过移位寄存器和端口直接映射的方式实现了控制PWM波输出的功能。如果需要用同一颗芯片控制两个不同的电机,此时就需要映射另一个用于控制第二个电机的PWM波输出端口,这样才能满足应用需求。IO重映射功能即可通过编写特定的程序来实现。

为了让设计工程师更好地安排引脚的走向和功能,爱普特在系列全国产32位MCU产品中均加入了外设引脚重映射的功能,即一个外设的引脚除了具有默认的端口外,还可以通过设置重映射寄存器的方式,把这个外设的引脚映射到其它的端口。为了使不同器件封装的外设IO功能数量达到最优,还可以把一些复用功能重新映射到其他一些引脚上。这种灵活性为产品硬件布局和型号适配提供了更多的可能性,方便PCB设计,减少了信号的交叉干扰;分时复用某些外设,还可以虚拟增加端口数目,从而整体提高工程师的研发效率。

接下来我们以爱普特APT32F110X系列为例进行介绍:APT32F110X系列芯片为提供更灵活的 IO 功能配置,提供了自定义 GPIO 复用的功能。

芯片提供两个预设的 GPIOGROUP,分别为 GROUP0 和 GROUP1,两个 GROUP 分别对应 8 个预设的可选择的复用功能。在每个 GROUP 内,每个 GPIO可以被指定为这 8 个预设功能中的任意一个作为该 GPIO 的 AF8 功能。

1.png

IO GROUP0和 GPIO 对应关系

2.png

IO GROUP1和 GPIO 对应关系

3.png

 IOGROUP 配置信息表

如图中1对应的红色框所示,标识的是APT32F110X GROUP0/GROUP1对应的复用功能列表,左边是GROUP0,右边是GROUP1。从图中2对应的红色框可直观看到复用列表中具体功能对应的配置数值,数值是配置在IOMAP的CFGVAL(CFGVAL0~CFGVAL7)域中;如GROUP0中选择I2C_SDA功能,需要在对应的CFGVAL域中写入0x01。

APT32F110X系列是爱普特基于国产RISC-V核架构和自研的IP库研发设计的全国产MCU。该系列具有多达44个GPIO口,均支持外部中断,支持IO重映射,内置多路通用及增强型定时器,可实现灵活的 PWM 输出,同时具有DMA和高速SPI通讯接口,内嵌多模式段码液晶驱动控制器,可以直接驱动LCD显示屏幕,支持20通道的12位ADC,还支持LCD/LED/Touch/温度传感器等功能。目前APT32F110X系列产品已被广泛应用于智能家电、工业控制、物联网、消费电子、消防、医疗电子等领域。

来源:爱普特微电子

免责声明:本文为转载文章,转载此文目的在于传递更多信息,版权归原作者所有。本文所用视频、图片、文字如涉及作品版权问题,请联系小编进行处理(联系邮箱:cathy@eetrend.com)。

围观 32

在《玩转MCU双核(上)》文章里,我们给大家介绍了先楫HPM6000系列双核的特性、使用方法以及工程编译与调试。本文紧接上篇内容,给大家详细阐述双核的通信方式、资源分配以及双核应用eRPC架构。

1.png

双核的通信方式

HPM双核通信方式有那些?这里列举如下:

A. 通信外设通信

如enet/uart/spi/can/i2c/gpio等等。Core0和Core1可通过通信外设相互之间发送消息来通信。

( 注意:此方案会浪费对应的通讯外设,且需要硬件上支持。)

B. 共享内存RAM通信

Core0和Core1通过访问同一片内存RAM来达到通信。如:一个核写,另一个和读。

共享RAM要点

1. 双核下的共享RAM区域地址及大小必须相同。

2. 为防止CPU cache的影响,共享的RAM区域在双核下均要设置为nocache区域或者在访问前后强制刷新cache。

注意:如果设置为nocache区域,core0和core1中均要调用初始化PMP。

例如:

HPM-SDK双核例程下,双核linker文件中,均已分配了SHARE_RAM区域。

Core0 linker文件中的SHARE_RAM区域分配:

2.png

Core1 linker文件中的SHARE_RAM区域分配:

3.png

工程中定义共享RAM区域,并访问读写。

  • Core0工程下设定nocache区域,并初始化PMP。

  • Core1工程下同样设定为nocache区域,并初始化PMP。

如下:

Core0工程

4.png

Core1工程

5.png

通过debug调试,在core1中打断点,core1中写共享区域。

通过串口发送数据,在core0中读取共享区域。

运行结果如下:

6.png

从运行结果看,core1中写入的共享区域的数据和core0中读取的共享区域的数据是一致的。

C. 通信信箱MBX通信

HPM支持独有的通信信箱MBX来进行处理器核间通信。主要特性如下:

● 支持 2 个寄存器访问接口

● 每个接口支持 TX FIFO 和 RX FIFO

● 支持标志位反映 TX FIFO 和 RX FIFO 状态

● 支持生成中断

双核MBX通信,参考HPM-SDK例程drivers/mbx。

(注意:当然也支持读写Flash来通信,考虑到并发读写Flash带来的异常,此通信方案不推荐使用。)

在这里,推荐大家结合B和C方案,通过MBX做双核间的消息传递,通过共享RAM的方式来达到大数据的通信。

当然通过双核通信来实现双核间的同步和互斥。例如:通过MBX通信,实现类似OS互斥锁和信号量的功能。

双核的资源分配

HPM双核资源,除了以下资源是Core0和Core1各自私有的,其余资源均需要合理分配。

● CPU 自身的指令/数据本地存储器 ILM / DLM 为私有

● FGPIO 为私有

● 平台中断控制器 PLIC 为私有

● 软件中断控制器 PLICSW 为私有

● 机器定时器 MCHTMR 为私有

A:双核Flash 资源分配要点

防止Core0和Core1并发同时访问同一个flash。例如:结合MBX通信,实现互斥锁来避免并发访问。并且考虑到flash_xip(非xip的除外) 片上运行,同时应在访问flash前后,禁止和使能全局中断。

B:双核RAM 资源分配要点

1. 除了共享ram区域和各自私有的ILM/DLM区域。其余sram和sdram在core0和core1的分配中不可重叠,避免出现未知数据错误。

2. Core0和Core1共享RAM区域的分配,地址及大小必须相同。

C:双核访问同一外设要点

通常应该避免双核访问同一个外设。如果有需求要同时访问同一外设,需要注意以下几点:

1. 禁止双核均初始化同一外设。如:Core0已经初始化相关外设,Core1无需再次初始化。

2. 防止Core0和Core1并发操作同一外设。例如:结合MBX通信,实现双核互斥锁来防止并发操作。

D:双核使能同一外设中断要点

由于双核Core0/Core1各自的PLIC平台中断控制器是私有的,如果双核均使能了同一个外设中断,需注意以下几点:

1. 禁止双核均初始化同一外设。如:Core0已经初始化相关外设,Core1无需再次初始化。

2. 双核各自的私有PLIC中均要使能当前中断。如:Core0的PLIC中使能了IRQn_GPIO0_Z中断,Core1的PLIC中同样也要使能IRQn_GPIO0_Z中断。

3. 禁止双核外设中断处理接口中均清除中断标识位。如:Core0中清除了当前外设中断标识位,Core1中无需再次清除。如下:

7.png

8.png

E:双核异常要点

由于HPM双核是两个独立的CPU,是主从架构。

当双核出现异常情况,需要注意以下几点:

1. 其中一个核出现异常(crash)但未重启,另一个核仍能正常运行,不受影响。

2. Core0异常重启,Core1也会随之重启。

主从架构,Core0为主,Core1为从。当复位发生时,系统总是由Core0启动,而Core1处于待机状态,需要Core0装载启动Core1。

3. Core1异常重启,Core0仍正常运行,不受影响。

推荐结合看门狗WDG来合理处理双核异常情况。

双核应用eRPC架构

eRPC(Embeded Remote Procedure Call) 是一个简单的、易用的、高效的远程调用框架。

RPC是一种机制,Client端通过简单的本地函数调用,就能使用Server端提供的服务。对于Client端而言,使用远程服务就像调用应用程序中内置的库函数一样。

当Client端调用远程函数时,该函数的标识(identifier)和函数的参数(parameters)将被序列化到字节流中,此字节流通过传输层的通信通道(IPC、TCP/IP、UART、SPI等)传至Server端。Server端收到字节流数据后,解析函数参数并根据标识选择调用的服务函数。若函数有返回值,则Server端将返回值序列化并发送回Client端。

以下是RPC架构框图(此图仅显示一个传输方向,省略了来自Server端的回复)。

9.png

对应多核(MultiCore)应用,通过RPMsg-Lite是作为传输层;对于多芯片(MultiProcessor)应用,通过UART、SPI、TCP/IP等作为传输层信号通道。

HPM6000系列双核应用,将使用RPmsg-Lite作为传输层。

RPMsg-Lite(Remote Processor Messaging Lite)是ePRC的传输层,RPMsg协议定义了一个标准化的二进制接口,用于在多核系统中内核之间的通信。

RPMsg协议的分层模型如下:

10.png

它是实现eRPC的关键部分,采用的数据通讯方式为共享内存和消息通知。

详细介绍参考GitHub官方网站:

https://github.com/EmbeddedRPC/erpc

https://github.com/nxp-mcuxpresso/rpmsg-lite

HPM-SDK已完成了eRPC的移植,采用RPmsg-Lite作为数据传输层,采用MBX作为事件通知。

例程:hpm_sdk\samples\multicore\erpc

来源:先楫半导体HPMicro

免责声明:本文为转载文章,转载此文目的在于传递更多信息,版权归原作者所有。本文所用视频、图片、文字如涉及作品版权问题,请联系小编进行处理(联系邮箱:cathy@eetrend.com)。

围观 126

EXTI 简介

EXTI(External interrupt/event controller)—外部中断/事件控制器,管理了控制器的 23个中断/事件线。每个中断/事件线都对应有一个边沿检测器,可以实现输入信号的上升沿检测和下降沿的检测。EXTI可以实现对每个中断/事件线进行单独配置,可以单独配置为中断或者事件,以及触发事件的属性。

EXTI 功能框图

EXTI的功能框图包含了 EXTI最核心内容,EXTI可分为两大部分功能,一个是产生中断,另一个是产生事件。EXTI功能框图如下:

1.png

中断/事件线

EXTI有23个中断/事件线,每个GPIO都可以被设置为输入线,占用EXTI0至EXTI15,还有另外七根用于特定的外设事件。

2.png

EXTI0至EXTI15用于GPIO,通过编程控制可以实现任意一个GPIO作为 EXTI的输入源。由上图可知,EXTI0可以通过AFIO的外部中断配置寄存器 1(AFIO_EXTICR1)的EXTI0[3:0]位选择配置为PA0、PB0、PC0、PD0、PE0、PF0、PG0、PH0 或者PI0,其他EXTI线(EXTI中断/事件线)使用配置都是类似的。

外设事件连接模式:

EXTI line 16 连接PVD输出

EXTI line 17 连接RTC闹钟事件

EXTI line 18 连接USB OTG FS唤醒事件

EXTI line 19 连接以太网唤醒事件

EXTI line 20 连接USB OTG HS唤醒事件

EXTI line 21 连接RTC 篡改和时标事件

EXTI line 22 RTC唤醒事件

EXTI 初始化结构体

标准库函数对每个外设都建立了一个初始化结构体,比如 EXTI_InitTypeDef,结构体成员用于设置外设工作参数,并由外设初始化配置函数,比如 EXTI_Init()调用,这些设定参数将会设置外设相应的寄存器,达到配置外设工作环境的目的。

初始化结构体和初始化库函数配合使用是标准库精髓所在,理解了初始化结构体每个成员意义基本上就可以对该外设运用自如了。初始化结构体定义在 cks32f4xx_exti.h 文件中,初始化库函数定义在 cks32f4xx_exti.c 文件中,编程时我们可以结合这两个文件内注释使用。

EXTI操作流程

a)首先配置GPIO引脚模式:

RCC_APB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE); 
/* 配置GPIOA.0 */
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
/* 配置为输入模式 */
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;
/* 配置速率为高速模式 */
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;
/* 使能下拉模式 */
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_DOWN;
/* 调用初始化函数 */
GPIO_Init(GPIOA, &GPIO_InitStructure);typedefstruct

b)配置EXTI line0中断线连接GPIOA.0:

typedefstrucSYSCFG_EXTILineConfig(EXTI_PortSourceGPIOA, GPIO_PinSource0);

c)配置中断线为中断模式,上升沿触发模式并使能:

EXTI_InitTypeDef  EXTI_Structure;
EXTI_StructInit(&EXTI_Structure); 
/*  配置中断线0 */
EXTI_Structure.EXTI_Line = EXTI_Line0;      
/* 使用中断模式 */
EXTI_Structure.EXTI_Mode = EXTI_Mode_Interrupt;
/* 电压低于阀值时产生中断 */     
EXTI_Structure.EXTI_Trigger = EXTI_Trigger_Raising;  
/* 使能中断线  */
EXTI_Structure.EXTI_LineCmd = ENABLE;   
/* 初始化中断  */
EXTI_Init(&EXTI_Structure);

d)配置中断管理器NVIC,设置EXTI0_IRQn中断源优先级并初始化:

Svoid NVIC_Configuration(void)
{  
    NVIC_InitTypeDef NVIC_InitStructure;  
    /* 嵌套向量中断控制器组选择 */  
    NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);  
    /* 配置EXTI0_IRQn中断源 */  
    NVIC_InitStructure.NVIC_IRQChannel = EXTI0_IRQn;  
    /* 抢断优先级为1 */  
    NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;  
    /* 子优先级为1 */  
    NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;  
    /* 使能中断 */  
    NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;  
    /* 初始化配置NVIC */ 
    NVIC_Init(&NVIC_InitStructure); 
 }  
    NVIC_PriorityGroupConfig(NVYSCFG_EXTILineConfig(EXTI_PortSourceGPIOA, GPIO_PinSource0);

e)当产生 EXTI0中断,在中断程序中进行相应的处理:

typvoid EXTI0_IRQHandler(void)
{  
    if(EXTI_GetITStatus(EXTI_Line0) != RESET)  
    {            
        EXTI_ClearITPendingBit(EXTI_Line0);
        /* 添加用户处理代码 */  
     }
}  edefstruct

来源:中科芯MCU

免责声明:本文为转载文章,转载此文目的在于传递更多信息,版权归原作者所有。本文所用视频、图片、文字如涉及作品版权问题,请联系小编进行处理(联系邮箱:cathy@eetrend.com)。

围观 15

灵动股份推出全新超值型 MM32G0001 系列 MCU。2023 年初,灵动首次发布了其主打高性价比的 MM32G 系列,目前已陆续推出了 G0140,G0160 和 G5330 系列产品。为进一步丰富 MM32G 系列产品组合,灵动和上下游合作伙伴通力合作,打造出全新入门级超值型 MM32G0001 系列 MCU。MM32G0001 系列 MCU 搭载 48MHz Arm® Cortex®-M0 内核,提供 16KB Flash 和 2KB SRAM,并提供丰富的外设资源。MM32G0001 系列 MCU 适用于多种多样的入门级 32 位MCU市场,可覆盖广泛的 8/16 位 MCU 升级需求。

优化 Flash 技术,降低产品成本,助力 8/16 位 MCU 升级

以 Arm 为内核的 32 位 MCU 投入市场已经近 20 年的历史,目前 32 位 MCU 已逐步覆盖应用市场的方方面面,但不容忽视的是 8/16 位 MCU 因其价格便宜、简单易用、小封装丰富等特点,依然牢牢占据着入门级 MCU 市场的主力位置。虽然很多 32 位 MCU 厂商都推出了其 8/16 位的替换产品,但始终因为价格和易用性等因素无法完全撼动 8 位单片机的低成本优势。但同时我们也观察到,很多主流的 8/16 位 MCU 产品都具有一些明显的特征:如采用较为传统的工艺,配置 EEPROM,可提供几个 KB 的小容量 Flash甚至是OTP(一次可编程)或者MTP(多次可编程,如几十次或上百次),以及较小的 RAM 配比,如几百个字节。随着工艺的发展,老工艺的成本劣势越来越凸显,在先进工艺上小 Flash 和 EEPROM 的实现也不再经济,因此从工艺角度看, 8/16 位 MCU 的发展已经达到瓶颈。而随着先进工艺的发展,32 位 MCU 有机会采用最新的技术把成本做到和 8/16 位 MCU 相当甚至更优的水平。

正是观察到了上述趋势,灵动与合作伙伴华虹宏力紧密配合,依托于华虹宏力20多年夯实可靠的嵌入式闪存技术上做的优化,采用更稳定和经大规模量产验证的 12 寸晶圆工艺平台,对产品的功能、性能和成本进行了全方位的打磨,在保持MM32品质目标的前提下,推出了这款极具性价比的 MM32G0001 系列 MCU 产品。

不同于市面上部分出现在低温或高温环境下代码遗失、读写次数降级的嵌入式MCU产品,MM32G0001在各种温度范围内的闪存擦写寿命与数据保存能力、抗干扰性、芯片复位可靠性等性能都已得到充分验证。

MM32G0001 产品配置和特色

1.jpg

MM32G0001 的简要配置如下:

  • 内核

    Arm Cortex-M0,主频可达 48MHz

  • 存储

    16KB Flash,2KB SRAM

  • 通信接口

    2 组 USART 接口,支持 3 线 SPI 模式;1 组 SPI 接口,主机模式速度可达 24Mbps;1 组 I2C 接口

  • 定时器

    3 组 16 位定时器,其中包含 1 组可输出 4 路互补 PWM 的高级定时器;1 组独立时钟看门狗

  • 模拟

    1 组 12 位 8 通道 ADC,速度可达 1MSPS

  • 兼容性

    引脚兼容 MM32F0010 系列

MM32G0001 在提供了极致的性价比的同时,也保证了产品的质量稳定、可靠,并通过了大量的测试和验证。作为 8/16 位升级的首选,MM32G0001 具有以下特色亮点:

  • 高主频

    相较于常见的 8/16 位MCU,性能提升了 3~4 倍

  • 大 SRAM

    Flash:SRAM 配比为8:1,满足升级需求

  • 10 万次擦写

    Flash 支持 10 万次擦写,可替代片上 EEPROM,并为众多使用8/16位OTP/MTP MCU的用户提供代码升级的便利性和健壮性

  • 丰富的通信接口

    提供多种可灵活配置的接口:2个经优化的USART、1个SPI和1个I2C,轻松实现各种接口类应用,如 USART 转 SPI、USART 转 I2C、SPI IO 扩展、I2C IO 扩展等

  • 高速 ADC

    高达 1MSPS 采样率的 12 位 ADC,模拟性能不减配

  • 可驱动三相电机

    提供三相互补 PWM 输出,支持硬件死区

  • 内置高精度时钟

    全温度范围内偏差不超过 ±2%

  • 最高 105°C Tj结温范围

  • ±5KV HBM ESD,±2KV CDM ESD,±300mA 高温 Latch Up 闩锁值

  • 2.0~5.5V 宽压设计

    适用于各种供电电压场景

MM32G0001 产品组合

MM32G0001现可提供 TSSOP20,QFN20 和 SOP8 三种封装,提供 -40~85°C 工业级和 -20~70°C 消费级环境温度选项,本次共推出 5 款型号可供选择。

此外,MM32G0001 还支持为特定客户和应用定制 DFN、DIP 和 SOP 等常见的小引脚封装,可联系灵动了解详情。

MM32G0001 的产品组合如下:

2.png

产品供货情况和支持

在硬件配套方面,MM32G0001 支持两种类型的开发板:

用户可根据需要任意选择两款不同配置的开发板。

MM32G0001 现已提供完整的样片、开发板和软件开发包支持。

3.png

MM32G0001 系列已全面量产并可接受大批量订单。有关样片申请与芯片购买事宜,请洽灵动股份的销售、官方代理商和方案设计公司。

更多有关MM32G0001的详细信息,请点击访问:

https://www.mindmotion.com.cn/products/mm32mcu/mm32g/mm32g_value_line/mm32g0001/

来源:灵动MM32MCU

免责声明:本文为转载文章,转载此文目的在于传递更多信息,版权归原作者所有。本文所用视频、图片、文字如涉及作品版权问题,请联系小编进行处理(联系邮箱:cathy@eetrend.com)。

围观 181

为确保嵌入式硬件和软件的安全运行,防止由于随机故障和系统故障所带来的使用风险,越来越多的行业规定产品必须取得相应的功能安全认证才能上市。GD32F303/305/307系列MCU符合IEC 60730 B类功能安全标准,并可提供由业界领先的第三方测试、检验、认证机构——SGS出具的检测报告及证书。经过认证的软件自检库和完备的安全文档也已经准备就绪,可以支持家用电器等设备的设计符合安全规范,协助客户快速推出稳定可靠的终端产品。

1.jpg

2.jpg

3.jpg

IEC 60730 B类功能安全证书及测试报告

IEC 60730简介 

IEC 60730安全标准规范由国际电工委员会(IEC)制定,该安全标准定义了家用电器嵌入式控制软件与硬件安全操作的测试与检测方法,以确保家电产品安全可靠地工作。

IEC 60730将基于微控制器的家用电器安全标准分为3类:

∎A类:与设备安全无关的控制功能

应用场景:温湿度控制、照明控制等

∎B类:旨在防止受控设备的不安全运行

应用场景:洗衣机、电冰箱等

∎C类:旨在防止特殊危害,例如防止设备爆炸

应用场景 :自动燃烧器、燃气型烘干机等

典型的家用电器,比如白电需要符合B类级别的保护。IEC 60730 B类定义并涵盖了以下需要监控或者检测的控制器关键部件:CPU寄存器和程序计数器、中断处理及执行、系统时钟频率、存储器检测等。每个部件均提供了可选的检测方法,设备厂商可灵活采用。

GD32 对 IEC 60730 的支持 

IEC 60730规范要求家用电器相关的厂商,对其提供的每个产品装置的部件,通过程序运行中的动态自我检测及时发现问题并采取措施。目前的智能型家电类产品通常是一键启动,当中所导入的功能安全IEC 60730 B类功能安全标准,最重要的组件就是MCU。因为只有MCU能防止受控设备的不安全运行、避免电子器件在功能失效时造成人员的受伤、协助系统诊查失效原因及对应相关的行为。

兆易创新GD32F303/305/307系列主流型MCU已经提供了完整的功能安全库,协助客户实现功能安全设计。家电厂商可以将认证过的GD32安全程序库,嵌入到整套系统软件中实现自我检测功能,进而申请最终产品的IEC 60730功能安全标准相关认证。

启动诊断测试项:

●CPU寄存器检测

● 看门狗定时器检测

● Flash全域检测

●RAM检测

●系统时钟检测

周期诊断测试项:

●CPU寄存器检测

●堆栈溢出检测

●系统时钟检测

●Flash CRC片区检测

●定时中断处理

●RAM片区检测

安全是家电产业实现高质量发展的底层保障。兆易创新一直将客户需求及合规认证视为公司发展的基石,持续完善功能安全相关认证,旨在为开发者提供更完整的安规支持。未来,兆易创新GD32 MCU还将满足面向多元化市场的专业安全认证需求,与行业伙伴携手并进,共同合规、稳健、高质量地发展。

来源:GD32MCU

免责声明:本文为转载文章,转载此文目的在于传递更多信息,版权归原作者所有。本文所用视频、图片、文字如涉及作品版权问题,请联系小编进行处理(联系邮箱:cathy@eetrend.com)。

围观 94

兆易创新GigaDevice (股票代码 603986) 今日宣布,正式推出中国首款基于Arm® Cortex®-M7内核的GD32H737/757/759系列超高性能微控制器。

GD32H7系列MCU具备卓越的处理能效、丰富连接特性及多重安全机制,以先进工艺制程和优化的成本控制,全面释放高级应用的创新潜力。全新产品组合包括3个系列共27个型号,提供176脚和100脚BGA封装,176脚、144脚和100脚LQFP封装等五种选择,将于5月底陆续开放样片和开发板卡申请,10月起正式量产供货。

GD32H7可广泛用于数字信号处理、电机变频、电源、储能系统、无人机、音频视频、图形图像等各类应用。得益于超高主频以及大存储容量,该系列MCU也适用于机器学习和人工智能等诸多高端创新场景。

兆易创新产品市场总监金光一表示:“物联技术和人工智能的普及,不断推动嵌入式设计向智能化方向发展。GD32H7突破了MCU的性能边界,为复杂运算、多媒体技术、边缘AI等高级创新应用提供强大的算力支撑,进一步迭代并拓展了我们在超高性能领域的产品布局,并持续以强大供应链和高品质打造平台化优势,赋能开发者应对未来挑战。”

✦性能强劲的硬件配置✦

GD32H7系列MCU采用基于Armv7E-M架构的600MHz Arm® Cortex®-M7高性能内核,凭借支持分支预测的6级超标量流水线架构,以及支持高带宽的AXI和AHB总线接口,可实现更高的处理性能。内置了高级DSP硬件加速器和双精度浮点单元(FPU),以及硬件三角函数加速器(TMU)和滤波算法加速器(FAC),大幅减轻了内核的负担并有助于提升处理效率。GD32H7系列MCU最高主频下的工作性能可达1552 DMIPS,CoreMark®测试取得了2888分的出色表现,同主频下的代码执行效率相比市场同类产品提升约10%,相比Cortex®-M4产品的性能提升超过40%。

GD32H7系列MCU配备了1024KB到3840KB的片上Flash及1024KB的SRAM,其中包含512KB可配置超大紧耦合内存(ITCM, DTCM),可确保关键指令与数据的零等待执行;还配备了64KB L1-Cache高速缓存(I-Cache, D-Cache),有效提升CPU处理效率和实时性。外部总线扩展(EXMC)支持访问SDRAM、SRAM、ROM、NOR Flash和NAND Flash等多种片外存储器。GD32H7内置了可实时跟踪指令和数据的宏单元ETM(Embedded Trace Macrocell),提供在不干扰CPU正常运行情况下的高级调试功能。GD32H7内置的大容量存储空间能够支持复杂操作系统及嵌入式AI、机器学习(ML)等多种高级算法,实现兼具高性能和低延迟的实时控制。

✦大幅扩容的集成资源✦

GD32H7系列MCU新增了大量通用外设资源,包含8个U(S)ART、4个I2C、6个SPI、4个I2S、2个SDIO以及2个八线制OSPI(可向下兼容四线制QSPI)等。配备了2个USB2.0 OTG接口,支持全速(Full Speed)和高速(High Speed)模式。还集成了3路CAN-FD控制器和2路以太网,满足高速互联应用所需。

GD32H7系列MCU提供了出色的图形显示和音视频连接方案。芯片内置了TFT LCD液晶驱动器和图形处理加速器IPA (Image Processing Accelerator), 支持2D图像叠加、旋转、缩放及多种颜色格式转换等功能。还集成了串行音频接口(SAI)和SPDIF音频接口,以及8位至14位的数字摄像头接口,便于视频图像的采集与传输。

GD32H7系列MCU采用1.71V~3.6V供电,支持高级电源管理并提供了三种供电模式(LDO/SMPS/直接供电)和五种低功耗模式,可实施灵活的供电策略以兼顾整体能耗平衡。配备了4个32位通用定时器、12个16位通用定时器、4个64位/32位基本定时器、2个PWM高级定时器。2个14位ADC采样速率可达4MSPS,1个12位ADC采样速率高达5.3MSPS,还集成了快速比较器(COMP)、DAC等高精度模拟外设以支持各类电机控制场景。

GD32H7产品系列支持多种安全机制,为通信过程的数据安全提供保障。内置的硬件加解密支持DES、三重DES或AES算法,以及应用于多种场合的哈希(Hash)算法,确保传输信息的完整性。GD32H7系列MCU Flash/SRAM均支持ECC校验,能够有效提升系统运行的可靠性。还集成了RTDEC模块,可以对AXI或AHB总线数据进行实时解密,保护存储在外部SPI NOR Flash设备中只读固件的机密性。

1.png

▲ GD32H737/757/759系列MCU产品组合

GD32H7提供了3个全新系列,并与现有产品完美兼容。按资源配置不同,GD32H737系列支持3路CAN 2.0B,GD32H757/GD32H759系列支持3路高速CAN-FD。按管脚封装不同,GD32H757系列具备BGA100和LQFP144/100三种封装选项;GD32H759系列具备BGA176 和LQFP176封装选项,以满足差异化开发需求。

GD32强大的开发生态也日趋丰富完善。兆易创新为全新GD32H7系列微控制器提供了免费开发环境GD32 Eclipse IDE和多合一编程工具GD32 All-In-One Programmer,并支持调试下载工具GD-LINK的SWD/JTAG或主机的UART、USB、I2C等通信接口直接编程。Arm® KEIL、IAR、SEGGER等知名嵌入式工具厂商亦将为GD32H7全新产品提供包括集成开发环境(IDE)、调试(Debug)和跟踪(Trace)等在内的全面支持。业界主流的实时操作系统(RTOS)、图形化界面(GUI)和嵌入式AI算法等中间件也将适配,加速用户项目设计,缩短产品上市周期。

兆易创新已于德国纽伦堡举办的Embedded World 2023展会上率先展出了全新的GD32H759I-EVAL全功能评估板,配套的入门级学习套件还包括GD32H759I-START、GD32H757Z-START、GD32H757J-START、GD32H757V-START,对应于各类封装和管脚,方便功能评估和开发调试。各授权代理商渠道及GD32天猫旗舰店(GD32.tmall.com)也将上架发售。

* 所有商标、Logo和品牌名称均为其各自所有者的财产,排列不分先后

关于GD32 MCU

兆易创新GD32 MCU是中国高性能通用微控制器领域的领跑者,中国最大的Arm® MCU家族,中国第一个推出的Arm® Cortex®-M3、Cortex®-M4、Cortex®-M23、Cortex®-M33及Cortex®-M7内核通用MCU产品系列,并在全球首家推出RISC-V内核通用32位MCU产品系列,已经发展成为32位通用MCU市场的核心之选。以累计超过13亿颗的出货数量,超过2万家客户数量,41个系列500余款产品选择所提供的广阔应用覆盖率稳居中国本土首位。

兆易创新GD32 MCU也是Arm®大学计划(University Program, AUP)中国首批合作伙伴、Arm® mbed™ IoT平台生态合作伙伴、RISC-V基金会战略会员、“兆易创新杯”中国研究生电子设计竞赛的冠名厂商。GD32以打造“MCU百货商店”规划发展蓝图,为用户提供最全面的系统级产品和解决方案支撑,构建智能化开发平台和完善的产品应用生态。更多信息欢迎访问GD32MCU.com。

关于兆易创新

兆易创新科技集团股份有限公司(股票代码603986)是全球领先的Fabless芯片供应商,公司成立于2005年4月,总部设于中国北京,在全球多个国家和地区设有分支机构,营销网络遍布全球,提供优质便捷的本地化支持服务。兆易创新致力于构建以存储器、微控制器和传感器和模拟产品为核心驱动力的完整生态,为工业、汽车、计算、消费电子、物联网、移动应用以及通信领域的客户提供完善的产品技术和服务,并已通过ISO9001及ISO14001等管理体系的认证,与多家世界知名晶圆厂、封装测试厂建立战略合作伙伴关系,共同推进半导体领域的技术创新。欲了解更多信息,请访问:www.GigaDevice.com

来源:GD32MCU

免责声明:本文为转载文章,转载此文目的在于传递更多信息,版权归原作者所有。本文所用视频、图片、文字如涉及作品版权问题,请联系小编进行处理(联系邮箱:cathy@eetrend.com)。

围观 105

多核的微控制器(MCU)向来是设计上的一大挑战,尤其是多核异构的设计。而MCU双核作为其中的精简版本,凭借其超强的处理性能和便捷开发的特性,很快受到业界的好评。先楫半导体先后推出了几款高性能MCU双核产品,集成 2 个 RISC-V 处理器,其中HPM6700系列两个核的最高主频都可以达到816MHz。本文通过对先楫HPM6000系列双核的使用方法、工程编译与调试、双核通信方式和资源分配等内容的介绍,全方位给大家介绍双核的使用和操作,让大家轻松玩转双核,完成更多的片上系统功能开发。

1.jpg

接下来,让我们看一看HPM6000系列双核MCU是如何玩转起来的吧~

双核简介

HPM6000系列的双核配置,均集成 2 个 RISC-V 处理器,双核采用主从结构。CPU0 和 CPU1 采用相同配置,如下:

● 支持相同指令集

● 相同容量的 L1 指令和数据缓存

– 32KB L1 I-Cache,4-way,128x 64B cache line per way

– 32KB L1 D-cache,4-way,128x 64B cache line per way

● 相同容量的指令和数据本地存储器:256 KB ILM 和 256 KB DLM

CPU0 和 CPU1 采用相同的存储器映射,以下为例外:

●    CPU 自身的指令/数据本地存储器 ILM / DLM 为私有;

●    FGPIO 为私有

●    平台中断控制器 PLIC 为私有

●    软件中断控制器 PLICSW 为私有

●    机器定时器 MCHTMR 为私有

双核的三种使用方法推荐

不论是在RAM中运行,还是片上Flash运行,双核固件均是存储在Flash上。客户根据应用场景,选择在上电后将双核各自的镜像从Flash中装载到RAM中执行或者基于Flash片上执行。

根据应用场景,选择合适的运行方式,推荐以下几种:

方案一:Core0 加载到RAM运行,Core1加载到RAM运行

RAM区域可以是各自的ILM,也可以片上的SRAM,或者是SDRAM。当然,装载CODE的RAM区域各自都是独立的。此方案应用与双核固件均占用小,可完全装载到RAM中运行。

固件存储位置:Core0和Core1的固件均存放在Flash指定区域(Flash分区规划)。上电后,BootRom 从指定Flash区域装载Core0镜像到指定RAM运行(type:debug/release),Core0运行后从指定Flash 区域装载Core1镜像到指定RAM,然后运行Core1。

方案二:Core0基于flash xip(flash片上执行)运行,Core1加载到RAM运行

此方案应用与Core0核固件占用大, Core1核固件占用小。通常将Core0用来做应用复杂交互,Core1用来做高实时性,高性能的触发逻辑。

固件存储位置:

1). Core0和Core1的固件各自存放在Flash的指定区域(Flash分区规划)。

  • 优点:Core0和Core1可单独OTA。

  • 缺点:需要维护两个固件BIN文件,并存放到各自的区域中。

2). Core1的固件以数组(只读区)镜像的方式存储在Core0的固件中,Core0固件存放在Flash指定区域;官方例程中使用此方案。

  • 优点:     只维护一个固件。

  • 缺点:Core0和Core1不可单独OTA。

方案三:Core0基于flash xip0(flash片上执行)运行,Core1基于flash xip1(flash 片上执行)运行

此方案应用与Core0核和Core1核固件均很大,双核均无法满足放到RAM中运行。

注意:由于双核均基于flash片上执行,如果使用同一个flash XPI,会出现并发访问Flash的情况导致未知异常发生;如果强制顺序访问,访问效率极低,严重拖垮CPU运行速率;故不建议两个核使用同一个flash XPI片上执行。建议使用XPI0和XPI1各自外挂一个FLASH,分别用于Core0 Flash xip0和Core1 Flash xip1。

固件存储位置:Core0和Core1的固件存储在各自外挂的Flash的指定区域中。

双核工程编译与调试

HPM双核是集成了两个RISC-V 处理器,是两个完全独立的CPU,故HPM双核工程是Core0工程和Core1工程两个独立的工程。因此HPM双核工程编译,其实是两个独立的单核工程的编译。用户只需要建立core0和core1的各自工程编译调试即可。

由于HPM-SDK例程中使用的是方案二,且Core1的固件以数组(只读区)镜像的方式存储在Core0的固件中,导致Core1工程为Core0工程的关联工程。因此在构建工程时,必须先构建生成Core0工程,作为关联工程Core1工程会自动生成。由于Core1的固件是Core0工程中的只读数组,故必须先编译Core1工程生成只读数组镜像后,再编译Core0工程。

如下构建编译调试双核hello world工程:

A. 构建工程

先构建生成Core0工程:

由于Core0是flash片上执行,故type选择:flash_sdram_xip或flash_xip

2.png

作为关联工程Core1工程会自动生成:

3.png

B. 编译工程

打开各自的工程(Core0通过GUI工具直接点击Open Project with IDE, Core1对应目录下双击打开工程)。

4.png

5.png

用SES编译各自的工程即可。

6.png

7.png

C. 工程调试

一、双核同时调试

基于OpenOCD调试 (FT2232/DAP-LINK等)。

为了达到Core0和Core1同时调试,基于OpenOCD调试在HPM-SDK例程中,对Core1的Debug做了如下限制:

1)Core1不启动GDB Server,连接Core0启动的GDB Server。当然使用不同的port来区分是Core0(Port:3333)还是Core1(Port:3334)。

2)Reset 和 Stop时,直接hart停止运行。

如下图:

8.png

因此,调试HPM-SDK双核例程,步骤如下:

步骤1:Core0的工程调试,和正常的单核调试相同,正常SES启动debug即可。

9.png

步骤2:Core1的工程调试,由于上述限制(为了双核同时调试),必须先将Core0的工程Debug运行,然后在启动Core1的Debug仿真。

10.png

可在Core0 SES终端看到Core1 GDB connect信息:

11.png

基于Jlink 调试

基于Jlink调试,对Core0和Core1的Debug做如下修改:

1. Core0 修改Debug连接target为:J-Link

2. Core1修改Debug连接target为:J-Link

12.png

3. Core1修改Debug Device为:HPM6750xVMx_CPU1

13.png

4. 由于SES修改Device为CPU1(上一步骤修改),联动修改ISA为:rv32i,导致编译等异常。故在Code Generation下改回ISA为:rv32imac。

14.png

5. 通常初始化时钟等外设在Core0中完成,故为了双核能同时调试,需先运行Core0 Debug至完成时钟等外设初始化后,方可Core1 Debug运行。

15.png

二、双核单独调试

基于 OpenOCD 调试

如果只用来单独调试Core1(Core0的单独调试不做任何修改即可),可修改Core1的Debug配置,如下:

Auto Start GDB Server: Yes

Reset and Stop Command: reset halt

16.png

修改后, 可直接启动Core1 Debug运行。

注意:由于CPU0,CPU1主从架构,通常外设等时钟初始化会在Core0中完成。如果是单独调试Core1,为了确保程序能正常运行,需在Core1工程中初始化时钟等外设。如下:

17.png

基于 Jlink 调试

单独调试Core1 (Core0的单独调试不做任何修改即可),JLink修改同双核JLink修改一致(可参考上方介绍的内容)。

同样为了确保Core1能正常运行,需在Core1工程中初始化时钟等外设。

18.png


下一篇,我们将会给各位小伙伴们介绍双核的通信方式、资源分配和双核应用eRPC架构,敬请期待。

来源:先楫半导体HPMicro

免责声明:本文为转载文章,转载此文目的在于传递更多信息,版权归原作者所有。本文所用视频、图片、文字如涉及作品版权问题,请联系小编进行处理(联系邮箱:cathy@eetrend.com)。

围观 115

随着技术的进步,低功耗物联网(IoT)和边缘/云计算需要更精确的数据传输。图1展示的无线监测系统是一个带有24位模数转换器(ADC)的高精度数据采集系统。在此我们通常会遇到这样一个问题,即微控制单元(MCU)能否为数据转换器提供高速的串行接口。

本文描述了设计MCU和ADC之间的高速串行外设接口(SPI)关于数据事务处理驱动程序的流程,并简要介绍了优化SPI驱动程序的不同方法及其ADC与MCU配置。本文还详细介绍了SPI和直接存储器访问(DMA)关于数据事务处理的示例代码。最后,本文演示了在不同MCU(ADuCM4050、MAX32660)中使用相同驱动程序时ADC的吞吐率。

1.png

图1. 状态监控。

通用SPI驱动程序简介

通常,MCU厂商会在例程代码中提供通用的SPI驱动程序/API。通用SPI驱动程序/API通常可以涵盖大多数用户的应用,这些代码可能包含许多配置或判断语句。但在某些特定情况下,比如ADC数据采集,通用的SPI驱动程序可能无法满足ADC数据的全速的吞吐速率需求,因为通用的驱动程序中有过多的配置,而未使用的配置会产生额外的开销并导致时间延迟。

2.png

图2. 通用API的配置。

设计思路与实践框架

我们通常会选择低功耗高性能的MCU作为主机通过SPI提取ADC的输出数据。但是,由于ADI的SPI驱动程序的数据事务处理命令存在冗余,因此数据输出速率可能被显著降低。为了充分释放ADC的潜在速率,本文使用ADuCM4050和AD7768-1进行实验并尝试可能的解决方案。尽管在使用默认滤波器的情况下,ADuCM4050的最大数据输出速率可达256 kHz,但在当前情况下,其速率被限制在8 kHz。提高输出速率的潜在解决方案包括删除不必要的命令以及激活DMA控制器。本文将在以下小节中介绍这些思路。

3.png

图3. 不同ODR以及DRDY与SCLK之间的关系。

以MCU作为主机

ADuCM4050 MCU是一款主时钟速率为26 MHz的超低功耗微控制器,内核为ARM® Cortex®-M4F处理器。ADuCM4050配有三个SPI,每个SPI都有两个DMA通道(接收和发射通道)可与DMA控制器连接。DMA控制器和DMA通道可实现存储器与外设之间的数据传输。这是一种高效的数据分配方法,可将内核释放以处理其他任务。

以ADC作为从机

AD7768-1是一款24位低功耗、高性能的Σ-Δ ADC。其数据输出速率 (ODR)和功耗模式均可根据用户的要求进行配置。ODR由抽取系数和功耗模式共同决定,如表1中所示。

4.png

表1. 数据输出速率的功耗模式配置

AD7768-1的连续读取模式也是该产品的一个重要特性。ADC的输出数据存储在寄存器0x6C中。一般而言,每次读/写操作之前,ADC寄存器中的数据都需要地址才可以访问,但是连续读取模式则支持在收到每个数据就绪信号后直接从0x6C寄存器提取数据。ADC的输出数据为24位的数字信号,对应的电压如表2 所示。

5.png

表2. 数字输出码和模拟输入电压

引脚连接示意图

ADuCM4050和AD7768-1组成的数据事务处理示例模型的引脚连接如图4所示。

6.png

图4. AD7768-1和ADuCM4050的接口引脚连接。

ADC的复位信号引脚RST_1连接至MCU的GPIO28,而数据就绪信号引脚DRDY_1则连接至MCU的GPIO27。其余引脚则根据通用的SPI配置标准进行连接,其中MCU为主机,而ADC为从机。SDI_1接收MCU发送的ADC寄存器读/写命令,而DOUT_1则将ADC的输出数据发送至MCU。

数据事务处理的实现

中断数据事务处理

为实现连续数据事务处理,本文将MCU的GPIO27引脚(连接至ADC 的DRDY_1引脚)用作中断触发引脚。ADC将数据就绪信号发送至 GPIO27时会触发MCU包含数据事务处理命令的中断回调函数。如图5所示,数据采集必须在中断A和中断B之间的时间间隔内进行。

7.png

图5. 两次中断的时间间隔。

利用ADI的SPI驱动程序可以在ADC和MCU之间轻松实现数据事务处理。但是,由于驱动程序内存在冗余命令,ADC的ODR会被限制在8 kHz。本文尽可能地精简了代码以加快ODR,将介绍实现DMA 数据事务处理的两种方法:基本模式的DMA事务处理和乒乓模式 的DMA事务处理。

基本模式的DMA事务处理

在实现每个DMA事务处理之前需要对SPI和DMA进行配置(参见图6 中的示例代码)。SPI_CTL为SPI配置,其值为0x280f,源于ADI的SPI 驱动程序的设定值。SPI_CNT为传输字节数。由于每个DMA事务处理只能发送固定的16位数据,因此SPI_CNT必须是2的倍数。本例设置SPI_CNT为4,以满足ADC的24位的输出数据要求。SPI_DMA寄存器为SPI的DMA使能寄存器,设定其值为0x5以使能DMA接收请求。命令pADI_DMA0->EN_SET=(1<<5)使能第五个通道的DMA,即SPI0 RX。

8.png

图6. 基本DMA事务处理模式的代码。

每个DMA通道都有一个DMA结构寄存器,如表3中所示。需要指出的是,这里的数据来源地址的结尾(即SPI0 Rx,亦即来源端指针SRC_END_PTR)在整个操作期间无需增加,因为Rx FIFO会自动 将寄存器中的数据推送出去。另一方面,数据目标地址的结尾(即目标端指针DST_END_PTR)根据ADI的SPI驱动程序的使用函数计算得出,即目标地址+ SPI_CNT -2。

9.png

表3. DMA结构寄存器

当前地址为内部数组缓冲区的地址。DMA控制数据配置CHNL_CFG 包括来源数据大小、来源地址增量、目标地址增量、剩余传输次数和DMA控制模式等设置,其值0x4D000011按照表4中所述的设置配置。

10.png

表4. 控制数据配置0x4D00011的DMA配置

SCLK时钟通过伪读取命令SPI_SPI0 -> RX启动,输出数据通过MISO 从ADC传至MCU。MOSI上其它的数据传输可以忽略不计。一旦完成 Rx的FIFO填充,DMA请求就会生成从而激活DMA控制器,以将数据从 DMA来源地址(即SPI0 Rx FIFO)传输至DMA目标地址(即内部数组的缓冲区)。值得注意的是,SPI_DMA=0x3时会生成Tc请求。

最后,通过将当前目标地址加4的方式将目标地址用于下一个4 字节的传输。

请注意,SPI0 DMA通道的pADI_DMA0->DSTADDR_CLR和pADI_ DMA0->RMSK_CLR必须在首次中断触发之前在主函数中设置。前一个为DMA通道目标地址减量使能清零寄存器,用于在增量模式下设置每次DMA传输后的目标地址移位(目标地址计算函数仅在增量模式下有效)。后一个为DMA通道请求屏蔽清零寄存器,用于将通道的DMA请求状态清零。

基本模式的DMA事务处理时间图如图7a所示。图中三个时隙分别代表DRDY信号、SPI/DMA设置和DMA数据事务处理。在该模式中,CPU的空闲时间较多,因此希望DMA控制器在处理数据传输时能将任务分配给CPU。

11.png

图7. (a)基本模式DMA和(b)乒乓模式的时间图。

乒乓模式的DMA事务处理

在执行伪读取命令后,DMA控制器会开始数据事务处理,从而使得MCU的CPU处于空闲状态而不处理任何任务。如果能够让CPU和 DMA控制器同时工作,那么任务处理就从串行模式转变为并行模式。这样,就可以同时进行DMA配置(通过CPU)以及DMA数据事务处理(通过DMA控制器)。为实现这一思路,需要设置DMA控制器处于乒乓模式。乒乓模式将两组DMA结构进行了整合:主结构和备用结构。每次DMA请求时,DMA控制器会在两组结构之间自动切换。变量p的初始设置为0,其值表示是主DMA结构(p = 0) 还是备用DMA结构(p = 1)负责数据事务处理。如果p = 0,则在收到伪读取命令时启动主DMA结构进行数据事务处理,同时会为备用DMA结构分配值,使其在下一个中断周期内负责数据事务处理。如果p = 1,则主结构和备用结构的作用互换。当仅有主结构处于基本DMA模式时,在DMA事务处理期间对DMA结构的修改会失败。乒乓模式使得CPU能够访问和写入备用DMA结构,而DMA控制器可以读取主结构,反之亦然。如图7b所示,由于DMA的结构配置是在最后一个周期内完成的,因此在DRDY信号从ADC传送至 MCU后DMA数据事务处理可以被立即执行,使得CPU和DMA同时工作而无需等待。现在,ADC的ODR得到了提升空间,因为总的工作时间已大大缩短。

中断处理程序的优化

两次DRDY信号之间的时间间隔不仅包括了中断回调函数的命令执行时间,还包括了ADI的GPIO中断处理函数的命令执行时间。

当MCU启动时,CPU会运行启动文件(即startup.s)。所有事件的处理函数均在该文件中定义,包括GPIO中断处理函数。一旦触发GPIO中断,CPU就会执行中断处理函数(即ADI的GPIO驱动程序中的GPIO_A_INT_HANDLER和GPIO_B_INT_HANDLER)。通用的中断处理函数会在所有的GPIO引脚中搜索触发中断的引脚并清零其中断状态、运行回调函数。由于DRDY是本文应用的唯一中断信号,因此可以对函数进行简化以加快进程。可选的解决方案包括 (1)在启动文件中重新定位目标,以及(2)修改原始的中断处理函数。重新定位目标意味着自定义中断处理函数,并替换启动文件中的原始的中断处理函数。

而修改原始的中断处理函数只需要添加一个自定义的GPIO驱动程序。本文采用第二种方案修改原始的中断处理函数,如图8所示。该方案只将连接至DRDY的GPIO的引脚中断状态清零,并直接转到回调函数。请注意,这里需要通过取消选择build target中关于原始GPIO驱动函数的勾选框内容来隔离原始的GPIO驱动程序。

12.png

图8. 嵌套矢量中断控制器(NVIC)。

结果

速率性能

假定现在需要读取200个24位的ADC输出数据,并且SPI位速率设置为13 MHz。将DRDY信号和SCLK信号的引脚连接至示波器,可以通过观察DRDY信号与SPI数据事务处理(亦即DMA事务处理)启动之间的时间间隔的方法可以量化本文所述的每种方法对速率的改善程度。这里将DRDY信号至SCLK信号开始的时间间隔记为∆t,那么对于13 MHz的SPI速率,测量得出的∆t为:

  • (a)基本模式DMA Δt = 3.754 μs 

  • (b)乒乓模式DMA Δt = 2.8433 μs 

  • (c)乒乓模式DMA(使用优化的中断处理函数)Δt = 1.694 μs 

方法(a)和(b)可支持64 kHz的ODR,而方法(c)可支持128 kHz的ODR。这是因为方法(c)的∆t最短,从而使得SCLK信号能够更早结束。如果 SCLK信号(即数据事务处理)能在T/2之前完成(T为当前ADC的数据输出周期),则ODR可实现翻倍。这较之于原始的ADISPI驱动程序可以达到的8 kHz的ODR性能是一次巨大的进步。

13.png

图9. (a)基本模式DMA、(b)乒乓模式以及(c)乒乓模式(使用优化的中断处理函数)的Δt。

使用MAX32660控制AD7768-1

使用主时钟速率为96 MHz的MCU MAX32660控制AD7768-1)时的结果如何?在该情况下,使用优化的中断处理函数的中断设置,可在不使用DMA函数的情况下实现256 kHz的数据输出速率。参见图10。

14.png

图10. 不使用DMA时MAX32660的ODR。

结论

本文利用选定的ADC(AD7768-1)和MCU(ADuCM4050或MAX32660)通过 SPI实现了高速的数据事务处理。为实现速率优化的目标,本文简化了ADI的SPI驱动程序执行数据事务处理。此外本文提出,激活DMA控制器释放内核也可以加快连续数据事务处理的流程。在 DMA的乒乓模式下,DMA的配置时间可通过适当的调度来节省。在此基础上,还可以通过直接指定中断引脚的方式优化中断处理函数。在13 MHz的SPI位速率下,本文提出的方案的最佳性能可达到128 kSPS的ADC ODR。

15.png

表5. 使用ADuCM405和MAX32660实现的高速SPI连接

来源:亚德诺半导体

免责声明:本文为转载文章,转载此文目的在于传递更多信息,版权归原作者所有。本文所用视频、图片、文字如涉及作品版权问题,请联系小编进行处理(联系邮箱:cathy@eetrend.com)。

围观 24

页面

订阅 RSS - MCU