最近,我开始做一个与emac相关的项目,在实施方面遇到了一些疑问和障碍,于是决定在这里发布我的Q,向有经验的人寻求一些建议和建议。
目前,我正在将 EMAC-DM9161A 模块与我的 SAM3x - Taiji Uino 板连接以进行高速以太网通信。我正在使用 Palliser 开发的库,该库作为 elechouse/EMAC-Demo 上传到 Github。在源代码 - ethernet_phy.c 中,我遇到了这个函数来初始化 DM9161A PHY 组件,如下所示:
unit8_t ethernet_phy_init(Emac*p_emac, uint8_t uc_phy_addr, uint32_t mck);
问题:参数 uint8_t uc_phy_addr 是一个 8 位寄存器,我想通过它传递一个 48 位 MAC 地址,例如 - 70-62-D8-28-C2-8E。我知道,我可以使用两个 32 位寄存器将 MAC 地址的前 32 位(即 70-62-D8-28)存储在一个 32 位寄存器中,其余 16 位 MAC 地址(即 C2-8E)存储在另一个 32 位寄存器中. 但是,我不能这样做,因为我需要使用上面的 ethernet_phy_init 函数,其中 unit8_t 用于传递 48 位 MAC 地址。所以,我想知道,如何做到这一点?
另一个问题:我执行了一些代码以通过一些试验方法理解并遇到一些疑问,这里是代码:
int main()
{
unit8_t phy_addr =49; //Assign a value 49 to 8 bit Reg
int8_t phy_addr1 = 49;
int phy_addr2 = 49;
cout<<phy_addr;
cout<<phy_addr1
cout<<phy_addr2;
getchar();
return 0;
}
输出结果:
1
1
49
所以我的疑问是,为什么在我使用 8 位变量存储值 49 的任何地方,输出都以 ASCII 字符显示,但是当我使用普通的 32 位 int 变量存储 49 时,它显示的十进制值是 49。为什么这会发生吗?最后如何将 MAC 地址存储在 8 位寄存器中?