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_CONFIG
を1
にCONF_GCLK_GEN_7_GENEN
を1
にCONF_GCLK_GEN_7_SRC
をGCLK_GENCTRL_SRC_DFLL48M
に
config/hpl_sysctrl_config.h
を変更CONF_DFLL_CONFIG
を1
にCONF_DFLL_GCLK
をGCLK_CLKCTRL_GEN_GCLK4_Val
にCONF_DFLL_ENABLE
を1
にCONF_DFLL_BPLCKC
を1
にCONF_DFLL_CCDIS
を1
にCONF_DFLL_USBCRM
を1
にCONF_DFLL_MUL
を48000
に
config/peripheral_clk_config.h
を変更CONF_GCLK_USB_SRC
をGCLK_CLKCTRL_GEN_GCLK7_Val
に
- USBの最大EP数を拡大
config/hpl_usb_config.h
を変更CONF_USB_D_NUM_EP_SP
をCONF_USB_D_N_EP_MAX
にCONF_USB_D_MAX_EP_N
をCONF_USB_N_5
に
- HID Keyboardを有効化
config/usbd_config.h
を変更CONF_USB_COMPOSITE_HID_KEYBOARD_EN
を1
に
- LDファイルのFLASH_STARTを0x2000に:
rom (rx) : ORIGIN = 0x00000000, LENGTH = 0x00040000
をrom (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