API GUIDE / SPI / LL

G32S10 SPI LL 接口

LL 层接口:重要边界:

1. 分层关系与文件组织

APPLICATION  SPI Middleware / Advanced Driver  总线抽象、设备访问或直接使用 HAL
↓
PIN CONTROL  GPIO pinmux  选择 SPI 信号引脚与复用功能
INTERRUPT  SoC IRQ request / routing  把 SPI 中断接入统一中断分发
↓  平台资源就绪后进入 SPI 数据通路
HAL  HAL SPI  控制、FIFO、IRQ 源与 DMA 请求语义
↓
LL  LL SPI  寄存器访问与字段级控制
↓
HARDWARE REGISTERS  SPI0 / SPI1 Registers  实例地址、寄存器布局与位域定义
层次负责内容不负责内容
Platform/ApplicationGPIO pinmux、控制器选择、SoC IRQ 申请和路由SPI 寄存器细节和 HAL 内部状态
HAL SPICPM module clock/gate、参数校验、寄存器组合、FIFO、状态、控制器 IRQ source、DMA request 语义和 callback 分发SoC im_irq_request()、板级 pinmux、完整传输状态机和 timeout
LL SPI寄存器位级读写参数保护、软件状态、传输流程和并发保护

重要边界:

  • HAL 只记录 TX underrun 和 RX overrun 等硬件错误,不表达完整传输的 busy、timeout 或完成状态机。

2. 硬件能力与资源模型

2.1 寄存器映射

SDK 寄存器偏移主要用途
SSIDR0x0000TX/RX FIFO 数据寄存器
SSICR00x0004使能、IRQ、endian、loopback、接收和 FIFO flush
SSICR10x0008协议、阈值、帧长、CPHA/CPOL、interval 和 CS 时序
SSISR0x000CFIFO 数量、状态、错误和 END
SSIITR0x0010interval 计数时钟和间隔时间
SSIICR0x0014两次 interval 之间的连续帧数组编码
SSIGR0x0018串行时钟分频 CGV
SSIRCNT0x001C接收帧计数
SSITEN0x0020surplus 功能使能
SSITLOAD0x0024surplus 计数装载/复位
SSITCNT0x0028surplus 计数值

3. LL 接口与寄存器约定

3.1 LL 使用边界

LL 函数全部为 static inline,直接读写寄存器:

  • 不检查 spix 是否有效。

  • 不检查字段范围。

  • 不维护 HAL 配置快照。

  • 不提供并发保护。

  • 调用方必须理解寄存器的 write-one、write-zero、auto-clear 和 level 状态语义。

普通应用不应绕过 HAL 直接使用 LL。

3.2 数据、使能和 IRQ helper

功能LL 接口
数据 FIFOll_spi_write_data、ll_spi_read_data
END IRQll_spi_enable_end_intr、ll_spi_disable_end_intr、ll_spi_get_end_intr_status
控制器ll_spi_enable、ll_spi_disable、ll_spi_is_enabled
TX threshold IRQll_spi_enable_tie、ll_spi_disable_tie、ll_spi_tie_is_enabled
RX threshold IRQll_spi_enable_rie、ll_spi_disable_rie、ll_spi_rie_is_enabled
TX error IRQll_spi_enable_teie、ll_spi_disable_teie、ll_spi_teie_is_enabled
RX error IRQll_spi_enable_reie、ll_spi_disable_reie、ll_spi_reie_is_enabled

3.3 SSICR0 helper

