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

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 volatile D14_CNTRL_REG 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 td[5]={0x00,0x12,0x48,0x30,0x12};   //8563初始化值
  83. uchar code disp_buf[8]={0,0,0,0,0,0,0,0}; //LED初始化值
  84. //UC key=0xff;
  85. //***********************************************************************
  86. //*                *
  87. //*                      Routine Definition    *
  88. //*                *
  89. //***********************************************************************
  90. //***********************************************************************
  91. //*                     *
  92. //* Routine  :  Main                                              *
  93. //* Input :  None                         *
  94. //* Output   : None                                      *
  95. //* Function : main loop                                       *
  96. //*                *
  97. //***********************************************************************
  98. void Main(void)
  99. {
  100. //ISendStr(0xa2,0,td,0x5);
  101. //ZLG7289_Rest(); // 复位ZLG7289
  102.     DelayNS(5);
  103. //Initialization routine
  104. //初始化子程序
  105. ZLG7290_SendBuf(disp_buf,8);
  106. Init_Main();
  107. //enable device and reset the device address
  108. D14_Cntrl_Reg.D14_MODE.BITS.SOFTCT = 1;
  109. do
  110. {
  111. //USB routine
  112. USB_Debug_Mode();
  113. //Generic DMA routine
  114. DMA_Debug_Mode();
  115. if( USB_Int_Flag.BITS.EP1RX==1)    //接受数据并显示
  116. {
  117. read_endpoint(2,8,Endpt_FIFO);
  118. DelayNS(1);
  119. ZLG7290_SendBuf(Endpt_FIFO,8);
  120. USB_Int_Flag.BITS.EP1RX=0;
  121. }
  122. if(timecouter==30 )                //定时读取键值,并发送时间(82ms,12MHz,6CLOCK)
  123. {
  124. DelayNS(1);
  125. Endpt_FIFO[0]=ZLG7290_GetKey();
  126. if(Endpt_FIFO[0]==0) Endpt_FIFO[0]=0xff;
  127. else Endpt_FIFO[0]--;
  128. DelayNS(1);
  129. IRcvStr(0xa2,0x02,&Endpt_FIFO[1],0x3);
  130. Endpt_FIFO[3]=Endpt_FIFO[3]&0x3f;
  131. write_endpoint(3,4,Endpt_FIFO);
  132. timecouter=20;
  133. }
  134. }
  135. while(1);
  136. }
  137. /*********************************************************************************************************
  138. ** 函数名称:  DelayNS
  139. ** 功能描述:  长软件延时
  140. ** 输 入: no : 延时参数,值越大时延时越久
  141. **         
  142. ** 输 出: 0 : OK;
  143. **         1 : FAIL;
  144. ** 全局变量: 无
  145. ** 调用模块:  无
  146. **
  147. ** 作 者: 叶皓贲
  148. ** 日 期: 2003-3-4
  149. **-------------------------------------------------------------------------------------------------------
  150. ** 修改人:
  151. ** 日 期:
  152. **------------------------------------------------------------------------------------------------------
  153. ********************************************************************************************************/
  154. uchar DelayNS(uchar no)
  155. uchar i,j; //延时参数
  156.    for(; no>0; no--)
  157.    { 
  158. for(i=0; i<100; i++)
  159.       for(j=0; j<100; j++);
  160.    }
  161.    return 0; 
  162. }
  163. //***********************************************************************
  164. //*                     *
  165. //* Routine  : Start_mSEC_Timer(Delay)                           *
  166. //* Input : Delay in milli second          *  
  167. //* Output : Start timer operation                   *
  168. //* Function : To start the timeout operation based on the delay i/p  *
  169. //*                *
  170. //***********************************************************************
  171. void Start_mSEC_Timer(Data)
  172. {
  173.    
  174. do
  175. {
  176. //calculate timer value
  177. Temp = Timer.mSEC_Scale;
  178. Temp = 0xffff - Temp;
  179. ET0 = 1;
  180. //calculate timer value
  181. //initialize timer 0 counter
  182. Temp >>= 8;
  183. TH0 = (UC) Temp;
  184. Temp = Timer.mSEC_Scale;
  185. Temp = 0xffff - Temp;
  186. TL0 = (UC) Temp;
  187. //start timer count
  188. TR0 = 1;
  189. Kernel_Flag.BITS.Timer_Expired = 0;
  190. while(!Kernel_Flag.BITS.Timer_Expired);
  191. Kernel_Flag.BITS.Timer_Expired = 0;
  192. //stop timer
  193. TR0 = 0;
  194. ET0 = 0;
  195. Data--;
  196. }
  197. while(Data != 0);
  198. }