ZHCAF60 February 2025 MSPM0G3507
所有可配置参数都在 user_define.h 中定义,如 表 3-3 中所列。
对于 SPI,此示例同时支持透明传输和协议传输,即通过定义 SPI_TRANSPARENT 或 SPI_PROTOCOL 进行切换。
在透明传输中,用户可以配置 SPI 从机的超时,以检测一条 SPI 消息接收完成。用户还可以为从 SPI 从机到 SPI 主机的消息配置默认数据长度 (SPI_TRANSPARENT_LENGTH)。表 3-2 列出了在不同模式下接收或发送的字节数。
在协议传输中,用户可以为不同格式配置 ID 长度。请注意有一个固定的 2 字节标头 (0x55 0xAA) 和一个字节的数据长度。若要更详细地修改格式,用户可以直接修改代码。
#define SPI_TRANSPARENT
#ifdef SPI_TRANSPARENT
/* The format of SPI:
* Transparent transmission - Data1 Data2 ...*/
/* data length for SPI master receiving or SPI slave transmitting*/
#define SPI_TRANSPARENT_LENGTH (8) //need be <= TRANSMIT_DATA_LENGTH
#define SPI_TIMEOUT (0x4000) //timeout 250ms
#else
/* The format of SPI:
* if SPI_ID_LENGTH = 4, format is 55 AA ID1 ID2 ID3 ID4 Length Data1 Data2 ...
* if SPI_ID_LENGTH = 1, format is 55 AA ID Length Data1 Data2 ...
* if SPI_ID_LENGTH = 0, format is 55 AA Length Data1 Data2 ...*/
//#define SPI_ID_LENGTH (0)
//#define SPI_ID_LENGTH (1)
#define SPI_ID_LENGTH (4)
#endif
| 参数 | SPI 接口:主机 | SPI 接口:从器件 | ||
|---|---|---|---|---|
| 接收到多少字节? | 发送了多少字节? | 接收到多少字节? | 发送了多少字节? | |
| 协议传输 | (2+SPI_ID_LENGT+1+Length) 字节 | (2+SPI_ID_LENGT+1+Length) 字节 | (2+SPI_ID_LENGT+1+Length) 字节 | (2+SPI_ID_LENGT+1+Length) 字节 |
| 透明传输 | (SPI_TRANSPARENT_LENGTH) 字节 | (Length) 字节 | 超时用于标识消息结束 | (SPI_TRANSPARENT_LENGTH) 字节 |
对于 CAN,CAN 帧中包含 ID 或数据长度。用户可以通过更改 CAN_ID_LENGTH(默认值为 0)来在数据区域中添加另一个 ID。
/* The format of CAN:
* if CAN_ID_LENGTH = 4, format is ID1 ID2 ID3 ID4 Data1 Data2 ...
* if CAN_ID_LENGTH = 1, format is ID Data1 Data2 ...
* if CAN_ID_LENGTH = 0, format is Data1 Data2 ...*/
#define CAN_ID_LENGTH (0)
//#define CAN_ID_LENGTH (1)
//#define CAN_ID_LENGTH (4)
| 参数 | 可选值 | 说明 |
|---|---|---|
| #define SPI_TRANSPARENT | 定义/未定义 | 启用 SPI 透明传输。 |
| #define SPI_PROTOCOL | 定义/未定义 | 启用 SPI 协议传输。 |
| #defineSPI_TRANSPARENT_LENGTH (8) | SPI 从机到 SPI 主机的消息的默认数据长度。仅在定义了 SPI_TRANSPARENT 时可用。在本例中,默认值为八个字节。 | |
| #define SPI_TIMEOUT (0x4000) | 超时 = SPI_TIMEOUT/32768 s | 超时用于指示一条 SPI 消息完成接收。仅在定义了 SPI_TRANSPARENT 时可用。在本例中,默认值为 250ms。 |
| #define SPI_ID_LENGTH (4) | 0/1/4 | 可选 SPI ID 长度,与协议中的 ID 区域相关。仅在定义了 SPI_PROTOCOL 时可用。在本例中,默认值为四个字节。 |
| #define CAN_ID_LENGTH (0) | 0/1/4 | 可选 CAN ID 长度,与协议中的 ID 区域相关。在本例中,默认值为 0 字节 |
| #define TRANSMIT_DATA_LENGTH (12) | <=64 | 数据区域的大小。如果接收到的消息包含的数据多于此值,会导致数据丢失 |
| #define C2S_FIFO_SIZE (8) | CAN 到 SPI FIFO 的大小。请注意 SRAM 的使用量。 | |
| #define S2C_FIFO_SIZE (8) | SPI 到 CAN FIFO 的大小。请注意 SRAM 的使用量。 | |
| #define DEFAULT_SPI_ORIGIN_ID (0x00) | SPI 原始 ID 的默认值 | |
| #define DEFAULT_SPI_DESTINATION_ID (0x00) | SPI 目标 ID 的默认值 | |
| #define DEFAULT_CAN_ORIGIN_ID (0x00) | CAN 原始 ID 的默认值 | |
| #define DEFAULT_CAN_DESTINATION_ID (0x00) | CAN 目标 ID 的默认值 |