1、模块介绍
Port(端口)是芯片与板上其他外设或逻辑电路交互的重要引脚,用于芯片发出控制信号或接收外部信号。通过GPIO模式或各类通讯模式,对板载设备进行控制。
Aurix TC3xx系列芯片具有丰富的Port连接,而且每个Pin脚具有多种功能复用,提供了丰富的实现方式,支持多种几乎所有板极引脚通讯协议。
2、功能介绍
2.1、特性介绍
TC3xx系列中引脚是分组的,一组引脚称为Port,每个Port有最多16个Pin脚,具体的引脚资源情况需要参考对应芯片选型的DataSheet手册,如下图是TC38xx引脚Map图:
TC3xx的Port具有如下特性:
1、每个Port控制最多16个Pin脚;
2、软件能够控制每个Pin脚的输出
3、输出修改寄存器易于清除,设置和切换单Pin脚和Pin脚的波形不影响其它Pin脚的状态;
4、软件能够读取每个Pin脚的输入值
5、多路复用多达7个输出模式;
6、支持外设直接控制;
8、控制Pin的驱动特性,如驱动强度,偏移lv,上拉/下拉,推挽或开路漏极操作,选择TTL或CMOS/自动输入电平;
9、紧急停止功能允许SMU或通过Pin关闭Pin脚输出;
10、对于具有LVDS功能的Pad对,它可以控制LVDS特性,并允许LVDS和CMOS之间切换模式;
11、在减少引脚数的封装中,端口模块可以禁用所选引脚;
2.2、Port内部结构
TC3xx系列有多组Port,每组Port有最多16个Pin,每个Pin的输入输出以及控制模式都可独立配置。每个Pin脚内部结构如下图:
如上图可知,每个Pin脚包括一个Port Slice用于对引脚进行模式和输出控制,一个PAD用于与外界进行输入输出。
每个Pin脚都可以被配置为输入或者输出,通过Pn_IOCR寄存器进行切换。当配置为输入时,输出连接将被切断,可通过Pn_IN寄存器读取Pin脚的状态值;当配置为输出时,根据对应的输出模式(GPIO、HW_OUT、ALT1、ALT2…等),进行对应的输出连接。输入端是直连的,也就是说无论输出还是输入模式,都可以通过输入端读取Pin脚的状态。
当引脚配置为输出时,可通过配置多路复用选择器,同样也是通过配置Pn_IOCR寄存器进行输出模式控制。当输出模式配置为GPIO时,可通过Pn_OUT寄存器来控制Pin脚状态;当配置为ALT1---ALT7任意一种,则根据该Pin脚的实际输出连接,由外设进行控制。还有一种特殊的输出模式,即最下边的HW_OUT控制模式,当Pin脚配置为该输出时,由外设直接控制,例如RGMII/RMII/MII信号,AD输出信号,与ALT不同的是需要额外通过PCSR寄存器使能。
另外当输出模式设置为GPIO时,还可以通过位操作寄存器来进行设置。包括位设置寄存器Pn_OMSR和Pn_OMSRx
(x=0,4,8,12),位清除寄存器Pn_OMCR和Pn_OMCRx(x=0,4,8,12),以及位操作寄存器Pn_OMR。其中位设置寄存器只能对输出位进行置位,也就是Pin脚拉高,位清除寄存器只能进行拉低。位操作寄存器除了能够进行拉高拉低,还能进行翻转操作(toggle),就不需要预先读取引脚状态。
大部分引脚还具有紧急停止功能(Emergency Stop),能够在紧急情况下与输出连接断开,成为一个输入引脚。急停功能由System Control Unit(SCR),负责控制,可选择Safety Management Unit(SMU)或者P33.8(A)、P21.2(B)作为急停触发源,急停触发后所有配置急停使能的引脚都会执行急停操作,关闭输出。SCU内部关于急停的功能框图如下:。
2.3、Port控制寄存器
关于Port的原理部分其实内容比较简单,大致就是输入和输出,以及输出功能的配置,但是在使用过程中还是存在一些坑的,尤其是在使用高速SPI、RGMII、RMII、MII时,信号驱动能力和EMC等问题较难处理。如下介绍Port控制寄存器,并详细说明控制功能。
2.3.1、输入输出控制寄存器(Port Input/Output Control Registers,IOCR)
首先是Port的输入输出控制寄存器,该寄存器控制的功能比较多,包括Pin脚输入输出方向、输入上下拉配置、输出推挽或开漏配置、输出功能选择配置等。每个Port端口具有4个IOCR寄存器,对应Pin关系如下:
Pn_IOCR0:Pn.[3:0] | Pn_IOCR4:Pn.[7:4] | Pn_IOCR8:Pn.[11:8] | Pn_IOCR12:Pn.[15:12] |
如下图:以Pn_IOCR0为示例
可以看到每个IOCR寄存器有4个位域,分别对应其控制的4个Pin脚,每个位域有5位,这5位表征的值如下表:
从上表中可以看出:
位域的最高位PCx[4]为1时,则为输出,为0时则该Pin脚为输入;
当Pin脚为输入时
PCx[1:0]表征该Pin脚的上下拉状态;
当Pin脚为输出时
PCx[3]表征该Pin脚的输出方式,0表示推挽输出,1表示开漏输出;
PCx[0:2]表征该Pin脚的输出功能选择,0表示GPIO功能1---7分别对应ALT1--ALT7;
这其中需要注意,若配置为输入上拉,在外部阻抗较小的情况下是可能输出虚高电平的,如果硬件明确该引脚需要输出低,则就会出现问题。另外对于一些硬件场景,比如使用I2C通讯时,对于所有主从设备,一般外部是有公共上拉的因此这时候MCU作为主机,输出如果配置为推挽,就会导致通讯失败,需要配置为开漏。
2.3.2、驱动模式寄存器(Pad Driver Mode Register,PDR)
驱动模式寄存器负责控制输出时的驱动强度、翻转速度以及输入上下拉的电源电阻。每个Port端口有两个PDR寄存器,其中PDR0对应Pin0--Pin7,PDR1对应Pin8---Pin15。每个PDR寄存器中包括两部分内容,分别是输出控制的PDx和输入控制的PLx,其寄存器结构如下。
从图中可以看到每个Pin脚又一个PDx和一个PLx,都占两个位宽。
其中PDx控制了输出时的驱动强度和翻转能力,驱动强度和翻转能力越高,对外部阻抗的能力就越强,信号的波形就越方正,但功耗会拉高,并且产生的信号辐射和干扰(EMC)就会越高。因此选择怎样的驱动强度及翻转能力,要具体取决于引脚的翻转频率,外部阻抗和EMC需求,例如SPI时钟较高,达到30MHz,那对应的驱动强度就该越高,否则信号波形跳变达不到要求,就会导致对端采样出错,通信失败;而对于GMII这样的告诉以太网通信,时钟一般高于100MHz,这时候容易产生高辐射,超出EMC要求的标准,反而需要适当降低驱动强度。
关于驱动强度和翻转能力,TC3xx的不同Pin脚具有不同的驱动速度,包括RFAST、FAST、SLOW、这是硬件资源使用情况,每个Pin脚类型需要查询对应的DataSheet,如下图中P00.8为SLOW
然后对于不同驱动速度的引脚,Pdx的含义不同,每个PDx有两个Bit位,对应PDx.0和PDx.1,具体情况参考下面对应的表格例如有一个Rfast Pin脚,若想配置为RGMII模式,则PDx = 11b。
另外需注意的是,SpeedGrade越小,表示对应的强度越高,功耗和EMC等级也就越高,RGMII属于例外。
然后在看PAD寄存器的PLx,PLx表征的是输入时的上下拉电源和电阻情况,每个PLx也是两个bit位宽。具体配置情况如下表:
2.3.3、差分控制寄存器(LVDS Pad Control Register, LPCR)
TC3xx系列芯片的Port支持差分信号功能,比如通过Hssl协议与外设进行信号交互时,此时数据采用的差分信号,因此引脚要配置为差分信号模式。
每个Port有8个LPCR寄存器,每个寄存器控制一对Pin脚,相邻的两个Pin组成一队差分Pin脚。差分信号控制寄存器中,[0---7]位为输入差分控制,[7--15]位为输出差分控制,位[7]为输入输出公用位。
REN_CTRL:输入控制选择,为0时表示普通Pin控制,1表示由HSCT控制,也就是Hssl协议使用;
Rx_EN:输入控制使能位,为1表示使能接收LVDS,0表示CMOS;
TERM:接收接地模式,0表示使用芯片外接电阻接地,1表示内部连接一个100Ω电阻接地;
LRXTERM:芯片测试阶段的可编程接地电阻设置,不允许用户修改的;
LVDSM:LVDM-M模式使能,0表示默认使用LVDS-H模式,1表示使用LVDS-M模式,可降低数据速率到160Mbps,以降低静态电流;
PS:选择该Pin脚对的外部供电Vext,0表示3.3V,1表示5V;
TEN_CTRL:输出控制选择,为0时表示普通Pin控制,1表示由HSCT控制,也就是Hssl协议使用;
TX_EN:输出控制使能位,为1表示使能接收LVDS,0表示CMOS;
VDIFFADJ:LVDS输出幅值调节,可用来调节输出幅值,调节能力参考DataSheet中如下图:
VOSDYN:VOS控制静态/动态回环调节,不允许用户修改;
VOSEXT:VOS控制内部/外部回环调节,不允许用户修改;
TX_PD:TC3xx中未使用该位,TX_EN可表征发送LVDS开关;
TX_PWDPD:发送端下电下拉,该功能禁用或启用LVDS下拉电阻;
2.3.4、Pin脚AD功能选择寄存器(Pin Function Decision Control Register,PDISC)
TC3xx系列中部分Pin脚是支持AD输入的,也就是将Pin复用为AD采样引脚,例如P40.0复用为AN24。如果复用为AD引脚,那Port端无法再去读取引脚的输入,而是由ADC模块来负责采样读取。
每个Port端口有一个PDISC寄存器,16个位域各控制一个引脚。
PDISx:Pinx的输入控制,0表示数字输入,为普通Pin脚,1表示模拟输入,ADC Pin脚;
2.3.5、Pin脚控制选择寄存器(Pin Control Select Register, PCSR)
前面提到,部分引脚是可以由外设直接控制的,例如RGMII输出,SMU的FSP输出,SCR(standby核)的控制。对于这类引脚,需要通过配置PCSR寄存器使能的,否则外设无法控制。
每个Port端口有1个PCSR寄存器,其图如下:
SELx:Pinx控制选择,0表示不使能外设控制,1表示使能;
LCK:该位只是一个只读位,为1时表示数据正在向SCR核传递,无法修改PCSR寄存器,为0则可修改;
PCSR寄存器的使用时需注意,尤其在以太网通信中,输出端Pin脚是需要配置该寄存器为1的。
2.3.6、Port输出寄存器(Port Output Register,OUT)
当Pin脚被设置为GPIO输出时,可直接通过修改输出控制寄存器的值来输出电平,1就是高电平,0就是低电平。每个Port端口有一个OUT寄存器,16个位域对应16个Pin脚。
2.3.7、Port输出修改寄存器(Port Output Modification Register,OMR)
若我们需要修改某一个Pin脚,一般是希望Port中的其它Pin脚保持不变的,这时若使用OUT寄存器则需要先回读OUT状态,在修改我们需要修改的位。但是这样未免有点浪费资源,因此我们可以通过操作OMR寄存器,只操作我们的目标位,其它位不进行修改。每个Port有一个OMR寄存器,包括16个Set位和16个Clear位,分别对应16个Pin脚。
关于OMR的Pin脚具体操作,可以通过查询下表可知,若要拉高某个Pin脚,就将PSx置1,拉低则将PCLx置1,若要翻转两个都置1,而其它没有设置位的Pin脚则不会受影响。
对于这个修改是直接作用于OUT寄存器的,因此不用担心OUT不同步的问题,另外该寄存器是虚拟的,没有存储位的,也就是说写这个寄存器相当于执行一种操作,而不是修改某个值,回读的话也是0。
2.3.8、Port输出修改置位寄存器(Port Output Modification Set Register,OMSR)
除了OMR寄存器,TC3xx还支持置位寄存器OMSR,它和OMR功能一样是虚拟寄存器,只不过是置位功能,每个Port端口有一个MOSR,16个位域对于16个Pin脚
PSx:Pinx置位,1表示将该Pin脚拉高,0表示无操作。
2.3.9、Port输出修改清除寄存器(Port Output Modification Clear Register,OMCR)
和输出修改置位寄存器的功能相反,修改清除寄存器OMCR的功能是将目标位清零,其它位不作修改。每个Port端口有一个OMCR寄存器,和4个OMCRx寄存器,每个位域对应一个Pin脚。
PCLx:Pinx清除位,1表示将该Pin脚拉低,0表示无操作;
2.3.10、急停开关寄存器(Emergency Stop Register,ESR)
急停开关寄存器用于控制急停功能的使能,急停的触发在SCU模块内配置。每个Port端口有一个ESR寄存器,16个位域对应16个Pin脚。
ENx:Pinx急停开关使能位,0表示不使能,1表示使能;
2.3.11、Port输入寄存器(Port Input Register,IN)
Port输入寄存器可以用来读取Pin脚当前的状态,无论Pin脚处于输入还是输出,都可以通过该寄存器读取Pin脚的高低电平。每个Port端口有一个IN寄存器,16个位域分别对应16个Pin脚。
Px:Pin脚读取状态,0表示低电平,1表示高电平;
2.3.12、寄存器总结
- Port需要设置输入输出,包括输入上下拉,输出推挽等,使用输入输出控制寄存器IOCR;
- 驱动模式需要调整以适配不同的硬件需求,使用驱动模式寄存器PDR;
- Pin脚如果复用为ADC,使用Pin脚AD功能寄存器PDISC;
- Pin脚如果需要被外设控制例如使用RGMII接口,使用Pin脚控制选择寄存器PCSR;
- Pin脚如果需要修改GPIO输出,可使用OUT、OMR、OMSR、OMCR;
- 读取Pin脚状态使用IN寄存器;