📄 vendor.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 *
// *
// *
//***********************************************************************
//***********************************************************************
//* *
//* 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 void rt2_process();
extern void tt2_process();
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[MAX_BUF];
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 Mode *
//* Input : DMA Controller setting *
//* Output : None *
//* Function : to do GDMA data transfer *
//* *
//***********************************************************************
void DMA_Mode(Data)
{
UI Datcount;
UC i;
if(Data)
{
//read
do
{
//Check for Out Token ACK interrupt
while(!USB_Int_Flag.BITS.EP2RX);
EA_DISABLE;
USB_Int_Flag.BITS.EP2RX = 0;
D14_Cntrl_Reg.D14_ENDPT_INDEX = 4;
//Read in FIFO data
if (bytecount > PIO_Count)
{
Datcount = PIO_Count;
}
else
{
Datcount = bytecount;
}
for(i = 0 ; i < (UC)Datcount ; i++)
Endpt_FIFO[i] = D14_Cntrl_Reg.D14_DATA_PORT_LSB;
EA_ENABLE;
bytecount -= Datcount;
}while(bytecount);
rt2_process();
}
else
{
//write
do
{
//initialize endpoint index
D14_Cntrl_Reg.D14_ENDPT_INDEX = 5;
//Write data to FIFO
if (bytecount>PIO_Count)
{
D14_Cntrl_Reg.D14_BUFFER_LENGTH_LSB =( unsigned char ) PIO_Count;
D14_Cntrl_Reg.D14_BUFFER_LENGTH_MSB = ( unsigned char ) (PIO_Count>>8);
Datcount = PIO_Count;
}
else
{
D14_Cntrl_Reg.D14_BUFFER_LENGTH_LSB =( unsigned char ) bytecount;
D14_Cntrl_Reg.D14_BUFFER_LENGTH_MSB = ( unsigned char ) (bytecount>>8);
Datcount = bytecount;
}
tt2_process();
for(Count_PIO = 0 ; Count_PIO < Datcount ; Count_PIO++)
D14_Cntrl_Reg.D14_DATA_PORT_LSB = Endpt_FIFO[Count_PIO];
//Check for In Token ACK
while(!USB_Int_Flag.BITS.EP2TX)
{
if(USB_Int_Flag.BITS.SUSP || Kernel_Flag.BITS.Bus_Reset || USB_Int_Flag.BITS.EP0SETUP)
break;
}
EA_DISABLE;
USB_Int_Flag.BITS.EP2TX = 0;
EA_ENABLE;
bytecount -= Datcount;
}while(bytecount);
//stop DMA controller
DMA_Start = GDMA_Stop;
//transfewr done,reset internal variables
DMA_Int_Flag.BITS.DMA_DONE = 0;
Count_PIO = 0;
}
Kernel_Flag.BITS.Transfer_Start = 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -