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

📄 isr.lst

📁 采用PDIUSBD12开发的USB总线与429总线数据转换的单片机固件程序
💻 LST
字号:
C51 COMPILER V6.12  ISR                                                                    12/16/2004 20:32:07 PAGE 1   


C51 COMPILER V6.12, COMPILATION OF MODULE ISR
OBJECT MODULE PLACED IN E:\MCU\USB_FIRM\ISR.OBJ
COMPILER INVOKED BY: C:\COMP51\C51.EXE E:\MCU\USB_FIRM\ISR.C DB SB OE

stmt level    source

   1          #include "D12ci.h"
   2          
   3           EPPFLAGS bEPPflags;
   4           CONTROL_XFER ControlData;
   5          unsigned char idata OutBuf[EP1_PACKET_SIZE];
   6          unsigned char idata ControlWord[2];
   7          
   8          extern unsigned char D12_WriteEndpoint_ISR(unsigned char endp, unsigned char len,unsigned char * buf); //r
             -eentrant
   9          
  10          
  11          void myisr(void)
  12          {
  13   1      	unsigned int i_st;
  14   1      	bEPPflags.bits.in_isr=1;
  15   1      	i_st=D12_ReadInterruptRegister();//读中断寄存器
  16   1      
  17   1      	if(i_st!=0)
  18   1      	{
  19   2      //		if(i_st&D12_INT_BUSRESET)
  20   2      //			bEPPflags.bits.bus_reset=1;
  21   2      //		if(i_st&D12_INT_EOT)
  22   2      //			dma_eot();//DMA传输结束
  23   2      //		if(i_st&D12_INT_SUSPENDCHANGE)
  24   2      //			bEPPflags.bits.suspend=1;//挂起改变
  25   2      		if(i_st&D12_INT_ENDP0IN)
  26   2      			ep0_txdone();//端点0 IN中断
  27   2      		if(i_st&D12_INT_ENDP0OUT)
  28   2      			ep0_rxdone();//端点0 OUT中断
  29   2      		if(i_st&D12_INT_ENDP1IN)
  30   2      			ep1_txdone();//端点1 IN中断
  31   2      		if(i_st&D12_INT_ENDP1OUT)
  32   2      			ep1_rxdone();//端点1 OUT中断
  33   2      		if(i_st&D12_INT_ENDP2IN)
  34   2      			ep2_txdone();//端点2 IN中断
  35   2      		if(i_st&D12_INT_ENDP2OUT)
  36   2      			ep2_rxdone();//端点2 OUT中断
  37   2      	}
  38   1      
  39   1      	bEPPflags.bits.in_isr=0;
  40   1      }
  41          
  42          
  43          void ep0_rxdone()
  44          {
  45   1          unsigned char ep_last,i;
  46   1          ep_last=D12_ReadLastTransactionStatus(0);//清中断标志
  47   1          if(ep_last & D12_SETUPPACKET)//接收到setup包
  48   1          {
  49   2              ControlData.wLength=0;
  50   2              ControlData.wCount=0;
  51   2              if(D12_ReadEndpoint(0,sizeof(ControlData.DeviceRequest),
  52   2                        (unsigned char*)(&(ControlData.DeviceRequest)))!=sizeof(DEVICE_REQUEST))
  53   2              {
  54   3                  //setup包出错,返回
C51 COMPILER V6.12  ISR                                                                    12/16/2004 20:32:07 PAGE 2   

  55   3                  D12_SetEndpointStatus(0,1);
  56   3                  D12_SetEndpointStatus(1,1);
  57   3                  bEPPflags.bits.control_state=USB_IDLE;
  58   3                  return;
  59   3              }
  60   2              //数据高低字节交换,因为USB数据结构和KeilC51的不同,所以交换
  61   2              ControlData.DeviceRequest.wValue=SWAP(ControlData.DeviceRequest.wValue);
  62   2              ControlData.DeviceRequest.wIndex=SWAP(ControlData.DeviceRequest.wIndex);
  63   2              ControlData.DeviceRequest.wLength=SWAP(ControlData.DeviceRequest.wLength);
  64   2              //对控制端点的输入输出进行应答
  65   2              D12_AcknowledgeEndpoint(0);
  66   2              D12_AcknowledgeEndpoint(1);
  67   2              ControlData.wLength=ControlData.DeviceRequest.wLength;
  68   2              ControlData.wCount=0;
  69   2      
  70   2              if(ControlData.DeviceRequest.bmRequestType &
  71   2                       (unsigned char)USB_ENDPOINT_DIRECTION_MASK)
  72   2              {//从主机传输数据
  73   3                  bEPPflags.bits.setup_packet=1;
  74   3                  bEPPflags.bits.control_state=USB_TRANSMIT;
  75   3              }
  76   2              else
  77   2              {
  78   3                  if(ControlData.DeviceRequest.wLength==0)
  79   3                  {
  80   4                       bEPPflags.bits.setup_packet=1;
  81   4                       bEPPflags.bits.control_state=USB_IDLE;
  82   4                  }
  83   3                  else
  84   3                  {
  85   4                       if(ControlData.DeviceRequest.wLength>MAX_CONTROLDATA_SIZE)
  86   4                       {//接收数据长度为0
  87   5                            bEPPflags.bits.control_state=USB_IDLE;
  88   5                            D12_SetEndpointStatus(0,1);
  89   5                            D12_SetEndpointStatus(1,1);
  90   5                       }
  91   4                       else
  92   4                            bEPPflags.bits.control_state=USB_RECEIVE;
  93   4                   }
  94   3                }
  95   2            }
  96   1            else if(bEPPflags.bits.control_state==USB_RECEIVE)
  97   1            {//接收数据
  98   2                 i=D12_ReadEndpoint(0,EP0_PACKET_SIZE,ControlData.dataBuffer+ControlData.wCount);
  99   2                 ControlData.wCount+=i;
 100   2                 if(i!=EP0_PACKET_SIZE||ControlData.wCount>=ControlData.wLength)
 101   2                 {//数据接收完毕
 102   3                      bEPPflags.bits.setup_packet=1;
 103   3                      bEPPflags.bits.control_state=USB_IDLE;
 104   3      		   }
 105   2      	  }
 106   1      	  else
 107   1      		  bEPPflags.bits.control_state=USB_IDLE;//进入等待状态
 108   1      }
 109          
 110          //端点0 IN处理
 111          void ep0_txdone(void)
 112          {
 113   1      	short i=ControlData.wLength-ControlData.wCount;
 114   1      	D12_ReadLastTransactionStatus(1);//清中断标志位
 115   1      	if(bEPPflags.bits.control_state!=USB_TRANSMIT)
 116   1      		return;//非发送态,返回
C51 COMPILER V6.12  ISR                                                                    12/16/2004 20:32:07 PAGE 3   

 117   1      	if(i>=EP0_PACKET_SIZE)
 118   1      	{//剩下数据大于16B,发送16B
 119   2      		D12_WriteEndpoint_ISR(1,EP0_PACKET_SIZE,ControlData.pData+ControlData.wCount);
 120   2      		ControlData.wCount+=EP0_PACKET_SIZE;
 121   2      		bEPPflags.bits.control_state=USB_TRANSMIT;
 122   2      	}
 123   1      	else if(i!=0)
 124   1      	{//发送剩下的数据
 125   2      		D12_WriteEndpoint_ISR(1,i,ControlData.pData+ControlData.wCount);
 126   2      		ControlData.wCount+=i;
 127   2      		bEPPflags.bits.control_state=USB_IDLE;
 128   2      	}
 129   1      	else if(i==0)
 130   1      	{
 131   2      		D12_WriteEndpoint_ISR(1,0,0);//发送完毕,发送0B的数据包
 132   2      		bEPPflags.bits.control_state=USB_IDLE;
 133   2      	}
 134   1      }
 135          
 136          //端点1 IN处理
 137          void ep1_txdone(void)
 138          {
 139   1      	D12_ReadLastTransactionStatus(3);//清中断标志位
 140   1      }
 141          
 142          //端点1 OUT处理
 143          void ep1_rxdone(void)
 144          {
 145   1      	unsigned char len;
 146   1      	D12_ReadLastTransactionStatus(2);//清中断标志位
 147   1              len=D12_ReadEndpoint(2,2,ControlWord);
 148   1      	//len=D12_ReadEndpoint(2,sizeof(OutBuf),OutBuf);//读数据
 149   1      	if(len!=0)
 150   1                 bEPPflags.bits.ep1_rxdone=1;//标志接收到数据
 151   1      
 152   1      }
 153          
 154          //主端点IN控制
 155          void ep2_txdone(void)
 156          {
 157   1      	D12_ReadLastTransactionStatus(5);//清中断标志位
 158   1      }
 159          
 160          //主端点OUT控制
 161          void ep2_rxdone(void)
 162          {
 163   1      	unsigned char len;//,epstatus;
 164   1      	D12_ReadLastTransactionStatus(4);//清中断标志位
 165   1      ////	epstatus=D12_ReadEndpointStatus(4);//读取缓冲区状态
 166   1      ////	epstatus &=0x60;
 167   1      	//接收数据
 168   1              len=D12_ReadEndpoint(4,sizeof(OutBuf),OutBuf);//读数据
 169   1      	//len=D12_ReadEndpoint(4,2,ControlWord);
 170   1              if(len!=0)
 171   1                  bEPPflags.bits.ep2_rxdone=1;
 172   1      //	//if(epstatus==0x60)
 173   1      //	//	len=D12_ReadEndpoint(4,64,EpBuf);//读取双缓冲区中数据
 174   1      }
 175          
 176          
