D12ci.LST
上传用户:lyfy_2008
上传日期:2014-07-13
资源大小:3016k
文件大小:10k
源码类别:

USB编程

开发平台:

Visual C++

  1. C51 COMPILER V7.02b   D12CI                                                                09/28/2006 22:04:33 PAGE 1   
  2. C51 COMPILER V7.02b, COMPILATION OF MODULE D12CI
  3. OBJECT MODULE PLACED IN D12ci.OBJ
  4. COMPILER INVOKED BY: C:KeilC51BINC51.EXE D12ci.c BROWSE DEBUG OBJECTEXTEND
  5. stmt level    source
  6.    1          #include <reg51.h>                /* special function register declarations   */
  7.    2          #include "mainloop.h"
  8.    3          #include "d12ci.h" 
  9.    4          #include "absacc.h"
  10.    5          //#include "epphal.h"
  11.    6          
  12.    7          #define D12_DATA        0xEFF0   //偶数是数据地址
  13.    8          #define D12_COMMAND 0xEFF1       //奇数是命令地址
  14.    9          
  15.   10          extern EPPFLAGS bEPPflags;
  16.   11          
  17.   12          //设置地址使能
  18.   13          void D12_SetAddressEnable(unsigned char bAddress, unsigned char bEnable)
  19.   14          {
  20.   15   1              if(bEPPflags.bits.in_isr == 0)
  21.   16   1                      DISABLE;
  22.   17   1      
  23.   18   1              outportb(D12_COMMAND, 0xD0);//输出指令
  24.   19   1              if(bEnable)
  25.   20   1                      bAddress |= 0x80;
  26.   21   1              outportb(D12_DATA, bAddress);//设置地址
  27.   22   1      
  28.   23   1              if(bEPPflags.bits.in_isr == 0)
  29.   24   1                      ENABLE;
  30.   25   1      }
  31.   26          
  32.   27          //设置端点使能
  33.   28          void D12_SetEndpointEnable(unsigned char bEnable)
  34.   29          {
  35.   30   1              if(bEPPflags.bits.in_isr == 0)
  36.   31   1                      DISABLE;
  37.   32   1      
  38.   33   1              outportb(D12_COMMAND, 0xD8);//输出指令
  39.   34   1              if(bEnable)
  40.   35   1                      outportb(D12_DATA, 1);//设置端点允许
  41.   36   1              else
  42.   37   1                      outportb(D12_DATA, 0);//设置端点禁止
  43.   38   1      
  44.   39   1              if(bEPPflags.bits.in_isr == 0)
  45.   40   1                      ENABLE;
  46.   41   1      }
  47.   42          
  48.   43          //模式设置
  49.   44          void D12_SetMode(unsigned char bConfig, unsigned char bClkDiv)
  50.   45          {
  51.   46   1              if(bEPPflags.bits.in_isr == 0)
  52.   47   1                      DISABLE;
  53.   48   1      
  54.   49   1              outportb(D12_COMMAND, 0xF3);//设置模式
  55.   50   1              outportb(D12_DATA, bConfig);
  56.   51   1              outportb(D12_DATA, bClkDiv);
  57.   52   1      
  58.   53   1              if(bEPPflags.bits.in_isr == 0)
  59.   54   1                      ENABLE;
  60.   55   1      }
  61. C51 COMPILER V7.02b   D12CI                                                                09/28/2006 22:04:33 PAGE 2   
  62.   56          
  63.   57          //DMA工作方式设置
  64.   58          void D12_SetDMA(unsigned char bMode)
  65.   59          {
  66.   60   1              if(bEPPflags.bits.in_isr == 0)
  67.   61   1                      DISABLE;
  68.   62   1      
  69.   63   1              outportb(D12_COMMAND, 0xFB);//设置DMA工作方式
  70.   64   1              outportb(D12_DATA, bMode);
  71.   65   1      
  72.   66   1              if(bEPPflags.bits.in_isr == 0)
  73.   67   1                      ENABLE;
  74.   68   1      }
  75.   69          
  76.   70          //读取中断寄存器
  77.   71          unsigned short D12_ReadInterruptRegister(void)
  78.   72          {
  79.   73   1              unsigned char b1;
  80.   74   1              unsigned int j;
  81.   75   1      
  82.   76   1              outportb(D12_COMMAND, 0xF4);//读取中断寄存器
  83.   77   1              b1 = inportb(D12_DATA);
  84.   78   1              j = inportb(D12_DATA);
  85.   79   1      
  86.   80   1              j <<= 8;
  87.   81   1              j += b1;
  88.   82   1      
  89.   83   1              return j;
  90.   84   1      }
  91.   85          
  92.   86          //端点选择
  93.   87          unsigned char D12_SelectEndpoint(unsigned char bEndp)
  94.   88          {
  95.   89   1              unsigned char c;
  96.   90   1      
  97.   91   1              if(bEPPflags.bits.in_isr == 0)
  98.   92   1                      DISABLE;
  99.   93   1      
  100.   94   1              outportb(D12_COMMAND, bEndp);//端点选择
  101.   95   1              c = inportb(D12_DATA);
  102.   96   1      
  103.   97   1              if(bEPPflags.bits.in_isr == 0)
  104.   98   1                      ENABLE;
  105.   99   1      
  106.  100   1              return c;
  107.  101   1      }
  108.  102          
  109.  103          //读取最后传输状态
  110.  104          unsigned char D12_ReadLastTransactionStatus(unsigned char bEndp)
  111.  105          {
  112.  106   1              outportb(D12_COMMAND, 0x40 + bEndp);//返回最后传输状态
  113.  107   1              return inportb(D12_DATA);
  114.  108   1      }
  115.  109          
  116.  110          //读取端点状态
  117.  111          unsigned char D12_ReadEndpointStatus(unsigned char bEndp)
  118.  112          {
  119.  113   1              unsigned char c;
  120.  114   1      
  121.  115   1              if(bEPPflags.bits.in_isr == 0)
  122.  116   1                      DISABLE;
  123.  117   1      
  124. C51 COMPILER V7.02b   D12CI                                                                09/28/2006 22:04:33 PAGE 3   
  125.  118   1              outportb(D12_COMMAND, 0x80 + bEndp);//读取端点状态
  126.  119   1              c = inportb(D12_DATA);
  127.  120   1      
  128.  121   1              if(bEPPflags.bits.in_isr == 0)
  129.  122   1                      ENABLE;
  130.  123   1      
  131.  124   1              return c;
  132.  125   1      }
  133.  126          
  134.  127          //设置端点状态
  135.  128          void D12_SetEndpointStatus(unsigned char bEndp, unsigned char bStalled)
  136.  129          {
  137.  130   1              if(bEPPflags.bits.in_isr == 0)
  138.  131   1                      DISABLE;
  139.  132   1      
  140.  133   1              outportb(D12_COMMAND, 0x40 + bEndp);//设置端点状态
  141.  134   1              outportb(D12_DATA, bStalled);
  142.  135   1      
  143.  136   1              if(bEPPflags.bits.in_isr == 0)
  144.  137   1                      ENABLE;
  145.  138   1      }
  146.  139          
  147.  140          unsigned short D12_ReadChipID(void)
  148.  141          {
  149.  142   1              unsigned short i,j;
  150.  143   1      
  151.  144   1              if(bEPPflags.bits.in_isr == 0)
  152.  145   1                      DISABLE;
  153.  146   1      
  154.  147   1              outportb(D12_COMMAND, 0xFD);
  155.  148   1              i=inportb(D12_DATA);
  156.  149   1              j=inportb(D12_DATA);
  157.  150   1              i += (j<<8);
  158.  151   1      
  159.  152   1              if(bEPPflags.bits.in_isr == 0)
  160.  153   1                      ENABLE;
  161.  154   1      
  162.  155   1              return i;
  163.  156   1      }
  164.  157          
  165.  158          //读取端点数据
  166.  159          unsigned char D12_ReadEndpoint(unsigned char endp, unsigned char len, unsigned char * buf)
  167.  160          {
  168.  161   1              unsigned char i, j;
  169.  162   1      
  170.  163   1              if(bEPPflags.bits.in_isr == 0)
  171.  164   1                      DISABLE;
  172.  165   1      
  173.  166   1              outportb(D12_COMMAND, endp);
  174.  167   1              if((inportb(D12_DATA) & D12_FULLEMPTY) == 0) {
  175.  168   2                      if(bEPPflags.bits.in_isr == 0)
  176.  169   2                              ENABLE;
  177.  170   2                      return 0;
  178.  171   2              }
  179.  172   1      
  180.  173   1              outportb(D12_COMMAND, 0xF0);
  181.  174   1              j = inportb(D12_DATA);
  182.  175   1              j = inportb(D12_DATA);
  183.  176   1      
  184.  177   1              if(j > len)
  185.  178   1                      j = len;
  186.  179   1      
  187. C51 COMPILER V7.02b   D12CI                                                                09/28/2006 22:04:33 PAGE 4   
  188.  180   1              for(i=0; i<j; i++)
  189.  181   1                      *(buf+i) = inportb(D12_DATA);
  190.  182   1      
  191.  183   1              outportb(D12_COMMAND, 0xF2);
  192.  184   1      
  193.  185   1              if(bEPPflags.bits.in_isr == 0)
  194.  186   1                      ENABLE;
  195.  187   1      
  196.  188   1              return j;
  197.  189   1      }
  198.  190          
  199.  191          //写端点
  200.  192          unsigned char D12_WriteEndpoint(unsigned char endp, unsigned char len, unsigned char * buf)
  201.  193          {
  202.  194   1              unsigned char i;
  203.  195   1      
  204.  196   1              if(bEPPflags.bits.in_isr == 0)
  205.  197   1                      DISABLE;
  206.  198   1      
  207.  199   1              outportb(D12_COMMAND, endp);
  208.  200   1              i = inportb(D12_DATA);
  209.  201   1      
  210.  202   1              outportb(D12_COMMAND, 0xF0);
  211.  203   1              outportb(D12_DATA, 0);
  212.  204   1              outportb(D12_DATA, len);
  213.  205   1      
  214.  206   1              for(i=0; i<len; i++)
  215.  207   1                      outportb(D12_DATA, *(buf+i));
  216.  208   1      
  217.  209   1              outportb(D12_COMMAND, 0xFA);
  218.  210   1      
  219.  211   1              if(bEPPflags.bits.in_isr == 0)
  220.  212   1                      ENABLE;
  221.  213   1      
  222.  214   1              return len;
  223.  215   1      }
  224.  216          
  225.  217          //设置端点应答
  226.  218          void D12_AcknowledgeEndpoint(unsigned char endp)
  227.  219          {
  228.  220   1              outportb(D12_COMMAND, endp);
  229.  221   1              outportb(D12_COMMAND, 0xF1);
  230.  222   1              if(endp == 0)
  231.  223   1                      outportb(D12_COMMAND, 0xF2);
  232.  224   1      }
  233.  225          
  234.  226          //输出数据
  235.  227          void outportb(unsigned int Addr, unsigned char Data)
  236.  228          {
  237.  229   1              *((unsigned char xdata *) Addr) = Data;
  238.  230   1      }
  239.  231          
  240.  232          //输入数据
  241.  233          unsigned char inportb(unsigned int Addr)
  242.  234          {
  243.  235   1              return *((unsigned char xdata *) Addr);
  244.  236   1      }
  245.  237          
  246. MODULE INFORMATION:   STATIC OVERLAYABLE
  247.    CODE SIZE        =    670    ----
  248. C51 COMPILER V7.02b   D12CI                                                                09/28/2006 22:04:33 PAGE 5   
  249.    CONSTANT SIZE    =   ----    ----
  250.    XDATA SIZE       =   ----    ----
  251.    PDATA SIZE       =   ----    ----
  252.    DATA SIZE        =   ----      22
  253.    IDATA SIZE       =   ----    ----
  254.    BIT SIZE         =   ----    ----
  255. END OF MODULE INFORMATION.
  256. C51 COMPILATION COMPLETE.  0 WARNING(S),  0 ERROR(S)