[Atmel] 用SAM-BA或JLINK跑ATSAM4E16的程序(23) USB PHDC

[复制链接]
 楼主| ddllxxrr 发表于 2015-12-3 22:10 | 显示全部楼层 |阅读模式
何为PHDC
PHDC为personal health care device class ,人类健康关心设备类。

这个类我第一次听说。

基本上同其它的USB例程一样,只不过多了一个a IEEEE11073 stack skeleton,好像这种类就必须得使用这个协议栈。

程序只是在循环处理ieee11073_skeleton_process()

循环程序如下:

  1. int main(void)
  2. {
  3.         irq_initialize_vectors();
  4.         cpu_irq_enable();

  5.         /* Initialize the sleep manager */
  6.         sleepmgr_init();
  7. #if !SAM0
  8.         sysclk_init();
  9.         board_init();
  10. #else
  11.         system_init();
  12. #endif
  13.         ui_init();
  14.         ui_powerdown();

  15.         /* Start USB stack to authorize VBus monitoring */
  16.         udc_start();

  17.         /* The main loop manages only the power mode
  18.          * because the USB management is done by interrupt
  19.          */
  20.         while (true) {
  21.                 sleepmgr_enter_sleep();
  22.                 if (main_b_phdc_enable) {
  23.                         if (ieee11073_skeleton_process()) {
  24.                                 ui_association(true); /* Association Ok */
  25.                         } else {
  26.                                 ui_association(false); /* No association */
  27.                         }
  28.                 }
  29.         }
  30. }



主处理在这里:

  1. void ui_process(uint16_t framenumber)
  2. {
  3.         static uint8_t cpt_sof = 0;
  4.         bool b_btn_state;
  5.         static bool btn0_last_state = false;
  6.         static bool btn1_last_state = false;

  7.         if ((framenumber % 1000) == 0) {
  8.                 LED_On(LED1);
  9.         }
  10.         if ((framenumber % 1000) == 500) {
  11.                 LED_Off(LED1);
  12.         }

  13.         /* Scan process running each 20ms */
  14.         cpt_sof++;
  15.         if (20 > cpt_sof) {
  16.                 return;
  17.         }

  18.         cpt_sof = 0;

  19.         /* Use buttons to send measures */
  20.         b_btn_state = !ioport_get_pin_level(GPIO_PUSH_BUTTON_1);
  21.         if (b_btn_state != btn0_last_state) {
  22.                 btn0_last_state = b_btn_state;
  23.                 if (b_btn_state) {
  24.                         ieee11073_skeleton_send_measure_1();
  25.                 }
  26.         }
  27.         b_btn_state = !ioport_get_pin_level(GPIO_PUSH_BUTTON_2);
  28.         if (b_btn_state != btn1_last_state) {
  29.                 btn1_last_state = b_btn_state;
  30.                 if (b_btn_state) {
  31.                         ieee11073_skeleton_send_measure_2();
  32.                 }
  33.         }
  34. }
而根据ieee11073_skeleton.c
  1. uint8_t phd_assoc_req[] = {
  2.         0xE2, 0x00,
  3.         0x00, 0x32,
  4.         0x80, 0x00, 0x00, 0x00,
  5.         0x00, 0x01,
  6.         0x00, 0x2A,
  7.         0x50, 0x79,
  8.         0x00, 0x26,
  9.         0x80, 0x00, 0x00, 0x00,
  10.         0x80, 0x00,
  11.         0x80, 0x00, 0x00, 0x00,
  12.         0x00, 0x00, 0x00, 0x00,
  13.         0x00, 0x80, 0x00, 0x00,
  14.         0x00, 0x08,
  15.         0x4C, 0x4E, 0x49, 0x41, 0x47, 0x45, 0x4E, 0x54,
  16.         0x40, 0x00,
  17.         0x00, 0x01, 0x01, 0x00,
  18.         0x00, 0x00, 0x00, 0x00
  19. };

  20. /* ! Sample of measure */
  21. uint8_t phd_measure[] = {
  22.         0xE7, 0x00, 0x00, 0x5A, 0x00, 0x58, 0x12, 0x36, 0x01, 0x01, 0x00, 0x52,
  23.         0x00, 0x00,
  24.         0x00, 0x00, 0x00, 0x00, 0x0D, 0x1D, 0x00, 0x48, 0xF0, 0x00, 0x00, 0x00,
  25.         0x00, 0x04,
  26.         0x00, 0x40, 0x00, 0x01, 0x00, 0x0C, 0xFF, 0x00, 0x02, 0xFA, 0x20, 0x07,
  27.         0x12, 0x06,
  28.         0x12, 0x10, 0x00, 0x00, 0x00, 0x03, 0x00, 0x0C, 0xFF, 0x00, 0x00, 0xF3,
  29.         0x20, 0x09, 0x06, 0x12,
  30.         0x12, 0x10, 0x00, 0x00, 0x00, 0x01, 0x00, 0x0C, 0xFF, 0x00, 0x02, 0xF8,
  31.         0x20, 0x09, 0x06, 0x12,
  32.         0x20, 0x05, 0x00, 0x00, 0x00, 0x03, 0x00, 0x0C, 0xFF, 0x00, 0x00, 0xF2,
  33.         0x20, 0x09, 0x06, 0x12,
  34.         0x20, 0x05, 0x00, 0x00
  35. };

  36. /* ! Device Attributes */
  37. uint8_t phd_attr[] = {
  38.         0xE7, 0x00, 0x00, 0x6E, 0x00, 0x6C, 0x00, 0x02, 0x02, 0x03, 0x00, 0x66,
  39.         0x00, 0x00, 0x00, 0x06,
  40.         0x00, 0x60, 0x0A, 0x5A, 0x00, 0x08, 0x00, 0x01, 0x00, 0x04, 0x10, 0x0F,
  41.         0x00, 0x01, 0x09, 0x28,
  42.         0x00, 0x1A, 0x00, 0x0A, 0x46, 0x72, 0x65, 0x65, 0x73, 0x63, 0x61, 0x6C,
  43.         0x65, 0x20, 0x00, 0x0C, 0x4D, 0x65,
  44.         0x64, 0x69, 0x63, 0x61, 0x6C, 0x20, 0x43, 0x46, 0x56, 0x31, 0x09, 0x84,
  45.         0x00, 0x0A,
  46.         0x00, 0x08, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x0a, 0x44,
  47.         0x00, 0x02, 0x40, 0x00,
  48.         0x09, 0x2D, 0x00, 0x12, 0x00, 0x01, 0x00, 0x0E, 0x00, 0x01, 0x00, 0x00,
  49.         0x00, 0x08, 0x44, 0x45,
  50.         0x31, 0x32, 0x34, 0x35, 0x36, 0x37, 0x09, 0x87, 0x00, 0x08, 0x20, 0x09,
  51.         0x06, 0x12,
  52.         0x12, 0x05, 0x00, 0x00
  53. };



说明该程序是向主机发送人体的测量数据。

当把程序下进去时,再开机会提示安装驱动:



但没有找到驱动,看了提示才明白,得用

CV2.0 and execute Chapter 9 and PHDC tests.




本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:http://shop34182318.taobao.com/ http://shop562064536.taobao.com

2403

主题

6994

帖子

68

粉丝
快速回复 在线客服 返回列表 返回顶部