C51 COMPILER V6.12  ISR                                                                    12/16/2004 20:32:07 PAGE 4   

NAME                                    CLASS   MSPACE  TYPE    OFFSET  SIZE
====                                    =====   ======  ====    ======  ====


ep2_txdone . . . . . . . . . . . . . .  PUBLIC   CODE   PROC     0000H  -----
ControlWord. . . . . . . . . . . . . .  PUBLIC   IDATA  ARRAY    0000H  2
_D12_WriteEndpoint_ISR . . . . . . . .  EXTERN   CODE   PROC     -----  -----
_D12_ReadLastTransactionStatus . . . .  EXTERN   CODE   PROC     -----  -----
_epp_flags . . . . . . . . . . . . . .  * TAG *  -----  UNION    -----  2
  bits . . . . . . . . . . . . . . . .  MEMBER   -----  STRUCT   0000H  2
  value. . . . . . . . . . . . . . . .  MEMBER   -----  U_INT    0000H  2
_D12_AcknowledgeEndpoint . . . . . . .  EXTERN   CODE   PROC     -----  -----
D12_ReadInterruptRegister. . . . . . .  EXTERN   CODE   PROC     -----  -----
_D12_ReadEndpoint. . . . . . . . . . .  EXTERN   CODE   PROC     -----  -----
myisr. . . . . . . . . . . . . . . . .  PUBLIC   CODE   PROC     0000H  -----
  i_st . . . . . . . . . . . . . . . .  AUTO     DATA   U_INT    0000H  2
CONTROL_XFER . . . . . . . . . . . . .  TYPEDEF  -----  STRUCT   -----  23
  DeviceRequest. . . . . . . . . . . .  MEMBER   -----  STRUCT   0000H  8
  wLength. . . . . . . . . . . . . . .  MEMBER   -----  U_INT    0008H  2
  wCount . . . . . . . . . . . . . . .  MEMBER   -----  U_INT    000AH  2
  pData. . . . . . . . . . . . . . . .  MEMBER   -----  PTR      000CH  3
  dataBuffer . . . . . . . . . . . . .  MEMBER   -----  ARRAY    000FH  8
DEVICE_REQUEST . . . . . . . . . . . .  TYPEDEF  -----  STRUCT   -----  8
  bmRequestType. . . . . . . . . . . .  MEMBER   -----  U_CHAR   0000H  1
  bRequest . . . . . . . . . . . . . .  MEMBER   -----  U_CHAR   0001H  1
  wValue . . . . . . . . . . . . . . .  MEMBER   -----  U_INT    0002H  2
  wIndex . . . . . . . . . . . . . . .  MEMBER   -----  U_INT    0004H  2
  wLength. . . . . . . . . . . . . . .  MEMBER   -----  U_INT    0006H  2
_device_request. . . . . . . . . . . .  * TAG *  -----  STRUCT   -----  8
  bmRequestType. . . . . . . . . . . .  MEMBER   -----  U_CHAR   0000H  1
  bRequest . . . . . . . . . . . . . .  MEMBER   -----  U_CHAR   0001H  1
  wValue . . . . . . . . . . . . . . .  MEMBER   -----  U_INT    0002H  2
  wIndex . . . . . . . . . . . . . . .  MEMBER   -----  U_INT    0004H  2
  wLength. . . . . . . . . . . . . . .  MEMBER   -----  U_INT    0006H  2
EPPFLAGS . . . . . . . . . . . . . . .  TYPEDEF  -----  UNION    -----  2
  bits . . . . . . . . . . . . . . . .  MEMBER   -----  STRUCT   0000H  2
  value. . . . . . . . . . . . . . . .  MEMBER   -----  U_INT    0000H  2
OutBuf . . . . . . . . . . . . . . . .  PUBLIC   IDATA  ARRAY    0002H  4
bEPPflags. . . . . . . . . . . . . . .  PUBLIC   DATA   UNION    0000H  2
ControlData. . . . . . . . . . . . . .  PUBLIC   DATA   STRUCT   0002H  23
_D12_SetEndpointStatus . . . . . . . .  EXTERN   CODE   PROC     -----  -----
_flags . . . . . . . . . . . . . . . .  * TAG *  -----  STRUCT   -----  2
  timer. . . . . . . . . . . . . . . .  MEMBER   -----  FIELD    0000H  1.0
  bus_reset. . . . . . . . . . . . . .  MEMBER   -----  FIELD    0000H  1.1
  suspend. . . . . . . . . . . . . . .  MEMBER   -----  FIELD    0000H  1.2
  setup_packet . . . . . . . . . . . .  MEMBER   -----  FIELD    0000H  1.3
  remote_wakeup. . . . . . . . . . . .  MEMBER   -----  FIELD    0000H  1.4
  in_isr . . . . . . . . . . . . . . .  MEMBER   -----  FIELD    0000H  1.5
  control_state. . . . . . . . . . . .  MEMBER   -----  FIELD    0000H  2.6
  configuration. . . . . . . . . . . .  MEMBER   -----  FIELD    0001H  1.0
  command. . . . . . . . . . . . . . .  MEMBER   -----  FIELD    0001H  1.1
  ep1_rxdone . . . . . . . . . . . . .  MEMBER   -----  FIELD    0001H  1.2
  ep2_rxdone . . . . . . . . . . . . .  MEMBER   -----  FIELD    0001H  1.3
  ep1_buffull. . . . . . . . . . . . .  MEMBER   -----  FIELD    0001H  1.4
  ep2_buffull. . . . . . . . . . . . .  MEMBER   -----  FIELD    0001H  1.5
ep0_rxdone . . . . . . . . . . . . . .  PUBLIC   CODE   PROC     0000H  -----
  ep_last. . . . . . . . . . . . . . .  * REG *  DATA   U_CHAR   0007H  1
  i. . . . . . . . . . . . . . . . . .  * REG *  DATA   U_CHAR   0007H  1
ep1_rxdone . . . . . . . . . . . . . .  PUBLIC   CODE   PROC     0000H  -----
  len. . . . . . . . . . . . . . . . .  * REG *  DATA   U_CHAR   0007H  1
ep2_rxdone . . . . . . . . . . . . . .  PUBLIC   CODE   PROC     0000H  -----
C51 COMPILER V6.12  ISR                                                                    12/16/2004 20:32:07 PAGE 5   

NAME                                    CLASS   MSPACE  TYPE    OFFSET  SIZE
====                                    =====   ======  ====    ======  ====


  len. . . . . . . . . . . . . . . . .  * REG *  DATA   U_CHAR   0007H  1
ep0_txdone . . . . . . . . . . . . . .  PUBLIC   CODE   PROC     0000H  -----
  i. . . . . . . . . . . . . . . . . .  AUTO     DATA   INT      0000H  2
_control_xfer. . . . . . . . . . . . .  * TAG *  -----  STRUCT   -----  23
  DeviceRequest. . . . . . . . . . . .  MEMBER   -----  STRUCT   0000H  8
  wLength. . . . . . . . . . . . . . .  MEMBER   -----  U_INT    0008H  2
  wCount . . . . . . . . . . . . . . .  MEMBER   -----  U_INT    000AH  2
  pData. . . . . . . . . . . . . . . .  MEMBER   -----  PTR      000CH  3
  dataBuffer . . . . . . . . . . . . .  MEMBER   -----  ARRAY    000FH  8
ep1_txdone . . . . . . . . . . . . . .  PUBLIC   CODE   PROC     0000H  -----


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    563    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     25       4
   IDATA SIZE       =      6    ----
   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 + -