📄 dmadebug.c
字号:
//***********************************************************************
// *
// 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 + -