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