AT32F435

雅特力开发环境下载地址:雅特力科技官方网站:http://www.arterytek.com 
搭建AT32开发环境

一、调试工具及开发板

目前AT32F435/F437开发板都自带AT-Link-EZ调试工具,AT-Link-EZ如下图左边红框所示,它也可拆开后单独搭配其他电路板使用,支持IDE在线调试、在线烧录、USB转串口等功能。

1.png

图1. AT-START-F437开发板及AT-Link-EZ实物图

注意:AT-START板配备资源的详细说明,请参考《UM_AT_START_F43x_Vx.x》,存放路径为雅特力科技官方网站→产品讯息→高性能MCU→AT32F4xx系列下载的EvaluationBoard(开发板)资料包解压后\AT_START_F43x_Vx.x\03_Documents。

2.png

图2. 雅特力科技官方网站AT-START-F437开发板资料包

详阅请点击下载:《AT32F435 & AT32F437入门使用指南》

来源: AT32 MCU 雅特力科技

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

围观 28

ACC简介

HICK时钟校准器(ACC)利用OTGFS作为设备时产生的SOF信号作为参考信号达到校准HICK的目的,SOF信号为主机发给设备其周期为1ms的脉冲信号。ACC控制器采用“跨越回归”算法,可以将HICK频率尽可能校准到靠近目标频率。

1.png

图1. ACC控制器架构

ACC功能解析

主要特性

ACC控制器具备如下特性:

  • 校准HICK,已达到对OTGFS设备提供48MHz±0.25%精度的时钟
  • SOF标志可选择来源:OTGFS1或者OTGFS2
  • 可配置的触发校准功能的边界频率
  • 两种校验方式:粗校验和精校验
  • 状态标志:校准就绪标志和SOF参考信号丢失标志
  • 带标志的中断源:校准就绪标志中断源和SOF参考信号丢失标志中断源

中断请求

拥有两个中断请求源:校准就绪中断源和SOF参考信号丢失中断源

2.png

表1. ACC中断源

当设置了对应的使能位,当产生了对应的中断,就会进入对应的中断处理函数。

3.png

图2. ACC中断示意图

校准原理

首先需要了解到,如果系统使用的是HICK作为系统时钟源,而本身ACC模块又是对HICK进行校准,那么此时整个系统是不具备校准条件的,因为没有一个准确的参考信号作为校准的基准,所以就引入了OTGFS的SOF信号。SOF信号是外部主机提供的,主机将准确的SOF信号(1ms周期)给到设备(待校准系统),然后ACC模块采样SOF信号,并进行一系列的计算达到判定HICK是否准确,如若发现HICK不准确那么就会进行校准动作。

SOF周期信号:1毫秒的周期性必须是准确的,是自动校准模块能够正常工作的前提条件;

SOF信号通过PA8输出,如下图:

4.png

图3. SOF信号示意图

cross-return策略(跨越回归算法):计算出离理论值最近的校准值;从理论上来说,可以将校准后的实际频率调校到离目标频率(8MHz)约0.5个step的精度范围以内。

5.png

图4. 跨越回归算法示意图

如上图所示,一旦触发自动校准的条件满足,自动校准就会按照step所规定的步长调整HICKCAL或者HICKTRIM。

跨越(cross):

在满足自动校验的条件后的第一个1毫秒采样周期内的实际采样值要么小于C2,要么大于C2。当这个值小于C2,自动校准按照step的定义,增加HICKCAL或者HICKTRIM,直到实际采样值比C2大,实现实际采样值由小到大对C2的跨越。

当这个值大于C2,自动校准按照step的定义,减少HICKCAL或者HICKTRIM,直到实际采样值比C1小,实现实际采样值由大到小对C2的跨越。

回归(return):

在跨越完成后,比较在跨越前后的实际采样值和C2之间的差值(按绝对值计算),得到离C2最近的实际采样值,从而得到最佳的校验值HICKCAL或者HICKTRIM。

若跨越后的实际采样值和C2之间的差值小于跨越前的实际采样值和C2之间的差值,则以跨越后的校验值为准,并结束校验流程,直到满足下一个满足自动校验的条件。

若跨越后的实际采样值和C2之间的差值大于跨越前的实际采样值和C2之间的差值,则以跨越前的校验值为准,那么校验值会退回一个step,并返回到跨越前的那个校验值,并结束校验流程,直到满足下一个满足自动校验的条件。

按照cross-return策略,在理论上,可以得到离中心频率约0.5个step所对应的频率精度。

如下四种情形会启动自动校准:

  • CALON的上升沿(从0到1);

  • 当CALON=1时,参考信号丢失之后又恢复;

  • 当采样计数器的值小于C1;

  • 当采样计数器的值大于C3。

在CALON的上升沿,即便采样计数器的值大于C1并小于C3,也会启动自动校准,其目的在于,在CALON之后,能够尽快将HICK的频率调整到中心频率的0.5个step以内。

以上四种情形的自动校准的结果均能将HICK的频率调整到中心频率的0.5个step以内。所以为了获得最佳的校准精度,建议将step保持为默认值1。若将step设为0,则HICKCAL或者HICKTRIM将无法改变,也即,无法校准。

ACC配置解析

以下对ACC的配置接口及流程进行说明。

函数接口

6.png表2. 配置函数列表

配置流程

  • 系统以HICK作为系统时钟源,并打开ACC时钟;

  • OTG_FS以HICK为时钟源并初始化OTGFS;

  • 使能ACC相关中断;

  • 配置C1/C2/C3值;

  • 选择SOF源;

  • 使能ACC并选择粗校验或者精校验。

案例 ACC校准HICK

功能简介

实现了使用ACC模块将HCIK校准在要求的精度内。

资源准备

1) 硬件环境:

对应产品型号的AT-START BOARD

2) 软件环境

project\at_start_f4xx\examples\acc\calibration

软件设计

1) 配置流程

  • 开启ACC/OTGFS外设时钟

  • 配置OTGFS设备和ACC模块

  • 开启ACC

2) 代码介绍

  • main函数代码描述

7.png

  • 中断处理函数

8.png

实验效果

  • 如若HICK时钟偏离正常值,ACC将自动启动校准(前提是OTGFS设备与主机成功连接),校准完成后在中断函数内会翻转LED2;产生SOF信号丢失后也会进入对应中断函数内翻转LED3。

来源:AT32 MCU 雅特力科技

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

围观 82

DMA简介

DMA控制器的作用不仅在增强系统性能并减少处理器的中断生成,而且还针对32位MCU应用程序专门优化设计。DMA控制器为存储器到存储器,存储器到外设和外设到存储器的传输提供了7个通道。每个通道都支持外设的DMA请求映射到任意通道上。

1.png

图1. DMA控制器架构

DMAMUX简介

对于如何将外设的DMA请求映射到任意的数据流通道上,就需要使用到DMAMUX。DMAMUX针对每个外设都设计了独有的ID号,使用者只需要将此ID号写入对应的寄存器中并打开DMAMUX功能即可。DMAMUX的引入,使得DMA相较于传统DMA控制器变得更加灵活,使用者可以随意的分配7个通道的使用情况,不必再纠结与某个IP的DMA请求只能固定使用在某个或某几个通道上。

各IP对应ID号如下表:

表1. 各IP对应ID号列表

2.png

注:表格中“DMAMUX请求”为ID号;“来源”为各IP的DMA请求。

DMA功能解析

可编程数据宽度

DMA控制器的通道可支持传输不同数据宽度,byte/halfword/word。通过DMA_CxCTRL中的PWIDTH和MWIDTH位可以对源数据和目标数据的数据宽度进行编程,通常情况下需要设置PWIDTH和MWIDTH位相等,当PWIDTH不等于MWIDTH时,会依据PWIDTH/MWIDTH设定将资料对齐。

3.png

图2. PWIDTH:byte, MWIDTH:half-word

4.png

图3. PWIDTH:half-word, MWIDTH:word

配置DMAMUX

在M2P与P2M模式下,必须配置DMAMUX,否则DMA不会响应外设DMA请求。DMAMUX的作用是为外设的DMA请求复用通道,即任何一个外设的DMA请求可以映射到DMA1/DMA2的任意通道,这大大增加了DMA通道分配的灵活性。

配置DMAMUX比较减到,只需调用专门提供的两个接口函数即可:

5.png


DMA配置解析

以下对DMA的配置接口及流程进行说明。

函数接口

6.png表2. 通道配置函数列表

数据流配置

  • 设置外设地址(CxPADDR寄存器)

数据传输的初始外设地址,在传输过程中不可被改变。

  • 设置存储器地址(CxMADDR寄存器)

数据传输的初始内存地址,在传输过程中不可被改变。

  • 配置数据传输量(CxDTCNT寄存器)

可编程的传输数据长度最大为65535。在传输过程中,该传输数据量的值会逐渐递减。

  • 数据流配置(CxCTRL寄存器)

包含通道优先级,数据传输的方向、宽度、地址增量模式、循环模式和中断方式。

优先级(CHPL)

分为4个等级,最高优先级、高优先级、中等优先级和低优先级。

若有2个流优先级设定相同,则较低编号的流有较高的优先权。举例,流1优先于流2。

数据传输方向(DTD)

分为存储器到外设(M2P),外设到存储器(P2M)或存储器到存储器(M2M)传输。

在存储器到存储器传输模式下不允许使用循环模式、双缓冲模式和直接模式。

数据传输宽度(PWIDTH/MWIDTH)

根据实际使用情景,可配置宽度为byte、halfword、word。

地址增量模式(PINCM/MINCM)

当通道配置设定为增量模式时,下一笔传输的地址将是前一笔传输地址加上传输宽度(PWIDTH/MWIDTH)。

  • 循环模式(LM)

当流配置设定为循环模式时,在最后一次传输后CxDTCNT寄存器的内容会恢复成初始值。

  • 使能DMAMUX(MUXSEL寄存器的TBL_SEL位)

在非存储器到存储器(M2M)模式下时,需要使能DMAMUX功能,才能启动数据流响应外设的DMA请求。

  • 写入外设ID号(MUXCxCTRL寄存器的REQSEL)

在非存储器到存储器(M2M)模式下时,需要将外设的DMA请求ID号写入,才能启动数据流响应外设的DMA请求。

  • 打开数据流(CxCTRL寄存器的CHEN位)

配置流程

  • 打开DMA时钟;

  • 调用通道复位函数复位数据流;

  • 调用结构体初始化函数初始化通道配置结构体;

  • 调用初始化函数初始化通道;

  • 调用DMAMUX使能函数以及ID号写入函数配置DMAMUX相关内容;

  • 调用通道使能函数开启通道。
    PS. 案例介绍可点击文末”阅读原文”查看

来源:AT32 MCU 雅特力科技

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

围观 134

OTGFS介绍

AT32F435/437包含2个独立的OTGFS,编号OTGFS1和OTGFS2,本章将描述OTGFS支持的一些基本功能。OTGFS1和OTGFS2特性完全相同。

1.png

图1 OTGFS框图

OTGFS特性

OTGFS通用特性:

  • 支持USB2.0协议

  • 内置独立1280字节SRAM

  • 内置全速PHY

  • 内置上下拉电阻

  • SOF信号输出

  • 低功耗模式

  • 支持忽略VBUS状态

  • 支持ID检测以切换主机设备模式

  • 不支持HNP/SRP协议(PHY不支持,不能动态切换模式,只能根据ID状态切换模式)

  • AHB时钟大于30MHz

OTGFS设备模式特性:

  • 仅支持全速设备

  • 支持内部1.5KΩ上拉

  • 支持软件断开连接

  • 支持1个双向控制端点0

  • 支持7个IN端点,端点号1-7

  • 支持7个OUT端点,端点号1-7

  • 支持控制传输,大容量传输,中断传输,同步传输

  • 端点接收FIFO共享

  • 端点发送FIFO专用

  • 支持无晶振(crystal-less)

