www.pudn.com > MP3+JPEG.rar > DMA_ISR.asm


 
.include GPL162002.inc 
 
.public DMA_Channel_0 
.public DMA_Channel_1 
.public DMA_Channel_2 
.public DMA_Channel_3 
 
.external _SDC_AB_Buffer_Ctrl 
.external _R_USB_RW_Flag	// This bit is used in ISR to indicate Read 10 or Write 10.  
							//	1 : Read 10		2 : Write 10 
////////////////////////////////////////////////////// 
.define		C_Buffer_A_Empty				0x0001 
.define		C_Buffer_A_Full					0x0002 
.define		C_Buffer_B_Empty				0x0004 
.define		C_Buffer_B_Full					0x0008 
.define		C_SDC_Access_A					0x0010 
.define		C_SDC_Access_B					0x0020 
.define		C_USB_Access_A					0x0040 
.define		C_USB_Access_B					0x0080 
.define		C_AB_Buffer_1					0x0100 
.define		C_AB_Buffer_2					0x0200 
.define		C_AB_Buffer_3					0x0400 
.define		C_AB_Buffer_4					0x0800 
 
 
DMA_ISR_Section:	.section	.code 
 
 
////////////////////////////////////////////////////////////////////////////////////////// 
// DMA Channel 0 Interrupt 
DMA_Channel_0: 
		//-------------------------------------------------------------------- 
		// USB DMA  
		r1=0x0000				// Disable Bulk IN Auto Set 
		[P_USBD_EPAutoSet]=r1 
		 
		r1=0x0000				// Disable DMA mode 
		[P_USBD_Function]=r1 
		 
		/////////////////////////// 
		// Check Read 10 or Write 10	 
		r1=[_R_USB_RW_Flag] 
		cmp r1,0x01 
		jne	?L_USB_Write_10 
		 
		//********************************************************* 
		?L_USB_Read_10: 
			 
		 
		?L_BI_PKT_Clear: 
			r1=[P_USBD_EPEvent] 
			test r1,0x0100 
			jnz ?L_BI_PKT_Clear 
		 
			r1=0x0600 
			[P_USBD_EPEvent]=r1 
		 
		//Check Send Buffer A or Buffer B to USB 
			r1=[_SDC_AB_Buffer_Ctrl] 
			test r1,C_USB_Access_A 
			jz ?L_USB_Send_Buffer_B 
		 
		?L_USB_Send_Buffer_A: 
			r1 &= ~C_USB_Access_A 
			r1 = r1 + C_USB_Access_B + C_Buffer_A_Empty 
			[_SDC_AB_Buffer_Ctrl]=r1 
			 
			retf 
			 
		?L_USB_Send_Buffer_B: 
			r1 &= ~C_USB_Access_B 
			r1 =r1+  C_USB_Access_A + C_Buffer_B_Empty 
			[_SDC_AB_Buffer_Ctrl]=r1 
					 
			retf 
	 
	//*******************************************************	 
		?L_USB_Write_10: 
						 
			r1=0x0010 
			[P_USBD_EPEvntClear]=r1 
			 
			r1=0x2000;		// Bulk OUT NACK Reset 
			[P_USBD_EPEvent]=r1 
		 
			//Check USB Write to Buffer A or Buffer B 
			r1=[_SDC_AB_Buffer_Ctrl] 
			test r1,C_USB_Access_A 
			jz ?L_USB_Write_Buffer_B 
			 
		?L_USB_Write_Buffer_A: 
			r1 &= ~C_USB_Access_A 
			r1 = r1 + C_USB_Access_B + C_Buffer_A_Full 
			[_SDC_AB_Buffer_Ctrl]=r1 
		 
			retf 
			 
		?L_USB_Write_Buffer_B: 
			r1 &= ~C_USB_Access_B 
			r1 = r1 + C_USB_Access_A + C_Buffer_B_Full 
			[_SDC_AB_Buffer_Ctrl]=r1 
			 
			retf 
			 
 
////////////////////////////////////////////////////////////////////////////////////////// 
// DMA Channel 1 Interrupt			 
DMA_Channel_1:			 
 
		retf 
 
 
////////////////////////////////////////////////////////////////////////////////////////// 
// DMA Channel 2 Interrupt 
DMA_Channel_2: 
		//	DrvSDCReadSector_INT 
		r1=[_R_USB_RW_Flag] 
		cmp r1,0x01 
		jne	?L_USB_Write_10 
	 
	?L_USB_Read_10: 
			r1=[_SDC_AB_Buffer_Ctrl] 
			test r1,C_SDC_Access_A 
			jz ?L_Read_SDC_To_Buffer_B 
		 
		?L_Read_SDC_To_Buffer_A:	 
			r1 &= ~C_SDC_Access_A 
			r1 =r1 + C_SDC_Access_B + C_Buffer_A_Full 
			[_SDC_AB_Buffer_Ctrl]=r1		 
		 
			retf 
		 
		?L_Read_SDC_To_Buffer_B: 
			r1 &= ~C_SDC_Access_B 
			r1 =r1 + C_SDC_Access_A + C_Buffer_B_Full 
			[_SDC_AB_Buffer_Ctrl]=r1 
		 
			retf 
 
	?L_USB_Write_10: 
			r1=[_SDC_AB_Buffer_Ctrl] 
			test r1,C_SDC_Access_A 
			jz ?L_Write_Buffer_B_To_SDC 
	 
		?L_Write_Buffer_A_To_SDC: 
			r1 &= ~C_SDC_Access_A 
			r1 =r1 + C_SDC_Access_B + C_Buffer_A_Empty 
			[_SDC_AB_Buffer_Ctrl]=r1		 
		 
			retf 
		 
		?L_Write_Buffer_B_To_SDC: 
			r1 &= ~C_SDC_Access_B 
			r1 =r1 + C_SDC_Access_A + C_Buffer_B_Empty 
			[_SDC_AB_Buffer_Ctrl]=r1		 
		 
			retf 
			 
////////////////////////////////////////////////////////////////////////////////////////// 
// DMA Channel 3 Interrupt 
DMA_Channel_3: 
 
		retf