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