USB发送没这么简单,不过通过开源例子可以逐步反推发送过程。
像“HID(Human Interface Device)协议范例”,在"usb_out_ep1"函数里面使用"usb_bulk_intr_in"进行发送:
- void usb_out_ep1()
- {
- BYTE csr;
-
- usb_write_reg(INDEX, 1);
- csr = usb_read_reg(OUTCSR1);
- if (csr & OUTSTSTL)
- {
- usb_write_reg(OUTCSR1, OUTCLRDT);
- }
- if (csr & OUTOPRDY)
- {
- usb_bulk_intr_in(UsbBuffer, usb_bulk_intr_out(UsbBuffer, 1), 1); //功能测试,原路返回
- }
- }
复制代码
"usb_bulk_intr_in"函数调用"usb_write_fifo":
- void usb_bulk_intr_in(BYTE *pData, BYTE bSize, BYTE ep)
- {
- usb_write_fifo((BYTE)(FIFO0 + ep), pData, bSize);
- usb_write_reg(INCSR1, INIPRDY);
- }
复制代码
"usb_write_fifo"函数调用"usb_write_reg":
- void usb_write_fifo(BYTE fifo, BYTE *pdat, BYTE cnt)
- {
- while (cnt--)
- {
- usb_write_reg(fifo, *pdat++);
- }
- }
复制代码
"usb_write_reg"函数原型如下:
- void usb_write_reg(BYTE addr, BYTE dat)
- {
- while (USBADR & 0x80);
- USBADR = addr & 0x7f;
- USBDAT = dat;
- }
复制代码
|