📄 fw.lst
字号:
C51 COMPILER V7.50 FW 04/17/2007 10:42:47 PAGE 1
C51 COMPILER V7.50, COMPILATION OF MODULE FW
OBJECT MODULE PLACED IN .\Output\Fw.obj
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE Fw.c LARGE BROWSE DEBUG OBJECTEXTEND PRINT(.\Output\Fw.lst) OBJECT(.\Output
-\Fw.obj)
line level source
1 /*
2 *********************************************************************************************************
3 * File: Fw.C
4 * Contents: Firmware frameworks task dispatcher and device request parser source
5 *
6 * $Date: 04/06/06 Kimi v0.1
7 * $Date: 04/25/06 Kimi v0.2
8 * $Date: 04/30/06 Kimi v0.3
9 * $Date: 01/23/07 Kevin v0.4
10 * Copyright (c) 2006 Fameg, Inc. All rights reserved
11 *********************************************************************************************************
12 */
13
14 #include "fs7805.h"
15 #include "fs7805regs.h"
16 #include "string.h"
17
18 const INT8U xdata WaveData[128] =
19 {
20 // Wave 0
21 /* LenBr */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
22 /* Opcode*/ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
23 /* LFun */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
24 /* Output*/ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
25 // Wave 1
26 /* LenBr */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
27 /* Opcode*/ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
28 /* LFun */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
29 /* Output*/ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
30 // Wave 2
31 /* LenBr */ 0x01, 0x02, 0x39, 0x00, 0x00, 0x00, 0x00, 0x00,
32 /* Opcode*/ 0x00, 0x02, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00,
33 /* LFun */ 0x00, 0x00, 0x2D, 0x00, 0x00, 0x00, 0x00, 0x00,
34 /* Output*/ 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00,
35 // Wave 3
36 /* LenBr */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
37 /* Opcode*/ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
38 /* LFun */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
39 /* Output*/ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
40 };
41
42 /*
43 *********************************************************************************************************
44 * VARIABLE PROTOTYPES
45 *********************************************************************************************************
46 */
47 union FIFODataLen
48 {
49 INT16U Val;
50 INT8U Byte[2];
51 };
52
53 union FIFODataLen Length;
54 #ifdef PINGPONG_FIFO
C51 COMPILER V7.50 FW 04/17/2007 10:42:47 PAGE 2
INT8U SW_FifoOut_Toggle = 0, SW_FifoIn_Toggle = 0;
#endif
57 INT16U UsbDmaBuffer;
58
59 /*
60 *********************************************************************************************************
61 * FUNCTION PROTOTYPES
62 *********************************************************************************************************
63 */
64 #ifdef PINGPONG_FIFO
void FifoIn (INT8U *pReadBuffer, INT8U BufferNo, INT16U DataLen);
void FifoOut (INT8U *pReadBuffer, INT8U BufferNo);
void SendDataCmd (INT8U BufferNo);
#else
69 void FifoIn (INT8U *pReadBuffer, INT16U DataLen);
70 void FifoOut (INT8U *pReadBuffer);
71 void SendDataCmd (void);
72 #endif
73 void UsbBulkIn (INT8U *pReadBuffer, INT16U DataLen);
74 void UsbBulkOut (INT8U *pReadBuffer);
75 void UsbInit (void);
76 void KsocInit (void);
77
78 #ifdef PINGPONG_FIFO
/*
*********************************************************************************************************
* USBBULKOUT
*
* Description: Device receive data from host
*
* Arguments : pReadBuffer buffer address
*
* Returns : none
*********************************************************************************************************
*/
void UsbBulkOut (INT8U *pReadBuffer)
{
if ((EP2FIFOCS & bmFIFO0_FULL) && (EP2FIFOCS & bmFIFO1_FULL))
{ // FULL_0 = 1 and FULL_1 = 1
if (SW_FifoOut_Toggle == 0)
{
FifoOut(pReadBuffer, 0); // Read FIFO0
}
else
{
FifoOut(pReadBuffer, 1); // Read FIFO1
}
}
else if (EP2FIFOCS & bmFIFO0_FULL) // FULL_0 = 1
{
FifoOut(pReadBuffer, 0); // Read FIFO0
}
else if (EP2FIFOCS & bmFIFO1_FULL) // FULL_1 = 1
{
FifoOut(pReadBuffer, 1); // Read FIFO1
}
}
/*
*********************************************************************************************************
* USBBULKIN
C51 COMPILER V7.50 FW 04/17/2007 10:42:47 PAGE 3
*
* Description: Device send data to host
*
* Arguments : pReadBuffer buffer address
*
* DataLen Data Length
*
* Returns : none
*********************************************************************************************************
*/
void UsbBulkIn (INT8U *pReadBuffer, INT16U DataLen)
{
if ((!(EP1FIFOCS & bmFIFO0_FULL)) && (!(EP1FIFOCS & bmFIFO1_FULL)))
{ // FULL_0 = 0 and FULL_1 = 0
if ((EP1FIFOCS & bmFIFO_TOG) == 0)
{
FifoIn(pReadBuffer, 0, DataLen); // Write FIFO0
}
else
{
FifoIn(pReadBuffer, 1, DataLen); // Write FIFO1
}
}
else if (!(EP1FIFOCS & bmFIFO0_FULL)) // FULL_0 = 0
{
FifoIn(pReadBuffer, 0, DataLen); // Write FIFO0
}
else if (!(EP1FIFOCS & bmFIFO1_FULL)) // FULL_1 = 0
{
FifoIn(pReadBuffer, 1, DataLen); // Write FIFO1
}
if ((!(EP1FIFOCS & bmFIFO0_FULL)) && (!(EP1FIFOCS & bmFIFO1_FULL)))
{ // FULL_0 = 0 and FULL_1 = 0
if (SW_FifoIn_Toggle == 0)
{
SendDataCmd(0); // Complete Write FIFO0
}
else
{
SendDataCmd(1); // Complete Write FIFO1
}
}
else if (!(EP1FIFOCS & bmFIFO0_FULL)) // FULL_0 = 0
{
SendDataCmd(0); // Complete Write FIFO0
}
else if (!(EP1FIFOCS & bmFIFO1_FULL)) // FULL_1 = 0
{
SendDataCmd(1); // Complete Write FIFO1
}
}
/*
*********************************************************************************************************
* FIFOOUT
*
* Description: Device receive data from host using FIFO function
*
* Arguments : pReadBuffer buffer address
*
C51 COMPILER V7.50 FW 04/17/2007 10:42:47 PAGE 4
* BufferNo FIFO0 or FIFO1
*
* Returns : none
*********************************************************************************************************
*/
void FifoOut (INT8U *pReadBuffer, INT8U BufferNo)
{
SW_FifoOut_Toggle = !BufferNo; // Invert SW_FifoOut_Toggle polarity
if (BufferNo == 0)
{
Length.Byte[1] = EP2CNT0L; // Get low byte data
Length.Byte[0] = EP2CNTH & 0x07; // Get high byte data
UsbDmaBuffer = DMA_FIFO2_0; // Get FIFO address
}
else
{
Length.Byte[1] = EP2CNT1L;
Length.Byte[0] = (EP2CNTH & 0x70) >> 4;
UsbDmaBuffer = DMA_FIFO2_1;
}
memcpy(pReadBuffer, (INT8U xdata *)UsbDmaBuffer, Length.Val);
if (BufferNo == 0) // Switch FIFO_Toggle and Clear FULL bit
{
EP2FIFOCS = (EP2FIFOCS | bmFIFO_TOG_WE) | bmFIFO_TOG;
EP2FIFOCS = (EP2FIFOCS | bmFIFO0_FULL_WE) & (~bmFIFO0_FULL);
}
else
{
EP2FIFOCS = (EP2FIFOCS | bmFIFO_TOG_WE) & (~bmFIFO_TOG);
EP2FIFOCS = (EP2FIFOCS | bmFIFO1_FULL_WE) & (~bmFIFO1_FULL);
}
EP2CS = EP2CS | bmEP_RXTXEN; // Enable RXTX
}
/*
*********************************************************************************************************
* FIFOIN
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -