📄 usb_user.c
字号:
/*
File Name : USB_USER.C
Description : Read and Write DSP memory by USB communication.
Programmer : Jack Song
Make Data : 2005.6.7
Change : xxxx...(Name) yyyy,mm.dd(Date)
Version : 1.00
*/
#include <c8051f320.h>
#include "USB_REGISTER.h"
#define c_cUSER
#include <USB_USER.h>
void Fun_Pro_Main()
{
g_ucFStatus = FS_CMD;
g_ucHostCmd = CMD_OTHERS;
while(1)
{
switch (g_ucFStatus)
{
case FS_CMD:
if(g_ucUsbFlag)
{ g_ucUsbFlag = 0;
g_ucHostCmd = g_ucUsbGData[0];
switch (g_ucHostCmd)
{
case CMD_TEST:
Fun_Pro_Test();
POLL_WRITE_BYTE(INDEX, 1); // Set index to endpoint 1 registers
Fun_Fifo_Write(FIFO_EP1, 2, &g_ucUsbSData);
POLL_WRITE_BYTE(EINCSR1, rbInINPRDY);
break;
case CMD_READ_EINIT:
Fun_Pro_ReadEinit();
break;
case CMD_WRITE_EINIT:
Fun_Pro_WriteEInit();
POLL_WRITE_BYTE(INDEX, 1); // Set index to endpoint 1 registers
Fun_Fifo_Write(FIFO_EP1, 2, &g_ucUsbSData);
POLL_WRITE_BYTE(EINCSR1, rbInINPRDY);
break;
case CMD_READ_CODE:
Fun_Pro_ReadCode();
break;
case CMD_WRITE_CODE:
g_ulDestAdd = g_ucUsbGData[1] + g_ucUsbGData[2]*256 + g_ucUsbGData[3]*256*256 + g_ucUsbGData[4]*256*256*256;
g_uiCodeLength = g_ucUsbGData[5] + g_ucUsbGData[6]*256;
g_ucFStatus = FS_DATA;
// Fun_Pro_WriteCode();
break;
default: break;
}
}
break;
case FS_DATA:
if(g_ucUsbFlag)
{
// Fun_Pro_WriteCode();
Hpi_Write_Section(g_ulDestAdd,g_ucUsbGData,g_ucCount); //write data to 6201 memory
g_ulDestAdd = g_ulDestAdd + g_ucCount/4;
g_uiCodeLength -= g_ucCount/4;
if(g_ucCount < 64) g_ucFStatus = FS_CMD;
if((g_ucCount <64) & (g_uiCodeLength = 0)) g_ucUsbSData[1] = 0;
else g_ucUsbSData[1] = ERROR_DATA;
g_ucUsbSData[0] = CMD_WRITE_CODE;
POLL_WRITE_BYTE(INDEX, 1); // Set index to endpoint 1 registers
Fun_Fifo_Write(FIFO_EP1, 2, &g_ucUsbSData);
POLL_WRITE_BYTE(EINCSR1, rbInINPRDY);
g_ucUsbFlag = 0;
}
break;
default: break;
}
}
}
void Fun_Pro_Test()
{
g_ucUsbSData[0] = g_ucHostCmd;
g_ucUsbSData[1] = 0x00;
}
void Fun_Pro_ReadEinit()
{
}
void Fun_Pro_WriteEInit()
{
unsigned long ulData;
ulData = g_ucUsbGData[1] + g_ucUsbGData[2]*256 + g_ucUsbGData[3]*256*256 + g_ucUsbGData[4]*256*256*256;
Hpi_Write_Word(ulData,EMIF_GLOBAL_CONTORL); //write emif registers
ulData = g_ucUsbGData[5] + g_ucUsbGData[6]*256 + g_ucUsbGData[7]*256*256 + g_ucUsbGData[8]*256*256*256;
Hpi_Write_Word(ulData,EMIF_CE1_CONTORL); //write emif registers
ulData = g_ucUsbGData[9] + g_ucUsbGData[10]*256 + g_ucUsbGData[11]*256*256 + g_ucUsbGData[12]*256*256*256;
Hpi_Write_Word(ulData,EMIF_CE0_CONTORL); //write emif registers
ulData = g_ucUsbGData[13] + g_ucUsbGData[14]*256 + g_ucUsbGData[15]*256*256 + g_ucUsbGData[16]*256*256*256;
Hpi_Write_Word(ulData,EMIF_CE2_CONTORL); //write emif registers
ulData = g_ucUsbGData[17] + g_ucUsbGData[18]*256 + g_ucUsbGData[19]*256*256 + g_ucUsbGData[20]*256*256*256;
Hpi_Write_Word(ulData,EMIF_CE3_CONTORL); //write emif registers
ulData = g_ucUsbGData[21] + g_ucUsbGData[22]*256 + g_ucUsbGData[23]*256*256 + g_ucUsbGData[24]*256*256*256;
Hpi_Write_Word(ulData,EMIF_SDRAM_CONTORL); //write emif registers
ulData = g_ucUsbGData[25] + g_ucUsbGData[26]*256 + g_ucUsbGData[27]*256*256 + g_ucUsbGData[28]*256*256*256;
Hpi_Write_Word(ulData,EMIF_SDRAM_REFRESH); //write emif registers
g_ucUsbSData[0] = g_ucHostCmd;
g_ucUsbSData[1] = 0x00;
}
void Fun_Pro_ReadCode()
{}
void Fun_Pro_WriteCode()
{
}
/************************************************/
/* Name: Hpi_Write_Section() */
/* In: delay */
/* Out: None */
/* Description: main delay functions */
/************************************************/
void Hpi_WakeUp_DSP()
{
/*write HPIC with HWOB = 1,1st halfword transferred is least significant*/
/* HCNTRL1 HCNTRL0 HHWIL */
HPIC0(0x0003); // 0 0 0
HPIC1(0x0003); // 0 0 1
}
/************************************************/
/* Name: Hpi_Write_Word() */
/* In: delay */
/* Out: None */
/* Description: main delay functions */
/************************************************/
void Hpi_Write_Word(unsigned long ulSourceWord,unsigned long ulDestAdd)
{
/*write HPIC with HWOB = 1,1st halfword transferred is least significant*/
/* HCNTRL1 HCNTRL0 HHWIL */
HPIC0(0x0001); // 0 0 0
HPIC1(0x0001); // 0 0 1
/*write destinaation address to HPIA,1st halfword is least significan */
/* HCNTRL1 HCNTRL0 HHWIL */
HPIA0((uint)(ulDestAdd & 0x0ffff)); // 0 1 0
HPIA1((uint)((ulDestAdd >> 16) & 0x0ffff)); // 0 1 1
/*write source word to HPID,1st halfword is least significan */
/* HCNTRL1 HCNTRL0 HHWIL */
HPID0((uint)(ulSourceWord & 0x0ffff)); // 1 1 0
HPID1((uint)((ulSourceWord >> 16) & 0x0ffff)); // 1 1 1
}
/************************************************/
/* Name: Hpi_Write_Section() */
/* In: delay */
/* Out: None */
/* Description: main delay functions */
/************************************************/
void Hpi_Write_Section(unsigned long ulDestAdd,unsigned char *uiSource,unsigned int uiLength)
{
uint y;
/*write HPIC with HWOB = 1,1st halfword transferred is least significant*/
/* HCNTRL1 HCNTRL0 HHWIL */
HPIC0(0x0001); // 0 0 0
HPIC1(0x0001); // 0 0 1
/*write destinaation address to HPIA,1st halfword is least significan */
/* HCNTRL1 HCNTRL0 HHWIL */
HPIA0((uint)(ulDestAdd & 0x0ffff)); // 0 1 0
HPIA1((uint)((ulDestAdd >> 16) & 0x0ffff)); // 0 1 1
/*write source section to HPID,1st halfword is least significan */
/* HCNTRL1 HCNTRL0 HHWIL */
for(y = 0; y < uiLength; y++)
{
HPID0_SECTION(uiSource); // 1 0 0
HPID1_SECTION(uiSource); // 1 0 1
}
}
void Fun_Fifo_Write(BYTE addr, unsigned int uNumBytes, BYTE * pData)
{
int i;
// If >0 bytes requested,
if (uNumBytes)
{
while(USB0ADR & 0x80); // Wait for BUSY->'0'
// (register available)
USB0ADR = (addr); // Set address (mask out bits7-6)
// Write <NumBytes> to the selected FIFO
for(i=0;i<uNumBytes;i++)
{
USB0DAT = pData[i];
while(USB0ADR & 0x80); // Wait for BUSY->'0' (data ready)
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -