全球最实用的IT互联网信息网站!

AI人工智能P2P分享&下载搜索网页发布信息网站地图

当前位置:诺佳网 > 电子/半导体 > 接口/总线/驱动 >

AT32F437板单一USB口主从机切换方案

时间:2023-07-31 15:04

人气:

作者:admin

标签: AT32F437    主从  单一    USB 

导读:AT32F437板单一USB口主从机切换方案-使用AT32F437板上只预留了一个USB口,只有D+ D-两根数据线,需要根据要求,切换主机或从机功能。...

使用AT32F437板上只预留了一个USB口,只有D+ D-两根数据线,需要根据要求,切换主机或从机功能。

由于没有找到现成的方案,自己摸索了下,已经实现,记录如下:

变量USB_HostDevice_Flag 为主从机标志,0主机 1从机

首先修改中断函数

void OTGFS1_IRQHandler(void)
{
/* enter interrupt /
rt_interrupt_enter();
if (USB_HostDevice_Flag)
{
USBD_IRQ();//usbd_irq_handler(p_usbfs_instance->p_otg_core);
}
else
{
USBH_IRQ();//usbh_irq_handler(p_usbfs_instance->p_otg_core);
}
/
leave interrupt */
rt_interrupt_leave();
}

然后程序中只需要根据要求,在切换主从机模式时,使用at32_dcd_init()或at32_hcd_init()即可。

if ("需要进入从机模式")
{
if (!USB_HostDevice_Flag)
{
LOG_D("USB_Device_Flag");
at32_dcd_init();
USB_HostDevice_Flag = TRUE;
}
}
else"需要进入主机模式"
{
if (USB_HostDevice_Flag)
{
LOG_D("USB_Host_Flag");
at32_hcd_init();
USB_HostDevice_Flag = FALSE;
}
}

备注下:device模式下,拔出usb线,不会调用usbd_disconnectCallback函数,需要将函数usbd_irq_handler修改下,在usb suspend interrupt 时 增加调用usbd_disconnectCallback(udev);

/* usb suspend interrupt */
if(intsts & USB_OTG_USBSUSP_FLAG)
{
  usbd_suspend_handler(udev);
  usbd_disconnectCallback(udev);
  usb_global_clear_interrupt(usbx, USB_OTG_USBSUSP_FLAG);
}
温馨提示:以上内容整理于网络,仅供参考,如果对您有帮助,留下您的阅读感言吧!
相关阅读
本类排行
相关标签
本类推荐

CPU | 内存 | 硬盘 | 显卡 | 显示器 | 主板 | 电源 | 键鼠 | 网站地图

Copyright © 2025-2035 诺佳网 版权所有 备案号:赣ICP备2025066733号
本站资料均来源互联网收集整理,作品版权归作者所有,如果侵犯了您的版权,请跟我们联系。

关注微信