① 模块概述
Port的原理内容比较简单,就是输入和输出,以及输出功能的配置。
任何一款芯片,都有几十上百个引脚,也就是我们常说的I/O(Input/Output),这些引脚形成了芯片和控制板之间的连接。Port(端口)是芯片与板上其他外设或逻辑电路交互的重要引脚,用于芯片发出控制信号或接收外部信号。通过GPIO模式或各类通讯模式,对板载设备进行控制,比如通过GPIO模式进行板载设备的供电使能。
Aurix TC3XX系列芯片具有丰富的Port连接,而且每个Pin脚具有多种功能复用,提供了丰富的实现方式,支持多种几乎所有板级引脚通讯协议
② Port功能介绍
TC3XX系列中引脚是分组的,一组引脚称为Port,每个Port有最多16个Pin脚。具体的引脚资源情况要参考对应芯片选型的DataSheet手册。
TC3XX的Port具有如下特性:
每个Port控制最多16个Pin脚;
软件能够控制每个Pin脚的输出;
输出修改寄存器易于清除,设置和切换单Pin脚和Pin脚的波形不影响其他Pin脚的状态;
软件能够读取每个Pin脚的输入值;
多路复用多达7个输出模式;
支持外设直接控制;
控制Pin脚的驱动特性,如驱动强度,偏移率,上拉/下拉,推挽或开路漏极操作,选择TTL或CMOS/自动输入电平;
紧急停止功能允许SMU或或通过Pin关闭Pin脚输出;
对于具有LVDS功能的Pad对,它可以控制LVDS特性,并允许在LVDS和CMOS之间切换模式;
在减少引脚数的封装中,端口模块可以禁用所选引脚;
Port内部结构

每个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脚的实际输出连接,由外设进行控制,比如TC375 DataSheet中P00.0,配置为ALT1为GTM控制;还有一种输出模式比较特殊,即最下边的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)作为急停触发源,急停触发后所有配置急停使能的引脚都会执行急停操作,关闭输出。
③ Port相关的寄存器
如果要想了解Port的EB/Autosar配置的含义及如何配置,就需要理解下面的寄存器内容。
3.1 输入输出控制寄存器(Port Input/Output Control Registers,IOCR)
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位表征的值参见下表。

从表中我们可以看出:
位域的最高位PCx4为1时,则为输出,为0则该Pin脚为输入;
当Pin脚为输入时
PCx1:0表征该Pin脚的上下拉状态;
当Pin脚为输出时
PCx3表征该Pin脚的输出方式,0表示推挽输出,1表示开漏输出;
PCx0:2表征该Pin脚的输出功能选择,0表示GPIO功能17分别对应ALT1ALT7;
这里有些地方需要注意,如果配置为输入上拉,在外部阻抗较小的情况下是可能输出虚高电平的,如果硬件明确该引脚需要输出低,则就会出现问题。另外对于一些硬件场景,比如使用I2C通讯时,对于所有主从设备,一般外部是有公共上拉的,因此这时候MCU作为主机,输出如果配置为推挽,就会导致通讯失败,需要配置为开漏。
输入引脚的上拉和下拉配置,其本质区别在于为悬空的输入引脚提供一个确定的、默认的电平,以防止其受电磁干扰而随机跳变。

输入引脚的上拉和下拉配置,其本质区别在于为悬空的输入引脚提供一个确定的、默认的电平,以防止其受电磁干扰而随机跳变。
上拉就像把引脚通过一个电阻轻轻地"拉"向高电平(VCC);下拉则是把它"拉"向低电平(GND)。
据以下原则来决定使用上拉还是下拉:
1)看外设电路图的默认连接;
2)看逻辑电路的习惯和抗干扰;

选择推挽还是开漏输出,最核心的决策依据是:这条总线上是否连接了多个设备,并且它们需要共用一根信号线。
简单来说,如果是点对点的通信,选择推挽;如果是多设备共享的总线,则必须选择开漏。
3.2 驱动模式寄存器(Pad Driver Mode Register,PDR)
驱动模式寄存器负责控制输出时的驱动强度、翻转速度以及输入上下拉的电源电阻。每个Port端口有两个PDR寄存器,其中PDR0对应Pin0Pin7,PDR1对应Pin8Pin15。每个PDR寄存器中包括两部分内容,分别是输出控制的PDx和输入控制的PLx,
3.3 差分控制寄存器(LVDS Pad Control Register,LPCR)
TC3XX系列芯片的Port支持差分信号功能,比如通过Hssl协议与外设进行信号交互时,此时数据采用的是差分信号,因此引脚要配置为差分信号模式。
每个Port有8个LPCR寄存器,每个寄存器控制一对Pin脚,相邻的两个Pin组成一对差分Pin脚。差分信号控制寄存器中,0~7位为输入差分控制,7~15位为输出差分控制,位7为输入输出公用位。
3.4 Pin脚AD功能选择寄存器(Pin Function Decision Control Register,PDISC)
TC3XX系列中部分Pin脚是支持AD输入的,也就是将Pin复用为AD采样引脚,比如P40.0复用为AN24。如果复用为AD引脚,那Port端无法再去读取引脚的输入,而是由ADC模块来负责采样读取。
每个Port端口有一个PDISC寄存器,16个位域各控制一个引脚。
3.5 Pin脚控制选择寄存器(Pin Controller Select Register,PCSR)
3.6 Port输出寄存器(Port Output Register,OUT)
3.7 Port输出修改寄存器(Port Output Modification Register,OMR)
3.8 Port输出修改置位寄存器(Port Output Modification Set Register,OMSR)
3.9 Port输出修改清除寄存器(Port Output Modification Clear Register,OMCR)
3.10 急停开关寄存器(Emergency Stop Register,ESR)
3.11 Port输入寄存器(Port Input Register,IN)
④ 寄存器总结
1)输入输出控制:Port需要设置输入输出,包括输入上下拉,输出推挽等,使用输入输出控制寄存器IOCR;
2)驱动模式:驱动模式需要调整以适配不同的硬件需求,使用驱动模式寄存器PDR;
3)复用ADC:Pin脚如果复用为ADC,使用Pin脚AD功能寄存器PDISC;
4)被外设控制:Pin脚如果需要被外设控制例如使用RGMII接口,使用Pin脚控制选择寄存器PCSR;
5)修改GPIO输出:Pin脚如果需要修改GPIO输出,可使用OUT、OMR、OMSR、OMCR;
读取Pin脚状态使用IN寄存器;
⑤ Pin脚模式如何选择
首先根据芯片手册Datasheet,找到对应的Pin脚,有几种复用的输出模式,如下如果选择的CAN10_TXD,就是O5,查找上表Table485

⑥ Port和Dio的区别
简单来说,Port负责"配置"引脚的硬件功能,而Dio负责"读写"引脚的逻辑电平。
Dio是软件的操作,可以代码中实现读写。

⑦ 查看配置
劳德巴赫可以查看实现的配置是否正确;
具体的EB/Davinci 不做详解,如果了解了上面的寄存器和硬件特性,配置较为简单。

参考资料:
Infineon-AURIX_TC3xx_Part1-UserManual-v02_00-EN.pdf
Infineon-SAK-TC37x-DataSheet-v01_01-EN.pdf
英飞凌Aurix2G TC3XX Port&Dio模块详解