前回の実験で、ACPを有効にすることができました。では、ACPを有効にするために必要とされている設定を個別に解除した場合、本当にACPが無効になるのかを確認しました。
Contents
ACPの設定解除
1. AxUSER[0]=0に設定
1 2 |
//PP_AXI_MASTER_CONFIG = 0x010f010f; PP_AXI_MASTER_CONFIG = 0x000f000f; |
結果
ACPは無効になりました。
2. AxCACHE[3:0]=0に設定
1 2 |
//PP_AXI_MASTER_CONFIG = 0x010f010f; PP_AXI_MASTER_CONFIG = 0x01000100; |
結果
ACPは無効になりました。
3. SCUを無効に設定
1 2 |
//(*(volatile unsigned int *)(0xfffec000)) = 1; (*(volatile unsigned int *)(0xfffec000)) = 0; |
結果
ACPは無効になりました。
4. コヒーレント・メモリのSharableを無効に設定
1 2 |
.shareable = ALT_MMU_TTB_S_NON_SHAREABLE, //.shareable = ALT_MMU_TTB_S_SHAREABLE, |
結果
ACPは無効になりました。
5. ACTLRレジスタのSMPビットを解除
1 2 |
// actlr |= 0x40; // set SMP bit(bit6) actlr |= 0x00; |
結果
ACPは有効でした。
まとめ
少なくともこの実験では、ACTLRのSMPビットが設定されていなくてもACPが有効でした。このテストは非常に簡単な動作しか行っていないので、より複雑な動作状況下ではACTLRの設定が必要なのかも知れません。