ZHCSYC2A May   2025  – September 2025 TXE8116-Q1 , TXE8124-Q1

ADVANCE INFORMATION  

  1.   1
  2. 特性
  3. 应用
  4. 说明
  5. 引脚配置和功能
  6. 规格
    1. 5.1 绝对最大额定值
    2. 5.2 ESD 等级
    3. 5.3 建议运行条件
    4. 5.4 热性能信息
    5. 5.5 电气特性
    6. 5.6 时序要求
    7. 5.7 SPI 总线时序要求
    8. 5.8 开关特性
  7. 参数测量信息
  8. 详细说明
    1. 7.1 概述
    2. 7.2 功能方框图
    3. 7.3 特性说明
      1. 7.3.1 I/O 端口
      2. 7.3.2 中断输出 (INT)
      3. 7.3.3 复位输入 (RESET)
      4. 7.3.4 失效防护模式
      5. 7.3.5 软件复位广播
      6. 7.3.6 突发模式
      7. 7.3.7 菊花链
      8. 7.3.8 多端口
    4. 7.4 器件功能模式
      1. 7.4.1 上电复位
    5. 7.5 编程
      1. 7.5.1 SPI 接口
      2. 7.5.2 SPI 数据格式
      3. 7.5.3 写入
      4. 7.5.4 读取
    6. 7.6 寄存器映射
      1. 7.6.1 控制寄存器:读取/写入与功能地址 (B23 - B16)
      2. 7.6.2 控制寄存器:端口选择与多端口 (B15 - B8)
      3. 7.6.3 寄存器说明
  9. 应用和实施
    1. 8.1 应用信息
    2. 8.2 电源相关建议
      1. 8.2.1 上电复位要求
    3. 8.3 布局
      1. 8.3.1 布局指南
      2. 8.3.2 布局示例
  10. 器件和文档支持
    1. 9.1 接收文档更新通知
    2. 9.2 支持资源
    3. 9.3 商标
    4. 9.4 静电放电警告
    5. 9.5 术语表
  11. 10修订历史记录
  12. 11机械、封装和可订购信息

多端口

第二个字节的 LSB 会启用多端口功能。当该位为 1 时,数据字节的每个位对应各个端口。所以,LSB 位 B0 对应 P0 端口,B1 对应 P1 端口,B2 对应 P2 端口。使用多端口编程时,特定端口中的所有 I/O 都将具有相同的配置。

例如,要将 P1 中的所有 I/O 设置为 1,控制器可以将 GPIO 方向配置为输出,然后设置 P1 端口。

以下是此命令在控制器端的示例代码:

// 定义 SPI 寄存器地址

#define REGISTER_CMD_BYTE 0x4 // 方向配置寄存器的寄存器命令字节

#define REGISTER_CMD_OUTPUT 0x3 // 输出端口寄存器的寄存器命令字节

#define DATA_BITS 0x2 // 将 B1 设置为 1,将 B0 设置为 0 以设置 P1 端口

#define READ_WRITE_BIT 0 // 0 表示写入操作,1 表示读取操作

// 用于将 24 位 SPI 帧发送到 I/O 扩展器(MSB 优先)的函数

void SPI_Send(uint32_t data) {

    // 使用硬件 SPI 外设逐位发送 24 位数据(MSB 优先)

    for (int i = 23; i >= 0; i--) {

        SPI_Transmit((data >> i) & 0x01); // 首先移出 MSB

    }

}

// 用于将多端口命令发送到 SPI I/O 扩展器的函数

void SPI_Multi_Port_Dir(void) {

    uint32_t frame = 0;

    // 设置读取/写入位(位 23)

    frame |= (READ_WRITE_BIT << 23);

    // 设置寄存器地址(位 20-16)

    frame |= (REGISTER_CMD_BYTE << 16);

    // 设置数据位(位 7-0)

    frame |= (DATA_BITS & 0xFF); // 确保我们仅使用低 8 位

    // 将 CS 拉至低电平以选择目标器件

    CS_LOW();

    // 发送构建的 SPI 帧(MSB 优先)

    SPI_Send(frame);

    // 将 CS 拉至高电平以在传输后取消选择器件

    CS_HIGH();

}

void SPI_Multi_Port_Output(void) {

    uint32_t frame = 0;

    // 设置读取/写入位(位 23)

    frame |= (READ_WRITE_BIT << 23);

    // 设置寄存器地址(位 20-16)

    frame |= (REGISTER_CMD_OUTPUT << 16);

    // 设置数据位(位 7-0)

    frame |= (DATA_BITS & 0xFF); // 确保我们仅使用低 8 位

    // 将 CS 拉至低电平以选择目标器件

    CS_LOW();

    // 发送构建的 SPI 帧(MSB 优先)

    SPI_Send(frame);

    // 将 CS 拉至高电平以在传输后取消选择器件

    CS_HIGH();

}