各位高手,最近在研究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();
}
}
}
一直不太明白是做什么用的 ,请高手帮小弟解释一下,不胜感激
SOF是帧首,对于全速设备来说,每1毫秒有1个帧首信号,因此,每1毫秒会调用1次这个帧首中断回调函数。
在这里,这个中断用做定时,每1毫秒×VCOMPORT_IN_FRAME_INTERVAL的间隔时间,判断下是否有从USART收到的数据要通过USB发到主机。
哦,原来如此,usb协议里说的帧是这么用的,呵呵!不好意思再问一下EP1_IN_Callback,EP3_OUT_Callback这两个回调函数是怎么进去的,我怎么没找到程序中获得端点号的地方!!!
2# vigia
哦,原来如此,usb协议里说的帧是这么用的,呵呵!不好意思再问一下EP1_IN_Callback,EP3_OUT_Callback这两个回调函数是怎么进去的,我怎么没找到程序中获得端点号的地方!!! ...
USB_LP_CAN1_RX0_IRQHandler(USB中断) -> USB_Istr(中断处理函数) -> CTR_LP(CTR正确的传输中断):
根据IN/OUT的方向分别调用:
(*pEpInt_OUT[EPindex-1])();
或
(*pEpInt_IN[EPindex-1])();
EPindex-1指示端点号。
中断中调用的两个回调函数数组定义:
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,
};