OTGFS主机模式特性:

  • 支持全速和低速

  • 支持内部15KΩ下拉

  • 支持16个主机通道

  • 支持控制传输,大容量传输,中断传输,同步传输

  • 通道接收FIFO共享

  • 通道发送FIFO专用

OTGFS全速PHY

OTGFS内置支持全速/低速的PHY,为主机和设备模式提供通信支持。

1、DP和DM内置上下拉电阻,由OTGFS根据模式自动使能上下拉电阻

当OTGFS处于设备模式时,DP 1.5KΩ上拉自动使能

当OTGFS处于主机模式时,DP和DM 15KΩ下拉自动使能

2、ID线内置上拉

ID线为高电平,默认为设备模式

ID线为低电平,为主机模式

3、设备模式下的VBUS检测(可忽略VBUS检测)

设备模式下,仅支持VBUS高低电平检测,当VBUS为高电平,OTGFS认为是有效电平,将使能DP的上拉电阻,让主机识别到设备插入。当VBUS为低电平,OTGFS认为是无效电平,此时不使能DP上拉,处于断开模式。

在设备模式下,如果想不检测VBUS,可通过设置寄存器OTGFS_GCCFG.VBUSIG=1来实现,此时可将检测VBUS的引脚释放出来给其它外设使用。

4、PHY的低功耗模式

OTGFS全速PHY支持低功耗模式,可以通过设置寄存器OTGFS_GCCFG.LP_MODE=1让PHY处于低功耗模式。

OTGFS GPIO引脚

435/437 OTGFS1/2使用GPIO引脚如下表所示:

表1 OTGFS1 GPIO引脚

2.png

表2 OTGFS2 GPIO引脚

3.png

注:USB_OE信号当USB在传输数据时,会翻转此信号

OTGFS 48MHz时钟

需要给OTGFS提供48MHz±0.25%的时钟来用于USB总线采样。48MHz时钟可以直接来源HICK,也可以通过PLLCLK分频得到。

4.png

图2 USB 48MHz时钟来源

注意:当OTGFS作为HOST时,必须使用外部晶振通过PLL分频作为USB 48MHz时钟。

USB时钟选择HICK

通过设置如下寄存器选择HICK:

1、CRM_MISC1. HICKDIV=1;

HICK是否分频,1表示不分频,0表示6分频

2、CRM_MISC1. HICK_TO_USB=1;

1 表示USB 48MHz时钟来源是HICK,0表示来源为PLL分频。

如果USB 48MHz时钟来源选择HICK时,在设备模式下需要开启ACC(HICK自动校准)功能,ACC功能利用USB产生的SOF信号来作为参考信号,实现对HICK时钟的采样和校准。详细功能可参考RM HICK自动时钟校准(ACC)章节。

注意:当OTGFS作为HOST时,必须使用外部晶振通过PLL分频作为USB 48MHz时钟,因为在HOST模式下不能通过ACC校准HICK。

使用HICK作为USB 48MHz时钟代码示例:

5.png

USB时钟选择PLLCK分频

USB 48MHz时钟默认是由PLL通过分频得到,435/437系统时钟最高可达到288Mhz,通过配置USB分频因子,达到为USB提供48MHz时钟。

通过配置已下寄存器进行PLL分频:

  • CRM_MISC2.USBDIV=USB分频因子

USB分频因子支持:1.5分频,不分频,2.5分频,2分频,3.5分频,3分频,4.5分频,4分频,5.5分频,5分频,6.5分频,6分频,7分频。

使用PLL分频作为USB 48MHz时钟代码示例:

6.png

OTGFS数据FIFO管理

OTGFS分配专用的1280 Byte SRAM作为数据FIFO,在主机或设备模式下,可通过软件配置寄存器给端点/通道分配FIFO。

注意:分配的FIFO总大小不要超过1280 Byte

设备模式下的FIFO分配

设备模式下所有端点的接收共享一个接收FIFO,每个端点的发送对应一个专有的发送FIFO。

7.png

图3 设备模式FIFO分配

1、RX_FIFO

所有端点的接收共享这一块FIFO,配置寄存器OTGFS_GRXFSIZ.RXFDEP,此寄存器值表示接收FIFO大小,注意单位为word(4Byte)。

2、TX_FIFO0

端点0的发送FIFO,配置寄存器OTGFS_DIEPTXF0,需要配置起始地址和FIFO大小。OTGFS_DIEPTXF0. INEPT0TXSTADDR=OTGFS_GRXFSIZ.RXFDEP

OTGFS_DIEPTXF0. INEPT0TXDEP=端点0发送FIFO大小

3、TX_FIFO1

端点1的发送FIFO,配置寄存器OTGFS_DIEPTXF1,需要配置起始地址和FIFO大小。

OTGFS_DIEPTXF1.INEPTXFSTADDR=OTGFS_GRXFSIZ.RXFDEP+端点0发送FIFO大小OTGFS_DIEPTXF1.INEPTXFDEP=端点1发送FIFO大小

...

注意:对应端点FIFO配置寄存器中FIFO大小值的单位都是word(4Byte)。

注意:发送端点的起始地址一般配置为前面所有端点已占用的FIFO大小,例程如端点2的发送FIFO起始地址为RX_FIFO大小+TX_FIFO0大小+TX_FIFO1大小。

主机模式下的FIFO分配

主机模式下,所有通道共享一个接收FIFO,通道发送FIFO分为非周期性发送FIFO和周期性发送FIFO。

非周期性和周期性通过传输类型来区分,每个主机通道寄存器都有配置传输类型,包含4种传输类型:控制传输(Control),同步传输(ISO),批量传输(Bulk),中断传输(Interrupt)

非周期性:控制传输(Control),批量传输(Bulk)

周期性传输:同步传输(ISO),中断传输(Interrupt)

8.png

图4 主机模式下FIFO分配

1、RX_FIFO

所有主机通道的接收共享这一块FIFO,配置寄存器OTGFS_GRXFSIZ.RXFDEP,此寄存器值表示接收FIFO大小,注意单位为word(4Byte)。

2、Non-periodic TxFIFO

非周期性的主机通道发送FIFO,配置寄存器OTGFS_GNPTXFSIZ,需要配置起始地址和FIFO大小。

OTGFS_GNPTXFSIZ. NPTXFSTADDR=OTGFS_GRXFSIZ.RXFDEP

OTGFS_GNPTXFSIZ. NPTXFDEP=非周期性发送FIFO大小

3、Periodic_TxFIFO

周期性的主机通道发送FIFO,配置寄存器OTGFS_HPTXFSIZ,需要配置起始地址和FIFO大小。

OTGFS_HPTXFSIZ.PTXFSTADDR=OTGFS_GRXFSIZ.RXFDEP+OTGFS_GNPTXFSIZ.NPTXFDEP

OTGFS_HPTXFSIZ. PTXFSIZE=周期性发送FIFO大小

注意:对应FIFO配置寄存器中FIFO大小值的单位都是word(4Byte)

OTGFS中断结构

9.png

图5 OTGFS中断结构

全局常用中断OTGFS_GINTSTS,此寄存器中包含了主机和设备的中断标志,部分中断标志只在设备模式或者主机模式下有效。

1、设备和主机模式都有效中断标志

OTGFS_GINTSTS. MODEMIS:模式不匹配(主机和设备都适用)

OTGFS_GINTSTS. SOF:SOF中断(主机和设备都适用)

OTGFS_GINTSTS. RXFLVL:接收FIFO非空(主机和设备都适用)

OTGFS_GINTSTS. CONIDSCHG:ID线状态变化(主机和设备都适用)

OTGFS_GINTSTS. WKUPINT:唤醒信号中断(主机和设备都适用)

2、仅主机模式下有效中断标志

OTGFS_GINTSTS. NPTXFEMP:非周期发送FIFO为空(主机适用)

OTGFS_GINTSTS. PRTINT:主机端口中断(主机适用)

OTGFS_GINTSTS. HCHINT:主机通道中断(主机适用)

OTGFS_GINTSTS. PTXFEMP:周期性发送FIFO为空(主机适用)

OTGFS_GINTSTS. DISCONINT:设备断开(主机适用)

3、仅设备模式下有效中断标志

OTGFS_GINTSTS. USBSUSP:设备挂起(设备适用)

OTGFS_GINTSTS. USBRST:USB复位(设备适用)

OTGFS_GINTSTS. ENUMDONE:枚举速度完成(设备适用)

OTGFS_GINTSTS. ISOOUTDROP:同步OUT包丢失(设备适用)

OTGFS_GINTSTS. IEPTINT:IN端点中断(设备适用)

OTGFS_GINTSTS. OEPTINT:OUT端点中断(设备适用)

OTGFS_GINTSTS. INCOMPISOIN:未完成的同步IN传输(设备适用)

10.png

图6 中断处理流程

OTGFS模式

通过配置如下寄存器让OTGFS处于OTG模式:

  • OTGFS_GUSBCFG.FDEVMODE=0(非强制设备模式)

  • OTGFS_GUSBCFG.FHSTMODE=0(非强制主机模式)

435/437 OTGFS可以通过检测ID线上的状态来确定当前处于设备模式还是主机模式。当ID状态为高电平时为设备模式,当ID状态为低电平时为主机模式。

寄存器GINTSTS.CURMOD=0,表示当前为设备模式

寄存器GINTSTS.CURMOD=1,表示当前为主机模式

另外可以根据GINTSTS. CONIDSCHG中断来检测当前ID线的状态是否有变化,当检测到ID线有变化时,根据当前的模式位(GINTSTS.CURMOD),应用程序选择初始化主机程序还是设备程序。

11.png

图7 OTG模式连接示意图

设备模式

435/437 OTGFS作为设备时仅支持全速设备,不支持低速和高速设备。支持8个IN端点(包括端点0),8个OUT端点(包括端点0)。

OTGFS强制作为设备

通过设定如下寄存器将OTGFS强制作为设备:

  • OTGFS_GUSBCFG.FDEVMODE=1(强制设备模式)

  • OTGFS_GUSBCFG.FHSTMODE=0(非强制主机模式)

12.png

图8 设备模式连接示意图

注意:绿色线表示可选连接,当使能VBUSIG信号时,VBUS引脚可作为普通I/O。

OTGFS设备常用功能

本节介绍OTGFS作为设备模式时的一些功能。

1、软件断开

可以通过配置设备模式下的寄存器,达到让设备断开与主机的连接。原理是通过控制DP的上拉使能来控制连接状态。

配置OTGFS_DCTL.SFTDISCON=1,DP上拉不使能,断开连接。

配置OTGFS_DCTL.SFTDISCON=0,DP上拉使能,开始连接。

2、Remote wakeup唤醒

当设备进入挂起状态之后,可以通过Remote wakeup功能唤醒主机。

唤醒流程:

  • 设置OTGFS_DCTL.RWKUPSIG=1;

  • 延迟1-15ms

  • 设置OTGFS_DCTL.RWKUPSIG=0;

3、忽略VBUS信号

在设备模式下,可以忽略VBUS信号,此模式可以释放VBUS引脚给其它外设使用。通过配置OTGFS_GCCFG.VBUSIG=1来忽略VBUS信号。

OTGFS设备端点配置

本节简单介绍OTGFS端点寄存器的配置。
IN端点配置

IN端点寄存器OTGFS_DIEPCTLx(x为0~7),端点寄存器存放端点的基本信息。

如下是一个IN端点的基本配置选项:

  • OTGFS_DIEPCTLx.MPS(最大包长度)

  • OTGFS_DIEPCTLx.EPTYPE(端点类型:控制传输,同步传输,块传输,中断传输)OTGFS_DIEPCTLxTXFNUM(发送FIFO编号,正常跟端点号相同)

  • OTGFS_DIEPCTLx.USBACEPT(激活端点)

  • OTGFS_DIEPCTLx.SNAK(设置端点为NAK状态)

  • OTGFS_DIEPCTLx.CNAK(清除端点NAK状态)

  • OTGFS_DIEPCTLx.STALL(设置端点为STALL状态)

  • OTGFS_DIEPCTLx.EPTENA(开始传输数据)

