| 本帖最后由 Mcuzone_TKN 于 2020-5-14 16:17 编辑 
 
 关键词:Microchip Atmel  SAM4E SAM4E-EK  SAM4E16E 芯片  MOUSE USB 鼠标 HID 按键
 概述:这个例子展示了如何实现一个USB设备HID鼠标 
 按下按键1 鼠标上移,按下按键2,鼠标下移。按下按键3,相当于鼠标右键。 
 打开产品光盘SAM4E16E-EK/SAM4E16E-EK中文资料/softpack软件包/Atmel Studio 7,打开15_MOUSE_EXAMPLE例子。复制代码
int main(void)
{
 sysclk_init();
 irq_initialize_vectors();
 cpu_irq_enable();
 // 初始化管理器
 sleepmgr_init();
 board_init();
 ui_init();
 ui_powerdown();
 //启动USB堆栈
 udc_start();
 //主循环只管理电源模式
 // 因为USB管理是通过中断来完成的
 while (true) {
#ifdef   USB_DEVICE_LOW_SPEED
  // 没有USB中断在低速可以用在低速扫描鼠标界面,然后使用主循环
  if (main_b_mouse_enable) {
   static volatile uint16_t virtual_sof_sub = 0;
   static uint16_t virtual_sof = 0;
   if (sysclk_get_cpu_hz()/50000 ==
    virtual_sof_sub++) {
    virtual_sof_sub = 0;
    static uint16_t virtual_sof = 0;
    ui_process(virtual_sof++);
   }
  }
#else
  sleepmgr_enter_sleep();
#endif
 }
}
void main_suspend_action(void)
{
 ui_powerdown();
}
void main_resume_action(void)
{
 ui_wakeup();
}
void main_sof_action(void)
{
 if (!main_b_mouse_enable)
  return;
 ui_process(udd_get_frame_number());
}
void main_remotewakeup_enable(void)
{
 ui_wakeup_enable();
}
void main_remotewakeup_disable(void)
{
 ui_wakeup_disable();
}
bool main_mouse_enable(void)
{
 main_b_mouse_enable = true;
 return true;
}
void main_mouse_disable(void)
{
 main_b_mouse_enable = false;
}
 |