sdram_cache_test.c

来自「Freescale MCF5445evb 参考测试代码」· C语言 代码 · 共 101 行

C
101
字号
    /* Initialize two regions of SDRAM with known data */    for (i = 0; i < sizeof(test_data)/4; i++)    {        *(uint32*)(SDRAM_ADDRESS + i*4) = test_data[i];        *(uint32*)(SDRAM_ADDRESS + 0x1000000 + i*4) = test_data[i];    }        /* Enable bursting */    MCF_SCM_BCR = 0        | MCF_SCM_BCR_GBW        | MCF_SCM_BCR_GBR        | 0x00000004;         /* Setup CACR to enable data cache; default mode is inhibited-precise */    mcf5xxx_wr_cacr(0        | MCF5XXX_CACR_DEC        | MCF5XXX_CACR_DDCM_IP        | MCF5XXX_CACR_DCINVA);            /* Use an acr to allow caching in a 16MB region of SDRAM      * Cached Addresses: SDRAM_ADDRESS to SDRAM_ADDRESS + 0xFFFFFF */    mcf5xxx_wr_acr0(0        | MCF5XXX_ACR_AB(SDRAM_ADDRESS)        | MCF5XXX_ACR_AM_16M        | MCF5XXX_ACR_EN        | MCF5XXX_ACR_SM_IGNORE        | MCF5XXX_ACR_DCM_CB);               /* access at 0-aligned address to pull a line into cache */    temp1 = *(uint32*)(SDRAM_ADDRESS + 0);    temp2 = *(uint32*)(SDRAM_ADDRESS + 0x1000000 + 0);    //ASSERT (temp1 == test_data[0]);    //ASSERT (temp2 == test_data[0]);        src1 = (uint32*)(SDRAM_ADDRESS);    src2 = (uint32*)(SDRAM_ADDRESS + 0x1000000);    printf("\n0x0 aligned access:\n");    printf("\t\tnon-cached data\tcached data\n");    printf("-----------------------------------------------\n");    for (i = 0; i < 4; i++)    {        printf("Offset %02x:\t%08x\t%08x\n", i*4, src1[i], src2[i]);        //ASSERT(src1[i] == test_data[i]);        //ASSERT(src2[i] == test_data[i]);    }        /* access at 4-aligned address to pull a line into cache */    temp1 = *(uint32*)(SDRAM_ADDRESS + 16 + 4);    temp2 = *(uint32*)(SDRAM_ADDRESS + 0x1000000 + 16 + 4);    //ASSERT (temp1 == test_data[1]);    //ASSERT (temp2 == test_data[1]);        src1 = (uint32*)(SDRAM_ADDRESS + 16);    src2 = (uint32*)(SDRAM_ADDRESS + 0x1000000 + 16);    printf("\n0x4 aligned access:\n");    printf("\t\tnon-cached \tcached \n");    printf("-----------------------------------------------\n");    for (i = 0; i < 4; i++)    {        printf("Offset %02x:\t%08x\t%08x\n", i*4+16, src1[i], src2[i]);        //ASSERT(src1[i] == test_data[i]);        //ASSERT(src2[i] == test_data[i]);    }            /* access at 8-aligned address to pull a line into cache */    temp1 = *(uint32*)(SDRAM_ADDRESS + 32 + 8);    temp2 = *(uint32*)(SDRAM_ADDRESS + 0x1000000 + 32 + 8);    //ASSERT (temp1 == test_data[2]);    //ASSERT (temp2 == test_data[2]);        src1 = (uint32*)(SDRAM_ADDRESS + 32);    src2 = (uint32*)(SDRAM_ADDRESS + 0x1000000 + 32);    printf("\n0x8 aligned access:\n");    printf("\t\tnon-cached \tcached \n");    printf("-----------------------------------------------\n");    for (i = 0; i < 4; i++)    {        printf("Offset %02x:\t%08x\t%08x\n", i*4+32, src1[i], src2[i]);        //ASSERT(src1[i] == test_data[i]);        //ASSERT(src2[i] == test_data[i]);    }            /* access at C-aligned address to pull a line into cache */    temp1 = *(uint32*)(SDRAM_ADDRESS + 48 + 0xC);    temp2 = *(uint32*)(SDRAM_ADDRESS + 0x1000000 + 48 + 0xC);    //ASSERT (temp1 == test_data[3]);    //ASSERT (temp2 == test_data[3]);        src1 = (uint32*)(SDRAM_ADDRESS + 48);    src2 = (uint32*)(SDRAM_ADDRESS + 0x1000000 + 48);    printf("\n0xC aligned access:\n");    printf("\t\tnon-cached\tcached\n");    printf("-----------------------------------------------\n");    for (i = 0; i < 4; i++)    {        printf("Offset %02x:\t%08x\t%08x\n", i*4+48, src1[i], src2[i]);        //ASSERT(src1[i] == test_data[i]);        //ASSERT(src2[i] == test_data[i]);    }

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?