硬件:EVM5515
环境:CCS V6.0
问题:在程序中调用csl_emif.c提供的SDRAM_write()或者SDRAM_read()函数时,如果读/写边界到达最后一个字节,就会出错。
SDRAM的地址空间范围是0x28000~0x3FFFFF。
宏定义CSL_SDRAM_START_ADDR=0x28000,CSL_SDRAM_END_ADDR=0x400000。
假设调用为:SDRAM_write(hEmif, 1024, 0x3FFC00, &WriteBuf[0]);
则访问的是0x3FFC00~0x3FFFFF的1024个 数据。显示,访问的空间仍在SDRAM上,而且是SDRAM的最后1k空间。
代入上图第675行((sdramAddr + numWords) < CSL_SDRAM_END_ADDR)得到((0x3FFC00+ 1024) < 0x400000),条件不成立。函数返回值是684行的CSL_ESYS_INVPARAMS。
这显然是一个BUG。
所以:675行的“<”应该改为“<=”。
SDRAM_read()函数也有同样的问题。
