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

📄 usb_user.lst

📁 针对TMS320C6000系列的DSP芯片的在线升级的源码
💻 LST
字号:
C51 COMPILER V6.12  USB_USER                                                               06/09/2004 15:44:25 PAGE 1   


C51 COMPILER V6.12, COMPILATION OF MODULE USB_USER
OBJECT MODULE PLACED IN USB_USER.OBJ
COMPILER INVOKED BY: c:\Keil\C51\BIN\C51.EXE USB_USER.C DB OE

stmt level    source

   1          /*
   2          	File Name	:	USB_USER.C
   3          
   4          	Description	: 	Read and Write DSP memory by USB communication.
   5          	              
   6          	Programmer	:	Jack Song
   7          
   8          	Make Data	:  2005.6.7 
   9          
  10          	Change		:  xxxx...(Name) yyyy,mm.dd(Date)
  11          
  12          	Version		:   1.00
  13          */
  14          #include <c8051f320.h>
  15          #include "USB_REGISTER.h"
  16          
  17          #define  c_cUSER
  18          #include <USB_USER.h>
  19          
  20          
  21          
  22          void  Fun_Pro_Main()
  23          {
  24   1      	g_ucFStatus = FS_CMD;
  25   1      	g_ucHostCmd = CMD_OTHERS;
  26   1      	while(1)
  27   1      	{
  28   2      		switch (g_ucFStatus)
  29   2      		{
  30   3      			case	FS_CMD:
  31   3      					if(g_ucUsbFlag)
  32   3      					{	g_ucUsbFlag = 0;
  33   4      						g_ucHostCmd = g_ucUsbGData[0];
  34   4      						switch (g_ucHostCmd)
  35   4      						{
  36   5      							case	CMD_TEST:
  37   5      									Fun_Pro_Test();
  38   5      									POLL_WRITE_BYTE(INDEX, 1);           // Set index to endpoint 1 registers
  39   5      									Fun_Fifo_Write(FIFO_EP1, 2, &g_ucUsbSData);	
  40   5      									POLL_WRITE_BYTE(EINCSR1, rbInINPRDY);
  41   5      									break;
  42   5      							case	CMD_READ_EINIT:
  43   5      									Fun_Pro_ReadEinit();
  44   5      									break;
  45   5      							case	CMD_WRITE_EINIT:
  46   5      									Fun_Pro_WriteEInit();
  47   5      									POLL_WRITE_BYTE(INDEX, 1);           // Set index to endpoint 1 registers
  48   5      									Fun_Fifo_Write(FIFO_EP1, 2, &g_ucUsbSData);	
  49   5      									POLL_WRITE_BYTE(EINCSR1, rbInINPRDY);
  50   5      									break;
  51   5      							case	CMD_READ_CODE:
  52   5      									Fun_Pro_ReadCode();
  53   5      									break;
  54   5      							case	CMD_WRITE_CODE:
  55   5      									g_ulDestAdd = g_ucUsbGData[1] + g_ucUsbGData[2]*256 + g_ucUsbGData[3]*256*256 + g_ucUsbGData[4]*2
C51 COMPILER V6.12  USB_USER                                                               06/09/2004 15:44:25 PAGE 2   

             -56*256*256;
  56   5      									g_uiCodeLength = g_ucUsbGData[5] + g_ucUsbGData[6]*256;
  57   5      									g_ucFStatus = FS_DATA; 
  58   5      							//		Fun_Pro_WriteCode();
  59   5      									break;
  60   5      							default:    break;
  61   5      						}
  62   4      					}				
  63   3      					break;
  64   3      			case	FS_DATA:
  65   3      					if(g_ucUsbFlag)
  66   3      					{
  67   4      					//	Fun_Pro_WriteCode();					
  68   4      						Hpi_Write_Section(g_ulDestAdd,g_ucUsbGData,g_ucCount); //write data to 6201 memory
  69   4      						g_ulDestAdd = g_ulDestAdd + g_ucCount/4;
  70   4      						g_uiCodeLength -= g_ucCount/4;
  71   4      						
  72   4      						if(g_ucCount < 64)	g_ucFStatus = FS_CMD;
  73   4      						
  74   4      						if((g_ucCount <64) & (g_uiCodeLength = 0))	g_ucUsbSData[1] = 0;
  75   4      						else g_ucUsbSData[1] = ERROR_DATA;
  76   4      						
  77   4      						g_ucUsbSData[0] = CMD_WRITE_CODE;
  78   4      						POLL_WRITE_BYTE(INDEX, 1);           // Set index to endpoint 1 registers
  79   4      						Fun_Fifo_Write(FIFO_EP1, 2, &g_ucUsbSData);	
  80   4      						POLL_WRITE_BYTE(EINCSR1, rbInINPRDY);
  81   4      						g_ucUsbFlag = 0;
  82   4      					}					
  83   3      					break;
  84   3      			default:	break;	 	
  85   3      		
  86   3      		}
  87   2      	}
  88   1      }
  89          
  90          void	Fun_Pro_Test()
  91          {
  92   1      	g_ucUsbSData[0] = g_ucHostCmd;
  93   1      	g_ucUsbSData[1] = 0x00;
  94   1      }
  95          
  96          void	Fun_Pro_ReadEinit()
  97          {
  98   1      
  99   1      }
 100          
 101          void	Fun_Pro_WriteEInit()
 102          {
 103   1      	unsigned long ulData;
 104   1      	ulData = g_ucUsbGData[1] + g_ucUsbGData[2]*256 + g_ucUsbGData[3]*256*256 + g_ucUsbGData[4]*256*256*256;
 105   1      	Hpi_Write_Word(ulData,EMIF_GLOBAL_CONTORL);    //write emif registers
 106   1      	ulData = g_ucUsbGData[5] + g_ucUsbGData[6]*256 + g_ucUsbGData[7]*256*256 + g_ucUsbGData[8]*256*256*256;
 107   1      	Hpi_Write_Word(ulData,EMIF_CE1_CONTORL);    //write emif registers
 108   1      	ulData = g_ucUsbGData[9] + g_ucUsbGData[10]*256 + g_ucUsbGData[11]*256*256 + g_ucUsbGData[12]*256*256*256
             -;
 109   1      	Hpi_Write_Word(ulData,EMIF_CE0_CONTORL);    //write emif registers
 110   1      	ulData = g_ucUsbGData[13] + g_ucUsbGData[14]*256 + g_ucUsbGData[15]*256*256 + g_ucUsbGData[16]*256*256*25
             -6;
 111   1      	Hpi_Write_Word(ulData,EMIF_CE2_CONTORL);    //write emif registers
 112   1      	ulData = g_ucUsbGData[17] + g_ucUsbGData[18]*256 + g_ucUsbGData[19]*256*256 + g_ucUsbGData[20]*256*256*25
             -6;
 113   1      	Hpi_Write_Word(ulData,EMIF_CE3_CONTORL);    //write emif registers
C51 COMPILER V6.12  USB_USER                                                               06/09/2004 15:44:25 PAGE 3   

 114   1      	ulData = g_ucUsbGData[21] + g_ucUsbGData[22]*256 + g_ucUsbGData[23]*256*256 + g_ucUsbGData[24]*256*256*25
             -6;
 115   1      	Hpi_Write_Word(ulData,EMIF_SDRAM_CONTORL);    //write emif registers
 116   1      	ulData = g_ucUsbGData[25] + g_ucUsbGData[26]*256 + g_ucUsbGData[27]*256*256 + g_ucUsbGData[28]*256*256*25
             -6;
 117   1      	Hpi_Write_Word(ulData,EMIF_SDRAM_REFRESH);    //write emif registers
 118   1      	
 119   1      	g_ucUsbSData[0] = g_ucHostCmd;
 120   1      	g_ucUsbSData[1] = 0x00;
 121   1      
 122   1      }
 123          
 124          void	Fun_Pro_ReadCode()
 125          {}
 126          
 127          void	Fun_Pro_WriteCode()
 128          {
 129   1      			
 130   1      }
 131          /************************************************/
 132          /*	Name: 	Hpi_Write_Section()					*/
 133          /*	In:	delay									*/
 134          /*	Out:	None								*/
 135          /*	Description: 	main delay functions		*/
 136          /************************************************/
 137          void Hpi_WakeUp_DSP()
 138          {
 139   1      	/*write HPIC with HWOB = 1,1st halfword transferred is least significant*/
 140   1      /*								HCNTRL1 	HCNTRL0		HHWIL			*/
 141   1      	HPIC0(0x0003);		//		0			0			0
 142   1      	HPIC1(0x0003);		//		0			0			1
 143   1      }	
 144          /************************************************/
 145          /*	Name: 	Hpi_Write_Word()					*/
 146          /*	In:	delay									*/
 147          /*	Out:	None								*/
 148          /*	Description: 	main delay functions		*/
 149          /************************************************/
 150          void Hpi_Write_Word(unsigned long ulSourceWord,unsigned long ulDestAdd)
 151          {
 152   1      /*write HPIC with HWOB = 1,1st halfword transferred is least significant*/
 153   1      /*								HCNTRL1 	HCNTRL0		HHWIL			*/
 154   1      	HPIC0(0x0001);		//		0			0			0
 155   1      	HPIC1(0x0001);		//		0			0			1
 156   1      /*write destinaation address to HPIA,1st halfword is least significan	*/
 157   1      /*								HCNTRL1 	HCNTRL0		HHWIL			*/
 158   1      	HPIA0((uint)(ulDestAdd & 0x0ffff));		//		0			1			0
 159   1      	HPIA1((uint)((ulDestAdd >> 16) & 0x0ffff));		//		0			1			1
 160   1      /*write source word to HPID,1st halfword is least significan	*/
 161   1      /*								HCNTRL1 	HCNTRL0		HHWIL			*/
 162   1      	HPID0((uint)(ulSourceWord & 0x0ffff));		//		1			1			0
 163   1      	HPID1((uint)((ulSourceWord >> 16) & 0x0ffff));		//		1			1			1
 164   1      } 
 165          /************************************************/
 166          /*	Name: 	Hpi_Write_Section()					*/
 167          /*	In:	delay									*/
 168          /*	Out:	None								*/
 169          /*	Description: 	main delay functions		*/
 170          /************************************************/
 171          void Hpi_Write_Section(unsigned long ulDestAdd,unsigned char *uiSource,unsigned int uiLength)
 172          {
 173   1      	uint y;
C51 COMPILER V6.12  USB_USER                                                               06/09/2004 15:44:25 PAGE 4   

 174   1      /*write HPIC with HWOB = 1,1st halfword transferred is least significant*/
 175   1      /*								HCNTRL1 	HCNTRL0		HHWIL			*/
 176   1      	HPIC0(0x0001);		//		0			0			0
 177   1      	HPIC1(0x0001);		//		0			0			1
 178   1      /*write destinaation address to HPIA,1st halfword is least significan	*/
 179   1      /*								HCNTRL1 	HCNTRL0		HHWIL			*/
 180   1      	HPIA0((uint)(ulDestAdd & 0x0ffff));		//		0			1			0
 181   1      	HPIA1((uint)((ulDestAdd >> 16) & 0x0ffff));		//		0			1			1
 182   1      /*write source section to HPID,1st halfword is least significan	*/
 183   1      /*								HCNTRL1 	HCNTRL0		HHWIL			*/
 184   1      	for(y = 0; y < uiLength; y++)
 185   1      	{
 186   2      		HPID0_SECTION(uiSource);		//		1			0			0
 187   2      		HPID1_SECTION(uiSource);		//		1			0			1
 188   2      	}
 189   1      }
 190          void Fun_Fifo_Write(BYTE addr, unsigned int uNumBytes, BYTE * pData)
 191          {
 192   1      	int i;
 193   1                                                
 194   1         // If >0 bytes requested,
 195   1         if (uNumBytes) 
 196   1         {
 197   2            while(USB0ADR & 0x80);              // Wait for BUSY->'0'
 198   2                                                // (register available)
 199   2            USB0ADR = (addr);                   // Set address (mask out bits7-6)
 200   2      
 201   2            // Write <NumBytes> to the selected FIFO
 202   2            for(i=0;i<uNumBytes;i++)
 203   2            {  
 204   3               USB0DAT = pData[i];
 205   3               while(USB0ADR & 0x80);           // Wait for BUSY->'0' (data ready)
 206   3            }
 207   2         }
 208   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =   1020    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =    128    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     10      26
   IDATA SIZE       =   ----    ----
   BIT SIZE         =   ----    ----
END OF MODULE INFORMATION.


C51 COMPILATION COMPLETE.  0 WARNING(S),  0 ERROR(S)

⌨️ 快捷键说明

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