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