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