⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 d12ci.lst

📁 USB 驱动源代码
💻 LST
字号:
C51 COMPILER V6.14  D12CI                                                                  10/12/2002 08:40:05 PAGE 1   


C51 COMPILER V6.14, COMPILATION OF MODULE D12CI
OBJECT MODULE PLACED IN .\D12ci.OBJ
COMPILER INVOKED BY: C:\KEIL\C51\BIN\C51.EXE .\D12ci.c OPTIMIZE(2,SPEED) DEBUG OBJECTEXTEND

stmt level    source

   1          #include <reg51.h>                /* special function register declarations   */
   2          #include "mainloop.h"
   3          #include "d12ci.h"
   4          #include "absacc.h"
   5          #include "epphal.h"
   6          
   7          #define D12_DATA 0xff02
   8          #define D12_COMMAND 0xff03
   9          
  10          extern EPPFLAGS bEPPflags;
  11          
  12          //设置地址使能
  13          void D12_SetAddressEnable(unsigned char bAddress, unsigned char bEnable)
  14          {
  15   1      	if(bEPPflags.bits.in_isr == 0)
  16   1      		DISABLE;
  17   1      
  18   1      	outportb(D12_COMMAND, 0xD0);//输出指令
  19   1      	if(bEnable)
  20   1      		bAddress |= 0x80;
  21   1      	outportb(D12_DATA, bAddress);//设置地址
  22   1      
  23   1      	if(bEPPflags.bits.in_isr == 0)
  24   1      		ENABLE;
  25   1      }
  26          
  27          //设置端点使能
  28          void D12_SetEndpointEnable(unsigned char bEnable)
  29          {
  30   1      	if(bEPPflags.bits.in_isr == 0)
  31   1      		DISABLE;
  32   1      
  33   1      	outportb(D12_COMMAND, 0xD8);//输出指令
  34   1      	if(bEnable)
  35   1      		outportb(D12_DATA, 1);//设置端点允许
  36   1      	else
  37   1      		outportb(D12_DATA, 0);//设置端点禁止
  38   1      
  39   1      	if(bEPPflags.bits.in_isr == 0)
  40   1      		ENABLE;
  41   1      }
  42          
  43          //模式设置
  44          void D12_SetMode(unsigned char bConfig, unsigned char bClkDiv)
  45          {
  46   1      	if(bEPPflags.bits.in_isr == 0)
  47   1      		DISABLE;
  48   1      
  49   1      	outportb(D12_COMMAND, 0xF3);//设置模式
  50   1      	outportb(D12_DATA, bConfig);
  51   1      	outportb(D12_DATA, bClkDiv);
  52   1      
  53   1      	if(bEPPflags.bits.in_isr == 0)
  54   1      		ENABLE;
  55   1      }
C51 COMPILER V6.14  D12CI                                                                  10/12/2002 08:40:05 PAGE 2   

  56          
  57          //DMA工作方式设置
  58          void D12_SetDMA(unsigned char bMode)
  59          {
  60   1      	if(bEPPflags.bits.in_isr == 0)
  61   1      		DISABLE;
  62   1      
  63   1      	outportb(D12_COMMAND, 0xFB);//设置DMA工作方式
  64   1      	outportb(D12_DATA, bMode);
  65   1      
  66   1      	if(bEPPflags.bits.in_isr == 0)
  67   1      		ENABLE;
  68   1      }
  69          
  70          //读取中断寄存器
  71          unsigned short D12_ReadInterruptRegister(void)
  72          {
  73   1      	unsigned char b1;
  74   1      	unsigned int j;
  75   1      
  76   1      	outportb(D12_COMMAND, 0xF4);//读取中断寄存器
  77   1      	b1 = inportb(D12_DATA);
  78   1      	j = inportb(D12_DATA);
  79   1      
  80   1      	j <<= 8;
  81   1      	j += b1;
  82   1      
  83   1      	return j;
  84   1      }
  85          
  86          //端点选择
  87          unsigned char D12_SelectEndpoint(unsigned char bEndp)
  88          {
  89   1      	unsigned char c;
  90   1      
  91   1      	if(bEPPflags.bits.in_isr == 0)
  92   1      		DISABLE;
  93   1      
  94   1      	outportb(D12_COMMAND, bEndp);//端点选择
  95   1      	c = inportb(D12_DATA);
  96   1      
  97   1      	if(bEPPflags.bits.in_isr == 0)
  98   1      		ENABLE;
  99   1      
 100   1      	return c;
 101   1      }
 102          
 103          //读取最后传输状态
 104          unsigned char D12_ReadLastTransactionStatus(unsigned char bEndp)
 105          {
 106   1      	outportb(D12_COMMAND, 0x40 + bEndp);//返回最后传输状态
 107   1      	return inportb(D12_DATA);
 108   1      }
 109          
 110          //读取端点状态
 111          unsigned char D12_ReadEndpointStatus(unsigned char bEndp)
 112          {
 113   1      	unsigned char c;
 114   1      
 115   1      	if(bEPPflags.bits.in_isr == 0)
 116   1      		DISABLE;
 117   1      
C51 COMPILER V6.14  D12CI                                                                  10/12/2002 08:40:05 PAGE 3   

 118   1      	outportb(D12_COMMAND, 0x80 + bEndp);//读取端点状态
 119   1      	c = inportb(D12_DATA);
 120   1      
 121   1      	if(bEPPflags.bits.in_isr == 0)
 122   1      		ENABLE;
 123   1      
 124   1      	return c;
 125   1      }
 126          
 127          //设置端点状态
 128          void D12_SetEndpointStatus(unsigned char bEndp, unsigned char bStalled)
 129          {
 130   1      	if(bEPPflags.bits.in_isr == 0)
 131   1      		DISABLE;
 132   1      
 133   1      	outportb(D12_COMMAND, 0x40 + bEndp);//设置端点状态
 134   1      	outportb(D12_DATA, bStalled);
 135   1      
 136   1      	if(bEPPflags.bits.in_isr == 0)
 137   1      		ENABLE;
 138   1      }
 139          
 140          //传输恢复
 141          void D12_SendResume(void)
 142          {
 143   1      	outportb(D12_COMMAND, 0xF6);//设置发送恢复
 144   1      }
 145          
 146          //读取当前帧号
 147          unsigned short D12_ReadCurrentFrameNumber(void)
 148          {
 149   1      	unsigned short i,j;
 150   1      
 151   1      	if(bEPPflags.bits.in_isr == 0)
 152   1      		DISABLE;
 153   1      
 154   1      	outportb(D12_COMMAND, 0xF5);//读取当前帧数目
 155   1      	i= inportb(D12_DATA);
 156   1      	j = inportb(D12_DATA);
 157   1      
 158   1      	i += (j<<8);
 159   1      
 160   1      	if(bEPPflags.bits.in_isr == 0)
 161   1      		ENABLE;
 162   1      
 163   1      	return i;
 164   1      }
 165          
 166          unsigned short D12_ReadChipID(void)
 167          {
 168   1      	unsigned short i,j;
 169   1      
 170   1      	if(bEPPflags.bits.in_isr == 0)
 171   1      		DISABLE;
 172   1      
 173   1      	outportb(D12_COMMAND, 0xFD);
 174   1      	i=inportb(D12_DATA);
 175   1      	j=inportb(D12_DATA);
 176   1      	i += (j<<8);
 177   1      
 178   1      	if(bEPPflags.bits.in_isr == 0)
 179   1      		ENABLE;
C51 COMPILER V6.14  D12CI                                                                  10/12/2002 08:40:05 PAGE 4   

 180   1      
 181   1      	return i;
 182   1      }
 183          
 184          //读取端点数据
 185          unsigned char D12_ReadEndpoint(unsigned char endp, unsigned char len, unsigned char * buf)
 186          {
 187   1      	unsigned char i, j;
 188   1      
 189   1      	if(bEPPflags.bits.in_isr == 0)
 190   1      		DISABLE;
 191   1      
 192   1      	outportb(D12_COMMAND, endp);
 193   1      	if((inportb(D12_DATA) & D12_FULLEMPTY) == 0) {
 194   2      		if(bEPPflags.bits.in_isr == 0)
 195   2      			ENABLE;
 196   2      		return 0;
 197   2      	}
 198   1      
 199   1      	outportb(D12_COMMAND, 0xF0);
 200   1      	j = inportb(D12_DATA);
 201   1      	j = inportb(D12_DATA);
 202   1      
 203   1      	if(j > len)
 204   1      		j = len;
 205   1      
 206   1      	for(i=0; i<j; i++)
 207   1      		*(buf+i) = inportb(D12_DATA);
 208   1      
 209   1      	outportb(D12_COMMAND, 0xF2);
 210   1      
 211   1      	if(bEPPflags.bits.in_isr == 0)
 212   1      		ENABLE;
 213   1      
 214   1      	return j;
 215   1      }
 216          
 217          //写端点
 218          unsigned char D12_WriteEndpoint(unsigned char endp, unsigned char len, unsigned char * buf)
 219          {
 220   1      	unsigned char i;
 221   1      
 222   1      	if(bEPPflags.bits.in_isr == 0)
 223   1      		DISABLE;
 224   1      
 225   1      	outportb(D12_COMMAND, endp);
 226   1      	i = inportb(D12_DATA);
 227   1      
 228   1      	outportb(D12_COMMAND, 0xF0);
 229   1      	outportb(D12_DATA, 0);
 230   1      	outportb(D12_DATA, len);
 231   1      
 232   1      	for(i=0; i<len; i++)
 233   1      		outportb(D12_DATA, *(buf+i));
 234   1      
 235   1      	outportb(D12_COMMAND, 0xFA);
 236   1      
 237   1      	if(bEPPflags.bits.in_isr == 0)
 238   1      		ENABLE;
 239   1      
 240   1      	return len;
 241   1      }
C51 COMPILER V6.14  D12CI                                                                  10/12/2002 08:40:05 PAGE 5   

 242          
 243          //设置端点应答
 244          void D12_AcknowledgeEndpoint(unsigned char endp)
 245          {
 246   1      	outportb(D12_COMMAND, endp);
 247   1      	outportb(D12_COMMAND, 0xF1);
 248   1      	if(endp == 0)
 249   1      		outportb(D12_COMMAND, 0xF2);
 250   1      }
 251          
 252          //输出数据
 253          void outportb(unsigned int Addr, unsigned char Data)
 254          {
 255   1      	*((unsigned char xdata *) Addr) = Data;
 256   1      }
 257          
 258          //输入数据
 259          unsigned char inportb(unsigned int Addr)
 260          {
 261   1      	return *((unsigned char xdata *) Addr);
 262   1      }
 263          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =   1007    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =   ----      43
   IDATA SIZE       =   ----    ----
   BIT SIZE         =   ----    ----
END OF MODULE INFORMATION.


C51 COMPILATION COMPLETE.  0 WARNING(S),  0 ERROR(S)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -