📄 d12ci.lst
字号:
191 1 ENABLE();
192 1
193 1 return c;
194 1 }
195 #endif
196
197 /************************************************************
198 ** 函数名称: D12_ReadLastTransactionStatus()
199 ** 功能描述: 读取最后处理状态寄存器
200 ** 输 入: INT8U bEndp: 端点索引号,取值0 ~ 5
201 ** 输 出: 端点最后处理的状态
202 ************************************************************/
203 INT8U D12_ReadLastTransactionStatus(INT8U bEndp)
204 {
205 1 outportb(D12_COMMAND, 0x40 + bEndp); //输出读取最后处理状态寄存器命令
206 1 return inportb(D12_DATA); //读取状态
207 1 }
208
209 /************************************************************
210 ** 函数名称: D12_SetEndpointStatus()
211 ** 功能描述: 设置端点状态
212 ** 输 入: INT8U bEndp: 端点索引号,取值0 ~ 5
213 INT8U bStalled: 状态值
214 ** 输 出: 端点状态
215 ************************************************************/
216 void D12_SetEndpointStatus(INT8U bEndp,INT8U bStalled)
217 {
218 1 if(bEPPflags.bits.in_isr == 0)
219 1 DISABLE();
220 1
221 1 outportb(D12_COMMAND, 0x40 + bEndp); //发送设置端点状态命令
222 1 outportb(D12_DATA, bStalled); //设置端点状态
223 1
224 1 if(bEPPflags.bits.in_isr == 0)
225 1 ENABLE();
226 1 }
227
228 /************************************************************
229 ** 函数名称: D12_SendResume()
230 ** 功能描述: 传输恢复
231 ** 输 入: 无
232 ** 输 出: 无
233 ************************************************************/
234 #if D12_SendResume_EN
void D12_SendResume(void)
{
outportb(D12_COMMAND, 0xF6); //设置发送恢复
}
#endif
240
C51 COMPILER V7.50 D12CI 03/07/2006 08:28:17 PAGE 5
241
242 /************************************************************
243 ** 函数名称: D12_ReadCurrentFrameNumber()
244 ** 功能描述: 读取当前帧号
245 ** 输 入: 无
246 ** 输 出: 当前帧号
247 ************************************************************/
248 #if D12_ReadCurrentFrameNumber_EN
INT16U D12_ReadCurrentFrameNumber(void)
{
INT16U i,j;
if(bEPPflags.bits.in_isr == 0)
DISABLE();
outportb(D12_COMMAND, 0xF5); //发送读取当前帧数目命令
i= inportb(D12_DATA); //读取帧数目的低8位
j = inportb(D12_DATA); //读取帧数目的高8位
i += (j<<8);
if(bEPPflags.bits.in_isr == 0)
ENABLE();
return i; //返目当前帧数目
}
#endif
268
269
270 /************************************************************
271 ** 函数名称: D12_ReadEndpoint()
272 ** 功能描述: 读取端点数据
273 ** 输 入: INT8U endp: 端点索引号,取值 0 ~ 5
274 INT8U len: 要读取的数据长度
275 INT8U * buf: 接收数据指针
276 ** 输 出: 实际读得的字节数
277 ************************************************************/
278 INT8U D12_ReadEndpoint(INT8U endp,INT8U len,INT8U * buf)
279 {
280 1 INT8U i, j;
281 1
282 1 if(bEPPflags.bits.in_isr == 0)
283 1 DISABLE();
284 1
285 1 outportb(D12_COMMAND, endp); //发送选择端点命令
286 1 if((inportb(D12_DATA) & D12_FULLEMPTY) == 0) { //如果缓冲区为空
287 2 if(bEPPflags.bits.in_isr == 0)
288 2 ENABLE();
289 2 return 0; //则返回读到0字节
290 2 }
291 1
292 1 outportb(D12_COMMAND, 0xF0); //发送读缓冲区命令
293 1 j = inportb(D12_DATA); //读取保留字节
294 1 j = inportb(D12_DATA); //读取数据字节的数目/长度
295 1
296 1 if(j > len) //如果大于要求读的字节数目
297 1 j = len; //则只读取要求的字节长度
298 1
299 1 for(i=0; i<j; i++)
300 1 *(buf+i) = inportb(D12_DATA); //读取要求的字节数目/长度
301 1
302 1 outportb(D12_COMMAND, 0xF2); //清缓冲区,新的信息包才可以重新被接受
C51 COMPILER V7.50 D12CI 03/07/2006 08:28:17 PAGE 6
303 1
304 1 if(bEPPflags.bits.in_isr == 0)
305 1 ENABLE();
306 1
307 1 return j; //返回读到的字节数
308 1 }
309
310 /*************** *********************************************
311 ** 函数名称: D12_WriteEndpoint()
312 ** 功能描述: 把数据写入端点
313 ** 输 入: INT8U endp: 端点索引号,取值 0 ~ 5
314 INT8U len: 要写入的数据长度
315 INT8U * buf: 发送数据指针
316 ** 输 出: 实际写入的字节数
317 ************************************************************/
318 INT8U D12_WriteEndpoint(INT8U endp, INT8U len,INT8U * buf)
319 {
320 1 INT8U i;
321 1
322 1 if(bEPPflags.bits.in_isr == 0)
323 1 DISABLE();
324 1
325 1 outportb(D12_COMMAND, endp); //发送选择端点命令
326 1 i = inportb(D12_DATA); //可选地读取一个字节
327 1
328 1 outportb(D12_COMMAND, 0xF0); //发送写缓冲区命令
329 1 outportb(D12_DATA, 0); //写入一个保留字节
330 1 outportb(D12_DATA, len); //写入即将写入的字节数目
331 1
332 1 for(i=0; i<len; i++)
333 1 outportb(D12_DATA, *(buf+i)); //写入指定的字节
334 1
335 1 outportb(D12_COMMAND, 0xFA); //使缓冲区有效
336 1
337 1 if(bEPPflags.bits.in_isr == 0)
338 1 ENABLE();
339 1
340 1 return len; //返回写入的字节数
341 1 }
342
343 /************************************************************
344 ** 函数名称: D12_AcknowledgeEndpoint()
345 ** 功能描述: 应答Setup
346 ** 输 入: INT8U endp: 端点索引号,取值 0 ~ 5
347 ** 输 出: 无
348 ************************************************************/
349 void D12_AcknowledgeEndpoint(INT8U endp)
350 {
351 1 outportb(D12_COMMAND, endp); //选择端点
352 1 outportb(D12_COMMAND, 0xF1); //应答Setup指令
353 1 if(endp == 0)
354 1 outportb(D12_COMMAND, 0xF2); //清空该端点缓冲区
355 1 }
356
357 /************************************************************
358 ** 函数名称: void D12_ClearBuff()
359 ** 功能描述: 清指定端点的缓冲区(包括双缓冲区)
360 ** 输 入: INT8U endp: 端点索引号,取值 0 ~ 5
361 ** 输 出: 无
362 ************************************************************/
363 #if D12_ClearBuff_EN
void D12_ClearBuff(INT8U endp)
C51 COMPILER V7.50 D12CI 03/07/2006 08:28:17 PAGE 7
{
outportb(D12_COMMAND, endp); //选择端点
outportb(D12_COMMAND, 0xF2); //清空第1个缓冲区
if (endp >= 4){
outportb(D12_COMMAND, endp); //选择端点
outportb(D12_COMMAND, 0xF2); //清空第2个缓冲区
}
}
#endif
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 756 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = ---- 22
IDATA SIZE = ---- ----
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 + -