📄 d12driver.lst
字号:
C51 COMPILER V8.09 D12DRIVER 06/18/2008 16:40:38 PAGE 1
C51 COMPILER V8.09, COMPILATION OF MODULE D12DRIVER
OBJECT MODULE PLACED IN D12Driver.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE D12Driver.c BROWSE DEBUG OBJECTEXTEND
line level source
1 /****************************************Copyright (c)**************************************************
2 ** 广州周立功单片机发展有限公司
3 ** 研 究 所
4 ** 产品一部
5 **
6 ** http://www.zlgmcu.com
7 **
8 ** 文 件 名: D12Driver.c
9 ** 最后修改日期: 2004年11月15日
10 ** 描 述: USB驱动程序软件包: PDIUSBD12 设备端驱动程序 应用层
11 ** 版 本: V5.0
12 **********************************************************************************************************
-/
13
14 #include <reg52.h>
15 #include "D12Config.h"
16 #include "D12CI.h"
17 #include "D12HAL.h"
18 #include "Chap_9.h"
19 #include "Descriptor.h"
20 #include "D12Driver.h"
21 #include "UART.h"
22
23 INT8U idata GenEpBuf[EP1_PACKET_SIZE]; //端点1接收缓冲区
24 INT8U idata EpBuf[EP2_PACKET_SIZE]; //端点2接收缓冲区
25 INT8U idata UartBuf[EP2_PACKET_SIZE];
26
27 INT8U idata InCount;
28
29
30 /*********************************************************************
31 ** 函数名称: Init_D12()
32 ** 功能描述: 设置D12与硬件的连接, 初始化D12, 复位D12
33 ** 输 入: 无
34 ** 输 出: 0: 初始化成功 1: 初始化失败
35 **********************************************************************/
36 INT8U Init_D12(void)
37 {
38 1 bEPPflags.value = 0; //初始化USB事件标志变量
39 1
40 1 Init_D12Port(); //初始化PDIUSBD12与51单片机连接的端口
41 1 Rst_D12(); //复位PDIUSBD12
42 1 reconnect_USB(); //重新连接USB
43 1
44 1 if (D12_ReadChipID() != 0x1012) //读取芯片ID号,如果不为1012H
45 1 return 1; //则复位失败
46 1
47 1 return 0; //初始化成功
48 1 }
49
50 /*******************************************************************
51 ** 函数名称: usbserve()
52 ** 功能描述: USB事件处理函数
53 ** 输 入: 无
54 ** 输 出: 无
C51 COMPILER V8.09 D12DRIVER 06/18/2008 16:40:38 PAGE 2
55 ********************************************************************/
56 void usbserve(void)
57 {
58 1 if (bEPPflags.bits.setup_packet){ //Setup包处理
59 2 DISABLE();
60 2 bEPPflags.bits.setup_packet = 0;
61 2 control_handler(); //调用请求处理子程序
62 2 ENABLE();
63 2 }//if setup_packet
64 1
65 1 if (bEPPflags.bits.bus_reset) { //USB总线复位处理
66 2 DISABLE();
67 2 bEPPflags.bits.bus_reset = 0;
68 2 ENABLE();
69 2 d12_busreset();
70 2 } // if bus reset
71 1
72 1 if (bEPPflags.bits.suspend) { //D12挂起改变处理
73 2 DISABLE();
74 2 bEPPflags.bits.suspend= 0;
75 2 ENABLE();
76 2 d12_suspend();
77 2 } // if suspend change
78 1
79 1 //在此添加其它usb事件处理代码
80 1 }
81
82
83 /*******************************************************************
84 ** 函数名称: d12_busreset()
85 ** 功能描述: USB总线复位处理函数
86 ** 输 入: 无
87 ** 输 出: 无
88 ********************************************************************/
89 void d12_busreset(void)
90 {
91 1 //在此添加总线复位处理代码
92 1 }
93
94 /*******************************************************************
95 ** 函数名称: dma_eot()
96 ** 功能描述: DMA结束处理函数
97 ** 输 入: 无
98 ** 输 出: 无
99 ********************************************************************/
100 void dma_eot(void)
101 {
102 1 //在此添加DMA结束处理代码
103 1 }
104
105 /*******************************************************************
106 ** 函数名称: d12_suspend()
107 ** 功能描述: 总线挂起改变处理函数
108 ** 输 入: 无
109 ** 输 出: 无
110 ********************************************************************/
111 void d12_suspend(void)
112 {
113 1 //在此添加总线挂起改变代码
114 1 }
115
116 /*******************************************************************
C51 COMPILER V8.09 D12DRIVER 06/18/2008 16:40:38 PAGE 3
117 ** 函数名称: ep1_txdone()
118 ** 功能描述: 端点1 IN(发送)处理处理函数
119 ** 输 入: 无
120 ** 输 出: 无
121 ********************************************************************/
122 void ep1_txdone(void)
123 {
124 1 D12_ReadLastTransactionStatus(3); //清中断标志位
125 1 }
126
127 /*******************************************************************
128 ** 函数名称: ep1_txdone()
129 ** 功能描述: 端点1 OUT(接收)处理处理函数
130 ** 输 入: 无
131 ** 输 出: 无
132 ********************************************************************/
133 void ep1_rxdone(void)
134 {
135 1 INT8U len;
136 1
137 1 D12_ReadLastTransactionStatus(2); //清中断标志位
138 1 len = D12_ReadEndpoint(2,sizeof(GenEpBuf),GenEpBuf); //读取数据
139 1 if(len != 0)
140 1 bEPPflags.bits.ep1_rxdone = 1; //标志接收到数据
141 1 }
142
143 /*******************************************************************
144 ** 函数名称: ep2_txdone()
145 ** 功能描述: 端点2 IN(发送)处理处理函数
146 ** 输 入: 无
147 ** 输 出: 无
148 ********************************************************************/
149 void ep2_txdone(void)
150 {
151 1 D12_ReadLastTransactionStatus(5); //清中断标志位
152 1 }
153
154 /*******************************************************************
155 ** 函数名称: ep2_rxdone()
156 ** 功能描述: 端点2 OUT(接收)处理处理函数
157 ** 输 入: 无
158 ** 输 出: 无
159 ********************************************************************/
160 void ep2_rxdone(void)
161 {
162 1 INT8U len,i;
163 1
164 1 D12_ReadLastTransactionStatus(4); //清中断标志位
165 1 len = D12_ReadEndpoint(4,EP2_PACKET_SIZE,EpBuf); //读取缓冲区中的数据
166 1 for(i=0;i<len;i++) //通过串口发送出去
167 1 {
168 2 UartPutChar(EpBuf[i]);
169 2 }
170 1 while(1)
171 1 {
172 2 if (InCount>=10) break;
173 2 }
174 1 if (len != 0)
175 1 bEPPflags.bits.ep2_rxdone = 1;
176 1 }
177 /***********************************************************************
178 ** 函数名称: void Usb_Exception(void)
C51 COMPILER V8.09 D12DRIVER 06/18/2008 16:40:38 PAGE 4
179 ** 功能描述: D12中断服务程序
180 *************************************************************************/
181 /*void Usb_Exception(void) interrupt 0
182 {
183 INT16U i_st;
184
185 DISABLE(); //进入D12中断服务程序时关中断
186
187 bEPPflags.bits.in_isr = 1;
188 i_st = D12_ReadInterruptRegister(); //读取PDIUSBD12中断寄存器值
189 if(i_st != 0) {
190 if(i_st & D12_INT_BUSRESET)
191 bEPPflags.bits.bus_reset = 1; //USB总线复位标志
192 if(i_st & D12_INT_EOT)
193 dma_eot(); //DMA传输技术处理
194 if(i_st & D12_INT_SUSPENDCHANGE)
195 bEPPflags.bits.suspend = 1; //挂起改变标志置1
196 if(i_st & D12_INT_ENDP0IN)
197 ep0_txdone(); //控制端点发送数据处理
198 if(i_st & D12_INT_ENDP0OUT)
199 ep0_rxdone(); //控制端点接收数据处理
200 if(i_st & D12_INT_ENDP1IN)
201 ep1_txdone(); //端点 1发送数据处理
202 if(i_st & D12_INT_ENDP1OUT)
203 ep1_rxdone(); //端点 1接收数据处理
204 if(i_st & D12_INT_ENDP2IN)
205 ep2_txdone(); //端点 2发送数据处理
206 if(i_st & D12_INT_ENDP2OUT)
207 ep2_rxdone(); //端点 2接收数据处理
208 }
209 bEPPflags.bits.in_isr = 0;
210
211 ENABLE(); //退出D12中断服务程序时开中断
212 } */
213
214
215
216 /************************************************************
217 ** 函数名称: disconnect_USB()
218 ** 功能描述: 断开USB总线
219 ************************************************************/
220 void disconnect_USB(void)
221 {
222 1 // Initialize D12 configuration
223 1 D12_SetMode(D12_NOLAZYCLOCK, D12_SETTOONE | D12_CLOCK_12M);
224 1 } //SoftConnect 断开
225
226
227 /************************************************************
228 ** 函数名称: connect_USB()
229 ** 功能描述: 连接USB总线
230 ************************************************************/
231 void connect_USB(void)
232 {
233 1 // Initialize D12 configuration
234 1 D12_SetDMA(0x00);
235 1 D12_SetMode(D12_NOLAZYCLOCK|D12_SOFTCONNECT, D12_SETTOONE | D12_CLOCK_12M);
236 1 } //SoftConnect 连接上,并设置为无LazyClock,模式为非同步模式
237
238
239 /************************************************************
240 ** 函数名称: reconnect_USB()
C51 COMPILER V8.09 D12DRIVER 06/18/2008 16:40:38 PAGE 5
241 ** 功能描述: 重新连接USB总线
242 ************************************************************/
243 void reconnect_USB(void)
244 {
245 1 INT16U clk_cnt;
246 1
247 1 disconnect_USB(); //断开芯片与USB总线连接
248 1 for (clk_cnt = 0;clk_cnt<= 0x9000;clk_cnt++); //延时处理
249 1 connect_USB(); //连接到USB总线
250 1 }
251
252
253 /************************************************************
254 ** 函数名称: Get_D12_FirmwareVer()
255 ** 功能描述: 重新连接USB总线
256 ** 输 入: 无
257 ** 输 出: 16bit整数,如0x0500表示D12固件软件版本号为5.00
258 ************************************************************/
259 INT16U Get_D12_FirmwareVer(void)
260 {
261 1 return 0x0500; //D12固件软件版本号为5.00
262 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 250 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = ---- 2
IDATA SIZE = 145 ----
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 + -