kernel.c
上传用户:ids068
上传日期:2013-04-04
资源大小:639k
文件大小:7k
源码类别:

USB编程

开发平台:

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 :       Kernel.c                                      *
  9. //  Author :       Albert Goh         *
  10. //  Created :       3 March 2000                                *
  11. //                                                                      *
  12. //***********************************************************************
  13. //***********************************************************************
  14. //                                                                      *
  15. // Kernel.c is the control centre for this evaluation firmware. It will *
  16. // control where should the firmware branch through via the selection  *
  17. // of the UART port of the 8051. if not via the UART, it will be from  *
  18. // the selection of the code defintion                                  *
  19. //                                                                      *
  20. //***********************************************************************
  21. //***********************************************************************
  22. //                                                                      *
  23. //  Module History             *  
  24. //  **************             *
  25. //                   *
  26. //  Date    Version Author Changes       *
  27. //  ==== ======= ====== =======          *
  28. //  030300   0.1  Albert Created           *
  29. //                                                                      *
  30. //                                                                      *
  31. //***********************************************************************
  32. //***********************************************************************
  33. //*                *
  34. //*                      Include Files Definition    *
  35. //*                *
  36. //***********************************************************************
  37. #include "standard.h"
  38. #include "Kernel.h"
  39. #include "D14.h"
  40. #include "zlg7290.h"
  41. #include "VIIC_C51.h"
  42. #define uchar unsigned char
  43. //***********************************************************************
  44. //*                *
  45. //*                  External routine Definition         *
  46. //*                *
  47. //***********************************************************************
  48. extern Init_Main();
  49. extern USB_Debug_Mode();
  50. extern DMA_Debug_Mode();
  51. extern USB_INT_FLAG USB_Int_Flag;
  52. extern DMA_INT_FLAG DMA_Int_Flag;
  53. extern USB_DEVICE USB_Device;
  54. extern  D14_CNTRL_REG volatile xdata  D14_Cntrl_Reg;
  55. extern void Check_Busy(void);
  56. extern void Init_D14(void);
  57. extern void Init_Endpoint(void);
  58. extern void Init_Device(void);
  59. extern void Get_PIDVID(void);
  60. //extern unsigned int read_endpoint(unsigned char endp,unsigned int len,unsigned char *buf);
  61. //extern unsigned int write_endpoint(unsigned char endp,unsigned int len,unsigned char *buf);
  62. extern UC VID[2],PID[2];
  63. extern UC idata Endpt_FIFO[MAX_BUF];
  64. extern Set_USB(void);
  65. extern TIMER Timer;
  66. extern UC  timecouter;
  67. //***********************************************************************
  68. //*                *
  69. //*                  Prototype routine Definition      *
  70. //*                *
  71. //***********************************************************************
  72. void Start_mSEC_Timer(Data);
  73. void Start_SEC_Timer(Data);
  74. uchar DelayNS(uchar no);
  75. //***********************************************************************
  76. //*                *
  77. //*                      Variable Definition        *
  78. //*                *
  79. //***********************************************************************
  80. UI Temp;
  81. KERNEL Kernel_Flag;
  82. uchar code disp_buf[8]={0,0,0,0,0,0,0,0}; //LED初始化值
  83. //UC key=0xff;
  84. //***********************************************************************
  85. //*                *
  86. //*                      Routine Definition    *
  87. //*                *
  88. //***********************************************************************
  89. //***********************************************************************
  90. //*                     *
  91. //* Routine  :  Main                                              *
  92. //* Input :  None                         *
  93. //* Output   : None                                      *
  94. //* Function : main loop                                       *
  95. //*                *
  96. //***********************************************************************
  97. void Main(void)
  98. {
  99. DelayNS(5);
  100.     DelayNS(5);
  101. //Initialization routine
  102. //初始化子程序
  103. ZLG7290_SendBuf(disp_buf,8);
  104. Init_Main();
  105. //enable device and reset the device address
  106. D14_Cntrl_Reg.D14_MODE.BITS.SOFTCT = 1;
  107. do
  108. {
  109. //USB routine
  110. USB_Debug_Mode();
  111. //Generic DMA routine
  112. DMA_Debug_Mode();
  113. }
  114. while(1);
  115. }
  116. /*********************************************************************************************************
  117. ** 函数名称:  DelayNS
  118. ** 功能描述:  长软件延时
  119. ** 输 入: no : 延时参数,值越大时延时越久
  120. **         
  121. ** 输 出: 0 : OK;
  122. **         1 : FAIL;
  123. ** 全局变量: 无
  124. ** 调用模块:  无
  125. **
  126. ** 作 者: 叶皓贲
  127. ** 日 期: 2003-3-4
  128. **-------------------------------------------------------------------------------------------------------
  129. ** 修改人:
  130. ** 日 期:
  131. **------------------------------------------------------------------------------------------------------
  132. ********************************************************************************************************/
  133. uchar DelayNS(uchar no)
  134. uchar i,j; //延时参数
  135.    for(; no>0; no--)
  136.    { 
  137. for(i=0; i<100; i++)
  138.       for(j=0; j<100; j++);
  139.    }
  140.    return 0; 
  141. }
  142. //***********************************************************************
  143. //*                     *
  144. //* Routine  : Start_mSEC_Timer(Delay)                           *
  145. //* Input : Delay in milli second          *  
  146. //* Output : Start timer operation                   *
  147. //* Function : To start the timeout operation based on the delay i/p  *
  148. //*                *
  149. //***********************************************************************
  150. void Start_mSEC_Timer(Data)
  151. {
  152.    
  153. do
  154. {
  155. //calculate timer value
  156. Temp = Timer.mSEC_Scale;
  157. Temp = 0xffff - Temp;
  158. ET0 = 1;
  159. //calculate timer value
  160. //initialize timer 0 counter
  161. Temp >>= 8;
  162. TH0 = (UC) Temp;
  163. Temp = Timer.mSEC_Scale;
  164. Temp = 0xffff - Temp;
  165. TL0 = (UC) Temp;
  166. //start timer count
  167. TR0 = 1;
  168. Kernel_Flag.BITS.Timer_Expired = 0;
  169. while(!Kernel_Flag.BITS.Timer_Expired);
  170. Kernel_Flag.BITS.Timer_Expired = 0;
  171. //stop timer
  172. TR0 = 0;
  173. ET0 = 0;
  174. Data--;
  175. }
  176. while(Data != 0);
  177. }