diff options
| author | Ha Thach <[email protected]> | 2021-09-08 13:15:00 +0700 |
|---|---|---|
| committer | GitHub <[email protected]> | 2021-09-08 13:15:00 +0700 |
| commit | f878f892ad3d2275ec9b85e3c0e1f5aa5837262d (patch) | |
| tree | 62ba5f09387374461522ccc160a6dea0c842e051 | |
| parent | 4a63326ed971dd230ca9c99b8a69dc3daa084227 (diff) | |
| parent | b6cda41dafe51dd7d7a28c8b9473929bfe36c933 (diff) | |
Merge pull request #1071 from HiFiPhile/iar
More IAR support
| -rw-r--r-- | docs/reference/getting_started.rst | 36 | ||||
| -rw-r--r-- | tools/iar_gen.py | 51 | ||||
| -rw-r--r-- | tools/iar_template.ipcf | 147 |
3 files changed, 234 insertions, 0 deletions
diff --git a/docs/reference/getting_started.rst b/docs/reference/getting_started.rst index 5f3227927..be2e1b5ea 100644 --- a/docs/reference/getting_started.rst +++ b/docs/reference/getting_started.rst @@ -151,3 +151,39 @@ Some board use uf2 bootloader for drag & drop in to mass storage device, uf2 can .. code-block:: $ make BOARD=feather_nrf52840_express all uf2 + +IAR Support +----------- + +IAR Project Connection files are provided to import TinyUSB stack into your project. + +* A buldable project of your MCU need to be created in advance. + + + * Take example of STM32F0: + + - You need `stm32l0xx.h`, `startup_stm32f0xx.s`, `system_stm32f0xx.c`. + + - `STM32L0xx_HAL_Driver` is only needed to run examples, TinyUSB stack itself doesn't rely on MCU's SDKs. + +* Open `Tools -> Configure Custom Argument Variables` (Switch to `Global` tab if you want to do it for all your projects) + Click `New Group ...`, name it to `TUSB`, Click `Add Variable ...`, name it to `TUSB_DIR`, change it's value to the path of your TinyUSB stack, + for example `C:\\tinyusb` + +Import stack only +^^^^^^^^^^^^^^^^^ + +1. Open `Project -> Add project Connection ...`, click `OK`, choose `tinyusb\\tools\\iar_template.ipcf`. + +Run examples +^^^^^^^^^^^^ + +1. (Python3 is needed) Run `iar_gen.py` to generate .ipcf files of examples: + + .. code-block:: + + cd C:\tinyusb\tools + python iar_gen.py + +2. Open `Project -> Add project Connection ...`, click `OK`, choose `tinyusb\\examples\\(.ipcf of example)`. + For example `C:\\tinyusb\\examples\\device\\cdc_msc\\iar_cdc_msc.ipcf` diff --git a/tools/iar_gen.py b/tools/iar_gen.py new file mode 100644 index 000000000..73c8b29fc --- /dev/null +++ b/tools/iar_gen.py @@ -0,0 +1,51 @@ +#!/usr/bin/python3 + +import os +import xml.dom.minidom as XML + +# Read base configuration +base = "" +with open("iar_template.ipcf") as f: + base = f.read() + +# Enumerate all device/host examples +dir_1 = os.listdir("../examples") +for dir_2 in dir_1: + if os.path.isdir("../examples/{}".format(dir_2)): + print(dir_2) + examples = os.listdir("../examples/{}".format(dir_2)) + for example in examples: + if os.path.isdir("../examples/{}/{}".format(dir_2, example)): + print("../examples/{}/{}".format(dir_2, example)) + conf = XML.parseString(base) + files = conf.getElementsByTagName("files")[0] + inc = conf.getElementsByTagName("includePath")[0] + # Add bsp inc + path = conf.createElement('path') + path_txt = conf.createTextNode("$TUSB_DIR$/hw") + path.appendChild(path_txt) + inc.appendChild(path) + # Add board.c/.h + grp = conf.createElement('group') + grp.setAttribute("name", "bsp") + path = conf.createElement('path') + path_txt = conf.createTextNode("$TUSB_DIR$/hw/bsp/board.c") + path.appendChild(path_txt) + grp.appendChild(path) + files.appendChild(grp) + # Add example's .c/.h + grp = conf.createElement('group') + grp.setAttribute("name", "example") + for file in os.listdir("../examples/{}/{}/src".format(dir_2, example)): + if file.endswith(".c") or file.endswith(".h"): + path = conf.createElement('path') + path.setAttribute("copyTo", "$PROJ_DIR$/{}".format(file)) + path_txt = conf.createTextNode("$TUSB_DIR$/examples/{0}/{1}/src/{2}".format(dir_2, example, file)) + path.appendChild(path_txt) + grp.appendChild(path) + files.appendChild(grp) + cfg_str = conf.toprettyxml() + cfg_str = '\n'.join([s for s in cfg_str.splitlines() if s.strip()]) + #print(cfg_str) + with open("../examples/{0}/{1}/iar_{1}.ipcf".format(dir_2, example), 'w') as f: + f.write(cfg_str) diff --git a/tools/iar_template.ipcf b/tools/iar_template.ipcf new file mode 100644 index 000000000..b8e50a1d2 --- /dev/null +++ b/tools/iar_template.ipcf @@ -0,0 +1,147 @@ +<?xml version="1.0"?> +<iarProjectConnection name="tinyusb" oneShot="true"> + + <includePath> + <path>$TUSB_DIR$/src</path> + <path>$TUSB_DIR$/lib/SEGGER_RTT/RTT</path> + <path>$PROJ_DIR$</path> + </includePath> + <files> + <group name="src/device"> + <path>$TUSB_DIR$/src/device/usbd.c</path> + <path>$TUSB_DIR$/src/device/usbd_control.c</path> + </group> + <group name="src/common"> + <path>$TUSB_DIR$/src/common/tusb_fifo.c</path> + </group> + <group name="src/class/audio"> + <path>$TUSB_DIR$/src/class/audio/audio_device.c</path> + </group> + <group name="src/class/bth"> + <path>$TUSB_DIR$/src/class/bth/bth_device.c</path> + </group> + <group name="src/class/cdc"> + <path>$TUSB_DIR$/src/class/cdc/cdc_device.c</path> + <path>$TUSB_DIR$/src/class/cdc/cdc_host.c</path> + <path>$TUSB_DIR$/src/class/cdc/cdc_rndis_host.c</path> + </group> + <group name="src/class/dfu"> + <path>$TUSB_DIR$/src/class/dfu/dfu_device.c</path> + <path>$TUSB_DIR$/src/class/dfu/dfu_rt_device.c</path> + </group> + <group name="src/class/hid"> + <path>$TUSB_DIR$/src/class/hid/hid_device.c</path> + <path>$TUSB_DIR$/src/class/hid/hid_host.c</path> + </group> + <group name="src/class/midi"> + <path>$TUSB_DIR$/src/class/midi/midi_device.c</path> + </group> + <group name="src/class/msc"> + <path>$TUSB_DIR$/src/class/msc/msc_device.c</path> + <path>$TUSB_DIR$/src/class/msc/msc_host.c</path> + </group> + <group name="src/class/net"> + <path>$TUSB_DIR$/src/class/net/net_device.c</path> + </group> + <group name="src/class/usbtmc"> + <path>$TUSB_DIR$/src/class/usbtmc/usbtmc_device.c</path> + </group> + <group name="src/class/vendor"> + <path>$TUSB_DIR$/src/class/vendor/vendor_device.c</path> + <path>$TUSB_DIR$/src/class/vendor/vendor_host.c</path> + </group> + <group name="src"> + <path>$TUSB_DIR$/src/tusb.c</path> + </group> + <group name="src/host"> + <path>$TUSB_DIR$/src/host/hub.c</path> + <path>$TUSB_DIR$/src/host/usbh.c</path> + <path>$TUSB_DIR$/src/host/usbh_control.c</path> + </group> + <group name="src/portable/dialog/da146xx"> + <path>$TUSB_DIR$/src/portable/dialog/da146xx/dcd_da146xx.c</path> + </group> + <group name="src/portable/ehci"> + <path>$TUSB_DIR$/src/portable/ehci/ehci.c</path> + </group> + <group name="src/portable/espressif/esp32sx"> + <path>$TUSB_DIR$/src/portable/espressif/esp32sx/dcd_esp32sx.c</path> + </group> + <group name="src/portable/microchip/samd"> + <path>$TUSB_DIR$/src/portable/microchip/samd/dcd_samd.c</path> + </group> + <group name="src/portable/microchip/samg"> + <path>$TUSB_DIR$/src/portable/microchip/samg/dcd_samg.c</path> + </group> + <group name="src/portable/microchip/samx7x"> + <path>$TUSB_DIR$/src/portable/microchip/samx7x/dcd_samx7x.c</path> + </group> + <group name="src/portable/mindmotion/mm32"> + <path>$TUSB_DIR$/src/portable/mindmotion/mm32/dcd_mm32f327x_otg.c</path> + </group> + <group name="src/portable/nordic/nrf5x"> + <path>$TUSB_DIR$/src/portable/nordic/nrf5x/dcd_nrf5x.c</path> + </group> + <group name="src/portable/nuvoton/nuc120"> + <path>$TUSB_DIR$/src/portable/nuvoton/nuc120/dcd_nuc120.c</path> + </group> + <group name="src/portable/nuvoton/nuc121"> + <path>$TUSB_DIR$/src/portable/nuvoton/nuc121/dcd_nuc121.c</path> + </group> + <group name="src/portable/nuvoton/nuc505"> + <path>$TUSB_DIR$/src/portable/nuvoton/nuc505/dcd_nuc505.c</path> + </group> + <group name="src/portable/nxp/khci"> + <path>$TUSB_DIR$/src/portable/nxp/khci/dcd_khci.c</path> + </group> + <group name="src/portable/nxp/lpc17_40"> + <path>$TUSB_DIR$/src/portable/nxp/lpc17_40/dcd_lpc17_40.c</path> + <path>$TUSB_DIR$/src/portable/nxp/lpc17_40/hcd_lpc17_40.c</path> + </group> + <group name="src/portable/nxp/lpc_ip3511"> + <path>$TUSB_DIR$/src/portable/nxp/lpc_ip3511/dcd_lpc_ip3511.c</path> + </group> + <group name="src/portable/nxp/transdimension"> + <path>$TUSB_DIR$/src/portable/nxp/transdimension/dcd_transdimension.c</path> + <path>$TUSB_DIR$/src/portable/nxp/transdimension/hcd_transdimension.c</path> + </group> + <group name="src/portable/ohci"> + <path>$TUSB_DIR$/src/portable/ohci/ohci.c</path> + </group> + <group name="src/portable/raspberrypi/rp2040"> + <path>$TUSB_DIR$/src/portable/raspberrypi/rp2040/dcd_rp2040.c</path> + <path>$TUSB_DIR$/src/portable/raspberrypi/rp2040/hcd_rp2040.c</path> + <path>$TUSB_DIR$/src/portable/raspberrypi/rp2040/rp2040_usb.c</path> + </group> + <group name="src/portable/renesas/usba"> + <path>$TUSB_DIR$/src/portable/renesas/usba/dcd_usba.c</path> + </group> + <group name="src/portable/silabs/efm32"> + <path>$TUSB_DIR$/src/portable/silabs/efm32/dcd_efm32.c</path> + </group> + <group name="src/portable/sony/cxd56"> + <path>$TUSB_DIR$/src/portable/sony/cxd56/dcd_cxd56.c</path> + </group> + <group name="src/portable/st/stm32_fsdev"> + <path>$TUSB_DIR$/src/portable/st/stm32_fsdev/dcd_stm32_fsdev.c</path> + </group> + <group name="src/portable/st/synopsys"> + <path>$TUSB_DIR$/src/portable/st/synopsys/dcd_synopsys.c</path> + </group> + <group name="src/portable/template"> + <path>$TUSB_DIR$/src/portable/template/dcd_template.c</path> + </group> + <group name="src/portable/ti/msp430x5xx"> + <path>$TUSB_DIR$/src/portable/ti/msp430x5xx/dcd_msp430x5xx.c</path> + </group> + <group name="src/portable/valentyusb/eptri"> + <path>$TUSB_DIR$/src/portable/valentyusb/eptri/dcd_eptri.c</path> + </group> + <group name="lib/SEGGER_RTT"> + <path>$TUSB_DIR$/lib/SEGGER_RTT/RTT/SEGGER_RTT.c</path> + <path>$TUSB_DIR$/lib/SEGGER_RTT/RTT/SEGGER_RTT_printf.c</path> + <path>$TUSB_DIR$/lib/SEGGER_RTT/Syscalls/SEGGER_RTT_Syscalls_IAR.c</path> + </group> + </files> + +</iarProjectConnection> |
