vendor.c
Upload User: ids068
Upload Date: 2013-04-04
Package Size: 639k
Code Size: 7k
Category:

USB develop

Development Platform:

C/C++

  1. //***********************************************************************
  2. //                         *
  3. //                P H I L I P S   P R O P R I E T A R Y              *    
  4. //                                                                      *
  5. //          COPYRIGHT (c)   1999 BY PHILIPS SINGAPORE (APIC).        *
  6. //                    --  ALL RIGHTS RESERVED  --                  *
  7. //                                                                      *
  8. //  File Name :       DMADebug.c                                    *
  9. //  Author :       Albert Goh         *
  10. //  Created :       3 March 2000                                *
  11. //                                                                      *
  12. //***********************************************************************
  13. //***********************************************************************
  14. //                                                                      *
  15. // GDMADebug.c is the file that contain the routine for the GDMA debug  *
  16. // It will be able to configured as master for slave for the debugging *
  17. //                                                                      *
  18. //***********************************************************************
  19. //***********************************************************************
  20. //                                                                      *
  21. //  Module History             *
  22. //  **************             *
  23. //                   *
  24. //  Date    Version Author Changes       *
  25. //  ====    ======= ====== =======       *
  26. //  030300   0.1  Albert Created           *
  27. //                                                                      *
  28. //                                                                      *
  29. //***********************************************************************
  30. //***********************************************************************
  31. //*                *
  32. //*                      Include Files Definition    *
  33. //*                *
  34. //***********************************************************************
  35. #include "standard.h"
  36. #include "Kernel.h"
  37. #include "D14.h"
  38. //***********************************************************************
  39. //*                *
  40. //*                  External Variable Definition        *
  41. //*                *
  42. //***********************************************************************
  43. extern USB_DEVICE USB_Device;
  44. extern DMA_INT_FLAG DMA_Int_Flag;
  45. extern USB_INT_FLAG USB_Int_Flag;
  46. extern volatile D14_CNTRL_REG xdata D14_Cntrl_Reg;
  47. extern void Start_mSEC_Timer(Data);
  48. extern void rt2_process();
  49. extern void tt2_process();
  50. extern UC Data;
  51. extern UI Temp,PIO_Count;
  52. extern KERNEL Kernel_Flag;
  53. extern ULI  bytecount;
  54. extern FILESIZE FileSize;
  55. extern UI count;
  56. extern UC idata Endpt_FIFO[MAX_BUF];
  57. extern UC Type;
  58. //***********************************************************************
  59. //*                *
  60. //*                      Variable Definition        *
  61. //*                *
  62. //***********************************************************************
  63. UI Count_PIO;
  64. //***********************************************************************
  65. //*                *
  66. //*                      Prototype Definition     *
  67. //*                *
  68. //***********************************************************************
  69. void DMA_Debug_Mode(void);
  70. void DMA_Init(void);
  71. void DMA_Mode(Data);
  72. //***********************************************************************
  73. //*                *
  74. //*                      Routine Definition    *
  75. //*                *
  76. //***********************************************************************
  77. //***********************************************************************
  78. //*                     *
  79. //* Routine  : DMA Debug Mode                                     *
  80. //* Input : None                          *
  81. //* Output : None                                      *
  82. //* Function : Generic DMA mode routine                       *
  83. //*                *
  84. //***********************************************************************
  85. void DMA_Debug_Mode(void)
  86. {
  87. if(Kernel_Flag.BITS.Transfer_Start)
  88. {
  89. if(FileSize.Size.Address[0] == 0 &&
  90. FileSize.Size.Address[1] == 0 &&
  91. FileSize.Size.Address[2] == 0)
  92. {
  93. Kernel_Flag.BITS.Out_Reset_Done = 0;
  94. Kernel_Flag.BITS.In_Reset_Done = 0;
  95. }
  96. if(FileSize.Size.DIR == 0x00 || FileSize.Size.DIR == 0x80)
  97. DMA_Mode(Write);
  98. else
  99. DMA_Mode(Read);
  100. }
  101. }
  102. //***********************************************************************
  103. //*                     *
  104. //* Routine  : DMA Mode                                           *
  105. //* Input : DMA Controller setting                      *
  106. //* Output : None                                      *
  107. //* Function : to do GDMA data transfer                       *
  108. //*                *
  109. //***********************************************************************
  110. void DMA_Mode(Data)
  111. {
  112. UI Datcount;
  113. UC i;
  114. if(Data)
  115. {
  116. //read
  117. do
  118. {
  119. //Check for Out Token ACK interrupt
  120. while(!USB_Int_Flag.BITS.EP2RX);
  121. EA_DISABLE;
  122. USB_Int_Flag.BITS.EP2RX = 0;
  123. D14_Cntrl_Reg.D14_ENDPT_INDEX = 4;
  124. //Read in FIFO data
  125. if (bytecount > PIO_Count)
  126. {
  127. Datcount = PIO_Count;
  128. }
  129. else
  130. {
  131. Datcount = bytecount;
  132. }
  133. for(i = 0 ; i < (UC)Datcount ; i++)
  134. Endpt_FIFO[i] = D14_Cntrl_Reg.D14_DATA_PORT_LSB;
  135. EA_ENABLE;
  136. bytecount -= Datcount;
  137. }while(bytecount);
  138. rt2_process();
  139. }
  140. else
  141. {
  142. //write
  143. do
  144. {
  145. //initialize endpoint index
  146. D14_Cntrl_Reg.D14_ENDPT_INDEX = 5;
  147. //Write data to FIFO
  148. if (bytecount>PIO_Count)
  149. {
  150. D14_Cntrl_Reg.D14_BUFFER_LENGTH_LSB =( unsigned char ) PIO_Count;
  151. D14_Cntrl_Reg.D14_BUFFER_LENGTH_MSB = ( unsigned char ) (PIO_Count>>8);
  152. Datcount = PIO_Count;
  153. }
  154. else
  155. {
  156. D14_Cntrl_Reg.D14_BUFFER_LENGTH_LSB =( unsigned char ) bytecount;
  157. D14_Cntrl_Reg.D14_BUFFER_LENGTH_MSB = ( unsigned char ) (bytecount>>8);
  158. Datcount = bytecount;
  159. }
  160. tt2_process();
  161. for(Count_PIO = 0 ; Count_PIO < Datcount ; Count_PIO++)
  162. D14_Cntrl_Reg.D14_DATA_PORT_LSB = Endpt_FIFO[Count_PIO];
  163. //Check for In Token ACK
  164. while(!USB_Int_Flag.BITS.EP2TX)
  165. {    
  166. if(USB_Int_Flag.BITS.SUSP || Kernel_Flag.BITS.Bus_Reset || USB_Int_Flag.BITS.EP0SETUP)
  167. break;
  168. }    
  169. EA_DISABLE;
  170. USB_Int_Flag.BITS.EP2TX = 0;
  171. EA_ENABLE;
  172. bytecount -= Datcount; 
  173. }while(bytecount);
  174. //stop DMA controller
  175. DMA_Start = GDMA_Stop;
  176. //transfewr done,reset internal variables
  177. DMA_Int_Flag.BITS.DMA_DONE = 0;
  178. Count_PIO = 0;
  179. }
  180. Kernel_Flag.BITS.Transfer_Start = 0;  
  181. }