stm32usb程序求助

[复制链接]
5535|5
 楼主| haibianfeng 发表于 2010-8-16 10:11 | 显示全部楼层 |阅读模式
各位高手,最近在研究stm32的usb程序,virtual com port 的DEMO程序usb_endp.c中有一段程序
void SOF_Callback(void)
{
  static uint32_t FrameCount = 0;
  
  if(bDeviceState == CONFIGURED)
  {
    if (FrameCount++ == VCOMPORT_IN_FRAME_INTERVAL)
    {
      /* Reset the frame counter */
      FrameCount = 0;
      
      /* Check the data to be sent through IN pipe */
      Handle_USBAsynchXfer();
    }
  }  
}
一直不太明白是做什么用的 ,请高手帮小弟解释一下,不胜感激
vigia 发表于 2010-8-16 10:23 | 显示全部楼层
SOF是帧首,对于全速设备来说,每1毫秒有1个帧首信号,因此,每1毫秒会调用1次这个帧首中断回调函数。

在这里,这个中断用做定时,每1毫秒×VCOMPORT_IN_FRAME_INTERVAL的间隔时间,判断下是否有从USART收到的数据要通过USB发到主机。
 楼主| haibianfeng 发表于 2010-8-16 10:36 | 显示全部楼层
2# vigia

哦,原来如此,usb协议里说的帧是这么用的,呵呵!不好意思再问一下EP1_IN_Callback,EP3_OUT_Callback这两个回调函数是怎么进去的,我怎么没找到程序中获得端点号的地方!!!
vigia 发表于 2010-8-16 10:53 | 显示全部楼层
2# vigia  

哦,原来如此,usb协议里说的帧是这么用的,呵呵!不好意思再问一下EP1_IN_Callback,EP3_OUT_Callback这两个回调函数是怎么进去的,我怎么没找到程序中获得端点号的地方!!! ...
haibianfeng 发表于 2010-8-16 10:36



USB_LP_CAN1_RX0_IRQHandler(USB中断) -> USB_Istr(中断处理函数) -> CTR_LP(CTR正确的传输中断):
根据IN/OUT的方向分别调用:
(*pEpInt_OUT[EPindex-1])();

(*pEpInt_IN[EPindex-1])();
EPindex-1指示端点号。
vigia 发表于 2010-8-16 10:54 | 显示全部楼层
中断中调用的两个回调函数数组定义:
void (*pEpInt_IN[7])(void) =
  {
    EP1_IN_Callback,
    EP2_IN_Callback,
    EP3_IN_Callback,
    EP4_IN_Callback,
    EP5_IN_Callback,
    EP6_IN_Callback,
    EP7_IN_Callback,
  };

void (*pEpInt_OUT[7])(void) =
  {
    EP1_OUT_Callback,
    EP2_OUT_Callback,
    EP3_OUT_Callback,
    EP4_OUT_Callback,
    EP5_OUT_Callback,
    EP6_OUT_Callback,
    EP7_OUT_Callback,
  };
 楼主| haibianfeng 发表于 2010-8-16 11:09 | 显示全部楼层
4# vigia

经你这么一指点,我明白了不少,真是太感谢你了!:)
您需要登录后才可以回帖 登录 | 注册

本版积分规则

0

主题

39

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部