Mcuzone_TKN 发表于 2020-5-14 17:08:51

SAM4E-EK开发板代码解读14——USB CDC

本帖最后由 Mcuzone_TKN 于 2020-5-14 17:17 编辑

关键词:Microchip AtmelSAM4E SAM4E-EKSAM4E16E 芯片 USB CDC


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

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

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


int main(void)
{

      irq_initialize_vectors();
      cpu_irq_enable();
      sleepmgr_init();

#if !SAMD21
      sysclk_init();
      board_init();
#else
      system_init();
#endif
      ui_init();
      ui_powerdown();

      //启动USB堆栈
      udc_start();

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

void main_suspend_action(void)
{
      ui_powerdown();
}

void main_resume_action(void)
{
      ui_wakeup();
}

void main_sof_action(void)
{
      if (!main_b_cdc_enable)
                return;
      ui_process(udd_get_frame_number());
}

#ifdef USB_DEVICE_LPM_SUPPORT
void main_suspend_lpm_action(void)
{
      ui_powerdown();
}

void main_remotewakeup_lpm_disable(void)
{
      ui_wakeup_disable();
}

void main_remotewakeup_lpm_enable(void)
{
      ui_wakeup_enable();
}
#endif

bool main_cdc_enable(uint8_t port)
{
      main_b_cdc_enable = true;
      //开放式交流
      uart_open(port);
      return true;
}

void main_cdc_disable(uint8_t port)
{
      main_b_cdc_enable = false;
      //近距离通信
      uart_close(port);
}

void main_cdc_set_dtr(uint8_t port, bool b_enable)
{
      if (b_enable) {
                // 主机终端有开COM
                ui_com_open(port);
      }else{
                //主机终端有关闭COM
                ui_com_close(port);
      }
}







页: [1]
查看完整版本: SAM4E-EK开发板代码解读14——USB CDC