3.11 基于OHCI的USB主机开发 —— OHCI(控制端口读数据)
2013-10-25 17:38
351 查看
原创作品,允许转载,转载时请务必以超链接形式标明文章
原始出处 、作者信息和本声明。否则将追究法律责任。/article/4321865.html
根据USB的规范,在系统初始化的时候需要从控制端口发送命令,其中有一些命令是包含数据的,对于这些命令,需要调用本函数来完成。函数内主要调用AM9200提供的OHCI接口:AT91F_CreateEd()和AT91F_CreateGenTd()来完成ED和TD的参数设置:
原始出处 、作者信息和本声明。否则将追究法律责任。/article/4321865.html
根据USB的规范,在系统初始化的时候需要从控制端口发送命令,其中有一些命令是包含数据的,对于这些命令,需要调用本函数来完成。函数内主要调用AM9200提供的OHCI接口:AT91F_CreateEd()和AT91F_CreateGenTd()来完成ED和TD的参数设置:
[align=left]/**[/align] * 从控制端点读取数据 [align=left] * @param pSetup Setup包指针,用来设置数据长度和传输方向[/align] * @param *pData 数据缓冲区指针 [align=left] */[/align] shortctrlCmdGet(unsignedint pSetup,unsignedshort len,unsignedchar *pData) [align=left]{[/align] [align=left] unsignedchar direction;[/align] [align=left] [/align] [align=left] //初始化控制端点的ED[/align] [align=left] AT91F_CreateEd([/align] [align=left] (unsignedint) &controlEd,// ED Address[/align] [align=left] 64, // Max packet[/align] [align=left] 0, // TD format[/align] [align=left] 0, // Skip[/align] [align=left] 0, // Speed[/align] [align=left] 0x0, // Direction[/align] [align=left] 0, // Endpoint[/align] usbDevInfo.addr, // Func Address (unsignedint) &genTd[3], // TDQTailPointer (unsignedint) &genTd[0], // TDQHeadPointer [align=left] 0, // ToggleCarry[/align] [align=left] 0x0); // NextED[/align] [align=left] [/align] [align=left] direction = TD_IN;[/align] [align=left] [/align] [align=left] //控制端点的第一个TD,用于发送Setup包[/align] [align=left] AT91F_CreateGenTd([/align] (unsignedint) &genTd[0], // TD Address [align=left] 2, // Data Toggle[/align] [align=left] TD_DELAY_INT, // DelayInterrupt[/align] [align=left] TD_SETUP, // Direction[/align] [align=left] 1, // Buffer Rounding[/align] (unsignedint) pSetup, // Current Buffer Pointer (unsignedint) &genTd[1], // Next TD [align=left] 8); // Buffer Length[/align] [align=left] [/align] [align=left] //控制端点的第二个TD,用于接收数据[/align] [align=left] AT91F_CreateGenTd([/align] (unsignedint) &genTd[1], // TD Address [align=left] 3, // Data Toggle[/align] [align=left] TD_DELAY_INT, // DelayInterrupt[/align] [align=left] direction, // Direction[/align] [align=left] 1, // Buffer Rounding[/align] [align=left] (unsignedint) pData, // Current Buffer Pointer[/align] (unsignedint) &genTd[2], // Next TD [align=left] len); // Buffer Length[/align] [align=left] [/align] [align=left] //控制端点的第三个TD,用于得到命令的状态[/align] [align=left] AT91F_CreateGenTd([/align] (unsignedint) &genTd[2], // TD Address [align=left] 3, // Data Toggle[/align] [align=left] TD_DELAY_INT, // DelayInterrupt[/align] [align=left] ~direction, // Direction[/align] [align=left] 1, // Buffer Rounding[/align] [align=left] 0x0, // Current Buffer Pointer[/align] [align=left] (unsignedint) &genTd[3], // Next TD[/align] [align=left] 0x0); // Buffer Length[/align] [align=left] [/align] [align=left] //标志TD队列结束的最后一个TD,设置为空[/align] [align=left] AT91F_CreateGenTd([/align] (unsignedint) &genTd[3], // TD Address [align=left] 3, // Data Toggle[/align] [align=left] TD_DELAY_INT, // DelayInterrupt[/align] [align=left] ~direction, // Direction[/align] [align=left] 1, // Buffer Rounding[/align] [align=left] 0x0, // Current Buffer Pointer[/align] (unsignedint) 0, // Next TD [align=left] 0x0); // Buffer Length[/align] [align=left] [/align] [align=left] //调用底层接口把数据发送出去[/align] [align=left] ohciCtrlXfer(&controlEd);[/align] [align=left] [/align] [align=left] //设置相关信息,以便中断程序中判断命令是否结束[/align] [align=left] usbRunCmd(USB_CMD_TYPE_CTRL_READ, 3);[/align] [align=left] [/align] [align=left] return 0;[/align] [align=left]}[/align] |
相关文章推荐
- 3.12 基于OHCI的USB主机开发 —— OHCI(控制端口写数据)
- 基于OHCI的USB主机开发 —— OHCI(控制端口读数据)
- 基于OHCI的USB主机开发 —— OHCI(控制端口写数据)
- 3.14 基于OHCI的USB主机开发 —— OHCI(批量端口写数据)
- 基于OHCI的USB主机开发 —— OHCI(批量端口写数据) 推荐
- 3.13 基于OHCI的USB主机 —— OHCI(批量端口读数据)
- 基于OHCI的USB主机 —— OHCI(批量端口读数据)
- 基于OHCI的USB主机 —— USB设备端口特性清除
- 基于OHCI的USB主机 —— 批量端口复位代码
- 基于OHCI的USB主机 —— UFI数据结构1 推荐
- 基于OHCI的USB主机 —— USB设备描述符数据结构
- 基于OHCI的USB主机 —— OHCI(自定义数据结构)
- 基于OHCI的USB主机 —— USB设备其它数据结构
- 4.5 基于OHCI的USB主机 ——USB设备枚举过程
- 基于OHCI的USB主机 —— 背景介绍 推荐
- 3.2 基于OHCI的USB主机 —— OHCI(传输描述符)
- 基于OHCI的USB主机 —— 寄存器(复位)
- 基于OHCI的USB主机 —— 中断处理程序 推荐
- 基于OHCI的USB主机 —— OHCI(TD结构)
- 4.6 基于OHCI的USB主机 —— USB设备描述符数据结构