Mcuzone 野芯科技

标题: SAM4E-EK开发板代码解读14——USB CDC [打印本页]

作者: Mcuzone_TKN    时间: 2020-5-14 17:08
标题: SAM4E-EK开发板代码解读14——USB CDC
本帖最后由 Mcuzone_TKN 于 2020-5-14 17:17 编辑

关键词:
Microchip Atmel  SAM4E SAM4E-EK  SAM4E16E 芯片 USB CDC



概述:这个例子展示了如何实现一个USB设备CDC

通信设备类(CDC)是一种通用的方式来启用所有通用串行总线(USB)上的通信类型。
这个类使得连接通信设备成为可能数字电话或模拟调制解调器,以及网络设备
例如ADSL或有线调制解调器。虽然CDC设备可以实现相当复杂的设备,它也可以作为一个非常简单的方法在USB上通信。
例如,一个CDC设备可以作为一个虚拟COM端口出现,这大大简化主机端的应用程序开发。


在本例中,我们将使用PC作为USB主机:
它连接到USBUSART板连接器。
USART外设连接到板的USART接口。
将应用程式连接至USB主机(例如个人电脑)
带有迷你b(嵌入式端)a (PC主机端)电缆。
应用程序将作为一个虚拟COM运行(参见Windows设备管理器)
COM端口(RS232和虚拟COM)上打开一个超级终端选择相同的配置为两个COM端口高达115200波特。
在一个超级终端中键入一个字符,它将在另一个超级终端中产生回音。



  1. int main(void)
  2. {

  3.         irq_initialize_vectors();
  4.         cpu_irq_enable();
  5.         sleepmgr_init();

  6. #if !SAMD21
  7.         sysclk_init();
  8.         board_init();
  9. #else
  10.         system_init();
  11. #endif
  12.         ui_init();
  13.         ui_powerdown();

  14.         //启动USB堆栈
  15.         udc_start();

  16.         // 主循环只管理电源模式 因为USB管理是通过中断来完成的
  17.         while (true) {
  18.                 sleepmgr_enter_sleep();
  19.         }
  20. }

  21. void main_suspend_action(void)
  22. {
  23.         ui_powerdown();
  24. }

  25. void main_resume_action(void)
  26. {
  27.         ui_wakeup();
  28. }

  29. void main_sof_action(void)
  30. {
  31.         if (!main_b_cdc_enable)
  32.                 return;
  33.         ui_process(udd_get_frame_number());
  34. }

  35. #ifdef USB_DEVICE_LPM_SUPPORT
  36. void main_suspend_lpm_action(void)
  37. {
  38.         ui_powerdown();
  39. }

  40. void main_remotewakeup_lpm_disable(void)
  41. {
  42.         ui_wakeup_disable();
  43. }

  44. void main_remotewakeup_lpm_enable(void)
  45. {
  46.         ui_wakeup_enable();
  47. }
  48. #endif

  49. bool main_cdc_enable(uint8_t port)
  50. {
  51.         main_b_cdc_enable = true;
  52.         //开放式交流
  53.         uart_open(port);
  54.         return true;
  55. }

  56. void main_cdc_disable(uint8_t port)
  57. {
  58.         main_b_cdc_enable = false;
  59.         //近距离通信
  60.         uart_close(port);
  61. }

  62. void main_cdc_set_dtr(uint8_t port, bool b_enable)
  63. {
  64.         if (b_enable) {
  65.                 // 主机终端有开COM
  66.                 ui_com_open(port);
  67.         }else{
  68.                 //主机终端有关闭COM
  69.                 ui_com_close(port);
  70.         }
  71. }
复制代码







虚拟COM端口.png (47.31 KB, 下载次数: 11193)

虚拟COM端口.png





欢迎光临 Mcuzone 野芯科技 (http://testbbs.mcuzone.com/) Powered by Discuz! X3.1