这个sdk的案例中主函数都会使用 MMUInit(applMmuEntries),其中一个例子对applMmuEntries的定义如下,以0x48000000这个地址来说,技术手册上memory map这个地址是保留的,而这里却使用的了这个地址,有没有哪位大虾知道这些地址是如何来的?还有就是SYS_MMU_CACHEABLE、SYS_MMU_BUFFERABLE这些定义有什么作用?有没有哪份资料上有详细讲解这些的啊? 新手盼支招,先感谢各位了~~
SYS_MMU_ENTRY applMmuEntries[] = {
{(void*)0x08000000,SYS_MMU_CACHEABLE|SYS_MMU_BUFFERABLE}, //NOR – bufferable| Cacheable
{(void*)0x08100000,SYS_MMU_CACHEABLE|SYS_MMU_BUFFERABLE}, //NOR – bufferable| Cacheable
{(void*)0x08200000,SYS_MMU_CACHEABLE|SYS_MMU_BUFFERABLE}, //NOR – bufferable| Cacheable
{(void*)0x48300000,0}, //PWM – Non bufferable| Non Cacheable {(void*)0x48200000,0}, //INTCPS,MPUSS – Non bufferable| Non Cacheable
{(void*)0x48100000,0}, //I2C2,McSPI1,UART3,UART4,UART5, GPIO2,GPIO3,MMC1 – Non bufferable| Non Cacheable
{(void*)0x48000000,0}, //UART1,UART2,I2C1,McSPI0,McASP0 CFG,McASP1 CFG,DMTIMER,GPIO1 -Non bufferable| Non Cacheable
{(void*)0x44E00000,0}, //Clock Module, PRM, GPIO0, UART0, I2C0, – Non bufferable| Non Cacheable
{(void*)0x4A300000,0}, //PRUSS1 – Non bufferable| Non Cacheable
{(void*)0x49000000,0}, //EDMA3 – Non bufferable| Non Cacheable
{(void*)0x49800000,0}, // EDMA in non-idle mode, Non bufferable| Non Cacheable
{(void*)0x49900000,0}, // EDMA in non-idle mode, Non bufferable| Non Cacheable
{(void*)0x49a00000,0}, // EDMA in non-idle mode, Non bufferable| Non Cacheable
{(void*)0x4A100000,0}, //CPSW – Non bufferable| Non Cacheable
{(void*)0xFFFFFFFF,0xFFFFFFFF} };
Jian Zhou:
AM335x的TRM上的memory map一章,0x48000000是外设模块地址,并不是reserve的地址。
这个结构体应该是把需要MMU映射的地址空间列出来。