OUT端点配置

OUT端点寄存器OTGFS_DOEPCTLx(x为0~7),端点寄存器存放端点的基本信息。

如下是一个OUT端点的基本配置选项:

  • OTGFS_DOEPCTLx.MPS(最大包长度)

  • OTGFS_DOEPCTLx.EPTYPE(端点类型:控制传输,同步传输,块传输,中断传输)OTGFS_DOEPCTLx.USBACEPT(激活端点)

  • OTGFS_DOEPCTLx.SNAK(设置端点为NAK状态)

  • OTGFS_DOEPCTLx.CNAK(清除端点NAK状态)

  • OTGFS_DOEPCTLx.STALL(设置端点为STALL状态)

  • OTGFS_DOEPCTLx.EPTENA(开始传输数据)

主机模式

435/437 OTGFS作为主机模式时支持全速/低速设备,同时支持16个主机通道。

OTGFS强制作为主机

通过设定如下寄存器将OTGFS强制作为主机,此时DP/DM下拉自动使能:

  • OTGFS_GUSBCFG.FDEVMODE=0(非强制设备模式)

  • OTGFS_GUSBCFG.FHSTMODE=1(强制主机模式)

13.png

图9 主机模式连接示意图

OTGFS主机常用功能

1、支持全速和低速设备

通过OTGFS_HPRT.PRTSDP判断当前连接的设备是全速设备还是低速设备;OTGFS_HPRT.PRTSDP=1表示全速OTGFS_HPRT.PRTSDP=2表示低速

2、复位

通过设置OTGFS_HPRT.PRTRST来设置端口复位;OTGFS_HPRT.PRTRST=1;延时10msOTGFS_HPRT.PRTRST=0;

3、挂起

通过设置OTGFS_HPRT.PRTSUP=1来设置端口挂起,此时主机停止发送SOF;

OTGFS主机通道配置

主机通道配置寄存器

OTGFS_HCCHARx(x为0~15),通道寄存器存放通道的基本信息。

如下是一个通道的基本配置选项:

  • OTGFS_HCCHARx.MPS(最大包长度)

  • OTGFS_HCCHARx.EPTNUM(指示设备端点号)

  • OTGFS_HCCHARx.EPTDIR(指示设备端点方向 OUT/IN)

  • OTGFS_HCCHARx.LSPDDEV(低速设备)

  • OTGFS_HCCHARx.EPTYPE(端点类型:控制传输,同步传输,块传输,中断传输)

  • OTGFS_HCCHARx.MC(周期性传输在每帧内传输的事务个数)

  • OTGFS_HCCHARx.DEVADDR(设备地址)

  • OTGFS_HCCHARx.ODDFRM(周期性传输奇数帧/偶数帧)

  • OTGFS_HCCHARx.CHDIS(通道禁止)

  • OTGFS_HCCHARx.CHENA(通道使能)

来源:AT32 MCU 雅特力科技

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

围观 93

GPIO特性

  • 最大封装(144pin)具有116个多功能双向的I/O口;

  • 所有I/O口都可以映射到16个外部中断;

  • 绝大部分I/O口可容忍5V输入信号;

  • 所有I/O口均为快速I/O,寄存器存取速度最高fAHB;

  • I/O引脚的外设功能可以通过一个特定的操作来开启写保护,以避免意外的写入I/O寄存器;

  • 每个GPIO引脚都可以由软件配置成输出(推挽或开漏)、输入(带或不带上拉或下拉)或复用的外设功能端口;

  • 可选的每个I/O口的电流推动/吸入能力;

  • 端口位设置/清除寄存器(GPIOx_SCR)和端口位清除寄存器(GPIOx_CLR)为GPIOx_ODT寄存器提供位访问能力。

GPIO

GPIO在复位期间和刚复位后,复用功能未开启,大部分I/O端口被配置成浮空输入模式。

当作为输出配置时,写到输出数据寄存器(GPIOx_ODT)上的值会输出到相应的I/O引脚。可以以推挽模式或开漏模式(仅低电平被驱动,高电平表现为高阻)使用输出驱动器。

输入数据寄存器(GPIOx_IDT)在每个AHB时钟周期捕捉I/O引脚上的数据。

所有GPIO引脚有一个内部弱上拉和弱下拉,它们被激活或断开有赖于GPIOx_PULL寄存器的值。

1.png

图1. I/O端口位的基本结构

2.png

表1. I/O端口位配置表

GPIO toggle

AT32F435/437提供的I/O口均为快速I/O,寄存器存取速度最高为fAHB,所以可以看到在主频为240MHz时,GPIO翻转频率能够轻松达到120MHz:

3.png

图2. I/O翻转速度

IO引脚的5V or 3.3V容忍

标准3.3V容忍引脚(TC)

所有振荡器和USB_OTG用到的引脚都是标准3.3V容忍引脚。

  • PC14/PC15(LEXT_IN/OUT)

  • PH0/PH1(HEXT_IN/OUT)

  • PA11/PA12(OTGFS1_D-/D+)

  • PB14/PB15(OTGFS2_D-/D+)

4.png

表2. TC引脚示例

带模拟功能5V容忍引脚(FTa)

ADC占用端口为带模拟功能5V容忍引脚。

  • PA0–PA7,PB0–PB1,PC0–PC5,PF3–PF10

  • FTa引脚设置为输入浮空、输入上拉、或输入下拉时,具有5V电平容忍特性;设置为模拟模式时,不具5V电平容忍特性,此时输入电平必须小于VDD+0.3V

5.png

表3. FTa引脚示例

带20mA吸入能力5V容忍引脚(FTf)

部分I2C可提供带20mA吸入能力的5V容忍引脚。

6.png

表4. FT引脚示例

5V容忍引脚(FT)

其余的GPIO都为5V容忍引脚。

7.png

表5. FT引脚示例

IOMUX

I/O复用功能输入/输出

  • 大多数外设共享同一个GPIO引脚(比如PA0,可作为TMR2_CH1/TMR2_EXT/TMR5_CH1/TMR8_EXT/I2C2_SCL/USART2_CTS)

  • 而对某个具体的GPIO引脚,在任意时刻只有一个外设能够与之相连

  • 某些外设功能还可以重映射到其他引脚,从而使得能同时使用的外设数量更多

选择每个端口线的有效复用功能之一是由两个寄存器来决定的,分别是GPIOx_MUXL和GPIOx_MUXH复用功能寄存器。可根据应用的需求用这两寄存器连接复用功能模块到其他引脚。

8.png9.png

表6. 通过GPIOA_AFR寄存器配置端口A的复用功能

10.png

11.png

表7. 通过GPIOB_AFR寄存器配置端口B的复用功能

12.png

13.png

表8. 通过GPIOF_AFR寄存器配置端口C的复用功能

14.png

15.png

表9. 通过GPIOF_AFR寄存器配置端口D的复用功能

16.png

17.png

表10. 通过GPIOF_AFR寄存器配置端口E的复用功能

18.png

19.png

表11. 通过GPIOF_AFR寄存器配置端口F的复用功能

20.png

21.png

表12. 通过GPIOF_AFR寄存器配置端口G的复用功能

22.png

23.png

表13. 通过GPIOF_AFR寄存器配置端口H的复用功能

特殊I/O

调试复用引脚

在复位时,和复位后不像其他GPIO一样处于浮空输入状态,而是处于AF模式

  • PA13:JTMS/SWDIO,AF上拉

  • PA14:JTCK/SWCLK,AF下拉

  • PA15:JTDI,AF上拉

  • PB3:JTDO/SWO,AF浮空

  • PB4:JNTRST,AF上拉

振荡器复用引脚

  • 振荡器关闭的状态下(复位后的默认状态),相关引脚可用作GPIO

  • 振荡器使能状态下,相应引脚的GPIO配置无效

  • 振荡器处于bypass模式(使用外部时钟源)时,HEXT_IN/LEXT_IN为振荡器时钟输入引脚,HEXT_OUT/LEXT_OUT可做GPIO使用

电池供电域引脚

  • 电池供电域引脚包括PC13、PC14以及PC15。电池供电域由VDD或VBAT引脚供电,当VDD主 电源被切断时,电池供电域自动切换至VBAT引脚供电,以保障ERTC正常工作。

  • 当电池供电域由VDD供电时,PC13可以作为通用I/O口、TAMPER引脚、ERTC校准时钟、ERTC闹钟或秒输出,PC14和PC15可以用于GPIO或LEXT引脚。(PC13至PC15作为I/O口的速度必须限制在2MHz以下,最大负载为30pF,而且这些I/O口绝对不能当作电流源)。

  • 当电池供电域由VBAT供电时,PC13可以作为TAMPER引脚、ERTC闹钟或秒输出,PC14和PC15只能用于LEXT引脚。

GPIO固件驱动程序API

Artery提供的固件驱动程序包含了一系列固件函数来管理GPIO的下列功能:

  • GPIO寄存器复位

  • 初始化配置

  • 读取输入端口或某个输入引脚

  • 读取输出端口或某个输出引脚

  • 设置或清除某个引脚的输出

  • 锁定引脚

  • 引脚的复用功能配置

输出模式

GPIO提供了两种不同类型的输出模式分别是,推挽输出以及开漏输出,下面是输出模式的配置示例:

24.png

输入模式

GPIO提供了三种不同类型的输入模式分别是,浮空输入、上拉输入以及下拉输入,下面是输入模式的配置示例:

25.png

模拟模式

当需要使用ADC或COMP通道作为输入时,需要将相应的引脚配置为模拟模式,下面是模拟模式的配置示例:

26.png

复用模式

  1. 不论使用何种外设模式,都必须将I/O配置为复用功能,之后系统才能正确使用I/O(输入或输出)。

  2. I/O引脚通过复用器连接到相应的外设,该复用器一次只允许一个外设的复用功能(IOMUX)连接到I/O引脚。这样便可确保共用同一个I/O引脚的外设之间不会发生冲突。每个I/O引脚都有一个复用器,该复用器具有16路复用功能输入/输出(MUX0到MUX15),可通过gpio_pin_mux_config()函数对这些引脚进行配置:

    —复位后,所有I/O都会连接到系统的复用功能0(MUX_0)

    —通过配置MUX0到MUX15可以映射外设的复用功能

  3. 除了这种灵活的I/O复用架构之外,各外设还具有映射到不同I/O引脚的复用功能,这可以针对不同器件封装优化外设I/O功能的数量;例如,可将USART2_TX引脚映射到PA2或PA14引脚上。

  4. 配置过程:

      —使用gpio_pin_mux_config()函数将引脚连接到所需的外设复用功能,例如配置PA0作为                  TMR2_EXT输入

      gpio_pin_mux_config(GPIOA,GPIO_PINS_SOURCE0,GPIO_MUX_1);

      —使用gpio_init()函数配置I/O引脚:

          -通过以下方式配置复用功能模式下的所需引脚

          gpio_init_struct.gpio_mode=GPIO_MODE_MUX;

          -通过以下成员选择类型、上拉/下拉和驱动能力

          gpio_pull、gpio_out_type和gpio_drive_strength成员

根据上述配置过程,下面将介绍几种外设的常用配置示例。
USART I/O复用模式配置

27.png

TMR I/O复用模式配置

28.png

I2C I/O复用模式配置

29.png

案例 LED翻转

功能简介

通过系统时钟延时来对LED进行翻转。

资源准备

1) 硬件环境:

对应产品型号的AT-START BOARD

2) 软件环境:

project\at_start_f437\examples\gpio\led_toggle

软件设计

1) 配置流程

  • 配置系统时钟;

  • 初始化延时函数和LED;

  • 翻转LED。

2) 代码介绍

  • main函数代码描述

30.png

  • LED翻转代码描述

31.png

实验效果

  • 上电运行会看到LED2、LED3和LED4以间隔200ms时间交替的进行翻转。

案例 SWJTAG接口复用

功能简介

对SWJTAG接口的I/O进行复用。

资源准备

3) 硬件环境:

对应产品型号的AT-START BOARD

4) 软件环境:

project\at_start_f437\examples\gpio\swjtag_mux

软件设计

3) 配置流程

  • 配置系统时钟;

  • 初始化延时函数;


  • 配置SWJTAG接口的复用和USART2初始化。

4) 代码介绍

  • main函数代码描述

32.png

  • SWJ配置代码描述

33.png

实验效果


将PA13接示波器,PA14接入串口打印工具;

程序运行过程中PA13每隔500ms会翻转一次,表示jtms/swdio引脚已被用为GPIO使用;

PA14接入串口打印工具后,每隔500ms会看到USART2_TX打印主循环执行次数。

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

围观 454

I2C接口简介

I2C接口是由数据线SDA和时钟线SCL构成,在标准模式下通信速度可达到100kHz,快速模式下则可以达到400kHz,增强快速模式可达到1MHz。一帧数据传输从开始信号开始,在结束信号后停止,在收到开始信号后总线被认为是繁忙的,当收到结束信号后,总线被认为再次空闲。I2C接口具有主机和从机模式、多主机功能、可编程建立和保持时间、时钟延展功能、DMA存取数据、支持SMBus 2.0协议等特点。

1.png

图1. I2C框图

I2C接口通信

主机通信流程

主机通信初始化

主机时钟初始化在启动外设(I2CEN)之前,必须先设置I2Cx_CLKCTRL寄存器的各个位用以配置I2C主时钟。

― DIV[7:0]:I2C时钟分频

― SDAD[3:0]:数据保持时间(tHD;DAT)

― SCLD[3:0]:数据建立时间(tSU;DAT)

― SCLH[7:0]:SCL高电平时间

― SCLL[7:0]:SCL低电平时间

该寄存器的配置可以使用Artery_I2C_Timing_Configuration时钟配置工具计算,见第三章节。

低电平控制:当检测到SCL总线为低电平时,内部SCLL计数器开始计数,当计数值达到SCLL值时,释放SCL线,SCL线变为高电平。

高电平控制:当检测到SCL总线为高电平时,内部SCLH计数器开始计数,当计数值达到SCLH值时,拉低SCL线,SCL线变为低电平,当在高电平期间,如果被外部总线拉低,那么内部SCLH计数器停止计数,并开始低电平计数,这为时钟同步提供了条件。

2.png

图2. 主机时钟的产生

2. 主机通信初始化

在启动通讯前须先设定I2C_CTRL2寄存器中的几项参数:

1) 设置传输字节数

― ≤255字节

配置I2C_CTRL2的RLDEN=0,关闭重载模式

配置I2C_CTRL2的CNT[7:0]=N

― >255字节

配置I2C_CTRL2的RLDEN=1,使能重载模式

配置I2C_CTRL2的CNT[7:0]=255

剩余传输字节数N=N-255

2) 设置传输结束模式

― ASTOPEN=0:软件结束模式,当数据传输完成后,I2C_STS的TDC标志置1,软件设置GENSTOP=1或者GENSTART=1,发送STOP条件或者START条件。

― ASTOPEN=1:自动结束模式,当数据传输完成后,自动发送STOP条件。

3) 设置从机地址

― 设置寻址的从机地址值(I2C_CTRL2的SADDR)

― 设置从机地址模式(I2C_CTRL2的ADDR10)

ADDR10=0:7位地址模式

ADDR10=1:10位地址模式

4) 设置传输方向(I2C_CTRL2的DIR)

― DIR=0:主机接收数据

― DIR=1:主机发送数据

5) 开始传输

设置I2C_CTRL2的GENSTART=1,主机开始在总线上发送START条件和从机地址。

3. 主机10 bits寻址的特殊时序初始化

在10位地址传输模式下,I2C_CTRL2的READH10用于产生特殊时序,当READH10=1时,支持如下传输序:主机先发送数据给从机,然后再从从机读取数据,传输时序图如下图所示:

3.png

图3. 10位地址的读访问READH10=1

主机在软件结束模式(ASTOPEN=0)下,发送数据到从机,当数据发送完成后设置READH10=1,然后再从从机接收数据。

4.png

图4. 10位地址的读访问READH10=0

主机通信初始化软件接口

主机通信初始化所用到的软件接口通过独立的函数接口实现,如下:

5.png

i2c_init函数三个参数分别为:所使用的I2C、数字滤波值和主机时钟配置值。

i2c_transmit_set函数用于初始化通信参数,包括:所使用的I2C、从机地址、传输字节数、停止条件产生模式和起始条件产生模式。

i2c_addr10_mode_enable函数用于使能10位地址模式。

i2c_addr10_header_enable函数用于使能10位地址头读取时序,即主机发送完整的10位从机地址读序列或主机只发送10位地址的前7位。
主机发送流程

1) I2C_TXDT数据寄存器为空,I2C_STS的TDIS=1;

2) 向TXDT数据寄存器写入数据,数据开始发送;

3) 重复1、2步骤直到发送CNT[7:0]个数据;

4) 如果此时I2C_STS的TCRLD=1(重载模式),分为以下两种情况:― 剩余字节数N>255:向CNT写入255,N=N-255,TCRLD被自动清0,传输继续;― 剩余字节数N≤255:关闭重载模式(RLDEN=0),向CNT写入N,TCRLD被自动清0,传输继续。5) 结束时序― 停止条件产生:

软件结束模式(ASTOPEN=0):此时I2C_STS的TDC置1,设置GENSTOP=1产生STOP条件;

自动结束模式(ASTOPEN=1):自动产生STOP条件。

― 等待产生STOP条件,当STOP条件产生时,I2C_STS的STOPF置1,将I2C_CLR的STOPC写1,清除STOPF标志,传输结束。

6.png

图5. I2C主机发送流程图

7.png

图6. I2C主机发送时序图

主机发送流程软件接口

主机发送通过独立的函数接口实现,如下:

8.png

i2c_master_transmit函数为i2c_application.c文件所提供的应用层接口函数,参数包括:I2C结构体指针、从机地址、发送数据指针、发送数据字节数和函数超时时间。

注:此函数为Artery所提供的标准主机发送函数。用户也可根据前述主机发送流程,自行编写主机发送函数。
主机接收流程

1) 当收到数据后,RDBF=1,读取RXDT数据寄存器,RDBF被自动清零;

2) 重复步骤2直到接收CNT[7:0]个数据;

3) 如果此时I2C_STS的TCRLD=1(重载模式),分为以下两种情况:

― 剩余字节数N>255:向CNT写入255,N=N-255,TCRLD被自动清0,传输继续;

― 剩余字节数N≤255:关闭重载模式(RLDEN=0),向CNT写入N,TCRLD被自动清0,传输继续。

4) 当在接收到最后一个字节时,主机会自动发送一个NACK。

5) 结束时序

― 停止条件产生:

软件结束模式(ASTOPEN=0):此时I2C_STS的TDC置1,设置GENSTOP=1产生STOP条件;

自动结束模式(ASTOPEN=1):自动产生STOP条件。

― 等待产生STOP条件,当STOP条件产生时,I2C_STS的STOPF置1,将I2C_CLR的STOPC写1,清除STOPF标志,传输结束。

9.png

图7. I2C主机接收流程图

10.png

图8. I2C主机接收时序图

主机接收流程软件接口

主机接收通过独立的函数接口实现,如下:

11.png

i2c_master_receive函数为i2c_application.c文件所提供的应用层接口函数,参数包括:I2C结构体指针、从机地址、接收数据指针、接收数据字节数和函数超时时间。

注:此函数为Artery所提供的标准主机接收函数。用户也可根据前述主机接收流程,自行编写主机接收函数。

从机通信流程

从机通信初始化

从机地址配置

每个I2C从设备可同时支持2个从设备地址,由OADDR1和OADDR2指定

I2C_OADDR1

— 通过ADDR1EN使能

— 通过ADDR1MODE配置为7位(默认)或10位地址

I2C_OADDR2

— 通过ADDR2EN使能

— 固定7位地址模式

— 可通过ADDR2MASK[2:0]来在进行地址匹配比较时屏蔽掉0~7个LSB地址位

ADDR2MASK=0表示7位地址中的每一位都要参与匹配比较

ADDR2MASK=7表示任何非保留地址的7位地址都会被该从设备应答

2. 从机地址匹配

当I2C启用的地址选中匹配时,ADDRF中断状态标志会被置1,如果ADDRIEN位为1,就会产生一个中断。如果两个从地址都使能,在地址匹配产生ADDR中断时,可以查看状态寄存器中的ADDR[6:0]来得知是OADDR1还是OADDR2被寻址了。

3. 从机字节控制模式(通常SMBus模式下才使用)

从设备可以对每个收到的字节进行应答控制。

所需配置:SCTRL=1&RLDEN=1&STRETCH=0&CNT≥1

从机字节控制流程:

1) 每收到一个字节TCRLD置位,时钟延展于第8和第9个脉冲之间

2) 软件读取RXDT中的值,并决定是否置位ACK

3) 软件重装载CNT=1来停止时钟延展

4) 应答或非应答信号在第9个脉冲时刻出现在总线上

注意:

置位SCTRL时,必须开启时钟延展,即STRETCH=0

CNT可以是大于1的值,来实现多个字节以自动ACK接收完毕后再启动应答控制,从设备发送时推荐关闭SCTRL,此时无需字节应答控制。
从机通信初始化软件接口

从机通信初始化所用到的软件接口通过独立的函数接口实现,如下:

12.png

i2c_own_address1_set函数用于配置OADDR1地址模式以及ADDR1地址值。

i2c_own_address2_set函数用于配置ADDR2地址值以及ADDR2屏蔽位。

i2c_own_address2_enable函数用于使能ADDR2地址。

i2c_slave_data_ctrl_enable函数用于使能从机字节控制模式。

i2c_clock_stretch_enable函数用于使能从机时钟延展功能。

i2c_reload_enable函数用于使能发送数据重载模式。

从机发送流程

1) 响应主机地址,匹配时回复ACK;

2) TXDT为空时,置位TDIS,从设备写入发送数据;

3) 每发送一个字节会收到ACK,且置位TDIS;

4) 如果收到NACK位:

— 置位NACKF,产生中断;

— 从设备自动释放SCL和SDA(以便主设备发送STOP或RESTART);

5) 如果收到STOP位:

— 置位STOPF,产生中断;

当从机发送开启时钟延展(STRETCH=0)时,在等待ADDRF标志时和发送前一个数据的第9个时钟脉冲后,会把TXDT中的数据拷贝到移位寄存器中,如果此时TDIS还是置位,表示TXDT没有写进待发送数据,将发生时钟延展,如下流程图:

13.png

图9. I2C从机发送流程图

需要注意的是,在时钟延展关闭(STRETCH=1)的情况下,如果在将要传输数据的第一个Bit位开始发送之前,也就是SDA边沿产生之前,如果数据还未写入TXDT数据寄存器,那么会发生欠载错误,此时I2C_STS的OUF将会置1,并将0xFF发送到总线。

为了能及时的写入数据,可以在通信开始前,先将数据写入到DT寄存器:软件先将TDBE置1,目的是为了清空TXDT寄存器的数据,然后将第一个数据写入TXDT寄存器,此时TDBE清零。

14.png

图10. I2C从机发送时序图

从机发送流程软件接口

从机发送通过独立的函数接口实现,如下:

15.png

指针、发送数据指针、发送数据字节数和函数超时时间。

注:此函数为Artery所提供的标准从机发送函数。用户也可根据前述从机发送流程,自行编写从机发送函数。
从机接收流程

1) 当收到数据后,RDBF=1,读取RXDT数据寄存器,RDBF被自动清零;

2) 重复步骤2直到所有数据接收完成;

3) 等待收到STOP条件,当收到STOP条件时,I2C_STS的STOPF置1,将I2C_CLR的STOPC写1,清除STOPF标志,传输结束。

16.png


图11. I2C从机接收流程图

17.png


图12. I2C从机接收时序图

从机接收流程软件接口

从机接收通过独立的函数接口实现,如下:

18.png

i2c_slave_receive函数为i2c_application.c文件所提供的应用层接口函数,参数包括:I2C结构体指针、接收数据指针、接收数据字节数和函数超时时间。

注:此函数为Artery所提供的标准从机接收函数。用户也可根据前述从机接收流程,自行编写从机接收函数。

I2C配置工具

功能简介

I2C配置工具Artery_I2C_Timing_Configuration.exe可以实现对主机和从机的时钟、数字滤波、模拟滤波配置。

资源准备

1) 软件环境Artery_I2C_Timing_Configuration.exe

19.png

图13. Artery I2C Timing Configuration

使用步骤

1) 选择芯片型号

选择当前使用的芯片型号,例如可以选择AT32F435、AT32F437。

2) 选择设备模式

  • Master:主模式,I2C作为主机;

  • Slave:从模式,I2C作为从机。

3) 选择I2C速度模式

  • Standard-mode:标准模式,范围0~100kHz;

  • Fast-mode:快速模式,范围0~400kHz;

  • Fast-mode Plus:增强快速模式,范围0~1000kHz。

4) 设置I2C速度(单位kHz)

根据实际需求设置I2C通信速度,例如需要通信速度为10kHz,那么这里设置为10。

5) 设置I2C时钟源频率(单位kHz)

根据实际使用的I2C时钟源频率来配置,例如AT32435 I2C时钟源为PCLK1,当AT32435主频为288MHz,APB1为144MHz时,这里设置为144000。

6) 模拟滤波使能

On:打开;

Off:关闭。

模拟滤波使能后,将过滤50ns以下的脉冲。

7) 数字滤波(范围0~15)

数字滤波时间=数字滤波值x TI2C_CLK;

其中TI2C_CLK=1/I2C时钟源频率。

当值为0时,数字滤波关闭,当值>0时将过滤小于数字滤波时间的脉冲。

8) 上升时间(tr单位ns)SCL和SDA总线的上升沿,如图18所示。I2C协议中规定了在标准模式(Standard-mode)、快速模式(Fast-mode)、增强快速模式(Fast-mode Plus)下的范围,详情请参照表1。上升时间和上拉电阻的阻值关系很大,上拉电阻越小,上升时间越短,可以支持的通信速度就越快,但是功耗也越高。

表2中给出了一些常用上拉电阻阻值所对应的上升沿时间,实际可能会因为总线挂的设备数量、布线等差异而有所不同,仅供参考。

9) 下降时间(tf单位ns)

SCL和SDA总线的下降沿,如图18所示。I2C协议中规定了在标准模式(Standard-mode)、快速模式(Fast-mode)、增强快速模式(Fast-mode Plus)下的范围,详情请参照表1。

20.png

图14. 上升沿(tr)下降沿(tf)规范

21.png

表1. I2C时间规范

22.png

表2. 常用上拉电阻阻值的tr、tf参考值(VDD=3.3V)

注:该值是总线上连接两片AT32 MCU,一个作为主机,一个作为从机测试出来的值,实际可能会因为总线挂的设备数量、布线等差异而有所不同。

10) 产生代码

点击产生代码,上诉配置的值,将会以代码的形式产生出来,如下图红框所示,只需要将右侧输出的代码替换到自己的程序即可。

23.png

图15. 代码产生

案例 读写EEPROM

功能简介

使用硬件I2C接口对EEPROM存储设备进行读写访问。

资源准备

1) 硬件环境

对应产品型号的AT-START BOARD

4.7K上拉电阻

EEPROM存储设备

2) 软件环境

project\at_start_f4xx\examples\i2c\eeprom

软件设计

1) 配置流程

  • 开启I2C外设时钟

  • 配置I2C所复用的GPIO

  • 配置I2C所用的DMA通道

  • 使能I2C外设接口

  • 写入EEPROM并读取写入的数据

  • 比较读写数据内容是否正确

2)代码介绍

  • main函数代码描述

24.png

实验效果

  • 如若读写数据完全相同,则LED3会被点亮。

案例 轮询方式通信

功能简介

通过轮询方式让两块AT-START BOARD的I2C接口进行通信,测试作为主机或从机发送和接收数据。

资源准备

1) 硬件环境

对应产品型号的AT-START BOARD两块

4.7K上拉电阻

2) 软件环境

project\at_start_f4xx\examples\i2c\communication_poll

软件设计

1) 配置流程

  • 开启I2C外设时钟

  • 配置I2C所复用的GPIO

  • 使能I2C外设接口

  • 从机准备接收数据

  • 主机发送数据

  • 从机准备发送数据

  • 主机接收数据

  • 主机从机对比发送和接收到的数据是否正确

2) 代码介绍

  • main函数代码描述

25.png

实验效果

  • 通过宏定义:#define MASTER_BOARD来选择两块板子的主从关系;

  • 如若主机或从机的读写数据完全相同,则LED3会被点亮,否则LED2会不停闪烁。

案例 中断方式通信

功能简介

通过中断方式让两块AT-START BOARD的I2C接口进行通信,测试作为主机或从机发送和接收数据。

资源准备

3) 硬件环境

对应产品型号的AT-START BOARD两块

4.7K上拉电阻

4) 软件环境

project\at_start_f4xx\examples\i2c\communication_int

软件设计

3) 配置流程

  • 开启I2C外设时钟

  • 配置I2C所复用的GPIO

  • 使能I2C外设接口

  • 使能I2C中断

  • 从机准备接收数据

  • 主机发送数据

  • 从机准备发送数据

  • 主机接收数据

  • 主机从机对比发送和接收到的数据是否正确

4) 代码介绍

  • main函数代码描述

26.png

  • 主机中断处理函数代码描述

27.png

  • 从机中断处理函数代码描述

28.png

实验效果

  • 通过宏定义:#define MASTER_BOARD来选择两块板子的主从关系;

  • 如若主机或从机的读写数据完全相同,则LED3会被点亮,否则LED2会不停闪烁。

案例 DMA方式通信

功能简介

通过DMA方式让两块AT-START BOARD的I2C接口进行通信,测试作为主机或从机发送和接收数据。

资源准备

5) 硬件环境

对应产品型号的AT-START BOARD两块

4.7K上拉电阻

6) 软件环境

project\at_start_f4xx\examples\i2c\communication_dma

软件设计

5) 配置流程

  • 开启I2C外设时钟

  • 配置I2C所复用的GPIO

  • 配置I2C所使用的DMA通道

  • 使能I2C外设接口

  • 从机准备接收数据

  • 主机发送数据

  • 从机准备发送数据

  • 主机接收数据

  • 主机从机对比发送和接收到的数据是否正确

6) 代码介绍

  • main函数代码描述

29.png

  • 主机DMA发送接收完成中断处理函数代码描述

30.png

实验效果

  • 通过宏定义:#define MASTER_BOARD来选择两块板子的主从关系;

  • 如若主机或从机的读写数据完全相同,则LED3会被点亮,否则LED2会不停闪烁。

来源:AT32 MCU 雅特力科技

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

围观 174

EDMA简介

EDMA控制器的作用不仅在增强系统性能并减少处理器的中断生成,而且还针对32位MCU应用程序专门优化设计。EDMA控制器为存储器到存储器,存储器到外设和外设到存储器的传输提供了八个数据流通道。每个通道都支持外设的DMA请求映射到任意数据流上、数据的打包与拆包、FIFO开启与关闭、burst数据传输模式、存储器端的双buffer模式、可配置数据链传输、二维传输功能。基于复杂的总线矩阵架构,将功能强大的双AHB总线架构与独立的FIFO结合在一起,优化了系统的带宽。

1.png

图1. EDMA控制器架构

DMAMUX简介

对于如何将外设的DMA请求映射到任意的数据流通道上,就需要使用到DMAMUX。DMAMUX针对每个外设都设计了独有的ID号,使用者只需要将此ID号写入对应的寄存器中并打开DMAMUX功能即可。DMAMUX的引入,使得EDMA相较于传统DMA控制器变得更加灵活,使用者可以随意的分配8个数据流通道的使用情况,不必再纠结与某个IP的DMA请求只能固定使用在某个或某几个通道上。

各IP对应ID号如下表:

2.png

表1. 各IP对应ID号列表

注:表格中“DMAMUX请求”为ID号;“来源”为各IP的DMA请求。

EDMA功能解析

基本配置
3.png
图2. EDMA基本参数配置

EDMA传输所需要的基本参数配置如上图所示,列举如下

内存端口

― 地址(M0ADDR)

― 数据宽度(MWIDTH):8位、16位、32位

― 地址地址模式(MINCM):固定、递增

― 突发传输(MBURST):单次(1)、4、8、16节拍

外设端口

― 地址(PADDR)

― 数据宽度(PWIDTH):8位、16位、32位

― 地址地址模式(PINCM):固定、递增

― 突发传输(PBURST):单次(1)、4、8、16节拍

其他

― 传输方向(DTD):外设到内存、内存到外设、内存到内存

― 通道优先级(SPL):低、中、高、非常高

― 数据传输个数(DTCNT):范围1~65535

― FIFO配置

― 流使能(SEN)

FIFO功能

1、功能介绍

EDMA控制器每个数据流都拥有独立的4 word fifo,这使得EDMA传输变得更加灵活,所传输的数据在FIFO内可进行打包与拆包操作,不再限制源与目标的数据总线宽度必须相等。

在FIFO模式下,源和目标数据宽度可以通过SxCTRL寄存器PWIDTH与MWIDTH位配置(byte,halfword,word),且允许PWIDTH与MWIDTH不同。

当PWIDTH与MWIDTH不同时:

  • EDMA要传输的数据宽度等于PWIDTH,例如PWIDTH=halfword,则需传输的数据量为SxDTCNT*2。
  • EDMA控制器仅按照小字节序寻址源和目标。

FIFO模式下外设到内存传输逻辑

4.png

图3. FIFO模式外设到内存传输

如上图所示,例如FIFO阈值设置成1/4,外设和内存端数据都为字节。

刚开始FIFO状态为空,外设传输4笔数据后,FIFO状态为1/4,此时达到FIFO阈值,一次传输4个字节到内存。

FIFO模式下内存到外设传输逻辑

5.png

图4. FIFO模式内存到外设传输

如上图所示,例如FIFO阈值设置成1/4,外设和内存端数据都为字节。

刚开始FIFO状态为空,当使能数据流后,立即从内存传输16个字节到FIFO,此时FIFO状态为满,然后外设传输4笔数据后,FIFO状态为3/4,此时达到FIFO阈值,一次从内存传输4个字节到FIFO,再次填满FIFO。

FIFO模式下内存到内存传输逻辑

当使能数据流后,开始从源内存传输数据到FIFO,当达到FIFO阈值时,FIFO里的数据将被全部传输到目标内存,然后重复此步骤直到传输完成。

在直接模式下(SxFCTRL内FEN=0),不可进行数据的打包与拆包。这种情况下,不允许源与目标的数据宽度不相等。数据宽度由PWIDTH定义,MWIDTH的设定无效。

直接模式下外设到内存传输逻辑

6.png

图5. 直接模式外设到内存传输

当产生DMA请求后,数据从外设传输到FIFO,然后FIFO内的数据将会立即传输到内存。

直接模式下内存到外设传输逻辑

7.png

图6. 直接模式内存到外设传输

当使能数据流后,立即从内存传输一个数据到FIFO(数据大小由PWIDTH决定),当产生 DMA请求后,立即将数据从FIFO传输到外设,然后再次从内存传输一个数据到FIFO。

数据打包与拆包示意图如下:

8.png

图7. EDMA数据打包示意图

9.png

图8. EDMA数据拆包示意图

外设端口可以是源或者目标(在Memory to memory模式下,也可以是存储器源),在使用FIFO时,一定要合理配置PWIDTH、MWIDTH和SxDTCNT,已确保数据传输的完整性,在PWIDTH小于MWIDTH时,需要按照如下条件配置:

10.png

表2. PWIDTH和MWIDTH与SxDTCNT的限制条件

