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