?? chap_9.lst
字號:
C51 COMPILER V7.07 CHAP_9 11/06/2006 16:40:43 PAGE 1
C51 COMPILER V7.07, COMPILATION OF MODULE CHAP_9
OBJECT MODULE PLACED IN Chap_9.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE Chap_9.c BROWSE DEBUG OBJECTEXTEND
stmt level source
1 /****************************************Copyright (c)**************************************************
2 ** 廣州周立功單片機發(fā)展有限公司
3 ** 研 究 所
4 ** 產(chǎn)品一部
5 **
6 ** http://www.zlgmcu.com
7 ** 文 件 名: Chap_9.c
8 ** 最后修改日期: 2004年11月15日
9 ** 描 述: USB驅動程序軟件包: PDIUSBD12 設備端驅動程序 協(xié)議層
10 ** 版 本: V5.0
11 **********************************************************************************************************
-/
12
13 #include <reg52.h>
14 #include "D12Config.h"
15 #include "D12CI.h"
16 #include "Chap_9.h"
17 #include "Descriptor.h"
18
19 //定義控制傳輸結構變量
20 CONTROL_XFER ControlData;
21
22 //定義USB事件標志變量
23 EPPFLAGS bEPPflags;
24
25 //*************************************************************************
26 //USB標準設備請求入口地址指針表
27 //*************************************************************************
28 code void (*StandardDeviceRequest[])(void) =
29 {
30 get_status,
31 clear_feature,
32 reserved,
33 set_feature,
34 reserved,
35 set_address,
36 get_descriptor,
37 reserved,
38 get_configuration,
39 set_configuration,
40 get_interface,
41 set_interface,
42 reserved,
43 reserved,
44 reserved,
45 reserved
46 };
47
48 //*************************************************************************
49 // USB 協(xié)議層函數(shù)
50 //*************************************************************************
51
52 /*************************************
53 ** 函數(shù)名稱: void stall_ep0(void)
54 ** 功能描述: 使控制端點處于停止狀態(tài)
C51 COMPILER V7.07 CHAP_9 11/06/2006 16:40:43 PAGE 2
55 **************************************/
56 void stall_ep0(void)
57 {
58 1 D12_SetEndpointStatus(0, 1);
59 1 D12_SetEndpointStatus(1, 1);
60 1 }
61
62
63 /*************************************
64 ** 函數(shù)名稱: void reserved(void)
65 ** 功能描述: 保留子程序
66 **************************************/
67 void reserved(void)
68 {
69 1 stall_ep0(); //返回STALL
70 1 }
71
72
73 /**********************************************
74 ** 函數(shù)名稱: void init_unconfig(void)
75 ** 功能描述: 進入地址狀態(tài),禁止0除外的所有端點
76 ***********************************************/
77 void init_unconfig(void)
78 {
79 1 D12_SetEndpointEnable(0); //禁止0除外的所有端點
80 1 }
81
82 /**********************************************
83 ** 函數(shù)名稱: void init_config(void)
84 ** 功能描述: 配置處理,允許端點收發(fā)
85 ***********************************************/
86 void init_config(void)
87 {
88 1 D12_SetEndpointEnable(1); //使能普通/同步端點使能
89 1 }
90
91
92 /*********************************************************
93 ** 函數(shù)名稱: void single_transmit(INT8U * buf, INT8U len)
94 ** 功能描述: 通過端點索引 1 發(fā)送數(shù)據(jù)(DATA 類型)
95 ** 輸 入: INT8U * buf: 發(fā)送數(shù)據(jù)指針
96 INT8U len: 發(fā)送數(shù)據(jù)長度
97 ** 輸 出: 無
98 **********************************************************/
99 void single_transmit(INT8U * buf, INT8U len)
100 {
101 1 if( len <= EP0_PACKET_SIZE) { //長度小于EP0最大信息包大小才允許發(fā)送
102 2 D12_WriteEndpoint(1, len, buf);
103 2 }
104 1 }
105
106 /*************************************************************
107 ** 函數(shù)名稱: void code_transmit(INT8U * pRomData, INT16U len)
108 ** 功能描述: 通過端點索引 1 發(fā)送數(shù)據(jù)(CODE類型)
109 ** 輸 入: INT8U *pRomData: 發(fā)送數(shù)據(jù)指針
110 INT16U len: 發(fā)送數(shù)據(jù)長度
111 ** 輸 出: 無
112 **************************************************************/
113 void code_transmit(INT8U *pRomData, INT16U len)
114 {
115 1 ControlData.wCount = 0; //傳輸字節(jié)數(shù)計數(shù)器清0
116 1 if(ControlData.wLength > len)
C51 COMPILER V7.07 CHAP_9 11/06/2006 16:40:43 PAGE 3
117 1 ControlData.wLength = len; //傳輸數(shù)據(jù)總字節(jié)數(shù)不得超過len
118 1
119 1 ControlData.pData = pRomData; //傳輸數(shù)據(jù)指針指向pRomData
120 1 if( ControlData.wLength >= EP0_PACKET_SIZE) { //傳輸數(shù)據(jù)總字節(jié)數(shù)大于端點0最大信息包大小
121 2 D12_WriteEndpoint(1, EP0_PACKET_SIZE, ControlData.pData); //發(fā)送端點0最大信息包大小個字節(jié)
122 2 ControlData.wCount += EP0_PACKET_SIZE; //統(tǒng)計已發(fā)送字節(jié)數(shù)
123 2
124 2 DISABLE();
125 2 bEPPflags.bits.control_state = USB_TRANSMIT; //標志數(shù)據(jù)發(fā)送狀態(tài)
126 2 ENABLE();
127 2 }
128 1 else {
129 2 D12_WriteEndpoint(1, ControlData.wLength, pRomData); //寫入傳輸數(shù)據(jù)總字節(jié)數(shù)
130 2 ControlData.wCount += ControlData.wLength; //統(tǒng)計已發(fā)送字節(jié)數(shù)
131 2 DISABLE();
132 2 bEPPflags.bits.control_state = USB_IDLE; //標志空閑狀態(tài)
133 2 ENABLE();
134 2 }
135 1 }
136
137 //*************************************************************************
138 // USB 標準設備請求服務程序
139 //*************************************************************************
140
141 /********************************************************************
142 ** 函數(shù)名稱: void get_status(void)
143 ** 功能描述: 主機要求獲取狀態(tài),設備返回16位的狀態(tài)描述給主機
144 *********************************************************************/
145 void get_status(void)
146 {
147 1 INT8U endp, txdat[2], c;
148 1 INT8U bRecipient = ControlData.DeviceRequest.bmRequestType & USB_RECIPIENT;
149 1 //取得設備請求類型
150 1 if (bRecipient == USB_RECIPIENT_DEVICE) { //對設備請求
151 2 if(bEPPflags.bits.remote_wakeup == 1)
152 2 txdat[0] = 3; //支持遠程喚醒、自供電
153 2 else
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -