futaba115

    1. bootloader 从sd卡引导wince的问题 15/7701 嵌入式系统 2009-08-11
      INT8U SD_ReadBlockData(INT32U len, INT8U *recbuf, INT32U timeout) {         int i = 0;         int cnt;         INT32U tmp;         INT32U stat = 0; //    U8 *sb; //    Debug_Printf("\nSD_ReadBlockData start");        /* recycle to receive data */                                            /* 循环接收数据 */         while (i < len)         {                 stat = rSDIDSTA;                                                /* read data status register */ #ifdef CHECK_CARD_EN                 if (!card_insert)                 {                         rSDIDSTA = stat;                         return SD_ERR_NO_CARD;                                                /* 卡未插入,返回错误 card is not inserted, return error code */                 } #endif /* CHECK_CARD_EN */             /* 超时 timeout  */                 if (stat & SDIDSTA_TOUT)                 {                         rSDIDSTA = stat; /* clear */                         return SD_ERR_TIMEOUT_READ;                 }                 stat = rSDIFSTA;                                            /* 读FIFO状态寄存器 read FIFO status register */                 if (stat & SDIFSTA_RX)                 { //            Debug_Printf("a");             cnt = (stat & SDIFSTA_CNT);                     /* 读FIFO 计数器         read FIFO counter */                                    i += cnt;             cnt>>=2;             while (cnt--)                         {                                 tmp = rSDIDAT;                                                        /* 从FIFO中读出数据 read data from FIFO */                 *recbuf++=(INT8U)(tmp >> 24);                 *recbuf++=(INT8U)(tmp >> 16);                 *recbuf++=(INT8U)(tmp >> 8);                 *recbuf++=(INT8U)(tmp >> 0);                         }                                 }                  } //    Debug_Printf("\nSD_ReadBlockData 1");         do         {                 stat = rSDIDSTA; #ifdef CHECK_CARD_EN                 if (!card_insert)                 {                         rSDIDSTA = stat;                         return SD_ERR_NO_CARD;                                                /* 卡未插入,返回错误 card is not inserted, return error code */                 }         #endif /* CHECK_CARD_EN */         } while (!(stat & SDIDSTA_TOUT) && !(stat & SDIDSTA_DFIN));         //不“超时”而且“数据未传输完成“时一直循环 //    Debug_Printf("\nSD_ReadBlockData 2");         rSDIDSTA = stat;                                                                         /* clear data status register */                         return NO_ERR; }

最近访客

< 1/1 >

统计信息

已有57人来访过

  • 芯积分:--
  • 好友:--
  • 主题:--
  • 回复:1

留言

你需要登录后才可以留言 登录 | 注册


现在还没有留言