功能LL 接口
TX endianll_spi_set_txendian、ll_spi_get_txendian
RX endianll_spi_set_rxendian、ll_spi_get_rxendian
Loopbackll_spi_enable_loop、ll_spi_disable_loop、ll_spi_get_loop_status
Receive finishll_spi_enable_rfine、ll_spi_disable_rfine、ll_spi_rfine_is_enabled、ll_spi_enable_rfinc、ll_spi_disable_rfinc、ll_spi_get_rfinc_status、ll_spi_get_receive_finish_condition
Error auto clear/runll_spi_enable_eaclrun、ll_spi_disable_eaclrun、ll_spi_eaclrun_is_enabled
Hardware CS selectll_spi_set_fsel、ll_spi_get_fsel_selection
Receive count enablell_spi_enable_rcnt、ll_spi_disable_rcnt、ll_spi_rcnt_is_enabled
TX FIFO empty modell_spi_set_new_tfmode、ll_spi_set_old_tfmode、ll_spi_get_tfmode_status
FIFO flushll_spi_set_tflush、ll_spi_set_rflush
Receive enablell_spi_enable_receive、ll_spi_disable_receive、ll_spi_get_receive_status

3.4 SSICR1 helper

功能LL 接口
CS active levelll_spi_set_frmhl、ll_spi_get_frmhl
Frame timingll_spi_set_tfvck、ll_spi_get_tfvck、ll_spi_set_tckfi、ll_spi_get_tckfi
GPC mode/levelll_spi_set_gpc_special、ll_spi_set_gpc_normal、ll_spi_get_gpc_status、ll_spi_set_gpc_high、ll_spi_set_gpc_low、ll_spi_get_gpc_level
Intervalll_spi_enable_itfrm、ll_spi_disable_itfrm、ll_spi_get_itfrm_status
Continue on underrunll_spi_enable_unfin、ll_spi_disable_unfin、ll_spi_get_unfin_status
Protocolll_spi_set_fmat、ll_spi_get_fmat
Thresholdll_spi_set_ttrg、ll_spi_get_ttrg、ll_spi_set_rtrg、ll_spi_get_rtrg
Microwire commandll_spi_set_mcom、ll_spi_get_mcom
Frame lengthll_spi_set_flen、ll_spi_get_flen
CPHA/CPOLll_spi_set_pha_value、ll_spi_get_pha_value、ll_spi_set_pol_value、ll_spi_get_pol_value

3.5 SSISR helper

功能LL 接口
ENDll_spi_clear_end、ll_spi_get_end_flag
DMA/request 状态ll_spi_get_treqn_dma_status、ll_spi_get_treqn_status、ll_spi_get_tsurplus_status、ll_spi_get_rreqn_dma_status、ll_spi_get_rreqn_status、ll_spi_get_rsurplus_status
FIFO countll_spi_get_tfifo_num、ll_spi_get_rfifo_num
Raw statusll_spi_status_raw_get
Busy/FIFOll_spi_is_busy、ll_spi_is_tx_fifo_full、ll_spi_is_rx_fifo_empty
Threshold levelll_spi_is_tfhe、ll_spi_is_rfhf
TX underrunll_spi_is_tundr、ll_spi_clear_tundr
RX overrunll_spi_is_rover、ll_spi_clear_rover

3.6 Interval、clock 和 count helper

寄存器LL 接口
SSIITRll_spi_set_cntclk、ll_spi_get_cntclk_selection、ll_spi_set_ivltm、ll_spi_get_ivltm
SSIICRll_spi_set_icc、ll_spi_get_icc
SSIGRll_spi_set_cgv、ll_spi_get_cgv
SSIRCNTll_spi_set_rcnt、ll_spi_get_rcnt

ICC 是编码值,实际两次 interval 之间连续传输帧数为 ICC + 1。

3.7 Surplus helper

功能LL 接口
Enablell_spi_enable_sen_rff、ll_spi_disable_sen_rff、ll_spi_sen_rff_is_enabled、ll_spi_enable_sen_tff、ll_spi_disable_sen_tff、ll_spi_sen_tff_is_enabled
Load/resetll_spi_reset_sld_rff、ll_spi_reset_sld_tff
Countll_spi_set_snum、ll_spi_get_snum、ll_spi_set_tnum、ll_spi_get_tnum

当前 HAL 普通接口不使用 surplus 功能;这些 LL 接口供专用场景使用。