STM32端点缓冲区
- 缓冲区描述表也存在USB_BTABLE中,所以端点缓冲区地址不是从0开始。
- 缓冲区地址8字节对齐
STM32 的USB中断状态寄存器
IN端点事件
当IN端点成功执行操作后,USB_ISTR = 0x8004,
表示端点4(EP_ID=4) 发送方向 (DIR=0) 正确传输了(CTR=1)
及发送传输完成后的事件。
STM32的IN端点中断回调是数据上传到PC端成功的回调
EPx_IN_Callback 表示数据发送成功了,IN数据要事先写入发送缓冲区
void EP4_IN_Callback(void)
{
PrevXferComplete_ep4 = 1;
pr_dbg("EP4_IN_Callback");
}
OUT端点事件
OUT成功执行后,USB_ISTR = 0x8014,
表示端点4(EP_ID=4) 接收方向 (DIR=1) 正确传输了(CTR=1)
及接收传输完成后的事件。
OUT端点接收数据回调 EPx_OUT_Callback
void EP4_OUT_Callback(void)
{
uint8_t Receive_Buffer[400];
int len = USB_SIL_Read(EP4_OUT, Receive_Buffer);
pr_dbg("EP4_OUT_Callback %d",len);
SetEPRxStatus(ENDP4, EP_RX_VALID);
}
取走数据后要使能端点接收EP_RX_VALID,否则就收不到数据了
总之
IN和OUT都要事先准备好数据和状态,然后当主机取走数据或者主机发送完数据后,才会触发中断事件。不是通过中断来取走数据。