FIFO可配置阈值级别,软件可配置为1/4、1/2、3/4、满这四种状态(通过SxFCTRL寄存器FTHSEL配置),并且可通过SxFCTRL寄存器的FSTS位观察FIFO当前状态。

2、软件接口

设置FIFO的软件接口包含在EDMA配置结构体内,以结构体成员的方式呈现,如下:

11.png

第一项为配置FIFO是否使能,当为TURE时,表示FIFO使能;当为FALSE时,表示FIFO禁止第二项为FIFO阈值设定,其选项可以是1/4、1/2、3/4和满这四种状态。

突发传输功能

功能介绍

12.png

图9. 突发传输示意图

EDMA控制器可产生单次传输或4个、8个、16个节拍的突发传输。突发传输数量通过SxCTRL寄存器的PBURST与MBURST位设定。

如上图所示,传输方向为内存到外设,内存端MBURST=4,每一次数据传输,DMA都会从内存连续传输4个数据到FIFO(数据可以为字节、半字、字)。外设端PBURST=8,每一次数据传输,DMA都会从FIFO连续传输8个数据到外设(数据可以为字节、半字、字)。

突发传输数量是按照节拍数来计算的,并非按照字节数计数,例如PBURST=4,PWIDTH=halfword,则一次突发传输的数据量为4*2bytes。

突发传输只能在FIFO模式下才可使用;在直接模式下,数据流只能生成单次传输,而MBURST和PBURST位由硬件强制配置。

根据单次传输或突发传输的配置,每个DMA的请求在AHB外设端口上启动相应配置下的数据量传输:

  • 当AHB外设端口配置为单次传输时,根据PWIDTH配置的值,每次DMA请求传输一个byte、halfword或者word。
  • 当AHB外设端口配置为突发传输时,根据PWIDTH配置的值,每次DMA请求传输4个、8个、16个byte、halfword或者word。

注:源和目的地址自增模式下,才可使用突发传输。

EDMA的FIFO阈值设定与存储器突发传输大小需要满足一定的关系才能正常启动数据流,否则在启动数据流时,就会产生FIFO error,然后将禁止数据流。FIFO阈值设定与存储器突发传输大小关系需满足如下:

13.png

表3. MWIDTH与MBURST配置关系

从此表个可以得出结论:突发传输数据量与数据大小乘积不能超过FIFO阈值大小。

软件接口

设置突发传输软件接口与设置FIFO类似,其被包含在EDMA配置结构体内,以结构体成员的方式呈现:

14.png

第一项为配置外设端口突发传输量;第二项为配置内存端口突发传输量。

注:在使用突发传输时,必须使能FIFO模式。

存储器端双缓存区功能

功能介绍

15.png

图10. 双缓存区示意图

通过设置SxCTRL寄存器的DMM位,即可使能双缓存区功能。与常规(单缓存区)数据流工作模式相比,双缓存区功能拥有两个存储器指针;启动双缓存区功能时,EDMA控制器的相应数据流通道会自动开启循环模式,在每次SxDTCNT减到0时自动交换存储区。

根据SxCTRL寄存器的CM位,可知道数据流当前使用的存储区是memory0/1。当CM=0,表示当前目标是memory0;当CM=1,表示当前目标为memory1。

在使用双缓存区,需要注意以下几点:

  • 当硬件正在使用某一块缓存时,当前缓存的基地址不可改变,即寄存器SxM0ADDR和

SxM1ADDR。例如数据流正在将数据填入SxM0ADDR时,那么软件只能改变SxM1ADDR的基地址。可根据CM位的状态,确定数据流当前操作的缓存区。

  • 当使用双缓存区功能时,禁止使用存储器到存储器模式。
软件接口

对于双缓存区功能,软件实现了单独的函数接口,如下:

16.png

对于双缓存区功能,第一个缓存区地址会在EDMA初始化结构体中配置,即SxM0ADDR寄存器的配置。

在配置双缓存区功能时,调用edma_double_buffer_mode_init();函数,此函数第一个参数表示当前配置双缓存区的数据流,第二个参数为第二个缓存区的地址,第三个参数为启动后硬件使用的缓存区。

以上函数的调用,双缓存区功能就配置好了,现在只需要调用edma_double_buffer_mode_enable(); 函数开启双缓存区功能即可。

链接列表传输功能

功能介绍

链接列表传输可实现将几块不连续的存储区的数据使用同一个数据流按照一定顺序发送出去或者同一数据流接收到数据按照一定顺序存储在几块不连续的存储区内。

EDMA控制器如何知道数据存储规则的呢?此规则是由软件按照特定格式给出的,其格式如下图所示:

17.png

图11. 链接描述符格式

将此格式成为链接描述符,此描述符存储在片上存储器中,当打开数据流时,EDMA 控制器从片上存储器加载此描述符配置数据流,然后开启数据的传输。

描述符分为4项:

  • 数据流基础配置和数据传输数量配置
  • 外设基地址
  • 存储器基地址
  • 下一个描述符的首地址

通过描述符的具体实现,最终实现一个单向链表结构,如下:

18.png

图12. 链接描述符链表结构

注:描述符在片上存储地址必须要4 word对齐,否则不能正常启动数据流。

软件接口

对于链接列表传输功能,软件单独实现了函数接口,如下:
19.png

第一个函数是对链接列表传输功能的一些配置。参数有两个,第一个参数表示所配置的数据流号,第二个参数表示链表描述符的首地址。

经过此函数的配置后,只需调用第二个函数即可开启链表传输功能。

二维处理功能

功能介绍

二维数据传输(2D)功能,使用者可以较为方便的对数据块进行一些操作,提高对数据的处理效率,在图像处理方面效果较为明显。

EDMA为二维数据传输(2D)提供了4个可配置的参数值:

  • DMA_Sx2DCNT中的XCOUNT:跳转到下一个跨步之前要传输的数据计数;
  • DMA_Sx2DCNT中的YCOUTNT:迭代计数;
  • DMA_Sx2DSTRIDE中的SRCSTD:源跨步值,该值应在源端迭代之前添加或减去;
  • DMA_Sx2DSTRIDE中的DSTSTD:目的跨步值,该值应在目标端迭代之前添加或减去。

二维数据传输(2D)举例:

20.png

表4. 2D传输举例

传输前数据在源存储器中:

21.png

图13. 2D传输前数据

传输后数据在目的存储器中:

22.png

图14. 2D传输后数据

图4和图5的阴影部分为真实数据。根据图中可以清晰看到将数据看成二维的存储在存储器中,2D传输将此数据块的左边1/2的数据取走并存储在新二维数据块的上1/2处。

在使用二维传输时,有一些限制条件需要注意:

  • 仅支持memory to memory传输
  • PWIDTH和MISZE需要设置为0x2(字)
  • 源和目标跨步值需与字对齐
  • 源和目标跨步值均为二补数
  • PINCM和MINCM均需设置为1(增量模式)
  • PFCTRL需设置为0
  • PINCOS需设置为0
  • 不支持循环模式、双缓冲模式
  • 不支持链接列表传输

软件接口

对于二维数据传输功能,软件单独实现了接口函数,如下:

23.png

通过函数edma_2d_init(); 可以配置二维传输的源跨步、目的跨步、XCNT和YCNT,这四个参数的在使能2D传输前就需要配置好;然后调用函数edma_2d_enable(); 即可开启二维传输功能。

EDMA配置解析

以下对EDMA的配置接口及流程进行说明。

函数接口

24.png

表5. 数据流配置函数列表

数据流配置

  • 设置外设地址(SxPADDR寄存器)
    数据传输的初始外设地址,在传输过程中(SEN=1)不可被改变。
  • 设置存储器地址(SxM0ADDR寄存器)
    数据传输的初始内存地址,在传输过程中(SEN=1)不可被改变。
  • 数据流配置(SxCTRL寄存器)
    包含优先级,数据传输方向、模式和宽度,地址增量模式、循环模式、双缓冲模式和传输/半传输/传输错误中断使能位。
    优先级(SPL)
    分为4个等级,最高优先级、高优先级、中等优先级和低优先级。
    若有2个流优先级设定相同,则较低编号的流有较高的优先权。举例,流1优先于流2。
    数据传输方向(DTD)
    分为存储器到外设(M2P),外设到存储器(P2M)或存储器到存储器(M2M)传输。
    在存储器到存储器传输模式下不允许使用循环模式、双缓冲模式和直接模式。
    数据传输宽度(PWIDTH/MWIDTH)
    根据实际使用情景,可配置宽度为byte、halfword、word;EDMA内部的打包、拆包机制允许PWIDTH与MWIDTH宽度不一致。
    地址增量模式(PINCM/MINCM)
    当流配置设定为增量模式时,下一笔传输的地址将是前一笔传输地址加上传输宽度(PWIDTH/MWIDTH)。
    数据传输模式(PBURST/MBURST)
    分为单次传输(SINGLE),或突发传输(BURST)。
    突发传输,在每个DMA请求到来后,根据配置传输4、8、16拍。
    在非增量模式下,设置突发传输会将4、8、16拍突发传输转换为4、8或16个单次传输。
    在直接模式下,PBURST和MBURST位被硬件强制为0(单次传输)
    外设流控选择(PFCTRL)
    若选择外设做为流控制(PFCTRL=1),硬件会将DMA_SxDTCNT的值强制为0xFFFF,并由外设的dma_ch_lt信号指示数据传输结束。外设流控制不支持M2M模式和循环模式。
    循环模式(LM)
    当流配置设定为循环模式时,在最后一次传输后 SxDTCNT 寄存器的内容会恢复成初始值。
    双缓存模式(DMM)
    当流配置设定为双缓冲模式时,硬件会自动启用循环模式。双缓冲区流有两个存储器指针
    SxM0ADR/SxM1ADR,由CT位標示當前使用之存储器指针,允许软件在DMA填充/使用第二个存储区的同时处理另一个存储区。
  • 直接模式与FIFO模式设定(SxFCTRL寄存器)
    包含FIFO阈值选择,直接模式禁用和FIFO错误中断使能位。
    FIFO阈值选择(FTHSEL)
    分为1/4、2/4、3/4和全FIFO阈值;该设定仅在非直接模式下有效。
    FIFO模式使能(FEN)
    直接模式(FEN=0)仅可在P2M或M2P模式下使用,且外设/存储器传输宽度需相等(MWIDTH=PWIDTH)并设定为单次传输(PBURST=MBURST=0)。如果选择M2M模式,该位(FEN)被硬件强制为1。
  • 使能DMAMUX(MUXSEL寄存器的TBL_SEL位)
    在非存储器到存储器(M2M)模式下时,需要使能 DMAMUX 功能,才能启动数据流响应外设的DMA请求。
  • 写入外设ID号(MUXSxCTRL寄存器的REQSEL)
    在非存储器到存储器(M2M)模式下时,需要将外设的DMA请求ID号写入,才能启动数据流响应外设的DMA请求。
  • 打开数据流(SxCTRL寄存器的SEN位)

配置流程

  • 打开EDMA时钟;
  • 调用数据流复位函数复位数据流;
  • 调用结构体初始化函数初始化数据流结构体;
  • 调用初始化函数初始化数据流;
  • 调用DMAMUX使能函数以及ID号写入函数配置DMAMUX相关内容;
  • 调用数据流使能函数开启数据流。

案例 数据从FLASH传输到SRAM

功能简介

实现了使用EDMA将数据从片上FLASH搬运到内部SRAM中。

资源准备

1) 硬件环境:

对应产品型号的AT-START BOARD

2) 软件环境

project\at_start_f4xx\examples\edma\flash_to_sram

软件设计

1) 配置流程
  • 开启EDMA外设时钟
  • 配置EDMA数据流
  • 开启传输完成中断
  • 开启数据流
  • 等待数据传输完成
  • 比较数据传输是否正确
2) 代码介绍
  • main函数代码描述

25.png

  • EDMA_Stream1_IRQHandler中断函数代码描述
26.png

实验效果

  • 如若数据传输无误,LED2/3/4会点亮。

案例 EDMA突发传输

功能简介

EDMA突发传输为EDMA控制器的特有功能。

使用EDMA的突发传输将数据从SRAM传输到TMR1的c1dt至c4dt,实现同时改变TMR1四个通道占空比。

资源准备

1) 硬件环境:
对应产品型号的AT-START BOARD
2) 软件环境

project\at_start_f4xx\examples\edma\burst_mode

软件设计

1) 配置流程
  • 开启EDMA/TMR1/GPIOA外设时钟
  • 配置EDMA数据流
  • 配置TMR1的通道1到4输出PWM波形
  • 开启传输完成中断
  • 开启数据流
  • 开启TMR1,使其溢出中断产生DMA请求
2) 代码介绍
  • main函数代码描述
27.png

实验效果

  • TMR1的通道1到4每个周期会改变一次占空比。

如下为使用逻辑分析仪抓取的几个通道的输出波形,可以看到PWM波形的占空比每个周期都在改变。

28.png

图15. Burst传输实验结果

案例 EDMA双缓冲区

功能简介

EDMA存储器端双缓存区为EDMA控制器的特有功能。

本案例使用EDMA的双缓存区功能将SRAM内部的两块数据通过IIS3传输给IIS2并存储在SRAM内的另外两个数据块中。i2s3_buffer1_tx[32]和i2s3_buffer2_tx[32]为IIS3传输的两块数据,i2s2_buffer1_rx[32]和i2s2_buffer2_rx[32]为IIS2接收到的数据存储区域。

资源准备

1) 硬件环境:
对应产品型号的AT-START BOARD
使用杜邦线将IIS3与IIS2连接起来,连接关系如下:
PD0<------->PA4(ws)
PD1<------->PC10(sck)
PD4<------->PC12(sd)

2) 软件环境

project\at_start_f4xx\examples\edma\i2s_halfduplex_edma_doublebuffer

软件设计

1) 配置流程

  • 开启EDMA/IIS3/IIS2/GPIO外设时钟
  • 配置EDMA数据流,使能双缓存区功能
  • 配置IIS3/2
  • 开启传输完成中断
  • 开启数据流
2) 代码介绍
  • 代码描述
29.png

实验效果

  • LED2/3/4都点亮则表示数据传输正确。

案例 EDMA链接列表传输

功能简介

EDMA链接列表传输为EDMA控制器的特有功能。

本案例使用EDMA的链接列表传输功能,将片上存储器的3块区域的数据通过EDMA发送给USART1,USART1在通过自身的TX引脚将数据发送出去。

资源准备

1) 硬件环境:
对应产品型号的AT-START BOARD
2) 软件环境

project\at_start_f4xx\examples\edma\link_list_mode

软件设计

1) 配置流程
  • 开启EDMA/USART1/GPIO外设时钟
  • 配置EDMA数据流,使能链接列表传输功能
  • 开启传输完成中断
  • 开启数据流
2) 代码介绍
  • 代码描述
30.png

实验效果

  • LED2/3/4都点亮则表示数据传输完成,并可通过串口工具查看发送出来的数据。

串口工具接收的数据如下图所示:

31.png

图16. 链接列表传输实验结果

案例 EDMA二维传输

功能简介

EDMA二维传输为EDMA控制器的特有功能。

本案例使用EDMA的二维传输功能,将片上存储器的1块区域的数据通过EDMA二维传输功能剪裁出其左边1/2,并通过串口打印出来。

资源准备

1) 硬件环境:

对应产品型号的AT-START BOARD
2) 软件环境

project\at_start_f4xx\examples\edma\two_dimension_mode

软件设计

1) 配置流程
  • 开启EDMA/USART1/GPIO外设时钟
  • 配置EDMA数据流,使能二维传输功能
  • 开启传输完成中断
  • 开启数据流
2) 代码介绍
  • 代码描述
32.png

实验效果

  • 通过串口工具查看发送出来的数据。

串口工具接收的数据如下图所示:

33.png

图17. 二维传输实验结果

来源:AT32 MCU 雅特力科技

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

围观 330

EE Awards Asia为亚洲区半导体和电子业的年度颁奖盛会,全球137家相关科技企业,超过400份提名角逐,奖项包含新创奖、产品奖、人气奖、企业奖与推荐奖,共有22个奖项进行投票,同时邀请各个专业领域工程师评选出最优秀的品牌和产品。

今年雅特力AT32F435/437荣幸获选「亚洲区—年度最佳MCU/Driver IC产品奖」,得到亚洲区微控制器市场高度认可,由雅特力产品与营销处长杜立博先生代表公司上台领奖。

1.jpg

经过市场不断的淬炼和客户的反馈下,AT32 MCU逐渐在全球微控制器市场中脱颖而出,最具代表性的超高性能AT32F435/437微控制器,一经推出便获得众多工程师青睐,该产品采用32位ARM® Cortex®-M4内核,创下M4业界CPU最高主频288MHz,并提供超大容量4032KB Flash和高达512KB SRAM,和丰富的外设资源,如2xOTG、2xQSPI、8xUART、2xCAN、4xSPI/I2S和3组5.33 Msps高速ADC独立引擎,使MCU能够处理更高阶、复杂的运算工作;此外产品集成数字摄影机并行DVP接口,可用于补捉CMOS影像摄影机所输出的并行数据;同时整合XMC接口,支持外接SDRAM、SRAM和PSRAM等储存器扩展储存空间,满足客户对可视化影像、听觉、触觉等操作应用要求。为了加快网络传输效率和稳定性,AT32F437还兼容IEEE-802.3 10/100 Mbps Ethernet以太网络控制器,协助开发人员降低设备物料成本,拓展应用领域,如物联网、工业控制、工业自动化、智能制造和5G通讯等。

2.png

AT32全系列MCU支持Pin-to-Pin接口,方便客户快速替换升/降级选型,且支持工业级芯片温度范围-40~105℃,适合应用于各种严苛的工业或户外场景。雅特力正全力投入打造一个全方位的MCU平台生态系统,专注于开发ARM® Cortex®-M4/M0+微控制器,不断提升CPU效能,推出相对业界更大内存、超低功耗、丰富外设的高性能产品,搭配自主研发sLib二次开发安全库,持续朝向28nm/40nm先进制程、高效能的市场研发精进。丰富多元的产品系列,不同尺寸的封装选择,具有竞争力的价格和良好的质量与服务,AT32 MCU各具特色的优势性能,协助客户共同实现终端智慧科技。

来源:AT32 MCU 雅特力科技

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

围观 18

简介

时钟是芯片正确高效运行的基础,正确的时钟配置是芯片能正确运行的必要条件,其重要性不言而喻。AT32各系列产品的时钟配置部分可能存在细微的差异和需要注意的事项,本文档就着重针对各系列的情况来详细介绍如何结合雅特力提供的V2.x.x的板级支持包(BSP)来配置时钟。

以下介绍时钟配置的方法主要分两种:

1、 以手动编写代码调用BSP中提供的驱动函数接口来进行时钟配置。

2. 采用时钟工具来配置并生成相应的源码文件。

时钟树

在进行时钟配置之前,应充分了解对应芯片的时钟树结构,这样在进行时钟配置时才会游刃有余。对于系统时钟频率及路径的配置我们需要关注时钟源、倍频及系统时钟部分。类似如下图:

图1. 时钟框图

1.png

可由图中得到以下几个关键信息:

1) SCLKSEL:系统时钟可以由HEXT、PLLCLK、HICK三大时钟源提供。

2) HEXT:HEXT是外部高速时钟,其可以外接范围是4~25 MHz的晶振或时钟源。

3) HICK:HICK RC是内部高速振荡器,频率为48 MHz。HICK时钟由内部振荡器给出,但在初始情况下由HICKDIV控制并默认6分频后为8 MHz,亦可配置为不分频,保持48MHz的频率。

4) PLLCLK:PLL时钟=PLL输入时钟/PLL_MS*PLL_NS/PLL_FR。

5) PLL输入时钟:PLL的输入时钟由PLLRCS决定,有两个来源:HICK 8 MHz和HEXT。

代码配置解析

以下将以库函数接口为核心来对时钟配置流程和方法进行说明。

函数接口

各系列产品对应提供的BSP中对硬件的时钟设置部分已封装好接口函数以供调用,以下罗列出时钟配置常用的函数接口,各函数的具体参数及返回值类型等请参考at32f435_437_crm.c/.h文件。

2.png

时钟配置流程

按常规应用来讲解时钟配置流程,其内容可大致分为如下步骤:

图2. 时钟配置流程图

3.png

Flash时钟分频(Set Flash Clock Division)

Flash时钟分频系数与系统时钟频率相对应,系统时钟频率与Flash分频系数对应关系如下:

4.png

代码实现如下:

5.png

复位(CRM Reset)

首先按规范流程应复位CRM配置参数,其主要是将系统时钟切换到HICK,其余的系统时钟配置寄存器写入默认值,待后续进行新配置参数的写入。函数调用的代码实现如下:

6.png

时钟源配置(Clock Source Configuration)

与系统时钟相关的高速时钟源主要包括HEXT和HICK,PLL也是使用以上时钟源来进行倍频。需要在配置使能PLL前将所使用的PLL参考时钟源开启并等待其稳定。

  • HEXT

外部高速时钟如采用外接有源时钟的方式时,可开启旁路模式来进行使用,采用晶振时,不能开启旁路模式,旁路模式应在外部高速时钟源使能前进行设定,其默认情况为关闭。旁路模式使能代码实现如下:

7.png使能HEXT时钟源并等待HEXT时钟稳定,代码实现如下:

8.png

  • HICK

内部高速时钟是由芯片内部振荡器提供,使能HICK时钟源并等待HICK时钟稳定,代码实现如下:

9.pngPLL配置(PLL Configuration)

PLL配置主要包括:PLL时钟源、PLL倍频系数、PLL倍频频率范围等的设置。倍频时钟公式为:PLLCLK=(PLL输入时钟*PLL_NS)/(PLL_MS*PLL_FR)。

  • PLL时钟源

PLL时钟源细分有如下来源:1、HICK(8 MHz),2、HEXT。PLL时钟源应在PLL配置使能前开启并等待稳定。以上PLL时钟源在crm_pll_config函数中对应的参数定义如下:

10.png


  • PLL倍频系数

PLL_MS:PLL预分频系数,范围值1~15。其功能是对PLL输入时钟进行预分频。

PLL_NS:PLL倍频参数,范围值31~500。其功能是对PLL_MS进行预分频处理后的时钟进行倍频。PLL_FR:PLL后分频系数,范围(1、2、4、8、16、32)。其功能是对PLL_NS倍频后的时钟进行后除频,除频后的时钟才是PLL时钟。以上参数在搭配使用时有如下限制条件,详情可参考RM的4.1.1时钟源章节:

11.png

当PLL参数设置完成后,即可开启PLL并等待PLL稳定。示例:外部时钟晶振8 MHz,采用HEXT时钟作为PLL时钟源,PLLCLK倍频到288 MHz的代码实现如下:

12.png

总线分频(Set Bus Frequency Division)

总线分频包含SCLK到AHBCLK分频、AHBCLK到APB1CLK分频、AHBCLK到APB2CLK分频。AHB总线1分频、APB1/APB2总线2分频的代码实现如下:

13.png

切换系统时钟(Switch System Clock)

系统时钟来源主要有三个:HICK、HEXT、PLLCLK。在切换系统时钟到如上时钟源时应提前确保对应时钟源已稳定。

  • 顺滑模式

时钟顺滑模式是为了确保整个系统时钟切换过程的稳定而设计,当即将切换为系统时钟的目标时钟频率大于108 MHz时应开启时钟顺滑模式,所以其主要应用对象为PLLCLK用作系统时钟时的场景。通常使用方法是在系统时钟切换前开始,切换成功后关闭。代码实现如下:

14.png

  • HICK系统时钟

