系统集成单元总结(System Integration Unit Lite2 /SIUL2)
一、模块框图
小结:
1、主要作用
- 系统集成单元(SIUL2)最主要的作用是控制引脚的功能和电气特性,同时控制不同模块之间对内部信号的多路复用以及控制I/O设备。
2、SIUL2模块提供一些寄存器,这些寄存器作用主要有两个:
-
-
- 用于读取配置为输入的GPIO口pads的数值
- 用于向配置为输出的GPIO口pads上写入数值
-
3、主要特性
- 1~32个带数据控制的GPIO端口
- 如果需要的话,可通过一个32位的端口一次性对两个16位寄存器进行读写访问
- 外部中断/DMA请求主要支持
- 1~4个系统中断向量,用于1~4个独立中断屏蔽的中断源,对于32个外部中断源(REQ引脚),共分为4组,每组有8个中断源,并且每一组都被分配一个系统中断向量。
- 1~32个可编程数字故障滤波器,每个REQ引脚分配一个
- 为1~4 REQ引脚提供1~4个系统DMA请求通道
- 边沿检测
- 驱动能力
SIUL2还包含多路复用信号配置寄存器(MSCR),这些寄存器可为多达512个功能pads提供电气化配置,而且,这些寄存器的数量是根据设备数实时变化的,这些寄存器主要配置pad的以下特征:
- 输出阻抗控制
- 驱动能力
- 开启漏/源输出使能
- 回转率控制
- 迟滞控制
- 内部上拉控制和上拉选择
- 引脚功能性分配
- 模拟路径开关的控制
- 安全模式行为控制
4、SIUL2模块具有寄存器保护机制,可保护以下寄存器免受意外复写。
二、功能描述
1、SIUL2模块允许每个pad被配置成GPIO口,并支持8位、16位或32位不同位宽方式读写访问,如下图所示:
2、SIUL2模块支持1~32个外部中断。
三、代码示例
1、相关寄存器及其配置
1)SIUL2 GPIO Pad Data Output Register (SIUL2_GPDOn/GPIO pad数据输出寄存器)作用:这些寄存器主要用于设置或清除具有单字节访问的单个GPIO pad,支持8位、16位和32位访问。
小注:
PDO_4n pad数据输出
该位主要用于将数据存储在由这个寄存器控制的外部GPIO pad上
PDO_4n(PDO_4n1/ PDO_4n2/ PDO_4n3)代表PDO[4n](PDO[4n+1]/ PDO[4n+2]/ PDO[4n+3]),例如,对于GPDO_3寄存器,PD0_4n(PDO_4n1/ PDO_4n2/ PDO_4n3)代表PDO12(PDO13/ PDO14/ PDO15)。
- 置0 表示当pad配置为输出时,低逻辑值用于驱动相对应的GPIO
- 置1 表示当pad配置为输出时,高逻辑值用于驱动相对应的GPIO
2)SIUL2 Multiplexed Signal Configuration Register(SIUL2_MSCRn/多路信号配置寄存器)
作用:该寄存器主要用于选择与该寄存器相连目标的信号源以及配置为输出的芯片引脚,对于相连的目标芯片引脚,寄存器也指定引脚的电气特性,芯片引脚控制如下图所示。
小注:
由上图可得
- Module 0模块输入相关特性由寄存器IMCR控制再输入缓冲使能(input buffer)后与引脚(Pin a/b)相连。
- Module 0 模块输出相关特性先通过引脚(Pin b)进行输出缓冲使能(output buffer)后由寄存器MSCR控制再与Module 0模块相连。
寄存器仅支持32位访问。
小注:
SRC 转速控制 仅有当相连目标为芯片引脚时使用
- 00 半驱动强度与转速控制
- 01 全驱动强度与转速控制
- 10 半驱动强度无转速控制
- 11 全驱动强度无转速控制
OBE GPIO输出缓冲使能 仅用于数字引脚,其他信号该位保留
- 置0 输出驱动禁止
- 置1 输出驱动使能
ODE 开放漏极使能 OBE和ODE都被设置时才能开放漏极使能
- 置0 开放漏极功能禁止
- 置1 当OBE设置为1时,开放漏极功能使能
IBE GPIO输入缓冲使能 仅用于数字引脚。
- 置0 输入缓冲禁止
- 置1 输入缓冲使能
SSS 源信号选择位 仅用于数字引脚。
- 这几位主要用于选择连接到相关目标芯片的源信号,该字段为变量位宽,主要取决于引脚所能提供备选功能的数量,对于芯片引脚来说,源信号是从模块端口输出的。
2、示例代码
void initGPIO (void)
{
/* EEPROM write protect */
SIUL2.GPDO[WP_EN].B.PDO = 0; /* Turn WP_EN on, note that the WP_EN are write protect 0 for ON, 1 for OFF */
SIUL2.MSCR[WP_EN].B.SSS = 0; /* Pin functionality as GPIO */
SIUL2.MSCR[WP_EN].B.OBE = 1; /* Output Buffer Enable on */
SIUL2.MSCR[WP_EN].B.IBE = 0; /* Input Buffer Enable off */
/* positive relay control */
SIUL2.GPDO[RLY_P_CTL].B.PDO = 0; /* Turn RLY_P_CTL OFF, note that the RLY_P_CTL are positive relay 0 for OFF, 1 for ON */
SIUL2.MSCR[RLY_P_CTL].B.SSS = 0; /* Pin functionality as GPIO */
SIUL2.MSCR[RLY_P_CTL].B.OBE = 1; /* Output Buffer Enable on */
SIUL2.MSCR[RLY_P_CTL].B.IBE = 0; /* Input Buffer Enable off */
}
小注:
1)由以上部分示例代码可知,在进行GPIO初始化时,因使用其控制外围模块,因此主要是配置MSCR寄存器。
2)对于每个GPIO端口,都含有配置端口输入的IMCR寄存器及配置引脚输出的MSCR寄存器,在进行IMCR或MSCR寄存器位的配置时,需要用序号标注使用的是哪个端口的相关寄存器,如上述代码SIUL2.MSCR[WP_EN].B.SSS中的MSCR[WP_EN],此处WP_EN为宏定义(#define WP_EN 83),代表数字83,即代表83引脚的端口寄存器。
3)每个外部引脚具有多路复用功能,当引脚用作输出时,具体用作哪个功能是根据MSCR寄存器中的SSS位的配置决定的,如SIUL2.MSCR[WP_EN].B.SSS = 0;即当SSS位为0000时用作GPIO口。
4)在选择完引脚功能后需要通过MSCR寄存器的OBE位对输入/输出引脚缓冲进行使能,如SIUL2.MSCR[WP_EN].B.OBE = 1。