最近、私は emac に関連するプロジェクトに取り組み始めましたが、実装に関していくつかの疑問や障害に遭遇したため、経験豊富な人々からアドバイスや提案を得るために Q をここに投稿することにしました。
現在、EMAC-DM9161A モジュールを SAM3x - Taiji Uino ボードと高速イーサネット通信用に接続する作業を行っています。Palliser によって開発され、Github に elechouse/EMAC-Demo としてアップロードされているライブラリを使用しています。ソース コード (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 は、70-62-D8-28-C2-8E などの 48 ビット MAC アドレスを渡したい 8 ビット レジスタです。2 つの 32 ビット レジスタを使用して、MAC アドレスの最初の 32 ビット、つまり 70-62-D8-28 を 1 つの 32 ビット レジスタに格納し、残りの 16 ビット MAC アドレス、つまり C2-8E を別の 32 ビット レジスタに格納できることを理解しています。 . ただし、48 ビットの MAC アドレスを渡すために unit8_t が使用される上記の ethernet_phy_init 関数を使用する必要があるため、これを行うことはできません。それで、私は知りたいのですが、これを実現する方法は?
別の質問: いくつかの試行方法で理解するためにいくつかのコードを実行しましたが、いくつかの疑問に遭遇しました。コードは次のとおりです。
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 文字で表示されるのはなぜですか。これは起こりますか?そして最後に、MACアドレスを8ビットレジスタに保存する方法は?