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 寄存器布局
| 偏移 | 名称 | 属性 | 说明 |
|---|---|---|---|
0x0000 | MAC_CR | RW | MAC 配置寄存器 |
0x0004 | MAC_FFR | RW | MAC 帧过滤寄存器 |
0x0008 | MAC_HTHR | RW | Hash table high |
0x000C | MAC_HTLR | RW | Hash table low |
0x0010 | GMII_AR | RW | MDIO 地址寄存器 |
0x0014 | GMII_DR | RW | MDIO 数据寄存器 |
0x0018 | MAC_FCR | RW | 流控寄存器 |
0x001C | MAC_VTR | RW | VLAN tag 寄存器 |
0x0020 | MAC_VR | RO | 版本寄存器 |
0x0024 | MAC_DR | RO | 调试寄存器 |
0x0030 | MAC_LPI_CSR | RW | LPI 控制/状态寄存器 |
0x0034 | MAC_LPI_TCR | RW | LPI 定时器控制寄存器 |
0x0038 | MAC_ISR | RO | MAC 中断状态寄存器 |
0x003C | MAC_IMR | RW | MAC 中断屏蔽寄存器 |
0x0040 | MAC_A0HR | RW | MAC 地址 0 高寄存器 |
0x0044 | MAC_A0LR | RW | MAC 地址 0 低寄存器 |
0x0048 | MAC_A1HR | RW | MAC 地址 1 高寄存器 |
0x004C | MAC_A1LR | RW | MAC 地址 1 低寄存器 |
0x0700-0x0728 | 时间戳控制/系统时间/目标时间/状态 | RW/RO | 共 11 个 32 位寄存器,LL 未封装 |
0x072C-0x0738 | PPS 控制、辅助时间戳、AV MAC 控制 | RW/RO | LL 未封装 |
0x0760-0x0764 | PPS0 interval/width | RW | LL 未封装 |
0x0780-0x0784 | PPS1 target time | RW | LL 未封装 |
0x1000 | DMA_BMR | RW | DMA 总线模式寄存器 |
0x1004 | DMA_TPDR | RW | DMA TX poll demand |
0x1008 | DMA_RPDR | RW | DMA RX poll demand |
0x100C | DMA_RDLAR | RW | DMA RX 描述符列表地址 |
0x1010 | DMA_TDLAR | RW | DMA TX 描述符列表地址 |
0x1014 | DMA_SR | RW | DMA 状态寄存器 |
0x1018 | DMA_OMR | RW | DMA 操作模式寄存器 |
0x101C | DMA_IER | RW | DMA 中断使能寄存器 |
0x1020 | DMA_MFOCR | RO(读清) | DMA missed frame/overflow 计数 |
0x1024 | DMA_RIWTR | RW | DMA RX 中断 watchdog 定时器 |
0x102C | DMA_AHBSR | RO | DMA AHB 状态寄存器 |
0x1048 | DMA_CHTDR | RO | 当前 TX 描述符地址 |
0x104C | DMA_CHRDR | RO | 当前 RX 描述符地址 |
0x1050 | DMA_CHTBAR | RO | 当前 TX 缓冲区地址 |
0x1054 | DMA_CHRBAR | RO | 当前 RX 缓冲区地址 |
0x1058 | HWFR | RO | 硬件能力寄存器 |
保留区间: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_MASK | SMII 强制发送错误(置位时物理层强制正在传输的 SMII 帧发生发送错误;非 SMII 端口配置下保留) |
CST[25] | MAC_CR_CST_MASK | 剥离 EtherType 帧的 FCS |
TC[24] | MAC_CR_TC_MASK | 发送配置使能 |
WD[23] | MAC_CR_WD_MASK | Watchdog 禁止 |
JD[22] | MAC_CR_JD_MASK | Jabber 禁止(HAL 初始化置位) |
BE[21] | MAC_CR_BE_MASK | 帧突发使能(HAL 初始化置位) |
JE[20] | MAC_CR_JE_MASK | Jabber 使能 |
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_MASK | RX 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_MASK | VLAN tag 过滤使能 |
HPF[10] | MAC_FFR_HPF_MASK | Hash/perfect 过滤模式 |
SAF[9] | MAC_FFR_SAF_MASK | 源地址过滤 |
SAIF[8] | MAC_FFR_SAIF_MASK | SA 过滤反相 |
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_MASK | DA 过滤反相 |
HMC[2] | MAC_FFR_HMC_MASK | Hash multicast |
HUC[1] | MAC_FFR_HUC_MASK | Hash unicast |
PR[0] | MAC_FFR_PR_MASK | Promiscuous 模式 |
2.4 MAC_HTHR/MAC_HTLR、GMII_AR/GMII_DR
| 寄存器 | 位域 | Mask/Shift | 说明 |
|---|---|---|---|
MAC_HTHR | HTH[31:0] | MAC_HTHR_HTH_MASK | Hash table high |
MAC_HTLR | HTL[31:0] | MAC_HTLR_HTL_MASK | Hash table low |
GMII_AR | PA[15:11] | MAC_GMII_AR_PA_MASK(shift 11) | PHY 地址 |
GMII_AR | GR[10:6] | MAC_GMII_AR_GR_MASK(shift 6) | PHY 寄存器地址 |
GMII_AR | CR[5:2] | MAC_GMII_AR_CR_MASK(shift 2) | MDC 时钟范围 |
GMII_AR | GW[1] | MAC_GMII_AR_GW_MASK | 写事务标志 |
GMII_AR | GB[0] | MAC_GMII_AR_GB_MASK | 事务忙标志 |
GMII_DR | GD[15:0] | MAC_GMII_DR_GD_MASK | MDIO 数据 |
说明:MAC_HTHR/MAC_HTLR 只有寄存器与位域定义,HAL/LL 未提供访问函数。
2.5 MAC_FCR(0x0018)与 MAC_VTR(0x001C)
| 寄存器 | 位域 | Mask/Shift | 说明 |
|---|---|---|---|
MAC_FCR | PT[31:16] | MAC_FCR_PT_MASK(shift 16) | Pause time |
MAC_FCR | DZPQ[7] | MAC_FCR_DZPQ_MASK | 零 pause 请求禁止 |
MAC_FCR | PLT[5:4] | MAC_FCR_PLT_MASK(shift 4) | Pause low threshold |
MAC_FCR | UP[3] | MAC_FCR_UP_MASK | Unicast pause 检测 |
MAC_FCR | RFE[2] | MAC_FCR_RFE_MASK | RX 流控使能 |
MAC_FCR | TFE[1] | MAC_FCR_TFE_MASK | TX 流控使能 |
MAC_FCR | FCB_BPA[0] | MAC_FCR_FCB_BPA_MASK | 流控 busy 处理 |
MAC_VTR | VTHM[19] | MAC_VTR_VTHM_MASK | VLAN tag hash 匹配 |
MAC_VTR | ESVL[18] | MAC_VTR_ESVL_MASK | 启用 S-VLAN(置位后 MAC 收发也将 S-VLAN(EtherType 0x88A8)帧视为有效 VLAN 标记帧) |
MAC_VTR | VTIM[17] | MAC_VTR_VTIM_MASK | VLAN tag 反相 |
MAC_VTR | ETV[16] | MAC_VTR_ETV_MASK | 12 位 VLAN tag 使能 |
MAC_VTR | VL[15:0] | MAC_VTR_VL_MASK | VLAN 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_MASK | LPI 中断 |
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_MASK | PMT 中断 |
MAC_ISR_PCSANCIS_MASK(bit 2) | MAC_IMR_PCSANCIM_MASK | PCS auto-negotiation 中断 |
MAC_ISR_PCSLCHGIS_MASK(bit 1) | MAC_IMR_PCSLCHGIM_MASK | PCS link 状态变化中断 |
MAC_ISR_RGSMIIS_MASK(bit 0) | MAC_IMR_RGSMIIIM_MASK | RGMII/SMII 中断 |
2.7 MAC 地址寄存器
| 寄存器 | 位域 | Mask/Shift | 说明 |
|---|---|---|---|
MAC_A0HR | AE[31] | MAC_A0HR_AE_MASK | 地址 0 使能 |
MAC_A0HR | ADDRHI[15:0] | MAC_A0HR_ADDRHI_MASK | 地址 0 高 16 位 |
MAC_A0LR | ADDRLO[31:0] | MAC_A0LR_ADDRLO_MASK | 地址 0 低 32 位 |
MAC_A1HR | AE[31] | MAC_A1HR_AE_MASK | 地址 1 使能 |
MAC_A1HR | SA[30] | MAC_A1HR_SA_MASK | 源地址模式 |
MAC_A1HR | MBC[29:24] | MAC_A1HR_MBC_MASK(shift 24) | Mask byte control |
MAC_A1HR | ADDRHI[15:0] | MAC_A1HR_ADDRHI_MASK | 地址 1 高 16 位 |
MAC_A1LR | ADDRLO[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_MASK | TX priority |
MB[26] | MAC_DMA_BMR_MB_MASK | Mixed burst(HAL 按配置置位) |
AAL[25] | MAC_DMA_BMR_AAL_MASK | Address-aligned beats |
PBLX8[24] | MAC_DMA_BMR_PBLX8_MASK | PBL × 8 |
USP[23] | MAC_DMA_BMR_USP_MASK | Use separate PBL |
RPBL[22:17] | MAC_DMA_BMR_RPBL_MASK(shift 17) | RX programmable burst length |
FB[16] | MAC_DMA_BMR_FB_MASK | Fixed 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_MASK | Alternate descriptor size |
DSL[6:2] | MAC_DMA_BMR_DSL_MASK(shift 2) | Descriptor skip length |
DA[1] | MAC_DMA_BMR_DA_MASK | DMA arbitration |
SWR[0] | MAC_DMA_BMR_SWR_MASK | 软件复位;HAL 初始化写入并等待其清零 |
2.9 DMA_TPDR/DMA_RPDR、DMA_RDLAR/DMA_TDLAR
| 寄存器 | 位域 | Mask | 说明 |
|---|---|---|---|
DMA_TPDR | TPD[31:0] | MAC_DMA_TPDR_TPD_MASK | TX poll demand,写任意值触发 |
DMA_RPDR | RPD[31:0] | MAC_DMA_RPDR_RPD_MASK | RX poll demand,写任意值触发 |
DMA_RDLAR | RDESLA[31:0] | MAC_DMA_RDLAR_RDESLA_MASK | RX 描述符列表 32 位基地址 |
DMA_TDLAR | TDESLA[31:0] | MAC_DMA_TDLAR_TDESLA_MASK | TX 描述符列表 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_MASK | GLPII 中断 |
TTI[29] | MAC_DMA_SR_TTI_MASK | TX timestamp 中断 |
GPI[28] | MAC_DMA_SR_GPI_MASK | GPI 中断 |
GMI[27] | MAC_DMA_SR_GMI_MASK | GMI 中断 |
GLI[26] | MAC_DMA_SR_GLI_MASK | GLI 中断 |
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_MASK | Early receive 中断 |
FBI[13] | MAC_DMA_SR_FBI_MASK | Fatal bus 中断 |
ETI[10] | MAC_DMA_SR_ETI_MASK | Early transmit 中断 |
RWT[9] | MAC_DMA_SR_RWT_MASK | RX watchdog 超时 |
RPS[8] | MAC_DMA_SR_RPS_MASK | RX 进程停止 |
RU[7] | MAC_DMA_SR_RU_MASK | RX 缓冲区不可用 |
RI[6] | MAC_DMA_SR_RI_MASK | RX 完成 |
UNF[5] | MAC_DMA_SR_UNF_MASK | TX underflow |
OVF[4] | MAC_DMA_SR_OVF_MASK | RX overflow |
TJT[3] | MAC_DMA_SR_TJT_MASK | TX jabber timeout |
TU[2] | MAC_DMA_SR_TU_MASK | TX 缓冲区不可用 |
TPS[1] | MAC_DMA_SR_TPS_MASK | TX 进程停止 |
TI[0] | MAC_DMA_SR_TI_MASK | TX 完成 |
可清除位集合:
#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_MASK | RX store-and-forward(HAL 初始化置位) |
DFF[24] | MAC_DMA_OMR_DFF_MASK | 禁止 flush RX 帧 |
RFA_HIGH[23] | MAC_DMA_OMR_RFA_HIGH_MASK | RX FIFO 高水位扩展 |
RFD_HIGH[22] | MAC_DMA_OMR_RFD_HIGH_MASK | RX FIFO 低水位扩展 |
TSF[21] | MAC_DMA_OMR_TSF_MASK | TX store-and-forward(HAL 初始化置位) |
FTF[20] | MAC_DMA_OMR_FTF_MASK | Flush 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_MASK | Normal interrupt 汇总使能 |
AIE[15] | MAC_DMA_IER_AIE_MASK | Abnormal interrupt 汇总使能 |
ERE[14] | MAC_DMA_IER_ERE_MASK | Early receive 中断使能 |
FBE[13] | MAC_DMA_IER_FBE_MASK | Fatal bus 中断使能 |
ETE[10] | MAC_DMA_IER_ETE_MASK | Early transmit 中断使能 |
RWE[9] | MAC_DMA_IER_RWE_MASK | RX watchdog 中断使能 |
RSE[8] | MAC_DMA_IER_RSE_MASK | RX 进程停止中断使能 |
RUE[7] | MAC_DMA_IER_RUE_MASK | RX 缓冲区不可用中断使能 |
RIE[6] | MAC_DMA_IER_RIE_MASK | RX 完成中断使能 |
UNE[5] | MAC_DMA_IER_UNE_MASK | TX underflow 中断使能 |
OVE[4] | MAC_DMA_IER_OVE_MASK | RX overflow 中断使能 |
TJE[3] | MAC_DMA_IER_TJE_MASK | TX jabber timeout 中断使能 |
TUE[2] | MAC_DMA_IER_TUE_MASK | TX 缓冲区不可用中断使能 |
TSE[1] | MAC_DMA_IER_TSE_MASK | TX 进程停止中断使能 |
TIE[0] | MAC_DMA_IER_TIE_MASK | TX 完成中断使能 |
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_MFOCR | OVFCNTOVF[28] | MAC_DMA_MFOCR_OVFCNTOVF_MASK | Overflow 计数溢出标志 |
DMA_MFOCR | OVFFRMCNT[27:17] | MAC_DMA_MFOCR_OVFFRMCNT_MASK(shift 17) | Overflow 帧计数 |
DMA_MFOCR | MISCNTOVF[16] | MAC_DMA_MFOCR_MISCNTOVF_MASK | Missed 计数溢出标志 |
DMA_MFOCR | MISFRMCNT[15:0] | MAC_DMA_MFOCR_MISFRMCNT_MASK | Missed 帧计数 |
DMA_RIWTR | RIWT[7:0] | MAC_DMA_RIWTR_RIWT_MASK | RX 中断 watchdog 定时值 |
DMA_AHBSR | AXWHSTS[0] | MAC_DMA_AHBSR_AXWHSTS_MASK | AHB master 状态(诊断用) |
说明:DMA_MFOCR 为读清寄存器,读取会清除计数与 overflow 标志。
| 寄存器 | 位域 | Mask | 说明 |
|---|---|---|---|
DMA_CHTDR | CURTDESAPTR[31:0] | MAC_DMA_CHTDR_CURTDESAPTR_MASK | 当前 TX 描述符地址 |
DMA_CHRDR | CURRDESAPTR[31:0] | MAC_DMA_CHRDR_CURRDESAPTR_MASK | 当前 RX 描述符地址 |
DMA_CHTBAR | CURTBUFAPTR[31:0] | MAC_DMA_CHTBAR_CURTBUFAPTR_MASK | 当前 TX 缓冲区地址 |
DMA_CHRBAR | CURRBUFAPTR[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_MASK | SA/VLAN 插入能力 |
ENHDESSEL[24] | MAC_HWFR_ENHDESSEL_MASK | Enhanced 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_MASK | RX 校验和卸载能力 |
TXCOESEL[16] | MAC_HWFR_TXCOESEL_MASK | TX 校验和卸载选择 |
TSVER2SEL[13] / TSVER1SEL[12] | MAC_HWFR_TSVER2SEL_MASK / MAC_HWFR_TSVER1SEL_MASK | 时间戳版本 2/1 |
MMCSEL[11] | MAC_HWFR_MMCSEL_MASK | MMC 功能 |
SMASEL[8] / PCSSEL[6] / HDSEL[2] | MAC_HWFR_SMASEL_MASK / MAC_HWFR_PCSSEL_MASK / MAC_HWFR_HDSEL_MASK | SMA(MDIO)/PCS/半双工支持 |
GMIISEL[1] / MIISEL[0] | MAC_HWFR_GMIISEL_MASK / MAC_HWFR_MIISEL_MASK | GMII / 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/辅助时间戳/AV | pps_control、pps0_interval、pps0_width、pps1_target_time_*、auxiliary_timestamp_*、av_mac_control | 仅寄存器定义,LL 未提供访问函数 |
| MMC | MAC_ISR 中的 MMC 中断位,MAC_IMR 无对应 MMC mask | HAL 不使能、不处理 |
| LPI/VLAN/Hash/调试 | lpi_csr、lpi_tcr、vtr、hthr、htlr、dr | 仅寄存器/位域定义,LL 未提供访问函数(VLAN 无配置函数) |