主题 : 6410 SD卡的问题。 复制链接 | 浏览器收藏 | 打印
级别: 新手上路
UID: 4576
精华: 0
发帖: 4
金钱: 20 两
威望: 4 点
综合积分: 8 分
注册时间: 2009-03-20
最后登录: 2013-07-01
楼主  发表于: 2012-05-31 17:40

 6410 SD卡的问题。


在UBOOT 里找到 hs_mmc.c  找到 SD/MMC的函数。
有些不明白的地方
请各位多指教

static int wait_for_data_done (void)
{
    while (!(s3c_hsmmc_readw(HM_NORINTSTS) & 0x2))
        return 1;

    return 0;
}
这个函数怎么看起来这么不爽? 到底对不对?
如果是正确的话 为什么不把  while 改成if呢?

HM_NORINTSIGEN   和NORINTSTSEN 两个寄存器到底有什么区别?
畅游在知识的海洋...
级别: 论坛版主
UID: 33629
精华: 4
发帖: 554
金钱: 3075 两
威望: 615 点
综合积分: 1188 分
注册时间: 2010-12-03
最后登录: 2015-09-22
1楼  发表于: 2012-06-01 08:15
while是为了轮循的读状态寄存器,寄存器查datasheet
好好学习,天天鲁管
级别: 新手上路
UID: 4576
精华: 0
发帖: 4
金钱: 20 两
威望: 4 点
综合积分: 8 分
注册时间: 2009-03-20
最后登录: 2013-07-01
2楼  发表于: 2012-06-01 09:48
while (!(s3c_hsmmc_readw(HM_NORINTSTS) & 0x2))
        return 1;
注意,while 语句后面是没有逗号的,所以只会执行一次,
如果这样,为什么要用 while呢? 改成if不是清淅很多?
在数据手册里  ‘1’ = DATA Transfer complete    0 = no transfer complete
按照这种意思  while 后面应该要有逗号,试过,加上就会死在这一块。
这个uboot编码真是菜鸟水平,
像 check_dma_int();      while(!HS_DMA_END);     这样的句子都能写得出来,
HS_DMA_END  不是这寄存器,不是指针,只一个全局变量,程序也没用中断
如果执行check_dma_int();  后   HS_DMA_END 不为零,不死在这一块了吗?
  令人失望。。。