📄 hal4d12.lst
字号:
C51 COMPILER V7.06 HAL4D12 02/17/2004 14:42:21 PAGE 1
C51 COMPILER V7.06, COMPILATION OF MODULE HAL4D12
OBJECT MODULE PLACED IN Hal4d12.OBJ
COMPILER INVOKED BY: C:\KEIL\C51\BIN\C51.EXE Hal4d12.c BROWSE DEBUG OBJECTEXTEND
stmt level source
1 /*这是固件最底层的代码,可以完成硬件访问PDIUSBD12相关I/O口的功能
2 //*************************************************************************
3 //
4 // P H I L I P S P R O P R I E T A R Y
5 //
6 // COPYRIGHT (c) 1999 BY PHILIPS SINGAPORE.
7 // -- ALL RIGHTS RESERVED --
8 //
9 // File Name: Hal4D12.C
10 // Author: Hilbert Zhang ZhenYu
11 // Created: Nov. 19, 99
12 // Modified:
13 // Revision: 0.0.
14 //
15 //*************************************************************************
16 //
17 //*************************************************************************
18 */
19 #include <reg51.h> /* special function register declarations */
20 #undef GLOBAL_EXT
21 #include "SysCnfg.h"
22 #include "BasicTyp.h"
23 #include "common.h"
24 #include "Hal4Sys.h"
25 #include "Hal4d12.h"
26 /*
27 //*************************************************************************
28 // Functions
29 //*************************************************************************
30 */
31 void Hal4D12_SetAddressEnable(INT8 bAddress, bit bEnable) //设置地址使能
32 {
33 1 Hal4Sys_D12CmdPortOutB( 0xD0);
34 1 if(bEnable)
35 1 bAddress |= 0x80;
36 1 Hal4Sys_D12DataPortOutB( bAddress);
37 1 }
38
39
40 void Hal4D12_SetEndpointEnable(bit bEnable) //设置端点使能
41 {
42 1 Hal4Sys_D12CmdPortOutB( 0xD8);
43 1 if(bEnable)
44 1 Hal4Sys_D12DataPortOutB( 1);
45 1 else
46 1 Hal4Sys_D12DataPortOutB( 0);
47 1 }
48
49
50 void Hal4D12_SetMode(INT8 bConfig, INT8 bClkDiv) //设置模式
51 {
52 1 Hal4Sys_D12CmdPortOutB( 0xF3);
53 1 Hal4Sys_D12DataPortOutB( bConfig);//0x02
54 1 Hal4Sys_D12DataPortOutB( bClkDiv);//0x1f
55 1 }
C51 COMPILER V7.06 HAL4D12 02/17/2004 14:42:21 PAGE 2
56
57
58 void Hal4D12_SetDMA(INT8 bMode) //配置DMA
59 {
60 1 Hal4Sys_D12CmdPortOutB( 0xFB);
61 1 Hal4Sys_D12DataPortOutB( bMode);
62 1 }
63
64
65 void Hal4D12_ReadInterruptRegister( INT16 * pInterruptReg) //读中断继承器
66 {
67 1 Hal4Sys_D12CmdPortOutB( 0xF4);
68 1 ((PFLEXI_INT16) pInterruptReg)->chars.c0 = Hal4Sys_D12DataPortInB();
69 1 ((PFLEXI_INT16) pInterruptReg)->chars.c1 = Hal4Sys_D12DataPortInB();
70 1 }
71
72
73 INT8 Hal4D12_ReadLastTransactionStatus(INT8 bEndp) //读端点最后传输状态
74 {
75 1 Hal4Sys_D12CmdPortOutB( 0x40|bEndp);
76 1 return Hal4Sys_D12DataPortInB();
77 1 }
78
79
80 INT8 Hal4D12_SelectEndpoint(INT8 bEndp) //选择端点
81 {
82 1 Hal4Sys_D12CmdPortOutB( bEndp);
83 1 return Hal4Sys_D12DataPortInB();
84 1 }
85
86
87 /*
88 INT8 Hal4D12_ReadEndpointStatus(INT8 bEndp) //读端点状态
89 {
90 Hal4Sys_D12CmdPortOutB( 0x80|bEndp);
91 return Hal4Sys_D12DataPortInB();
92 }*/
93
94
95
96 void Hal4D12_SetEndpointStatus(INT8 bEndp, INT8 bStalled) //设置端点状态
97 {
98 1 Hal4Sys_D12CmdPortOutB( 0x40|bEndp);
99 1 Hal4Sys_D12DataPortOutB( bStalled);
100 1 }
101
102 /*
103 void Hal4D12_SendResume(void) // 发送恢复
104 {
105 Hal4Sys_D12CmdPortOutB( 0xF6);
106 }*/
107
108
109 INT8 Hal4D12_ReadEndpoint(INT8 endp, INT8 len, INT8 data * buf) //读取端点缓冲区数据
110 {
111 1 Hal4Sys_D12CmdPortOutB( endp); //选择端点
112 1 if((Hal4Sys_D12DataPortInB() & D12_FULLEMPTY) == 0)
113 1 {
114 2 return D12_FIFOEMPTY;
115 2 }
116 1 Hal4Sys_D12CmdPortOutB( 0xF0); //发读D12命令
117 1 Hal4Sys_D12DataPortInB();
C51 COMPILER V7.06 HAL4D12 02/17/2004 14:42:21 PAGE 3
118 1 endp = Hal4Sys_D12DataPortInB();
119 1 if( endp > len)
120 1 endp = len;
121 1 else
122 1 len = endp;
123 1 for(; endp != 0 ; endp--, buf++ )
124 1 *(buf) = Hal4Sys_D12DataPortInB();
125 1 Hal4Sys_D12CmdPortOutB( 0xF2); //缓冲区清零
126 1 return len ;
127 1 }
128
129
130 INT8 Hal4D12_ReadEPAtCode(INT8 endp, INT8 len) //读D12缓冲区到代码
131 {
132 1 // using endp, len, buf as var
133 1 Hal4Sys_D12CmdPortOutB( endp); //选择端点,返回端点状态
134 1 if((Hal4Sys_D12DataPortInB() & D12_FULLEMPTY) == 0)
135 1 {
136 2 return D12_FIFOEMPTY; //返回缓冲区空
137 2 }
138 1 Hal4Sys_D12CmdPortOutB( 0xF0); //发读数据指令
139 1 Hal4Sys_D12DataPortInB();
140 1 endp = Hal4Sys_D12DataPortInB(); //读取缓冲区数据字节大小
141 1 if( endp > len)
142 1 endp = len;
143 1 else
144 1 len = endp;
145 1 for(; endp != 0 ; endp-- ) //读取数据
146 1 Hal4Sys_D12DataPortInB();
147 1 Hal4Sys_D12CmdPortOutB( 0xF2); //清空缓冲区
148 1 return len ;
149 1 }
150
151 /*
152 void Hal4D12_ValidateBuffer(INT8 endp) // 使缓冲区有效
153 {
154
155 // Select Endpoint
156 Hal4Sys_D12CmdPortOutB( endp);
157
158 // Valiate Buffer
159 Hal4Sys_D12CmdPortOutB( 0xFA);
160
161 }
162 */
163
164
165 /*
166 void Hal4D12_ClearBuffer(INT8 endp) //清除缓冲区
167 {
168 // Select Endpoint
169 Hal4Sys_D12CmdPortOutB( endp);
170 // Clear Buffer
171 Hal4Sys_D12CmdPortOutB( 0xF2);
172
173 }*/
174
175
176 //Amend by Liu Ying Bin
177 //INT8 Hal4D12_WriteEndpoint(INT8 endp, INT8 len, INT8 idata * buf)
178
179 INT8 Hal4D12_WriteEndpoint(INT8 endp, INT8 len, INT8 data * buf) //发送缓冲区数据
C51 COMPILER V7.06 HAL4D12 02/17/2004 14:42:21 PAGE 4
180 {
181 1 Hal4Sys_D12CmdPortOutB( endp);
182 1 Hal4Sys_D12DataPortInB();
183 1 Hal4Sys_D12CmdPortOutB( 0xF0); // 发写D12缓冲区指令
184 1 endp = len;
185 1 Hal4Sys_D12DataPortOutB( 0);
186 1 Hal4Sys_D12DataPortOutB( endp); // 写进数据长度
187 1 for( ; endp != 0; endp-- , buf++)
188 1 Hal4Sys_D12DataPortOutB( *(buf) );
189 1 Hal4Sys_D12CmdPortOutB( 0xFA); // 使缓冲区有效
190 1 return len;
191 1 }
192
193
194 INT8 Hal4D12_WriteEPAtCode(INT8 endp, INT8 len, INT8 code * buf) //发送代码区数据
195 {
196 1 Hal4Sys_D12CmdPortOutB( endp); //选择端点
197 1 Hal4Sys_D12DataPortInB(); //
198 1 endp = len;
199 1 Hal4Sys_D12CmdPortOutB( 0xF0); //发写缓冲区命令
200 1 Hal4Sys_D12DataPortOutB( 0); //写每一字节(没效)
201 1 Hal4Sys_D12DataPortOutB( endp); //写每二字节,发送数据长度
202 1 for(; endp != 0; endp-- , buf++) //发送数据
203 1 Hal4Sys_D12DataPortOutB( *(buf) );
204 1 Hal4Sys_D12CmdPortOutB( 0xFA); // 使缓冲区有效
205 1 return len; // 返回已发送字节长度
206 1 }
207
208
209 void Hal4D12_AcknowledgeEndpoint(INT8 endp) //应答SETUP
210 {
211 1 Hal4Sys_D12CmdPortOutB( endp); //选择端点
212 1 Hal4Sys_D12CmdPortOutB( 0xF1); //发应答命令
213 1 if(endp == 0)
214 1 Hal4Sys_D12CmdPortOutB( 0xF2); //如果是端点零,则清缓冲区
215 1 }
216
217
218 void Hal4D12_SingleTransmitEP0(INT8 * buf, INT8 len)
219 {
220 1 Hal4D12_WriteEndpoint(1, len, buf);
221 1 }
222
223
224 void Hal4D12_AcknowledgeSETUP(void)
225 {
226 1 Hal4D12_AcknowledgeEndpoint(0);
227 1 Hal4D12_AcknowledgeEndpoint(1);
228 1 }
229
230
231 void Hal4D12_StallEP0(void)
232 {
233 1 Hal4D12_SetEndpointStatus(0, 1);
234 1 Hal4D12_SetEndpointStatus(1, 1);
235 1 }
236
237
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 449 ----
C51 COMPILER V7.06 HAL4D12 02/17/2004 14:42:21 PAGE 5
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = ---- 21
IDATA SIZE = ---- ----
BIT SIZE = ---- 2
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -