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

📄 dmadebug.c

📁 基于USB2.0芯片 ISP1581 的扫描仪固件源码,USB驱动模块
💻 C
📖 第 1 页 / 共 2 页
字号:
//***********************************************************************
//									     								                  *
//                P H I L I P S   P R O P R I E T A R Y          		   *    
//                                                                      *
//          COPYRIGHT (c)   1999 BY PHILIPS SINGAPORE (APIC).    		   *
//                    --  ALL RIGHTS RESERVED  --                 		*	
//                                                                      *
// 	File Name	:       DMADebug.c                                    *
// 	Author		:       Albert Goh					 					      *
// 	Created		:      	3 March 2000                               	*
//                  	                                                   *
//***********************************************************************
//***********************************************************************
//                                                                      *
// GDMADebug.c is the file that contain the routine for the GDMA debug  *
// It will be able to configured as master for slave for the debugging	*
//                                                                      *
//***********************************************************************
//***********************************************************************
//                                                                      *
//  Module History														            *
//  **************														            *
//																		                  *
//  Date   	Version			Author				Changes					      *
//  ====	   =======			======				=======					      *
//  030300	  0.1 			Albert				Created    				      *
//  291003    0.2          Sriram Paulraj    modification of DMA_Mode() *
//                                           and DMA_init()             *
//                                                                      *
//***********************************************************************

//***********************************************************************
//*																		               *
//*	                     Include Files Definition						   *
//*																		               *
//***********************************************************************

#include "standard.h"
#include "Kernel.h"
#include "D14.h"




//***********************************************************************
//*																		               *
//*	                 External Variable Definition 					      *
//*																		               *
//***********************************************************************

extern USB_DEVICE USB_Device;
extern DMA_INT_FLAG DMA_Int_Flag;
extern USB_INT_FLAG USB_Int_Flag;
extern volatile D14_CNTRL_REG xdata D14_Cntrl_Reg;
extern void Start_mSEC_Timer(Data);
extern UC Data;
extern UI Temp,PIO_Count;
extern KERNEL Kernel_Flag;
extern ULI 	bytecount;
extern FILESIZE FileSize;
extern UI	count;
extern UC idata Endpt_FIFO[64];
extern UC Type;

//***********************************************************************
//*																		               *
//*	                     Variable Definition 							      *
//*																		               *
//***********************************************************************

UI Count_PIO;

//***********************************************************************
//*																		               *
//*	                     Prototype Definition 							   *
//*																		               *
//***********************************************************************

void DMA_Debug_Mode(void);
void DMA_Init(void);
void DMA_Mode(Data);

//***********************************************************************
//*																		               *
//*	                     Routine Definition								   *
//*																		               *
//***********************************************************************

//***********************************************************************
//*										    							               *
//*	Routine 	: DMA Debug Mode                                 		   *
//*	Input		: None             									            *
//*	Output	: None                               					      *
//*	Function	: Generic DMA mode routine                			      *
//*																		               *
//***********************************************************************

void DMA_Debug_Mode(void)
{


   if(Kernel_Flag.BITS.Transfer_Start)
   {

      if(FileSize.Size.Address[0] == 0 &&
         FileSize.Size.Address[1] == 0 &&
         FileSize.Size.Address[2] == 0)
      {
         Kernel_Flag.BITS.Out_Reset_Done = 0;
         Kernel_Flag.BITS.In_Reset_Done = 0;
      }
         
      if(FileSize.Size.DIR == 0x00 || FileSize.Size.DIR == 0x80)
         DMA_Mode(Write);
      else
         DMA_Mode(Read);
   }
}


//***********************************************************************
//*										    							               *
//*	Routine 	: DMA Init                                       		   *
//*	Input		: ISP1581 SFR      									            *
//*	Output	: None                               					      *
//*	Function	: initialize the ISP1581 SFR              			      *
//*																		               *
//***********************************************************************

void DMA_Init(void)
{

   //stop external DMA controller
   // sri DMA_Start = GDMA_Stop;

	//reset DMA controller
   DMA_Reset = 0;			

	//issue DMA reset command to ISP1581
   D14_Cntrl_Reg.D14_DMA_COMMAND = DMA_RESET;

   //disable reset DMA controller
	DMA_Reset = 1;

   //read in external DMA controller
   //mode and setting
   Temp = Type;
   Temp &= 0x00FE;
   Temp <<= 1;

   //initialize GDMA burst mode and DMA mode         
	D14_Cntrl_Reg.D14_GDMA_CONFIG.VALUE = Temp;

   //check if external DMA controller is in master mode
   if(Type & 0x01)
   {
      //set ISP1581 to generic DMA master mode
   	D14_Cntrl_Reg.D14_UDMA_CONFIG.BITS.ATA_MODE = 1;
      D14_Cntrl_Reg.D14_DMA_HARDWARE.BITS.MASTER = 1; 
   }

   //initialize the config and hardware register to
   //set ISP1581 to generic DMA mode
	D14_Cntrl_Reg.D14_GDMA_CONFIG.BITS.CNTENA = 0;
	D14_Cntrl_Reg.D14_GDMA_CONFIG.BITS.WIDTH = 1;
	D14_Cntrl_Reg.D14_UDMA_CONFIG.BITS.IGNORE_IORDY = 0;

   D14_Cntrl_Reg.D14_UDMA_CONFIG.BITS.PIO_MODE = 0;
   D14_Cntrl_Reg.D14_UDMA_CONFIG.BITS.UDMA_MODE = 0;

	D14_Cntrl_Reg.D14_DMA_HARDWARE.BITS.ENDIAN = 0;
   D14_Cntrl_Reg.D14_DMA_HARDWARE.BITS.EOT_POL = 1;
   D14_Cntrl_Reg.D14_DMA_HARDWARE.BITS.ACK_POL = 0;
   D14_Cntrl_Reg.D14_DMA_HARDWARE.BITS.DREQ_POL = 1;
   D14_Cntrl_Reg.D14_DMA_HARDWARE.BITS.WRITE_POL = 0;
   D14_Cntrl_Reg.D14_DMA_HARDWARE.BITS.READ_POL = 0;
   
   //enable DMA interrupt
	D14_Cntrl_Reg.D14_DMA_INT_ENABLE.VALUE = 0x000D;

   //initialize internal variables											
	Kernel_Flag.BITS.Out_Reset_Done = 0;
	Kernel_Flag.BITS.In_Reset_Done = 0;
	Kernel_Flag.BITS.MPIO_Out_Reset_Done = 0;
	Kernel_Flag.BITS.MPIO_In_Reset_Done = 0;

	//reset DMA controller
   DMA_Reset = 0;			
	DMA_Reset = 1;			
	// sri DMA_Start = GDMA_Stop;
	
}


//***********************************************************************
//*										    							               *
//*	Routine 	: DMA Mode                                       		   *
//*	Input		: DMA Controller setting         				            *
//*	Output	: None                               					      *
//*	Function	: to do GDMA data transfer                			      *
//*																		               *
//***********************************************************************

void DMA_Mode(Data)
{


	if(Data)
   {
      // Write

      if(USB_Device.BITS.DMA_Test_Mode != PIO_Test)
      {
      
      	//stop DMA oontroller and initialize
        // sri DMA_Start = GDMA_Stop;
        DMA_Reset = 1;
        DMA_Reset = 0;
        DMA_Reset = 1;

         //check if DMA controller is in master mode   
         if(Type & 0x01)
            //set to write mode (MASTER MODE)
		      DMA_Wr_Rd = GDMA_Write;		
         else
	   	   //set to read mode (SLAVE MODE)
            DMA_Wr_Rd = GDMA_Read;		

         //check if reset in initiated
         //if not, goto reset procedure
		   if(!Kernel_Flag.BITS.Out_Reset_Done)
		   {
            //reset DMA controller
			  // sri  DMA_Start = GDMA_Stop;
			   //DMA_Reset = 0;			
			   //DMA_Reset = 1;
			   Kernel_Flag.BITS.Out_Reset_Done = 1;
			   Kernel_Flag.BITS.In_Reset_Done = 0;
		   }

         //initialize endpoint index
	   	D14_Cntrl_Reg.D14_ENDPT_INDEX = 7;
		   D14_Cntrl_Reg.D14_DMA_ENDPOINT = 4;


⌨️ 快捷键说明

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