首先,公司使用的GD32,所以我直接用GD提供的库和DEMO。
在opne失败后我检查发现最终在
/*!
rief read sector(s)
param[in] drv: physical drive number (0)
param[in] buff: pointer to the data buffer to store read data
param[in] sector: start sector number (LBA)
param[in] count: sector count (1..255)
param[out] none
etval status
*/
DRESULT disk_read (BYTE drv,
BYTE *buff,
DWORD sector,
BYTE count)
{
BYTE status = USBH_MSC_OK;
if (drv || !count) return RES_PARERR;
if (stat & STA_NOINIT) return RES_NOTRDY;
if (hcd_is_device_connected(&usb_core_dev)) {
do {
status = usbh_msc_read10(&usb_core_dev, buff,sector, 512 * count);
usbh_msc_handle_botxfer(&usb_core_dev, &usb_host, &usbh_state_core);
if (!hcd_is_device_connected(&usb_core_dev)) {
return RES_ERROR;
}
}
while((USBH_MSC_BUSY == status));
}
if (USBH_MSC_OK == status) return RES_OK;
return RES_ERROR;
}
这里会无线循环。也就是状态一直是BUSY,查看了usbh_msc_read10 和 usbh_msc_handle_botxfer 进去后没有执行什么。
后来网上说可能是有频繁中断造成的。故而在中断中加了下打印,发现一直会进入 USBFS_IRQHandler
/*!
rief this function handles USBD interrupt
param[in] none
param[out] none
etval none
*/
void USBFS_IRQHandler (void)
{
printf("
USBFS_IRQHandler handler");
usbh_isr (&usb_core_dev);
}
现在想请大神帮我解答几点
1.正常情况会无限进入 USBFS_IRQHandler 么?
2,如果正常情况不会进入。那么哪些事件会引发这个中断呢?
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
2,usb的各种事务
一周热门 更多>