API GUIDE / MAC / LL

G32S10 MAC LL 接口

LL 层接口:ll_mac.h 中全部接口均为 static inline,通过 mac_regs_t * 直接访问寄存器。

1. LL 接口规范

ll_mac.h 中全部接口均为 static inline,通过 mac_regs_t * 直接访问寄存器。LL 层不检查 macx 是否为 NULL,不维护软件状态、不缓存寄存器值,不裁剪入参位域;有读副作用的寄存器(如 DMA_MFOCR)按硬件语义执行。

1.1 实例、版本与能力

接口原型参数返回说明/副作用
bool ll_mac_is_instance(const mac_regs_t *macx)macx:寄存器块指针bool仅比较 macx == MAC,不解引用
uint32_t ll_mac_get_version(const mac_regs_t *macx)macx:有效实例版本寄存器值读 VR,无副作用
uint32_t ll_mac_get_hw_feature(const mac_regs_t *macx)macx:有效实例HWFR 值读 HWFR,无副作用

1.2 MAC 配置、过滤、流控与中断 mask

接口原型参数返回说明/副作用
uint32_t ll_mac_get_config(const mac_regs_t *macx)macx:有效实例MAC_CR 值读 CR
void ll_mac_set_config_bits(mac_regs_t *macx, uint32_t configs)configs:MAC_CR_* 位组合无读改写 `CR
void ll_mac_clear_config_bits(mac_regs_t *macx, uint32_t configs)configs:MAC_CR_* 位组合无读改写 CR &= ~configs,不裁剪
void ll_mac_set_frame_filter(mac_regs_t *macx, uint32_t frame_filter)frame_filter:MAC_FFR_* 位组合无整寄存器写 FFR
uint32_t ll_mac_get_frame_filter(const mac_regs_t *macx)macx:有效实例MAC_FFR 值读 FFR
void ll_mac_set_flow_control(mac_regs_t *macx, uint32_t flow_control)flow_control:MAC_FCR_* 位组合无整寄存器写 FCR
uint32_t ll_mac_get_flow_control(const mac_regs_t *macx)macx:有效实例MAC_FCR 值读 FCR
uint32_t ll_mac_get_interrupt_status(const mac_regs_t *macx)macx:有效实例MAC_ISR 值读只读寄存器 ISR
void ll_mac_set_interrupt_mask(mac_regs_t *macx, uint32_t mask)mask:MAC_IMR_* 位组合无整寄存器写 IMR
uint32_t ll_mac_get_interrupt_mask(const mac_regs_t *macx)macx:有效实例MAC_IMR 值读 IMR

补充说明:MAC_ISR 读操作可能带硬件清除语义,LL 不做额外处理;LL 没有提供 MAC_IMR 的按位 set/clear 接口,需要调用方自己读改写。

1.3 MAC 地址寄存器

接口原型参数返回说明/副作用
void ll_mac_set_address0_high(mac_regs_t *macx, uint32_t addr_high)addr_high:ADDRHI[15:0] 值无读改写,只更新 MAC_A0HR.ADDRHI[15:0],保留 AE 及其它位
void ll_mac_set_address0_low(mac_regs_t *macx, uint32_t addr_low)addr_low:地址低 32 位无整寄存器写 MAC_A0LR
uint32_t ll_mac_get_address0_high(const mac_regs_t *macx)macx:有效实例MAC_A0HR 值读高寄存器,包含 AE
uint32_t ll_mac_get_address0_low(const mac_regs_t *macx)macx:有效实例MAC_A0LR 值读低寄存器
void ll_mac_set_address1_high(mac_regs_t *macx, uint32_t addr_high)addr_high:完整 MAC_A1HR 值无整寄存器写入,AE、SA、MBC、ADDRHI 全部由调用方提供
void ll_mac_set_address1_low(mac_regs_t *macx, uint32_t addr_low)addr_low:地址低 32 位无整寄存器写 MAC_A1LR
uint32_t ll_mac_get_address1_high(const mac_regs_t *macx)macx:有效实例MAC_A1HR 值读高寄存器
uint32_t ll_mac_get_address1_low(const mac_regs_t *macx)macx:有效实例MAC_A1LR 值读低寄存器

1.4 MDIO 接口

接口原型参数返回说明/副作用
bool ll_mac_mdio_is_busy(const mac_regs_t *macx)macx:有效实例bool读 GMII_AR.GB,1 表示事务进行中
void ll_mac_mdio_set_data(mac_regs_t *macx, uint16_t data)data:16 位寄存器值无写 GMII_DR 低 16 位
uint16_t ll_mac_mdio_get_data(const mac_regs_t *macx)macx:有效实例低 16 位数据读 GMII_DR 并掩码
void ll_mac_mdio_start(mac_regs_t *macx, uint32_t gmii_ar_value)gmii_ar_value:完整 GMII_AR 值无整寄存器写 GMII_AR,由调用方置 GB(可含 GW)

补充说明:ll_mac_mdio_start() 不做参数检查,PA/GR/CR/GW/GB 必须由调用方拼好;事务是否完成只能通过 ll_mac_mdio_is_busy() 或中断状态间接判断。

1.5 DMA 总线模式与描述符基地址

接口原型参数返回说明/副作用
void ll_mac_dma_set_bus_mode(mac_regs_t *macx, uint32_t bus_mode)bus_mode:完整 DMA_BMR 值无整寄存器写 DMA_BMR
uint32_t ll_mac_dma_get_bus_mode(const mac_regs_t *macx)macx:有效实例DMA_BMR 值读 DMA_BMR
void ll_mac_dma_set_bus_mode_bits(mac_regs_t *macx, uint32_t bmb)bmb:MAC_DMA_BMR_* 位组合无读改写 `DMA_BMR
void ll_mac_dma_clear_bus_mode_bits(mac_regs_t *macx, uint32_t bmb)bmb:MAC_DMA_BMR_* 位组合无读改写 DMA_BMR &= ~bmb
void ll_mac_dma_set_rx_desc_base(mac_regs_t *macx, uint32_t rx_desc_addr)rx_desc_addr:32 位 RX 描述符基地址无写 DMA_RDLAR
void ll_mac_dma_set_tx_desc_base(mac_regs_t *macx, uint32_t tx_desc_addr)tx_desc_addr:32 位 TX 描述符基地址无写 DMA_TDLAR
uint32_t ll_mac_dma_get_rx_desc_base(const mac_regs_t *macx)macx:有效实例DMA_RDLAR 值读 DMA_RDLAR
uint32_t ll_mac_dma_get_tx_desc_base(const mac_regs_t *macx)macx:有效实例DMA_TDLAR 值读 DMA_TDLAR

说明:两个描述符基地址寄存器都只保存 32 位地址,超出 32 位的系统地址不能直接用于 DMA。

1.6 DMA 状态、操作模式与中断使能

接口原型参数返回说明/副作用
uint32_t ll_mac_dma_get_status(const mac_regs_t *macx)macx:有效实例DMA_SR 值读 DMA_SR,不清除
void ll_mac_dma_clear_status(mac_regs_t *macx, uint32_t dma_status)dma_status:要清除的状态位无写 1 清除 DMA_SR,未置位不受影响
void ll_mac_dma_set_operation_mode(mac_regs_t *macx, uint32_t operation_mode)operation_mode:完整 DMA_OMR 值无整寄存器写 DMA_OMR
uint32_t ll_mac_dma_get_operation_mode(const mac_regs_t *macx)macx:有效实例DMA_OMR 值读 DMA_OMR
void ll_mac_dma_set_operation_mode_bits(mac_regs_t *macx, uint32_t omb)omb:MAC_DMA_OMR_* 位组合无读改写 `DMA_OMR
void ll_mac_dma_clear_operation_mode_bits(mac_regs_t *macx, uint32_t omb)omb:MAC_DMA_OMR_* 位组合无读改写 DMA_OMR &= ~omb
void ll_mac_dma_set_interrupt_enable(mac_regs_t *macx, uint32_t interrupt)interrupt:MAC_DMA_IER_* 位组合无整寄存器写 DMA_IER
uint32_t ll_mac_dma_get_interrupt_enable(const mac_regs_t *macx)macx:有效实例DMA_IER 值读 DMA_IER

说明:ll_mac_dma_clear_status() 只能清除 MAC_DMA_SR_CLEARABLE_MASK(0x0001E7FF)覆盖的位,调用方应只清除自己已处理的位。

1.7 DMA poll demand、RX watchdog、计数与诊断

接口原型参数返回说明/副作用
void ll_mac_dma_poll_tx(mac_regs_t *macx)macx:有效实例无写 DMA_TPDR = 1,通知 DMA 重新检查 TX 描述符
void ll_mac_dma_poll_rx(mac_regs_t *macx)macx:有效实例无写 DMA_RPDR = 1,通知 DMA 重新检查 RX 描述符
void ll_mac_dma_set_rx_watchdog(mac_regs_t *macx, uint32_t rx_watchdog)rx_watchdog:RIWT[7:0] 值无整寄存器写 DMA_RIWTR
uint32_t ll_mac_dma_get_missed_frame_counter(const mac_regs_t *macx)macx:有效实例读取前的 DMA_MFOCR 值读清寄存器:读取会清除 counter 字段及其 overflow 标志
uint32_t ll_mac_dma_get_ahb_state(const mac_regs_t *macx)macx:有效实例DMA_AHBSR 值仅用于诊断,不能作为稳定的 DMA 状态判决依据

补充说明:poll demand 只是“重新查描述符”的门铃,不代表发送/接收已完成,完成状态必须通过描述符 OWN 位或 DMA_SR 判断;DMA_MFOCR 的读清副作用意味着只在需要统计/调试时读取,且每次读取都会丢失上一次计数;DMA_AHBSR 是瞬时 AHB master 状态快照,AXWHSTS 会随总线活动快速变化。

1.8 DMA 当前指针

接口原型参数返回说明/副作用
uint32_t ll_mac_dma_get_current_tx_desc(const mac_regs_t *macx)macx:有效实例DMA_CHTDR 值读 DMA 当前使用的 TX 描述符地址
uint32_t ll_mac_dma_get_current_rx_desc(const mac_regs_t *macx)macx:有效实例DMA_CHRDR 值读 DMA 当前使用的 RX 描述符地址
uint32_t ll_mac_dma_get_current_tx_buffer(const mac_regs_t *macx)macx:有效实例DMA_CHTBAR 值读 DMA 当前使用的 TX 缓冲区地址
uint32_t ll_mac_dma_get_current_rx_buffer(const mac_regs_t *macx)macx:有效实例DMA_CHRBAR 值读 DMA 当前使用的 RX 缓冲区地址

说明:当前指针寄存器是只读诊断信息,会随 DMA 运行变化,不能代替描述符 OWN 位的完成判断。

1.9 LL 使用约定

  • 整寄存器写接口(ll_mac_set_frame_filter、ll_mac_set_flow_control、ll_mac_set_interrupt_mask、ll_mac_dma_set_bus_mode、ll_mac_dma_set_operation_mode、ll_mac_dma_set_interrupt_enable、ll_mac_dma_set_rx_watchdog、ll_mac_mdio_start)会覆盖寄存器全部位。

  • 有读清语义的寄存器:DMA_MFOCR;MAC_ISR 为只读寄存器,读操作是否带清除语义以硬件手册为准。

  • LL 不负责时钟、复位、cache 维护和中断注册。

2. 寄存器映射与位域约定

2.1 寄存器布局

偏移名称属性说明
0x0000MAC_CRRWMAC 配置寄存器
0x0004MAC_FFRRWMAC 帧过滤寄存器
0x0008MAC_HTHRRWHash table high
0x000CMAC_HTLRRWHash table low
0x0010GMII_ARRWMDIO 地址寄存器
0x0014GMII_DRRWMDIO 数据寄存器
0x0018MAC_FCRRW流控寄存器
0x001CMAC_VTRRWVLAN tag 寄存器
0x0020MAC_VRRO版本寄存器
0x0024MAC_DRRO调试寄存器
0x0030MAC_LPI_CSRRWLPI 控制/状态寄存器
0x0034MAC_LPI_TCRRWLPI 定时器控制寄存器
0x0038MAC_ISRROMAC 中断状态寄存器
0x003CMAC_IMRRWMAC 中断屏蔽寄存器
0x0040MAC_A0HRRWMAC 地址 0 高寄存器
0x0044MAC_A0LRRWMAC 地址 0 低寄存器
0x0048MAC_A1HRRWMAC 地址 1 高寄存器
0x004CMAC_A1LRRWMAC 地址 1 低寄存器
0x0700-0x0728时间戳控制/系统时间/目标时间/状态RW/RO共 11 个 32 位寄存器,LL 未封装
0x072C-0x0738PPS 控制、辅助时间戳、AV MAC 控制RW/ROLL 未封装
0x0760-0x0764PPS0 interval/widthRWLL 未封装
0x0780-0x0784PPS1 target timeRWLL 未封装
0x1000DMA_BMRRWDMA 总线模式寄存器
0x1004DMA_TPDRRWDMA TX poll demand
0x1008DMA_RPDRRWDMA RX poll demand
0x100CDMA_RDLARRWDMA RX 描述符列表地址
0x1010DMA_TDLARRWDMA TX 描述符列表地址
0x1014DMA_SRRWDMA 状态寄存器
0x1018DMA_OMRRWDMA 操作模式寄存器
0x101CDMA_IERRWDMA 中断使能寄存器
0x1020DMA_MFOCRRO(读清)DMA missed frame/overflow 计数
0x1024DMA_RIWTRRWDMA RX 中断 watchdog 定时器
0x102CDMA_AHBSRRODMA AHB 状态寄存器
0x1048DMA_CHTDRRO当前 TX 描述符地址
0x104CDMA_CHRDRRO当前 RX 描述符地址
0x1050DMA_CHTBARRO当前 TX 缓冲区地址
0x1054DMA_CHRBARRO当前 RX 缓冲区地址
0x1058HWFRRO硬件能力寄存器

保留区间:0x0028-0x002C、0x0050-0x06FC、0x073C-0x075C、0x0768-0x077C、0x0788-0x0FFC、0x1028、0x1030-0x1044。

2.2 MAC_CR(0x0000)

位域Mask/Shift说明
SARC[30:28]MAC_CR_SARC_MASK(shift 28)源地址插入/替换控制(bit30 选择 MAC 地址 0/1 寄存器;bit29:28:0x=由输入信号控制,10=插入,11=替换)
TWOKPE[27]MAC_CR_TWOKPE_MASK支持 2 KB 以上帧(MTU > 1500 时 HAL 置位)
SFTERR[26]MAC_CR_SFTERR_MASKSMII 强制发送错误(置位时物理层强制正在传输的 SMII 帧发生发送错误;非 SMII 端口配置下保留)
CST[25]MAC_CR_CST_MASK剥离 EtherType 帧的 FCS
TC[24]MAC_CR_TC_MASK发送配置使能
WD[23]MAC_CR_WD_MASKWatchdog 禁止
JD[22]MAC_CR_JD_MASKJabber 禁止(HAL 初始化置位)
BE[21]MAC_CR_BE_MASK帧突发使能(HAL 初始化置位)
JE[20]MAC_CR_JE_MASKJabber 使能
IFG[19:17]MAC_CR_IFG_MASK(shift 17)帧间隔
DCRS[16]MAC_CR_DCRS_MASK忽略载波侦听
PS[15]MAC_CR_PS_MASK端口选择,1 为 MII,0 为 GMII
FES[14]MAC_CR_FES_MASK速率选择,MII 下 1 为 100 Mbps、0 为 10 Mbps
DO[13]MAC_CR_DO_MASK禁止接收自己发送的帧
LM[12]MAC_CR_LM_MASK内部 loopback
DM[11]MAC_CR_DM_MASK双工模式,1 为全双工
IPC[10]MAC_CR_IPC_MASKRX IP 校验和卸载
DR[9]MAC_CR_DR_MASK禁止重试(半双工下只发送一次,不自动重试)
LUD[8]MAC_CR_LUD_MASK链路 up/down 控制
ACS[7]MAC_CR_ACS_MASK自动剥离 pad/FCS(HAL 初始化置位)
DC[4]MAC_CR_DC_MASK延迟检查(Deferral Check,半双工下发送延迟超过 24,288 比特时间时终止帧并置过量延迟错误)
TE[3]MAC_CR_TE_MASK发送使能
RE[2]MAC_CR_RE_MASK接收使能
PRELEN[1:0]MAC_CR_PRELEN_MASK前导码长度

HAL 初始化置位组合:

#define MAC_CR_CORE_INIT_MASK   (MAC_CR_JD_MASK | MAC_CR_PS_MASK | MAC_CR_ACS_MASK | MAC_CR_BE_MASK)

2.3 MAC_FFR(0x0004)

位域Mask说明
RA[31]MAC_FFR_RA_MASK接收全部帧
DNTU[21]MAC_FFR_DNTU_MASK丢弃非 TCP/UDP 的 IP 帧(置位时只转发由 L4 过滤器处理的 TCP/UDP 帧)
IPFE[20]MAC_FFR_IPFE_MASK第 3/4 层(L3/L4)过滤使能(置位时丢弃不匹配已启用 L3/L4 过滤器的帧;未启用过滤器时该位无效)
VTFE[16]MAC_FFR_VTFE_MASKVLAN tag 过滤使能
HPF[10]MAC_FFR_HPF_MASKHash/perfect 过滤模式
SAF[9]MAC_FFR_SAF_MASK源地址过滤
SAIF[8]MAC_FFR_SAIF_MASKSA 过滤反相
PCF[7:6]MAC_FFR_PCF_MASK(shift 6)Pass control 过滤
DBF[5]MAC_FFR_DBF_MASK广播帧丢弃
PM[4]MAC_FFR_PM_MASK通过所有组播帧(Pass All Multicast)
DAIF[3]MAC_FFR_DAIF_MASKDA 过滤反相
HMC[2]MAC_FFR_HMC_MASKHash multicast
HUC[1]MAC_FFR_HUC_MASKHash unicast
PR[0]MAC_FFR_PR_MASKPromiscuous 模式

2.4 MAC_HTHR/MAC_HTLR、GMII_AR/GMII_DR

寄存器位域Mask/Shift说明
MAC_HTHRHTH[31:0]MAC_HTHR_HTH_MASKHash table high
MAC_HTLRHTL[31:0]MAC_HTLR_HTL_MASKHash table low
GMII_ARPA[15:11]MAC_GMII_AR_PA_MASK(shift 11)PHY 地址
GMII_ARGR[10:6]MAC_GMII_AR_GR_MASK(shift 6)PHY 寄存器地址
GMII_ARCR[5:2]MAC_GMII_AR_CR_MASK(shift 2)MDC 时钟范围
GMII_ARGW[1]MAC_GMII_AR_GW_MASK写事务标志
GMII_ARGB[0]MAC_GMII_AR_GB_MASK事务忙标志
GMII_DRGD[15:0]MAC_GMII_DR_GD_MASKMDIO 数据

说明:MAC_HTHR/MAC_HTLR 只有寄存器与位域定义,HAL/LL 未提供访问函数。

2.5 MAC_FCR(0x0018)与 MAC_VTR(0x001C)

寄存器位域Mask/Shift说明
MAC_FCRPT[31:16]MAC_FCR_PT_MASK(shift 16)Pause time
MAC_FCRDZPQ[7]MAC_FCR_DZPQ_MASK零 pause 请求禁止
MAC_FCRPLT[5:4]MAC_FCR_PLT_MASK(shift 4)Pause low threshold
MAC_FCRUP[3]MAC_FCR_UP_MASKUnicast pause 检测
MAC_FCRRFE[2]MAC_FCR_RFE_MASKRX 流控使能
MAC_FCRTFE[1]MAC_FCR_TFE_MASKTX 流控使能
MAC_FCRFCB_BPA[0]MAC_FCR_FCB_BPA_MASK流控 busy 处理
MAC_VTRVTHM[19]MAC_VTR_VTHM_MASKVLAN tag hash 匹配
MAC_VTRESVL[18]MAC_VTR_ESVL_MASK启用 S-VLAN(置位后 MAC 收发也将 S-VLAN(EtherType 0x88A8)帧视为有效 VLAN 标记帧)
MAC_VTRVTIM[17]MAC_VTR_VTIM_MASKVLAN tag 反相
MAC_VTRETV[16]MAC_VTR_ETV_MASK12 位 VLAN tag 使能
MAC_VTRVL[15:0]MAC_VTR_VL_MASKVLAN tag 值

说明:MAC_VTR 只有位域定义,HAL/LL 未提供 VLAN 配置函数。

2.6 MAC_ISR(0x0038)与 MAC_IMR(0x003C)

ISR 位IMR 位说明
MAC_ISR_LPIIS_MASK(bit 10)MAC_IMR_LPIIM_MASKLPI 中断
MAC_ISR_TSIS_MASK(bit 9)MAC_IMR_TSIM_MASK时间戳中断
MAC_ISR_MMCRXIPIS_MASK / MAC_ISR_MMCTXIS_MASK / MAC_ISR_MMCRXIS_MASK / MAC_ISR_MMCIS_MASK—MMC 中断(bit 7/6/5/4),HAL 无对应 mask
MAC_ISR_PMTIS_MASK(bit 3)MAC_IMR_PMTIM_MASKPMT 中断
MAC_ISR_PCSANCIS_MASK(bit 2)MAC_IMR_PCSANCIM_MASKPCS auto-negotiation 中断
MAC_ISR_PCSLCHGIS_MASK(bit 1)MAC_IMR_PCSLCHGIM_MASKPCS link 状态变化中断
MAC_ISR_RGSMIIS_MASK(bit 0)MAC_IMR_RGSMIIIM_MASKRGMII/SMII 中断

2.7 MAC 地址寄存器

寄存器位域Mask/Shift说明
MAC_A0HRAE[31]MAC_A0HR_AE_MASK地址 0 使能
MAC_A0HRADDRHI[15:0]MAC_A0HR_ADDRHI_MASK地址 0 高 16 位
MAC_A0LRADDRLO[31:0]MAC_A0LR_ADDRLO_MASK地址 0 低 32 位
MAC_A1HRAE[31]MAC_A1HR_AE_MASK地址 1 使能
MAC_A1HRSA[30]MAC_A1HR_SA_MASK源地址模式
MAC_A1HRMBC[29:24]MAC_A1HR_MBC_MASK(shift 24)Mask byte control
MAC_A1HRADDRHI[15:0]MAC_A1HR_ADDRHI_MASK地址 1 高 16 位
MAC_A1LRADDRLO[31:0]MAC_A1LR_ADDRLO_MASK地址 1 低 32 位

2.8 DMA_BMR(0x1000)

位域Mask/Shift说明
PRWG[29:28]MAC_DMA_BMR_PRWG_MASK(shift 28)通道优先级权重(DMA 通道轮询仲裁时通道 0 的权重:00=1、01=2、10=3、11=4)
TXPR[27]MAC_DMA_BMR_TXPR_MASKTX priority
MB[26]MAC_DMA_BMR_MB_MASKMixed burst(HAL 按配置置位)
AAL[25]MAC_DMA_BMR_AAL_MASKAddress-aligned beats
PBLX8[24]MAC_DMA_BMR_PBLX8_MASKPBL × 8
USP[23]MAC_DMA_BMR_USP_MASKUse separate PBL
RPBL[22:17]MAC_DMA_BMR_RPBL_MASK(shift 17)RX programmable burst length
FB[16]MAC_DMA_BMR_FB_MASKFixed burst(HAL 按配置置位)
PR[15:14]MAC_DMA_BMR_PR_MASK(shift 14)Priority ratio
PBL[13:8]MAC_DMA_BMR_PBL_MASK(shift 8)TX programmable burst length
ATDS[7]MAC_DMA_BMR_ATDS_MASKAlternate descriptor size
DSL[6:2]MAC_DMA_BMR_DSL_MASK(shift 2)Descriptor skip length
DA[1]MAC_DMA_BMR_DA_MASKDMA arbitration
SWR[0]MAC_DMA_BMR_SWR_MASK软件复位;HAL 初始化写入并等待其清零

2.9 DMA_TPDR/DMA_RPDR、DMA_RDLAR/DMA_TDLAR

寄存器位域Mask说明
DMA_TPDRTPD[31:0]MAC_DMA_TPDR_TPD_MASKTX poll demand,写任意值触发
DMA_RPDRRPD[31:0]MAC_DMA_RPDR_RPD_MASKRX poll demand,写任意值触发
DMA_RDLARRDESLA[31:0]MAC_DMA_RDLAR_RDESLA_MASKRX 描述符列表 32 位基地址
DMA_TDLARTDESLA[31:0]MAC_DMA_TDLAR_TDESLA_MASKTX 描述符列表 32 位基地址

说明:LL 的 ll_mac_dma_poll_tx()/ll_mac_dma_poll_rx() 固定写 1。

2.10 DMA_SR(0x1014)

位Mask说明
GLPII[30]MAC_DMA_SR_GLPII_MASKGLPII 中断
TTI[29]MAC_DMA_SR_TTI_MASKTX timestamp 中断
GPI[28]MAC_DMA_SR_GPI_MASKGPI 中断
GMI[27]MAC_DMA_SR_GMI_MASKGMI 中断
GLI[26]MAC_DMA_SR_GLI_MASKGLI 中断
EB[25:23]MAC_DMA_SR_EB_MASK(shift 23)总线错误类型(仅 FBI[13] 置位时有效:bit23 1=TX/0=RX;bit24 1=读/0=写;bit25 1=描述符/0=数据缓冲区访问;不触发中断)
TS[22:20]MAC_DMA_SR_TS_MASK(shift 20)TX 状态
RS[19:17]MAC_DMA_SR_RS_MASK(shift 17)RX 状态
NIS[16]MAC_DMA_SR_NIS_MASK正常中断汇总
AIS[15]MAC_DMA_SR_AIS_MASK异常中断汇总
ERI[14]MAC_DMA_SR_ERI_MASKEarly receive 中断
FBI[13]MAC_DMA_SR_FBI_MASKFatal bus 中断
ETI[10]MAC_DMA_SR_ETI_MASKEarly transmit 中断
RWT[9]MAC_DMA_SR_RWT_MASKRX watchdog 超时
RPS[8]MAC_DMA_SR_RPS_MASKRX 进程停止
RU[7]MAC_DMA_SR_RU_MASKRX 缓冲区不可用
RI[6]MAC_DMA_SR_RI_MASKRX 完成
UNF[5]MAC_DMA_SR_UNF_MASKTX underflow
OVF[4]MAC_DMA_SR_OVF_MASKRX overflow
TJT[3]MAC_DMA_SR_TJT_MASKTX jabber timeout
TU[2]MAC_DMA_SR_TU_MASKTX 缓冲区不可用
TPS[1]MAC_DMA_SR_TPS_MASKTX 进程停止
TI[0]MAC_DMA_SR_TI_MASKTX 完成

可清除位集合:

#define MAC_DMA_SR_CLEARABLE_MASK      ((uint32_t)0x0001E7FFU)

0x0001E7FF 覆盖 TI、TPS、TU、TJT、OVF、UNF、RI、RU、RPS、RWT、ETI、FBI、ERI、AIS、NIS,不包含 GLPII、TTI、GPI、GMI、GLI、EB、TS、RS。写 1 清除,写 0 无影响。

2.11 DMA_OMR(0x1018)

位域Mask/Shift说明
DT[26]MAC_DMA_OMR_DT_MASK禁止丢弃 TCP/IP 校验和错误帧
RSF[25]MAC_DMA_OMR_RSF_MASKRX store-and-forward(HAL 初始化置位)
DFF[24]MAC_DMA_OMR_DFF_MASK禁止 flush RX 帧
RFA_HIGH[23]MAC_DMA_OMR_RFA_HIGH_MASKRX FIFO 高水位扩展
RFD_HIGH[22]MAC_DMA_OMR_RFD_HIGH_MASKRX FIFO 低水位扩展
TSF[21]MAC_DMA_OMR_TSF_MASKTX store-and-forward(HAL 初始化置位)
FTF[20]MAC_DMA_OMR_FTF_MASKFlush TX FIFO
TTC[16:14]MAC_DMA_OMR_TTC_MASK(shift 14)TX threshold control
ST[13]MAC_DMA_OMR_ST_MASK启动/停止 TX DMA
RFD[12:11]MAC_DMA_OMR_RFD_MASK(shift 11)RX FIFO 低水位
RFA[10:9]MAC_DMA_OMR_RFA_MASK(shift 9)RX FIFO 高水位
EFC[8]MAC_DMA_OMR_EFC_MASK启用硬件流量控制(基于 Rx FIFO 填充水平产生流控信号)
FEF[7]MAC_DMA_OMR_FEF_MASK转发错误帧
FUF[6]MAC_DMA_OMR_FUF_MASK转发字节不足的好帧(置位时 Rx FIFO 转发无错误且长度 <64 字节的帧,含填充和 CRC)
RTC[4:3]MAC_DMA_OMR_RTC_MASK(shift 3)RX threshold control
OSF[2]MAC_DMA_OMR_OSF_MASK操作第二帧(HAL 初始化置位)
SR[1]MAC_DMA_OMR_SR_MASK启动/停止 RX DMA

辅助 mask:

#define MAC_DMA_OMR_TTC_CLEAR_MASK     ((uint32_t)0xFFFE3FFFU)
#define MAC_DMA_OMR_RTC_CLEAR_MASK     ((uint32_t)0xFFFFFFE7U)

HAL 初始化写入值:TSF | RSF | OSF;启动时追加 ST | SR,停止时清除 ST | SR。

2.12 DMA_IER(0x101C)

位Mask说明
NIE[16]MAC_DMA_IER_NIE_MASKNormal interrupt 汇总使能
AIE[15]MAC_DMA_IER_AIE_MASKAbnormal interrupt 汇总使能
ERE[14]MAC_DMA_IER_ERE_MASKEarly receive 中断使能
FBE[13]MAC_DMA_IER_FBE_MASKFatal bus 中断使能
ETE[10]MAC_DMA_IER_ETE_MASKEarly transmit 中断使能
RWE[9]MAC_DMA_IER_RWE_MASKRX watchdog 中断使能
RSE[8]MAC_DMA_IER_RSE_MASKRX 进程停止中断使能
RUE[7]MAC_DMA_IER_RUE_MASKRX 缓冲区不可用中断使能
RIE[6]MAC_DMA_IER_RIE_MASKRX 完成中断使能
UNE[5]MAC_DMA_IER_UNE_MASKTX underflow 中断使能
OVE[4]MAC_DMA_IER_OVE_MASKRX overflow 中断使能
TJE[3]MAC_DMA_IER_TJE_MASKTX jabber timeout 中断使能
TUE[2]MAC_DMA_IER_TUE_MASKTX 缓冲区不可用中断使能
TSE[1]MAC_DMA_IER_TSE_MASKTX 进程停止中断使能
TIE[0]MAC_DMA_IER_TIE_MASKTX 完成中断使能

HAL 使用的中断使能组合:

#define MAC_DMA_IER_NORMAL_IRQ_MASK      (MAC_DMA_IER_NIE_MASK | MAC_DMA_IER_RIE_MASK | MAC_DMA_IER_TIE_MASK)
#define MAC_DMA_IER_ABNORMAL_IRQ_MASK    (MAC_DMA_IER_AIE_MASK | MAC_DMA_IER_FBE_MASK | MAC_DMA_IER_UNE_MASK)

2.13 DMA_MFOCR、DMA_RIWTR、DMA_AHBSR 与当前指针

寄存器位域Mask/Shift说明
DMA_MFOCROVFCNTOVF[28]MAC_DMA_MFOCR_OVFCNTOVF_MASKOverflow 计数溢出标志
DMA_MFOCROVFFRMCNT[27:17]MAC_DMA_MFOCR_OVFFRMCNT_MASK(shift 17)Overflow 帧计数
DMA_MFOCRMISCNTOVF[16]MAC_DMA_MFOCR_MISCNTOVF_MASKMissed 计数溢出标志
DMA_MFOCRMISFRMCNT[15:0]MAC_DMA_MFOCR_MISFRMCNT_MASKMissed 帧计数
DMA_RIWTRRIWT[7:0]MAC_DMA_RIWTR_RIWT_MASKRX 中断 watchdog 定时值
DMA_AHBSRAXWHSTS[0]MAC_DMA_AHBSR_AXWHSTS_MASKAHB master 状态(诊断用)

说明:DMA_MFOCR 为读清寄存器,读取会清除计数与 overflow 标志。

寄存器位域Mask说明
DMA_CHTDRCURTDESAPTR[31:0]MAC_DMA_CHTDR_CURTDESAPTR_MASK当前 TX 描述符地址
DMA_CHRDRCURRDESAPTR[31:0]MAC_DMA_CHRDR_CURRDESAPTR_MASK当前 RX 描述符地址
DMA_CHTBARCURTBUFAPTR[31:0]MAC_DMA_CHTBAR_CURTBUFAPTR_MASK当前 TX 缓冲区地址
DMA_CHRBARCURRBUFAPTR[31:0]MAC_DMA_CHRBAR_CURRBUFAPTR_MASK当前 RX 缓冲区地址

2.14 HWFR(0x1058)

位域Mask/Shift说明
ACTPHYIF[30:28]MAC_HWFR_ACTPHYIF_MASK(shift 28)当前激活的 PHY 接口类型
SAVLANINS[27]MAC_HWFR_SAVLANINS_MASKSA/VLAN 插入能力
ENHDESSEL[24]MAC_HWFR_ENHDESSEL_MASKEnhanced descriptor 能力选择
TXCHCNT[23:22]MAC_HWFR_TXCHCNT_MASK(shift 22)TX 通道数编码
RXCHCNT[21:20]MAC_HWFR_RXCHCNT_MASK(shift 20)RX 通道数编码
RXTYP2COE[18] / RXTYP1COE[17]MAC_HWFR_RXTYP2COE_MASK / MAC_HWFR_RXTYP1COE_MASKRX 校验和卸载能力
TXCOESEL[16]MAC_HWFR_TXCOESEL_MASKTX 校验和卸载选择
TSVER2SEL[13] / TSVER1SEL[12]MAC_HWFR_TSVER2SEL_MASK / MAC_HWFR_TSVER1SEL_MASK时间戳版本 2/1
MMCSEL[11]MAC_HWFR_MMCSEL_MASKMMC 功能
SMASEL[8] / PCSSEL[6] / HDSEL[2]MAC_HWFR_SMASEL_MASK / MAC_HWFR_PCSSEL_MASK / MAC_HWFR_HDSEL_MASKSMA(MDIO)/PCS/半双工支持
GMIISEL[1] / MIISEL[0]MAC_HWFR_GMIISEL_MASK / MAC_HWFR_MIISEL_MASKGMII / MII 接口

2.15 未封装的寄存器区域

以下寄存器在 mac_regs.h 中有完整布局和位域定义,但 HAL 与 LL 都没有提供访问函数,只能由调用方直接操作 mac_regs_t 或按硬件手册实现:

区域寄存器说明
时间戳timestamp_control、subsecond_increment、system_time_*、timestamp_addend、target_time_*、timestamp_status仅寄存器定义,LL 未提供访问函数
PPS/辅助时间戳/AVpps_control、pps0_interval、pps0_width、pps1_target_time_*、auxiliary_timestamp_*、av_mac_control仅寄存器定义,LL 未提供访问函数
MMCMAC_ISR 中的 MMC 中断位,MAC_IMR 无对应 MMC maskHAL 不使能、不处理
LPI/VLAN/Hash/调试lpi_csr、lpi_tcr、vtr、hthr、htlr、dr仅寄存器/位域定义,LL 未提供访问函数(VLAN 无配置函数)