LinuxでQMatrixを使ったUSB HIDアプリケーションを開発する

Atmel Startで

  • start.atmel.com を開く
  • "CREATE NEW PROJECT"をクリック
  • ATSAMD21G18Aを選択して"CREATE NEW PROJECT"をクリック
  • "Add software component"から"Middleware/QTouch Library"や"Middleware/USB Stack/USB Device COMPOSITE"を追加
  • "QTouch"タブを開く
  • "Sensors"から"Button"を選び、"Mutualcap"を選択して個数を選ぶ
  • クロックの設定変更画面が出てくるので"Yes"を選択
  • "Pins"を開いてボタンを配置
  • "CLOCKS"タブを開いて"Digital Frequency Locked Loop"をのチェックを外す
  • "Fractional Digital Phase Locked Loop"のチェックを入れて歯車ボタンから"DPLL LDRFRAC"を0, "DPLL LDR"を1499にする
  • "Generic clock generator 0"の歯車ボタンから"Generic clock generator 0 source"を"Fractional Digital Phase Locked Loop"に変更
  • "Export Project"からMakefileを有効にして出力

クロック設定

変更

  • DFLLをUSB用にして有効化:
    • config/hpl_gclk_config.hを変更
      • CONF_GCLK_GENERATOR_7_CONFIG1
      • CONF_GCLK_GEN_7_GENEN1
      • CONF_GCLK_GEN_7_SRCGCLK_GENCTRL_SRC_DFLL48M
    • config/hpl_sysctrl_config.hを変更
      • CONF_DFLL_CONFIG1
      • CONF_DFLL_GCLKGCLK_CLKCTRL_GEN_GCLK4_Val
      • CONF_DFLL_ENABLE1
      • CONF_DFLL_BPLCKC1
      • CONF_DFLL_CCDIS1
      • CONF_DFLL_USBCRM1
      • CONF_DFLL_MUL48000
    • config/peripheral_clk_config.hを変更
      • CONF_GCLK_USB_SRCGCLK_CLKCTRL_GEN_GCLK7_Val
  • USBの最大EP数を拡大
    • config/hpl_usb_config.hを変更
      • CONF_USB_D_NUM_EP_SPCONF_USB_D_N_EP_MAX
      • CONF_USB_D_MAX_EP_NCONF_USB_N_5
  • HID Keyboardを有効化
    • config/usbd_config.hを変更
      • CONF_USB_COMPOSITE_HID_KEYBOARD_EN1
  • LDファイルのFLASH_STARTを0x2000に: rom (rx) : ORIGIN = 0x00000000, LENGTH = 0x00040000rom (rx) : ORIGIN = 0x00002000, LENGTH = 0x0003E000に変更
  • UF2への変換を追加: gcc/Makefile$(OUTPUT_FILE_PATH): $(OBJS)の項目の最後に{{path to uf2conv.py}} $(OUTPUT_FILE_NAME).hex -c -o $(OUTPUT_FILE_NAME).uf2を追加

main()

  • メインループ前にcomposite_device_start()を追加

メインループ

while(1) {
    touch_process();
    if(measurement_done_touch) {
        uint8_t state = get_sensor_state(i) & KEY_TOUCHED_MASK;
        if(state) {
            // key i press
        } else {
            // key i release
        }
    }
}

ビルド

cd gcc/ && make -j4