API GUIDE / CAN / LL

G32S10 CAN LL 接口

LL 层接口:控制器仅提供一个 CAN 侧 DMA mode bit:

1. DMA 寄存器窗口

控制器仅提供一个 CAN 侧 DMA mode bit:


request,其目标/源地址通过以下接口获得:


HAL 不申请 DMA 通道、不创建 descriptor、不管理 cache coherency,也不决定内存中 如何表示帧流;这些职责属于更高层。

2. LL 接口

ll_can.h 提供无软件状态的寄存器级 inline helper。接口按照寄存器功能可分为:

分组代表接口作用
Mode/resetll_can_enter_reset()、ll_can_exit_reset()、ll_can_get_reset()控制和读取 RSTM,以及 FD、DMA、自恢复、自测、只听等 mode bit
Commandll_can_tx_req()、ll_can_abort_tx()、ll_can_release_rx_buf()发送、终止发送、释放 RX buffer 和清除 overrun
Statusll_can_get_stat_raw()、ll_can_get_tx_buffer_status()、ll_can_get_rx_buffer_status()读取原始或单项控制器状态
IRQll_can_set_all_irq_en()、ll_can_read_and_clear_irq_status()、ll_can_decode_irq_events()配置外设中断源并解码 pending event
Timingll_can_set_tseg1()、ll_can_set_tseg2()、ll_can_set_cancs()写入仲裁域和数据域原始时序字段
Filterll_can_set_filter_id()、ll_can_set_filter_mask()、ll_can_enable_filter()配置四组 acceptance filter
Errorll_can_get_err_raw()、ll_can_get_tx_err_cnt()、ll_can_reset_error_state()读取或复位控制器错误状态
Frame windowll_can_set_tx_*()、ll_can_get_rx_*()访问 TFIR/TXID/TXDATA 和 RFIR/RXID/RXDATA
DMA addressll_can_get_tx_frame_buffer_addr()、ll_can_get_rx_frame_buffer_addr()获得 TX/RX 寄存器窗口地址
Self-loop/securityll_can_set_sl_key()、ll_can_set_ip_reset()、ll_can_set_tx_off()访问 SL 安全寄存器字段

直接调用 LL 时,调用方必须自行保证:

  • CAN 模块时钟和 gate 已由平台层正确使能;

  • 所有仅允许在 RSTM 状态修改的字段均在 reset 中配置;

  • command、RX release、IRQ read-to-clear 等有副作用操作只执行一次且顺序正确;

  • 不与 HAL 或其他调用者并发访问同一控制器;

  • 自行实现参数检查、timeout、错误恢复和软件状态管理。

CANINT 的 pending bit 为 read-to-clear。ll_can_read_and_clear_irq_status() 应在一次 IRQ 处理中只调用一次,再把返回快照交给 ll_can_decode_irq_events(),不能为了逐项 判断而重复读取寄存器。

SL 中受保护的字段应在 RSTM=1 时访问,并先显式调用:

ll_can_set_sl_key(canx, 0x6U);

随后再调用 ll_can_set_ip_reset()、ll_can_set_tx_off() 或 self-loop 相关 helper。 LL 不会替调用方维护 unlock 生命周期。