?? d12driver.lst
字號:
C51 COMPILER V7.06 D12DRIVER 12/20/2004 10:45:21 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 /*********************************************************************
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 Rst_D12(); //復位PDIUSBD12
37 1 reconnect_USB(); //重新連接USB
38 1
39 1 if (D12_ReadChipID() != 0x1012) //讀取芯片ID號,如果不為1012H
40 1 return 1; //則復位失敗
41 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.06 D12DRIVER 12/20/2004 10:45:21 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 ENABLE();
64 2 d12_busreset();
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 ENABLE();
71 2 d12_suspend();
72 2 } // if suspend change
73 1
74 1 //在此添加其它usb事件處理代碼
75 1 }
76
77
78 /*******************************************************************
79 ** 函數名稱: d12_busreset()
80 ** 功能描述: USB總線復位處理函數
81 ** 輸 入: 無
82 ** 輸 出: 無
83 ********************************************************************/
84 void d12_busreset(void)
85 {
86 1 //在此添加總線復位處理代碼
87 1 }
88
89 /*******************************************************************
90 ** 函數名稱: dma_eot()
91 ** 功能描述: DMA結束處理函數
92 ** 輸 入: 無
93 ** 輸 出: 無
94 ********************************************************************/
95 void dma_eot(void)
96 {
97 1 //在此添加DMA結束處理代碼
98 1 }
99
100 /*******************************************************************
101 ** 函數名稱: d12_suspend()
102 ** 功能描述: 總線掛起改變處理函數
103 ** 輸 入: 無
104 ** 輸 出: 無
105 ********************************************************************/
106 void d12_suspend(void)
107 {
108 1 //在此添加總線掛起改變代碼
109 1 }
110
111 /*******************************************************************
112 ** 函數名稱: ep1_txdone()
113 ** 功能描述: 端點1 IN(發送)處理處理函數
114 ** 輸 入: 無
115 ** 輸 出: 無
116 ********************************************************************/
C51 COMPILER V7.06 D12DRIVER 12/20/2004 10:45:21 PAGE 3
117 void ep1_txdone(void)
118 {
119 1 D12_ReadLastTransactionStatus(3); //清中斷標志位
120 1 }
121
122 /*******************************************************************
123 ** 函數名稱: ep1_txdone()
124 ** 功能描述: 端點1 OUT(接收)處理處理函數
125 ** 輸 入: 無
126 ** 輸 出: 無
127 ********************************************************************/
128 void ep1_rxdone(void)
129 {
130 1 INT8U len;
131 1
132 1 D12_ReadLastTransactionStatus(2); //清中斷標志位
133 1 len = D12_ReadEndpoint(2,sizeof(GenEpBuf),GenEpBuf); //讀取數據
134 1 if(len != 0)
135 1 bEPPflags.bits.ep1_rxdone = 1; //標志接收到數據
136 1 }
137
138 /*******************************************************************
139 ** 函數名稱: ep2_txdone()
140 ** 功能描述: 端點2 IN(發送)處理處理函數
141 ** 輸 入: 無
142 ** 輸 出: 無
143 ********************************************************************/
144 void ep2_txdone(void)
145 {
146 1 D12_ReadLastTransactionStatus(5); //清中斷標志位
147 1 }
148
149 /*******************************************************************
150 ** 函數名稱: ep2_rxdone()
151 ** 功能描述: 端點2 OUT(接收)處理處理函數
152 ** 輸 入: 無
153 ** 輸 出: 無
154 ********************************************************************/
155 void ep2_rxdone(void)
156 {
157 1 INT8U len;
158 1
159 1 D12_ReadLastTransactionStatus(4); //清中斷標志位
160 1 len = D12_ReadEndpoint(4,EP2_PACKET_SIZE,EpBuf); //讀取緩沖區中的數據
161 1 if (len != 0)
162 1 bEPPflags.bits.ep2_rxdone = 1;
163 1 }
164
165 /***********************************************************************
166 ** 函數名稱: void Usb_Exception(void)
167 ** 功能描述: D12中斷服務程序
168 *************************************************************************/
169 void Usb_Exception(void) interrupt 0
170 {
171 1 INT16U i_st;
172 1
173 1 DISABLE(); //進入D12中斷服務程序時關中斷
174 1
175 1 bEPPflags.bits.in_isr = 1;
176 1 i_st = D12_ReadInterruptRegister(); //讀取PDIUSBD12中斷寄存器值
177 1 if(i_st != 0) {
178 2 if(i_st & D12_INT_BUSRESET)
C51 COMPILER V7.06 D12DRIVER 12/20/2004 10:45:21 PAGE 4
179 2 bEPPflags.bits.bus_reset = 1; //USB總線復位標志
180 2 if(i_st & D12_INT_EOT)
181 2 dma_eot(); //DMA傳輸技術處理
182 2 if(i_st & D12_INT_SUSPENDCHANGE)
183 2 bEPPflags.bits.suspend = 1; //掛起改變標志置1
184 2 if(i_st & D12_INT_ENDP0IN)
185 2 ep0_txdone(); //控制端點發送數據處理
186 2 if(i_st & D12_INT_ENDP0OUT)
187 2 ep0_rxdone(); //控制端點接收數據處理
188 2 if(i_st & D12_INT_ENDP1IN)
189 2 ep1_txdone(); //端點 1發送數據處理
190 2 if(i_st & D12_INT_ENDP1OUT)
191 2 ep1_rxdone(); //端點 1接收數據處理
192 2 if(i_st & D12_INT_ENDP2IN)
193 2 ep2_txdone(); //端點 2發送數據處理
194 2 if(i_st & D12_INT_ENDP2OUT)
195 2 ep2_rxdone(); //端點 2接收數據處理
196 2 }
197 1 bEPPflags.bits.in_isr = 0;
198 1
199 1 ENABLE(); //退出D12中斷服務程序時開中斷
200 1 }
201
202
203 /************************************************************
204 ** 函數名稱: disconnect_USB()
205 ** 功能描述: 斷開USB總線
206 ************************************************************/
207 void disconnect_USB(void)
208 {
209 1 // Initialize D12 configuration
210 1 D12_SetMode(D12_NOLAZYCLOCK, D12_SETTOONE | D12_CLOCK_12M);
211 1 } //SoftConnect 斷開
212
213
214 /************************************************************
215 ** 函數名稱: connect_USB()
216 ** 功能描述: 連接USB總線
217 ************************************************************/
218 void connect_USB(void)
219 {
220 1 // Initialize D12 configuration
221 1 D12_SetDMA(0x00);
222 1 D12_SetMode(D12_NOLAZYCLOCK|D12_SOFTCONNECT, D12_SETTOONE | D12_CLOCK_12M);
223 1 } //SoftConnect 連接上,并設置為無LazyClock,模式為非同步模式
224
225
226 /************************************************************
227 ** 函數名稱: reconnect_USB()
228 ** 功能描述: 重新連接USB總線
229 ************************************************************/
230 void reconnect_USB(void)
231 {
232 1 INT16U clk_cnt;
233 1
234 1 disconnect_USB(); //斷開芯片與USB總線連接
235 1 for (clk_cnt = 0;clk_cnt<= 0x9000;clk_cnt++); //延時處理
236 1 connect_USB(); //連接到USB總線
237 1 }
238
239
240 /************************************************************
C51 COMPILER V7.06 D12DRIVER 12/20/2004 10:45:21 PAGE 5
241 ** 函數名稱: Get_D12_FirmwareVer()
242 ** 功能描述: 重新連接USB總線
243 ** 輸 入: 無
244 ** 輸 出: 16bit整數,如0x0500表示D12固件軟件版本號為5.00
245 ************************************************************/
246 INT16U Get_D12_FirmwareVer(void)
247 {
248 1 return 0x0500; //D12固件軟件版本號為5.00
249 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 382 ----
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 + -