HAL.LST
上传用户:jcsy2001
上传日期:2013-11-29
资源大小:201k
文件大小:10k
开发平台:

C/C++

  1. C51 COMPILER V8.02   HAL                                                                   04/29/2007 12:48:52 PAGE 1   
  2. C51 COMPILER V8.02, COMPILATION OF MODULE HAL
  3. OBJECT MODULE PLACED IN HAL.OBJ
  4. COMPILER INVOKED BY: D:KeilC51BINC51.EXE HAL.C BROWSE DEBUG OBJECTEXTEND
  5. line level    source
  6.    1          #include "common.h"
  7.    2          #include "HAL.H"
  8.    3          
  9.    4          extern unsigned char xdata DBUF[BUFFER_LENGTH];
  10.    5          //============================================================
  11.    6          //往SD卡定一字节 www.mcusky.com
  12.    7          void SdWrite(unsigned char  n)
  13.    8          {
  14.    9   1          
  15.   10   1        unsigned char i;
  16.   11   1      
  17.   12   1        for(i=8;i;i--)
  18.   13   1         {
  19.   14   2          SD_CLK=0;
  20.   15   2          SD_DI=(n&0x80);
  21.   16   2          n<<=1;
  22.   17   2          SD_CLK=1;
  23.   18   2         }
  24.   19   1        SD_DI=1;      
  25.   20   1      }   
  26.   21          //================================================================
  27.   22          //从SD卡读一字节 www.mcusky.com
  28.   23          unsigned char SdRead()
  29.   24          {
  30.   25   1       unsigned char n,i;
  31.   26   1       for(i=8;i;i--)
  32.   27   1        {
  33.   28   2         SD_CLK=0;
  34.   29   2         SD_CLK=1;
  35.   30   2         n<<=1;
  36.   31   2         if(SD_DO) n|=1;
  37.   32   2      
  38.   33   2        }
  39.   34   1       return n;
  40.   35   1      }
  41.   36          //================================================================
  42.   37          //读SD卡响应 www.mcusky.com
  43.   38          unsigned char SdResponse()
  44.   39          {
  45.   40   1        unsigned char i=0,response;
  46.   41   1        
  47.   42   1        while(i<=8)
  48.   43   1        {
  49.   44   2          response=SdRead();
  50.   45   2          if(response==0x00)
  51.   46   2            break;
  52.   47   2          if(response==0x01)
  53.   48   2            break;
  54.   49   2          i++;
  55.   50   2        }
  56.   51   1        return response;
  57.   52   1      }  
  58.   53          //================================================================
  59.   54          void SdCommand(unsigned char command, unsigned long argument, unsigned char CRC)
  60.   55          {
  61. C51 COMPILER V8.02   HAL                                                                   04/29/2007 12:48:52 PAGE 2   
  62.   56   1        
  63.   57   1        SdWrite(command|0x40);
  64.   58   1        SdWrite(((unsigned char *)&argument)[0]);
  65.   59   1        SdWrite(((unsigned char *)&argument)[1]);
  66.   60   1        SdWrite(((unsigned char *)&argument)[2]);
  67.   61   1        SdWrite(((unsigned char *)&argument)[3]);
  68.   62   1        SdWrite(CRC);
  69.   63   1      }
  70.   64          //================================================================
  71.   65          unsigned char SdInit(void)
  72.   66          {
  73.   67   1        int delay=0, trials=0;
  74.   68   1        unsigned char i;
  75.   69   1        unsigned char response=0x01;
  76.   70   1      
  77.   71   1        SD_CS=1;
  78.   72   1        for(i=0;i<=9;i++)
  79.   73   1          SdWrite(0xff);
  80.   74   1        SD_CS=0;
  81.   75   1        
  82.   76   1        //Send Command 0 to put MMC in SPI mode
  83.   77   1        SdCommand(0x00,0,0x95);
  84.   78   1      
  85.   79   1        
  86.   80   1        response=SdResponse();
  87.   81   1        
  88.   82   1        if(response!=0x01)
  89.   83   1         {
  90.   84   2          return 0;
  91.   85   2         } 
  92.   86   1        
  93.   87   1        while(response==0x01)
  94.   88   1        {
  95.   89   2          SD_CS=1;
  96.   90   2          SdWrite(0xff);
  97.   91   2          SD_CS=0;
  98.   92   2          SdCommand(0x01,0x00ffc000,0xff);
  99.   93   2          response=SdResponse();
  100.   94   2        } 
  101.   95   1          
  102.   96   1        SD_CS=1;
  103.   97   1        SdWrite(0xff);
  104.   98   1        return 1;  
  105.   99   1      }
  106.  100          //================================================================
  107.  101          unsigned char SdWriteBlock(unsigned char *Block, unsigned long address)
  108.  102          {
  109.  103   1        unsigned char  count;
  110.  104   1        unsigned char dataResp;
  111.  105   1        //Block size is 512 bytes exactly
  112.  106   1        //First Lower SS
  113.  107   1        
  114.  108   1        SD_CS=0;
  115.  109   1        //Then send write command
  116.  110   1        SdCommand(0x18,address,0xff);
  117.  111   1        
  118.  112   1        if(SdResponse()==00)
  119.  113   1        {
  120.  114   2          SdWrite(0xff);
  121.  115   2              SdWrite(0xff);
  122.  116   2              SdWrite(0xff);
  123.  117   2          //command was a success - now send data
  124. C51 COMPILER V8.02   HAL                                                                   04/29/2007 12:48:52 PAGE 3   
  125.  118   2          //start with DATA TOKEN = 0xFE
  126.  119   2          SdWrite(0xfe);
  127.  120   2          //now send data
  128.  121   2          for(count=0;count<128;count++)
  129.  122   2          {
  130.  123   3            SdWrite(*Block++);
  131.  124   3                SdWrite(*Block++);
  132.  125   3                SdWrite(*Block++);
  133.  126   3                SdWrite(*Block++);
  134.  127   3          }
  135.  128   2          //data block sent - now send checksum
  136.  129   2          SdWrite(0xff);
  137.  130   2          SdWrite(0xff);
  138.  131   2          //Now read in the DATA RESPONSE token
  139.  132   2          dataResp=SdRead();
  140.  133   2          //Following the DATA RESPONSE token
  141.  134   2          //are a number of BUSY bytes
  142.  135   2          //a zero byte indicates the MMC is busy
  143.  136   2      
  144.  137   2          while(SdRead()==0);
  145.  138   2      
  146.  139   2          dataResp=dataResp&0x0f;     //mask the high byte of the DATA RESPONSE token
  147.  140   2          SD_CS=1;
  148.  141   2          SdWrite(0xff);
  149.  142   2          if(dataResp==0x0b)
  150.  143   2            {
  151.  144   3            //printf("DATA WAS NOT ACCEPTED BY CARD -- CRC ERRORn");
  152.  145   3            return 0;
  153.  146   3            }
  154.  147   2          if(dataResp==0x05)
  155.  148   2            return 1;
  156.  149   2            
  157.  150   2          //printf("Invalid data Response token.n");
  158.  151   2          return 0;
  159.  152   2       }
  160.  153   1        //printf("Command 0x18 (Write) was not received by the MMC.n");
  161.  154   1        return 0;
  162.  155   1      }
  163.  156          //=======================================================================
  164.  157          unsigned char SdReadBlock(unsigned char *Block, unsigned long address)
  165.  158          {
  166.  159   1         unsigned char count;
  167.  160   1        //Block size is 512 bytes exactly
  168.  161   1        //First Lower SS
  169.  162   1        
  170.  163   1      //  printf("MMC_read_blockn");
  171.  164   1        
  172.  165   1        SD_CS=0;
  173.  166   1        //Then send write command
  174.  167   1        SdCommand(0x11,address,0xff);
  175.  168   1        
  176.  169   1        if(SdResponse()==00)
  177.  170   1        {
  178.  171   2          //command was a success - now send data
  179.  172   2          //start with DATA TOKEN = 0xFE
  180.  173   2          while(SdRead()!=0xfe);
  181.  174   2      
  182.  175   2          for(count=0;count<128;count++)
  183.  176   2          {
  184.  177   3            *Block++=SdRead();
  185.  178   3                *Block++=SdRead();
  186.  179   3                *Block++=SdRead();
  187. C51 COMPILER V8.02   HAL                                                                   04/29/2007 12:48:52 PAGE 4   
  188.  180   3                *Block++=SdRead();
  189.  181   3          }
  190.  182   2          //data block sent - now send checksum
  191.  183   2          SdRead();
  192.  184   2          SdRead();
  193.  185   2          //Now read in the DATA RESPONSE token
  194.  186   2          SD_CS=1;
  195.  187   2          SdRead();
  196.  188   2          return 1;
  197.  189   2       }
  198.  190   1      //  printf("Command 0x11 (Read) was not received by the MMC.n");
  199.  191   1        return 0;
  200.  192   1      }
  201.  193          //================================================================
  202.  194          void ComSendByte(unsigned char c)
  203.  195          {
  204.  196   1              SBUF=c;
  205.  197   1              while(!TI);
  206.  198   1              TI=0;
  207.  199   1      }
  208.  200          //================================================================
  209.  201          void DelayMs(unsigned char nFactor)
  210.  202          {
  211.  203   1       return;
  212.  204   1      /*
  213.  205   1              unsigned char i;
  214.  206   1              unsigned int j;
  215.  207   1      
  216.  208   1              for(i=0; i<nFactor; i++)
  217.  209   1                      {
  218.  210   1                      for(j=0;j<1000;j++)
  219.  211   1                               j=j;
  220.  212   1                      }
  221.  213   1      */
  222.  214   1      }
  223. *** WARNING C280 IN LINE 201 OF HAL.C: 'nFactor': unreferenced local variable
  224.  215          
  225.  216          unsigned int LSwapINT16(unsigned short dData1,unsigned short dData2)
  226.  217          {
  227.  218   1          unsigned int xdata dData;
  228.  219   1          dData = ((dData2<<8)&0xff00)|(dData1&0x00ff);
  229.  220   1              return dData;
  230.  221   1      }
  231.  222          
  232.  223          unsigned long LSwapINT32(unsigned long dData1,unsigned long dData2,unsigned long dData3,unsigned long dDat
  233.              -a4)
  234.  224          {
  235.  225   1          unsigned long xdata dData;
  236.  226   1          dData = ((dData4<<24)&0xff000000)|((dData3<<16)&0xff0000)|((dData2<<8)&0xff00)|(dData1&0xff);
  237.  227   1              return dData;
  238.  228   1      }
  239.  229          
  240. MODULE INFORMATION:   STATIC OVERLAYABLE
  241.    CODE SIZE        =    671    ----
  242.    CONSTANT SIZE    =   ----    ----
  243.    XDATA SIZE       =   ----       6
  244.    PDATA SIZE       =   ----    ----
  245.    DATA SIZE        =   ----      41
  246.    IDATA SIZE       =   ----    ----
  247.    BIT SIZE         =   ----    ----
  248. C51 COMPILER V8.02   HAL                                                                   04/29/2007 12:48:52 PAGE 5   
  249. END OF MODULE INFORMATION.
  250. C51 COMPILATION COMPLETE.  1 WARNING(S),  0 ERROR(S)