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

📄 kisr.lst

📁 飞利浦D12的AT89C52固件
💻 LST
📖 第 1 页 / 共 5 页
字号:

  83   2      		if(i_st & D12_INT_ENDP2OUT)
  84   2      			main_rxdone();
  85   2      		
  86   2      	}
  87   1      	
  88   1      	bEPPflags.bits.in_isr = 0;
  89   1      	
  90   1      }
  91          
  92          usb_isr() interrupt 0
  93          {
  94   1      	DISABLE;
  95   1      	fn_usb_isr();
  96   1      	ENABLE;
  97   1      }
  98          void bus_reset(void)
  99          {
 100   1      }
 101          void dma_eot(void)
 102          {
 103   1      }
 104          //---------------------------------
 105          void ep0_rxdone(void)
 106          {
 107   1      	unsigned char ep_last, i;
 108   1      
 109   1      	ep_last = D12_ReadLastTransactionStatus(0); // Clear interrupt flag
 110   1      	if (ep_last & D12_SETUPPACKET) {
 111   2      
 112   2      		ControlData.wLength = 0;
 113   2      		ControlData.wCount = 0;
 114   2      	//判断端点是否满,如是,则取出
 115   2      		if( D12_ReadEndpoint(0, sizeof(ControlData.DeviceRequest),
 116   2      			(unsigned char *)(&(ControlData.DeviceRequest))) != sizeof(DEVICE_REQUEST) ) {
 117   3      
 118   3      			D12_SetEndpointStatus(0, 1);
 119   3      			D12_SetEndpointStatus(1, 1);
 120   3      			bEPPflags.bits.control_state = USB_IDLE;
 121   3      			
 122   3      			return;
 123   3      		}
 124   2      
 125   2      		ControlData.DeviceRequest.wValue = SWAP(ControlData.DeviceRequest.wValue);
 126   2      		ControlData.DeviceRequest.wIndex = SWAP(ControlData.DeviceRequest.wIndex);
 127   2      		ControlData.DeviceRequest.wLength = SWAP(ControlData.DeviceRequest.wLength);
 128   2      
 129   2      		// Acknowledge setup here to unlock in/out endp
 130   2      	//向控制输出端点发送应答建立命令以重新使能下一个建立阶段
 131   2      		D12_AcknowledgeEndpoint(0);
 132   2      		D12_AcknowledgeEndpoint(1);
 133   2      
 134   2      		ControlData.wLength = ControlData.DeviceRequest.wLength;
 135   2      		ControlData.wCount = 0;
 136   2      	//需要证实控制传输是控制读还是写,如果是读:
 137   2      	//如果控制传输是一个控制读类型那就是说器件需要在下一个数据阶段向
 138   2      	//主机发回数据包.MCU需要设置一个标志以指示USB 设备现在正处于传输
 139   2      	//模式即准备在主机发送请求时发送数据
 140   2      
 141   2      		if (ControlData.DeviceRequest.bmRequestType & (unsigned char)USB_ENDPOINT_DIRECTION_MASK) {
 142   3      			bEPPflags.bits.setup_packet = 1;
 143   3      			bEPPflags.bits.control_state = USB_IDLE;		/* get command */
 144   3      		}
C51 COMPILER V6.20c  KISR                                                                  10/31/2002 21:55:46 PAGE 16  

 145   2      	//如果是写
 146   2      		else {
 147   3      			if (ControlData.DeviceRequest.wLength == 0) {
 148   4      				bEPPflags.bits.setup_packet = 1;
 149   4      				bEPPflags.bits.control_state = USB_IDLE;		/* set command */
 150   4      			}
 151   3      			else {
 152   4      				if(ControlData.DeviceRequest.wLength > MAX_CONTROLDATA_SIZE) {
 153   5      					bEPPflags.bits.control_state = USB_IDLE;
 154   5      					D12_SetEndpointStatus(0, 1);
 155   5      					D12_SetEndpointStatus(1, 1);
 156   5      				}
 157   4      				else {
 158   5      					bEPPflags.bits.control_state = USB_RECEIVE;	/* set command with OUT token */
 159   5      				}
 160   4      			} // set command with data
 161   3      		} // else set command
 162   2      	} // if setup packet
 163   1      
 164   1      	else if (bEPPflags.bits.control_state == USB_RECEIVE) {
 165   2      		i =	D12_ReadEndpoint(0, EP0_PACKET_SIZE,
 166   2      			ControlData.dataBuffer + ControlData.wCount);
 167   2      
 168   2      		ControlData.wCount += i;
 169   2      		if( i != EP0_PACKET_SIZE || ControlData.wCount >= ControlData.wLength) {
 170   3      			bEPPflags.bits.setup_packet = 1;
 171   3      			bEPPflags.bits.control_state = USB_IDLE;
 172   3      		}
 173   2      	}
 174   1      
 175   1      	else {
 176   2      		bEPPflags.bits.control_state = USB_IDLE;
 177   2      	}
 178   1      
 179   1      }
 180          //----------------------------------
 181          void ep0_txdone(void)
 182          {
 183   1      	short i = ControlData.wLength - ControlData.wCount;
 184   1      
 185   1      	D12_ReadLastTransactionStatus(1); // Clear interrupt flag
 186   1      
 187   1      	if (bEPPflags.bits.control_state != USB_TRANSMIT) 
 188   1      		return;
 189   1      	//-------------------------
 190   1      	if( i >= EP0_PACKET_SIZE) {
 191   2      		D12_WriteEndpoint(1, EP0_PACKET_SIZE, ControlData.pData + ControlData.wCount);
 192   2      		ControlData.wCount += EP0_PACKET_SIZE;
 193   2      
 194   2      		bEPPflags.bits.control_state = USB_TRANSMIT;
 195   2      	}
 196   1      	else if( i != 0) {
 197   2      		D12_WriteEndpoint(1, i, ControlData.pData + ControlData.wCount);
 198   2      		ControlData.wCount += i;
 199   2      
 200   2      		bEPPflags.bits.control_state = USB_IDLE;
 201   2      	}
 202   1      	else if (i == 0){
 203   2      		D12_WriteEndpoint(1, 0, 0); // Send zero packet at the end ???
 204   2      
 205   2      		bEPPflags.bits.control_state = USB_IDLE;
 206   2      	}
C51 COMPILER V6.20c  KISR                                                                  10/31/2002 21:55:46 PAGE 17  

 207   1      
 208   1      }
 209          //----------------------------------
 210          void ep1_txdone(void)
 211          {
 212   1      	D12_ReadLastTransactionStatus(3); /* Clear interrupt flag */
 213   1      }
 214          
 215          void ep1_rxdone(void)
 216          {
 217   1      	unsigned char len;
 218   1      
 219   1      	D12_ReadLastTransactionStatus(2); /* Clear interrupt flag */
 220   1      
 221   1      	len = D12_ReadEndpoint(2, sizeof(GenEpBuf), GenEpBuf);
 222   1      
 223   1      	if(len != 0)
 224   1      		bEPPflags.bits.ep1_rxdone = 1;
 225   1      }
 226          //---------------------------------
 227          void main_txdone(void)
 228          {
 229   1      	unsigned char len;
 230   1      
 231   1      	D12_ReadLastTransactionStatus(5); /* Clear interrupt flag */
 232   1      
 233   1      	len = ioSize - ioCount;
 234   1      	if(len == 0) {
 235   2      		if(bEPPflags.bits.dma_state == DMA_PENDING)
 236   2      			bEPPflags.bits.setup_dma ++;
 237   2      		else
 238   2      			bEPPflags.bits.dma_state = DMA_IDLE;
 239   2      	}
 240   1      	else {
 241   2      		if(len > 64)
 242   2      			len = 64;
 243   2      		if(bNoRAM)
 244   2      			len = D12_WriteEndpoint(5, len, EpBuf + ioCount);
 245   2      		else
 246   2      			len = D12_WriteEndpoint(5, len, MainEpBuf + ioCount);
 247   2      		ioCount += len;
 248   2      	}
 249   1      }
 250          
 251          void main_rxdone(void)
 252          {
 253   1      	unsigned char len;
 254   1      
 255   1      	D12_ReadLastTransactionStatus(4); /* Clear interrupt flag */
 256   1      
 257   1      	if(bNoRAM)
 258   1      		len = D12_ReadEndpoint(4, 64, EpBuf + ioCount);
 259   1      	else
 260   1      		len = D12_ReadEndpoint(4, 64, MainEpBuf + ioCount);
 261   1      	ioCount += len;
 262   1      	if(bNoRAM)
 263   1      		len = D12_ReadEndpoint(4, 64, EpBuf + ioCount);
 264   1      	else
 265   1      		len = D12_ReadEndpoint(4, 64, MainEpBuf + ioCount);
 266   1      	ioCount += len;
 267   1      	if(ioCount >= ioSize) {
 268   2      		if(bEPPflags.bits.dma_state == DMA_PENDING)
C51 COMPILER V6.20c  KISR                                                                  10/31/2002 21:55:46 PAGE 18  

 269   2      			bEPPflags.bits.setup_dma ++;
 270   2      		else
 271   2      			bEPPflags.bits.dma_state = DMA_IDLE;
 272   2      	}
 273   1      	
 274   1      }
 275          
C51 COMPILER V6.20c  KISR                                                                  10/31/2002 21:55:46 PAGE 19  

ASSEMBLY LISTING OF GENERATED OBJECT CODE


             ; FUNCTION timer_isr (BEGIN)
0000 C0E0              PUSH    ACC
0002 C0D0              PUSH    PSW
0004 75D000            MOV     PSW,#00H
0007 C007              PUSH    AR7
                                           ; SOURCE LINE # 42
                                           ; SOURCE LINE # 44
0009 C2AF              CLR     EA
                                           ; SOURCE LINE # 45
000B E500        R     MOV     A,ClockTicks+03H
000D 2401              ADD     A,#01H
000F F500        R     MOV     ClockTicks+03H,A
0011 E4                CLR     A
0012 3500        R     ADDC    A,ClockTicks+02H
0014 F500        R     MOV     ClockTicks+02H,A
0016 E4                CLR     A
0017 3500        R     ADDC    A,ClockTicks+01H
0019 F500        R     MOV     ClockTicks+01H,A
001B E4                CLR     A
001C 3500        R     ADDC    A,ClockTicks
001E F500        R     MOV     ClockTicks,A
                                           ; SOURCE LINE # 46
0020 AF00        R     MOV     R7,bEPPflags
0022 EF                MOV     A,R7
0023 4401              ORL     A,#01H
0025 F500        R     MOV     bEPPflags,A
                                           ; SOURCE LINE # 47
0027 D2AF              SETB    EA
                                           ; SOURCE LINE # 48
0029 D007              POP     AR7
002B D0D0              POP     PSW
002D D0E0              POP     ACC
002F 32                RETI    
             ; FUNCTION timer_isr (END)

             ; FUNCTION fn_usb_isr (BEGIN)
                                           ; SOURCE LINE # 51
                                           ; SOURCE LINE # 52
                                           ; SOURCE LINE # 55
0000 AF00        R     MOV     R7,bEPPflags
0002 EF                MOV     A,R7
0003 4420              ORL     A,#020H
0005 F500        R     MOV     bEPPflags,A
                                           ; SOURCE LINE # 58
0007 120000      E     LCALL   D12_ReadInterruptRegister
000A 8E00        R     MOV     i_st,R6
000C 8F00        R     MOV     i_st+01H,R7
                                           ; SOURCE LINE # 60
000E E500        R     MOV     A,i_st+01H
0010 4500        R     ORL     A,i_st
0012 6053              JZ      ?C0002
                                           ; SOURCE LINE # 61
0014 E500        R     MOV     A,i_st+01H
0016 30E60A            JNB     ACC.6,?C0003
                                           ; SOURCE LINE # 62
0019 120000      R     LCALL   bus_reset
                                           ; SOURCE LINE # 63
001C AF00        R     MOV     R7,bEPPflags
001E EF                MOV     A,R7
C51 COMPILER V6.20c  KISR                                                                  10/31/2002 21:55:46 PAGE 20  

001F 4402              ORL     A,#02H
0021 F500        R     MOV     bEPPflags,A
                                           ; SOURCE LINE # 64
0023         ?C0003:
                                           ; SOURCE LINE # 66
0023 E500        R     MOV     A,i_st
0025 30E003            JNB     ACC.0,?C0004
                                           ; SOURCE LINE # 67
0028 120000      R     LCALL   dma_eot
002B         ?C0004:
                                           ; SOURCE LINE # 69
002B E500        R     MOV     A,i_st+01H
002D 30E707            JNB     ACC.7,?C0005
                                           ; SOURCE LINE # 70
0030 AF00        R     MOV     R7,bEPPflags
0032 EF                MOV     A,R7
0033 4404              ORL     A,#04H
0035 F500        R     MOV     bEPPflags,A
0037         ?C0005:
                                           ; SOURCE LINE # 73
0037 E500        R     MOV     A,i_st+01H
0039 30E103            JNB     ACC.1,?C0006
                                           ; SOURCE LINE # 74
003C 120000      R     LCALL   ep0_txdone
003F         ?C0006:
                                           ; SOURCE LINE # 75
003F E500        R     MOV     A,i_st+01H
0041 30E003            JNB     ACC.0,?C0007
                                           ; SOURCE LINE # 76
0044 120000      R     LCALL   ep0_rxdone
0047         ?C0007:
                                           ; SOURCE LINE # 77
0047 E500        R     MOV     A,i_st+01H

⌨️ 快捷键说明

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