📄 d12driver.lst
字号:
C51 COMPILER V7.06 D12DRIVER 12/03/2004 14:32:42 PAGE 1
C51 COMPILER V7.06, COMPILATION OF MODULE D12DRIVER
OBJECT MODULE PLACED IN D12Driver.OBJ
COMPILER INVOKED BY: d:\Keil\C51\BIN\C51.EXE D12Driver.c BROWSE DEBUG OBJECTEXTEND
stmt 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
22 INT8U idata GenEpBuf[EP1_PACKET_SIZE]; //端点1接收缓冲区
23 INT8U idata EpBuf[EP2_PACKET_SIZE]; //端点2接收缓冲区
24
25 INT16U data D12_DATA; //D12 数据地址变量
26 INT16U data D12_COMMAND; //D12 命令地址变量
27
28 /*********************************************************************
29 ** 函数名称: Init_D12()
30 ** 功能描述: 设置D12与硬件的连接, 初始化D12, 复位D12
31 ** 输 入: 无
32 ** 输 出: 0: 初始化成功 1: 初始化失败
33 **********************************************************************/
34 INT8U Init_D12(void)
35 {
36 1 bEPPflags.value = 0; //初始化USB事件标志变量
37 1
38 1 D12_COMMAND = D12_COMMAND_PORT; //D12 命令地址
39 1 D12_DATA = D12_DATA_PORT; //D12 数据地址
40 1
41 1 Init_D12Port(); //初始化PDIUSBD12与51单片机连接的端口
42 1 Rst_D12(); //复位PDIUSBD12
43 1 reconnect_USB(); //重新连接USB
44 1
45 1 if (D12_ReadChipID() != 0x1012) //读取芯片ID号,如果不为1012H
46 1 return 1; //则复位失败
47 1
48 1 return 0; //初始化成功
49 1 }
50
51 /*******************************************************************
52 ** 函数名称: usbserve()
53 ** 功能描述: USB事件处理函数
54 ** 输 入: 无
C51 COMPILER V7.06 D12DRIVER 12/03/2004 14:32:42 PAGE 2
55 ** 输 出: 无
56 ********************************************************************/
57 void usbserve(void)
58 {
59 1 if (bEPPflags.bits.setup_packet){ //Setup包处理
60 2 DISABLE();
61 2 bEPPflags.bits.setup_packet = 0;
62 2 control_handler(); //调用请求处理子程序
63 2 ENABLE();
64 2 }//if setup_packet
65 1
66 1 if (bEPPflags.bits.bus_reset) { //USB总线复位处理
67 2 DISABLE();
68 2 bEPPflags.bits.bus_reset = 0;
69 2 ENABLE();
70 2 d12_busreset();
71 2 } // if bus reset
72 1
73 1 if (bEPPflags.bits.suspend) { //D12挂起改变处理
74 2 DISABLE();
75 2 bEPPflags.bits.suspend= 0;
76 2 ENABLE();
77 2 d12_suspend();
78 2 } // if suspend change
79 1
80 1 //在此添加其它usb事件处理代码
81 1 }
82
83
84 /*******************************************************************
85 ** 函数名称: d12_busreset()
86 ** 功能描述: USB总线复位处理函数
87 ** 输 入: 无
88 ** 输 出: 无
89 ********************************************************************/
90 void d12_busreset(void)
91 {
92 1 //在此添加总线复位处理代码
93 1 }
94
95 /*******************************************************************
96 ** 函数名称: dma_eot()
97 ** 功能描述: DMA结束处理函数
98 ** 输 入: 无
99 ** 输 出: 无
100 ********************************************************************/
101 void dma_eot(void)
102 {
103 1 //在此添加DMA结束处理代码
104 1 }
105
106 /*******************************************************************
107 ** 函数名称: d12_suspend()
108 ** 功能描述: 总线挂起改变处理函数
109 ** 输 入: 无
110 ** 输 出: 无
111 ********************************************************************/
112 void d12_suspend(void)
113 {
114 1 //在此添加总线挂起改变代码
115 1 }
116
C51 COMPILER V7.06 D12DRIVER 12/03/2004 14:32:42 PAGE 3
117 /*******************************************************************
118 ** 函数名称: ep1_txdone()
119 ** 功能描述: 端点1 IN(发送)处理处理函数
120 ** 输 入: 无
121 ** 输 出: 无
122 ********************************************************************/
123 void ep1_txdone(void)
124 {
125 1 D12_ReadLastTransactionStatus(3); //清中断标志位
126 1 }
127
128 /*******************************************************************
129 ** 函数名称: ep1_txdone()
130 ** 功能描述: 端点1 OUT(接收)处理处理函数
131 ** 输 入: 无
132 ** 输 出: 无
133 ********************************************************************/
134 void ep1_rxdone(void)
135 {
136 1 unsigned char len;
137 1
138 1 D12_ReadLastTransactionStatus(2); //清中断标志位
139 1 len = D12_ReadEndpoint(2,sizeof(GenEpBuf),GenEpBuf); //读取数据
140 1 if(len != 0)
141 1 bEPPflags.bits.ep1_rxdone = 1; //标志接收到数据
142 1 }
143
144 /*******************************************************************
145 ** 函数名称: ep2_txdone()
146 ** 功能描述: 端点2 IN(发送)处理处理函数
147 ** 输 入: 无
148 ** 输 出: 无
149 ********************************************************************/
150 void ep2_txdone(void)
151 {
152 1 D12_ReadLastTransactionStatus(5); //清中断标志位
153 1 }
154
155 /*******************************************************************
156 ** 函数名称: ep2_rxdone()
157 ** 功能描述: 端点2 OUT(接收)处理处理函数
158 ** 输 入: 无
159 ** 输 出: 无
160 ********************************************************************/
161 void ep2_rxdone(void)
162 {
163 1 INT8U len;
164 1
165 1 D12_ReadLastTransactionStatus(4); //清中断标志位
166 1 len = D12_ReadEndpoint(4,EP2_PACKET_SIZE,EpBuf); //读取缓冲区中的数据
167 1 if (len != 0)
168 1 bEPPflags.bits.ep2_rxdone = 1;
169 1 }
170
171 /***********************************************************************
172 ** 函数名称: void Usb_Exception(void)
173 ** 功能描述: D12中断服务程序
174 *************************************************************************/
175 void Usb_Exception(void) interrupt 0
176 {
177 1 DISABLE(); //进入D12中断服务程序时关中断
178 1 fn_usb_isr();
C51 COMPILER V7.06 D12DRIVER 12/03/2004 14:32:42 PAGE 4
179 1 ENABLE(); //退出D12中断服务程序时开中断
180 1 }
181
182
183 /************************************************************
184 ** 函数名称: disconnect_USB()
185 ** 功能描述: 断开USB总线
186 ************************************************************/
187 void disconnect_USB(void)
188 {
189 1 // Initialize D12 configuration
190 1 D12_SetMode(D12_NOLAZYCLOCK, D12_SETTOONE | D12_CLOCK_12M);
191 1 } //SoftConnect 断开
192
193
194 /************************************************************
195 ** 函数名称: connect_USB()
196 ** 功能描述: 连接USB总线
197 ************************************************************/
198 void connect_USB(void)
199 {
200 1 // Initialize D12 configuration
201 1 D12_SetDMA(0x00);
202 1 D12_SetMode(D12_NOLAZYCLOCK|D12_SOFTCONNECT, D12_SETTOONE | D12_CLOCK_12M);
203 1 } //SoftConnect 连接上,并设置为无LazyClock,模式为非同步模式
204
205
206 /************************************************************
207 ** 函数名称: reconnect_USB()
208 ** 功能描述: 重新连接USB总线
209 ************************************************************/
210 void reconnect_USB(void)
211 {
212 1 INT16U clk_cnt;
213 1
214 1 disconnect_USB(); //断开芯片与USB总线连接
215 1 for (clk_cnt = 0;clk_cnt<= 0x9000;clk_cnt++); //延时处理
216 1 connect_USB(); //连接到USB总线
217 1 }
218
219
220 /************************************************************
221 ** 函数名称: Get_D12_FirmwareVer()
222 ** 功能描述: 重新连接USB总线
223 ** 输 入: 无
224 ** 输 出: 16bit整数,如0x0500表示D12固件软件版本号为5.00
225 ************************************************************/
226 INT16U Get_D12_FirmwareVer(void)
227 {
228 1 return 0x0500; //D12固件软件版本号为5.00
229 1 }
230
231 /************************************************************
232 ** 函数名称: D12_ReadChipID()
233 ** 功能描述: 读取芯片ID
234 ** 输 入: 无
235 ** 输 出: 芯片的ID号
236 ************************************************************/
237 INT16U D12_ReadChipID(void)
238 {
239 1 INT16U i,j;
240 1
C51 COMPILER V7.06 D12DRIVER 12/03/2004 14:32:42 PAGE 5
241 1 if(bEPPflags.bits.in_isr == 0)
242 1 DISABLE();
243 1
244 1 outportb(D12_COMMAND, 0xFD); //发送读PDIUSBD12芯片ID号命令
245 1 i=inportb(D12_DATA); //读取ID号低字节
246 1 j=inportb(D12_DATA); //读取ID号高位字节
247 1 i += (j<<8); //组成16位的PDIUSBD12芯片ID号
248 1
249 1 if(bEPPflags.bits.in_isr == 0)
250 1 ENABLE();
251 1
252 1 return i;
253 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 364 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 4 2
IDATA SIZE = 80 ----
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 + -