内部高速时钟在系统复位重新运行时默认作为系统时钟,后期代码进行设定时,可有两种频率值来进行设定(8 MHz和48 MHz)。如图1所述HICK默认情况下用的是8 MHz,可配置为48 MHz。HICK 8 MHz用作系统时钟的代码实现如下:

15.pngHICK 48 MHz用作系统时钟的代码实现如下:

16.png

  • HEXT系统时钟

外部高速时钟用作系统时钟时,其系统时钟频率以实际使用的外部时钟频率为准,范围为4~25 MHz。HEXT用作系统时钟的代码实现如下:

17.png

  • PLLCLK系统时钟

PLLCLK用作系统时钟时,其系统时钟频率以实际的PLL倍频结果为准。其最高频率应满足芯片规格为基础。PLLCLK用作系统时钟的代码实现如下:

18.png

  • 更新核心频率(Update Core Frequency)

提供的BSP中,其代码框架内保留了一个表示系统核心频率的参数值system_core_clock,其保存的是CPU核心的运行频率值,应该在每次系统时钟配置完成后来进行更新。为的是在整个代码框架下,各外设驱动的频率配置能很快获取到当前核心运行频率值并使用。代码实现如下:

19.png

时钟配置示例

以下将以完整的时钟配置流程来进行说明,示例:由8 MHz外部时钟晶振作为时钟源,经PLL倍频到288 MHz并用做系统时钟,AHB不分频,APB1/APB2采用2分频。函数system_clock_config代码实现如下:

20.png

时钟工具

时钟配置工具是雅特力科技为方便对AT32系列MCU进行时钟配置而开发的一个图形化配置工具,其主旨是使用户清晰了解时钟路径和配置出期望的时钟频率并生成源码文件。

环境要求

软件要求需要Windows7及以上操作系统支持。

安装

软件安装本软件不需要安装,只需直接运行可执行程序AT32_New_Clock_Configuration.exe。

功能介绍

本章节将介绍此工具的基本操作,其主要的启动界面和配置界面如下所示

图3. 启动界面

21.png

图4. 配置界面

22.png

菜单栏

菜单栏内容如图所示:

图5. 菜单栏

23.png

  • “项目”(Project)菜单:

新建:新建时钟配置项目

打开:打开已存在的配置项目

保存:保存已打开的配置项目

  • “语言”(Language)菜单:

English:选择English作为显示语言

简体中文:选择简体中文作为显示语言

  • “生成代码”(General code)菜单:

当在对应型号的操作配置界面将所期望的时钟路径和时钟频率配置完成之后,可点击“生成代码”菜单来选择源码文件的存储路径并生成相应的源码文件。

  • “帮助”(Help)菜单:

新版本下载:联网进行新版本下载

版本:查看当前版本

新建配置项目

双击打开时钟配置工具,可看到图示的启动界面,可点击“项目”菜单-->“新建”,进行配置项目的新建,在新建配置项目的过程中需要对芯片的系列所属进行选择,操作方法如下图所示

图6. MCU选择界面

24.png

MCU系列的选择,可点击下拉框来进行选择,当选择好MCU后点击“确定”可进入到时钟配置界面。

配置界面的使用

配置界面主要用来进行时钟路径及参数的配置并对部分外设当前运行的时钟频率进行显示,以下的介绍将以AT32F435系列作为示例来展开进行,其余系列的配置方法与此类似。整个配置界面主要可以分为四个大块,如下图所示

图7. 配置界面框架

25.png


1、标题部分:用于展示当前配置项目所选择的MCU系列。

2、配置部分:用于对时钟路径和时钟参数进行选择和配置,以达到期望的应用需求。

3、输出部分:用于时钟输出(CLKOUT)的配置。

4、在SCLK栏也可在选中PLL为系统时钟时作为输入框,可输入期望的系统时钟频率来反向自动配置出倍频参数。

5、结果部分:用于显示当前外设所使用的时钟频率及总线上的外设。

接下来就着重介绍一下配置部分的使用。配置部分的流程界面是对应着 MCU 时钟树来进行的,各系列MCU的此部分可能存在着差异,但使用方式大同小异。时钟路径的配置可按流程对各开关进行点选来进行选择,配置部分如下图所示,将逐个流程点的功能及其注意事项进行介绍。

图8. 时钟配置框

26.png1. ertc使能:ertc时钟代码配置的使能下拉框。

2.ertcsel:点选框,ertc时钟源选择。当ertc使能开启后,此点选框可配置。

3. ertcdiv:下拉框,当ertc选择hext外部高速时钟作为时钟来源时,此下拉框选择分频系数。

4. lext bypass:外部低速时钟的旁路使能。

5. hext:此为输入框,8 MHz为所采用外部时钟源的默认频率,用户可根据实际使用的外部时钟源频率进行修改。(注:此8 MHz被修改为其他频率值时,对应的BSP中demo目录下的inc/at32f435_437_conf.h文件内的HEXT_VALUE宏定义也应该一致修改,也可以采用工具生成的at32f435_437_conf.h文件来进行使用)。

6. hext bypass:高速外部时钟的旁路使能。

7. pllrcs:点选框,可配置PLL时钟源为HEXT或HICK。

8. pll_ms:输入框,PLL预分频系数,范围值1~15。其功能是对PLL输入时钟进行预分频。

9. pll_ns:输入框,PLL 倍频参数,范围值31~500。其功能是对PLL_MS进行预分频处理后的时钟进行倍频。

10. pll_fr:下拉框,PLL后分频系数,范围(1、2、4、8、16、32)。其功能是对PLL_NS倍频后的时钟进行后除频,除频后的时钟才是PLL时钟。

11. sclk select:点选框,可配置HEXT、PLL或HICK作为系统时钟。

12. sclk频率:当采用正向配置时,此作为系统时钟频率的配置结果显示,当将其用作输入框时,输入期望的频率后点击回车键,会根据此输入值反向计算一组合适的或最接近期望值的PLL配置参数。

13. hick to sclk:点选框,当sclk select选择HICK作为系统时钟时,可配置HICK的8 MHz或48 MHz到系统时钟(注:当选择48 MHz HICK到系统时钟后,CLKOUT输出HICK时的频率也为48 MHz)。14. usbdiv:下拉框。当PLL时钟被选作为USB的时钟来源时,此处配置PLL时钟到USB时钟的分频系数。

15. hick to usb:点选框,可配置USB时钟由PLL时钟或HICK 48 MHz提供,USB时钟配置代码由下拉框to usb来进行选择控制。因USB时钟需要的是固定48 MHz,所以在usbdiv可分频参数为前提下,PLL倍频出来的频率可能不满足USB 48 MHz的时钟需求。

16. USB使能:USB时钟代码配置的使能下拉框。

17. USB时钟频率的显示。此显示栏会实时计算USB时钟的频率并显示,如果配置出来的USB时钟不等于48 MHz时,显示出来的USB时钟频率会标注为红色,而实际应用中没有用到USB时选择disable则不会显示。(注:此部分只针对USB时钟频率的配置,USB外设时钟使能需自行额外打开)。

生成代码

当时钟配置完成后,可点击生成代码,然后选择代码生成的路径并确认,最后会在所选目录下生成两个文件夹inc和src,源文件存放在src文件夹下,头文件存放在inc文件夹下。这些文件可结合到BSP_V2.x.x内的工程来进行使用。可以采用新生成的时钟代码文件(at32f4xx_clock.c/at32f4xx_clock.h/at32f4xx_conf.h)将原BSP demo中的对应文件替换,在main函数中进行system_clock_config函数调用即可。

注意事项

外部时钟源(HEXT)修改

因本文档所示例的demo和配置工具都默认采用的8 MHz外部时钟频率,当实际硬件使用的外部时钟源是非8 MHz频率时需注意以下几点。

  • 代码修改

1、 以实际的外部时钟频率按文中时钟配置流程章节所描述的时钟配置流程及方法来编写相应的代码,配置出期望的时钟配置及时钟路径。

2、 修改对应demo工程中at32f4xx_conf.h文件的HEXT_VALUE值,以实际使用的外部时钟源频率值来进行修改。如实际外部高速时钟使用12.288 MHz的晶振或时钟源时,at32f4xx_conf.h文件应修改如下:

27.png

  • 工具修改

1、在时钟配置工具中的 HEXT 输入框内填入外部时钟源实际频率值并按“Enter”键确认。

2、配置好所需的时钟路径及时钟频率,生成代码。采用新生成的时钟代码文件(at32f4xx_clock.c/at32f4xx_clock.h/at32f4xx_conf.h)将原BSP demo中的对应文件替换或取其中函数内容进行替换,在main函数中进行system_clock_config函数调用即可。

工具使用

在使用本时钟配置工具时需注意:1. 此工具生成的时钟配置源码文件需结合雅特力科技提供的BSP_V2.x.x进行使用。2. 不同系列所生成的时钟配置源码文件不能型号混用,只能在相对应的工程项目中进行调用。3. 配置工具中各输入框参数修改后,请以“Enter”键结束。

案例 系统时钟切换

功能简介

在系统运行过程中来进行系统时钟切换。

资源准备

1) 硬件环境对应产品型号的AT-START BOARD2) 软件环境project\at_start_f435\examples\crm\sysclk_switch

软件设计

1) 配置流程

  • 初始化按键。

  • 配置clkout时钟输出pll 4分频。

  • 编写从hick经pll倍频64 MHz到系统时钟的配置代码。

  • 编写从hext 2分频经pll倍频96 MHz到系统时钟的配置代码。

2) 代码介绍

main函数代码描述

28.png

hick经pll倍频64 MHz到系统时钟的代码描述

29.png

hext经pll倍频96 MHz到系统时钟的代码描述

30.png

实验效果

上电运行led2以间隔100ms时间进行闪烁,clkout(PA8)输出60 MHz。每次USER按键按下,系统时钟在64 MHz与96 MHz之间进行交替切换,clkout输出对应的4分频频率,led4 toggle一次。

案例 时钟失效检测

功能简介

在当HEXT时钟直接或间接作为系统时钟时,当HEXT时钟出现故障,且时钟失效模块侦测到失效后,时钟失效事件将产生NMI中断,在此中断中可完成系统的营救操作。

资源准备

1) 硬件环境对应产品型号的 AT-START BOARD2) 软件环境project\at_start_f435\examples\crm\clock_failure_detection

软件设计

1) 配置流程

  • 配置clkout1时钟输出pll 4分频。

  • 开启时钟失效检测,并完善void NMI_Handler(void)函数。

  • 编写从hick经pll倍频288 MHz到系统时钟的配置代码。

2) 代码介绍

main函数代码描述

31.png

hick经pll倍频288 MHz到系统时钟的代码描述

32.png

NMI中断实现

33.png

实验效果

在运行过程中将晶振拔掉或晶振脚接地,产生时钟失效。通常来说hext比hick更稳定,可观测clkout(PA8)的输出,可发现时钟拯救回来后hick作为源时的频率上存在细微波动。

案例PLL参数计算

功能简介

在进行系统时钟配置过程时,可调用库函数根据PLL输入时钟源和目标时钟频率自动计算一组合理的PLL参数以供配置,减少人为计算的烦恼。

资源准备

1) 硬件环境对应产品型号的AT-START BOARD2) 软件环境project\at_start_f435\examples\crm\pll_parameter_calculate

软件设计

1) 配置流程

  • crm_pll_parameter_calculate函数自动计算PLL参数方式配置系统时钟。

  • 配置clkout1时钟输出pll 4分频。

  • 判断计算结果,能以目标时钟准确计算一组PLL参数时LED4闪烁,如果不能LED2闪烁。

2) 代码介绍main函数

34.png

代码描述自动以目标时钟计算PLL参数并配置系统时钟的代码描述

35.png

实验效果

系统会自动计算一组以目标时钟为结果的PLL参数并配置,如果计算参数所算结果与目标时钟相等则LED4闪烁,如果所算结果与目标时钟接近则LED2闪烁。

来源:AT32 MCU 雅特力科技

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

围观 154
订阅 RSS - AT32F435