您好、E2E、
我正在修改我们定制板的 PDK。 并遇到一些错误。
PDK 版本: pdk_am335x_1_0_17
该错误发生在 GPMC_v1.c 文件 GPMC_CONTRAL_v1 函数中。
\ti\pdk_am335x_1_0_17\packages/ti\drv\gpmc\src\V1\gpmc_v1.c
静态 Int32_t GPMC_CONTRAL_v1 (GPMC_Handle handle、uint32_t cmd、void *参数)
if ((handle!= NULL)&&(arg!= NULL))
在这一行中、我发现如果我不使用这样的评论、将会发生无限循环错误。
if ((handle!= NULL)/*&&(arg!= NULL)*/)
这就是发生无限循环的地方。
\ti\pdk_am335x_1_0_17\packages/ti\board\src\flash\nand\GPMC\nand_GPMC.c
while (intrStatus = 0)
{
内部状态= NAND_gpmcElmIntStatusGet (handle、0);
}
执行此功能后、intrStatus 仍为0、"while"保持启用状态。
当我使用 Step into 来查找错误时,我会找到这个。在调用了这么多函数之后,我在该文件中找到了一个函数,这看起来很奇怪。
TI\pdk_am335x_1_0_17\packages\ti\cSL\hw_types.h
静态内联 UINT32_t HW_RD_FIELD32_RAW (uint32_t addr、
uint32_t mask、
uint32_t 移位)
{
uint32_t regVal =*(volatile uint32_t *)((uintptr_t) addr);//行1
regVal =(regVal & mask)>> SHIFT;//line 2
/*在此之后不调用任何函数。 如有必要、将实现为宏*/
hw_sync_barer();
return (regVal);
}
ADDR = 0x48080018、MASK = 1、SHIFT = 0
如果我运行此操作,在第1行 regVal 得到偶数并返回0之后。 这个0最终成为之前 的 intrStatus 的图。
这就是我的问题。 如果需要更多代码、请告诉我。 我将使用"插入文件"或一些粘贴库或向您显示我的代码的内容。
感谢你的帮助
韩文