• No : 11132
  • 公開日時 : 2022/03/30 12:06
  • 印刷

【NXP:LPC】 LPC546xxのEMCのEMビットについて

LPC546xxのEMCに8ビット幅のデバイスを接続しました。
EMCのCONFIGレジスタのEMビットを1にセットしてオフセットアドレス0x000をリードするとアドレス0x003の値をリードします。
これは、正しい動作ですか。
カテゴリー : 

回答

LPC546xxでEMCのCONFIGレジスタのEMビットを1に設定すると外部デバイスがビッグエンディアンだと判断します。
LPC546xxは、リトルエンディアンですので、アドレス0x000は最下位バイトを示しており、ビッグエンディアンのデバイスの最下位バイトのアドレス0x003に対してアクセスします。
それ以外のアドレスも同様にリトルエンディアンとビッグエンディアンとの間でアドレスが変換され、次のようにアクセスします。
 
    uint8_t  byteData;
   byteData = *((uint32_t *)0x80000000);    /* if EM = 1 (big-endian), EMC will read 8-bit data at 0x0003 even if memory width is 8 bit */
    byteData = *((uint32_t *)0x80000001);    /* if EM = 1 (big-endian), EMC will read 8-bit data at 0x0002 even if memory width is 8 bit */
    byteData = *((uint32_t *)0x80000002);    /* if EM = 1 (big-endian), EMC will read 8-bit data at 0x0001 even if memory width is 8 bit */
    byteData = *((uint32_t *)0x80000003);    /* if EM = 1 (big-endian), EMC will read 8-bit data at 0x0000 even if memory width is 8 bit */