ZHCSYC2A May 2025 – September 2025 TXE8116-Q1 , TXE8124-Q1
ADVANCE INFORMATION
第二個(gè)字節(jié)的 LSB 會(huì)啟用多端口功能。當(dāng)該位為 1 時(shí),數(shù)據(jù)字節(jié)的每個(gè)位對(duì)應(yīng)各個(gè)端口。所以,LSB 位 B0 對(duì)應(yīng) P0 端口,B1 對(duì)應(yīng) P1 端口,B2 對(duì)應(yīng) P2 端口。使用多端口編程時(shí),特定端口中的所有 I/O 都將具有相同的配置。
例如,要將 P1 中的所有 I/O 設(shè)置為 1,控制器可以將 GPIO 方向配置為輸出,然后設(shè)置 P1 端口。
以下是此命令在控制器端的示例代碼:
// 定義 SPI 寄存器地址
#define REGISTER_CMD_BYTE 0x4 // 方向配置寄存器的寄存器命令字節(jié)
#define REGISTER_CMD_OUTPUT 0x3 // 輸出端口寄存器的寄存器命令字節(jié)
#define DATA_BITS 0x2 // 將 B1 設(shè)置為 1,將 B0 設(shè)置為 0 以設(shè)置 P1 端口
#define READ_WRITE_BIT 0 // 0 表示寫入操作,1 表示讀取操作
// 用于將 24 位 SPI 幀發(fā)送到 I/O 擴(kuò)展器(MSB 優(yōu)先)的函數(shù)
void SPI_Send(uint32_t data) {
// 使用硬件 SPI 外設(shè)逐位發(fā)送 24 位數(shù)據(jù)(MSB 優(yōu)先)
for (int i = 23; i >= 0; i--) {
SPI_Transmit((data >> i) & 0x01); // 首先移出 MSB
}
}
// 用于將多端口命令發(fā)送到 SPI I/O 擴(kuò)展器的函數(shù)
void SPI_Multi_Port_Dir(void) {
uint32_t frame = 0;
// 設(shè)置讀取/寫入位(位 23)
frame |= (READ_WRITE_BIT << 23);
// 設(shè)置寄存器地址(位 20-16)
frame |= (REGISTER_CMD_BYTE << 16);
// 設(shè)置數(shù)據(jù)位(位 7-0)
frame |= (DATA_BITS & 0xFF); // 確保我們僅使用低 8 位
// 將 CS 拉至低電平以選擇目標(biāo)器件
CS_LOW();
// 發(fā)送構(gòu)建的 SPI 幀(MSB 優(yōu)先)
SPI_Send(frame);
// 將 CS 拉至高電平以在傳輸后取消選擇器件
CS_HIGH();
}
void SPI_Multi_Port_Output(void) {
uint32_t frame = 0;
// 設(shè)置讀取/寫入位(位 23)
frame |= (READ_WRITE_BIT << 23);
// 設(shè)置寄存器地址(位 20-16)
frame |= (REGISTER_CMD_OUTPUT << 16);
// 設(shè)置數(shù)據(jù)位(位 7-0)
frame |= (DATA_BITS & 0xFF); // 確保我們僅使用低 8 位
// 將 CS 拉至低電平以選擇目標(biāo)器件
CS_LOW();
// 發(fā)送構(gòu)建的 SPI 幀(MSB 優(yōu)先)
SPI_Send(frame);
// 將 CS 拉至高電平以在傳輸后取消選擇器件
CS_HIGH();
}