【简介】
XRDC(Extended Resource Domain Controller)的功能优点和MPU类似,都是一个权限保护配置的模块,和MPU不同的是它是针对内存&外设是否可以被Domain 进行访问,以下红框的部分为 XRDC 的构成部分。
以下是对XRDC 的功能概述:


从以上的框图可以看出XRDC 主要包含了MDAC/MCR/PAC 模块,以下的图片可以看出MDAC/MCR/PAC 模块的作用,简单的理解MDAC用用配置总线master 的 domain id (DID),MRC 用于配置domain 对 memory 的访问权限,PTAC 用于配置domain 对 外设 的访问权限。

上述的描述可以通过以下框图能更直接的查看出XRDC的功能组成

下表对应的K3X系列芯片的AXBS 的master id 的定义。

以下是memory 的slave 端口的定义

以下是PAC的端口定义

以下的裸机配置代码也是操作的上述的 MDAC/MCR/PAC 的配置完成XRDC的配置。
void XRDC_Init(void)
{
uint32_t i, j;
/* maximum 3 domains – assign domain ID for all masters */
IP_XRDC->MDA_W0_0_DFMT0 = 0x80000000; //master0 = core0, domain id = 0;
IP_XRDC->MDA_W0_1_DFMT1 = 0xA0000000; //master1 = DMA, domain id = 0;
IP_XRDC->MDA_W0_2_DFMT1 = 0xA0000000; //master2 = test port, domain id = 0;
IP_XRDC->MDA_W0_3_DFMT0 = 0xC0000002; //master3 = HSE core, domain id = 2;
IP_XRDC->MDA_W0_4_DFMT0 = 0x80000001; //master4 = core1, domain id = 1;
IP_XRDC->MDA_W0_5_DFMT1 = 0xA0000000; //master5 = EMAC, domain id = 0;
for(i=0; i<3; i++) /* Domain 0 ~ Domain 2 PDAC settings */
{
for(j=0; j< XRDC_PDAC_SLOT_PDACN_COUNT; j++) /* Configure each peripheral’s access policy for a domain */
{
IP_XRDC->PDAC_SLOT[i].PDACN[j].PDAC_W0 = 0x00001FFF; //domain 0/1/2 allow full access to this PDAC slot, semaphore disable
IP_XRDC->PDAC_SLOT[i].PDACN[j].PDAC_W1 = 0x80000000; //set valid bit
}
}
for(i=0; i<3; i++) /* Domain 0 ~ Domain 2 memory region access settings */
{
for(j=0; j<1; j++) //initialize only the 1st memory region descriptor
{
IP_XRDC->MRGDN[i][j].XRDC_MRGD_W0 = 0x00000000; //start address
IP_XRDC->MRGDN[i][j].XRDC_MRGD_W1 = 0xFFFFFFFF; //end address
IP_XRDC->MRGDN[i][j].XRDC_MRGD_W2 = 0x00001FFF; //allow full access for domain 0/1/2
IP_XRDC->MRGDN[i][j].XRDC_MRGD_W3 = 0x80000000; //set valid bit
}
}
IP_XRDC->CR = 0x0000008B; //set IP_XRDC global valid bit
}
我要赚赏金
