В первом проекте для VE-XC6SLX9, мы реализуем USB HID устройство для для процессора LPC1343FBD48. Микроконтроллеры NXP ARM7 серии LPC2000 представляют собой 32-битные устройства с процессорным ядром ARM7TDMI-S, которые в отличие от 8-битных обеспечивают более высокую производительность (соотношение цена/производительность) и применяются во всех отраслях медицинской, автомобильной, промышленной и бытовой электроники с повышенной сложностью решаемых задач и надёжностью. Данные контроллеры содержат встроенный драйвер USB устройств, что существенно облегчает разработку. Наш проект основывается на документации AN10904: USB HID with the LPC1300 on-chip driver которую можно свободно скачать с сайта www.lpcware.com.
Среду разработки Eclipse мы уже настроили в нашей прошлой статье первый проект для ve-ep4ce10e часть 1. Поэтому сразу приступим к созданию проекта, у нас он называется usb_hid_rom:
Тулчейн выбираем, настроенны ранее:
В оригинальной реализации проект разделен на две части: собственно сам проект, и библиотека CMSIS. В своем проекте мы объединили эти составляющие в один проект. Поэтому на этом шаге нужно скачать наш проект (ссылка ниже). Распаковать содержимое архива в папку созданного проекта, в вашей директории workspace. И нажав на созданном проекте правую клавишу мыши, выбрать пункт меню Refresh.
Структура проекта должна выглядеть так:
Далее настроим проект, сначала выберем тип процессора, тут все стандартно:
В препроцессоре добавим два предопределенных символа:
ARM_MATCH_CM3
__VISUALE__
Первый определяет используемое ядро процессора, второй определяет тип отладочной платы.
Настройка путей поиска заголовочных файлов:
Настройка линкера:
Далее создадим конфигурацию отладчика. Для этого выберем пункт меню Run->External tools->External Tools->External Tools Gonfigurations. Назовем нашу конфигурацию jlink-swd lpc1343, в поле Locations пропишем путь к GDB серверу: D:\Program Files (x86)\SEGGER\JLink_V512g\JLinkGDBServerCL.exe. В качестве аргументов передадим строку -select USB -device LPC1343 -if SWD -speed auto.
На вкладке Common поставим галку на пункт External Tools, после чего наша конфигурация появится в меню быстрого доступа.
Далее выберем пункт Run->Debug Configurations:
В строке Using Legacy GDB Hardware Debugging Launcher - выбираем Select other... Настраиваем согласно рисунку:
На вкладке Debugger прописываем путь до нашего отладчика, у нас это D:\dev\ARM_toolchain\arm_gcc\bin\arm-none-eabi-gdb.exe. Параметры соединения показаны ниже:
На вкладке Startup прописываем команды инициализации:
Code:
monitor speed auto monitor endian little monitor flash device = LPC1343 monitor flash download = 1 monitor flash breakpoints = 1
На вкладке Common добавляем нашу конфигурацию в меню отладки.
Далее изменяем USB дескрипторы с описанием нашего устройства:
C++ Code:
/* USB String Descriptor (optional) */ const uint8_t USB_StringDescriptor[] = { /* Index 0x00: LANGID Codes */ 0x04, /* bLength */ USB_STRING_DESCRIPTOR_TYPE, /* bDescriptorType */ WBVAL(NXP_VID), /* US English */ /* wLANGID */ /* Index 0x04: Manufacturer */ 0x1C, /* bLength */ USB_STRING_DESCRIPTOR_TYPE, /* bDescriptorType */ 'v',0, 'i',0, 's',0, 'u',0, 'a',0, 'l',0, 'e',0, '.',0, 'r',0, 'u',0, ' ',0, ' ',0, ' ',0, /* Index 0x20: Product */ 0x28, /* bLength */ USB_STRING_DESCRIPTOR_TYPE, /* bDescriptorType */ 'V',0, 'E',0, '-',0, 'X',0, 'C',0, '6',0, 'S',0, 'L',0, 'X',0, '9',0, ' ',0, 'H',0, 'I',0, 'D',0, ' ',0, ' ',0, ' ',0, ' ',0, ' ',0, /* Index 0x48: Serial Number */ 0x1A, /* bLength */ USB_STRING_DESCRIPTOR_TYPE, /* bDescriptorType */ 'D',0, 'E',0, 'M',0, 'O',0, '0',0, '0',0, '0',0, '0',0, '0',0, '0',0, '0',0, '0',0, /* Index 0x62: Interface 0, Alternate Setting 0 */ 0x0E, /* bLength */ USB_STRING_DESCRIPTOR_TYPE, /* bDescriptorType */ 'H',0, 'I',0, 'D',0, ' ',0, ' ',0, ' ',0, };
Далее в файле config.h переопределим порты вывода под нашу плату:
C++ Code:
/* Define the output pins controlled by the USB HID client */ #if defined(__VISUALE__) /* LED outputs for the LPC1343-SK board from IAR */ #define OUTPUT_ON 1 #define OUTPUT_OFF (1-OUTPUT_ON) #define OUTPUT0_PORT PORT2 #define OUTPUT0_BIT 0 #define OUTPUT1_PORT PORT2 #define OUTPUT1_BIT 1 #define OUTPUT2_PORT PORT2 #define OUTPUT2_BIT 2 #define OUTPUT3_PORT PORT2 #define OUTPUT3_BIT 3
И порты ввода:
C++ Code:
/* Define the input pins controlled by the USB HID client */ #if defined(__VISUALE__) /* Pushbuttons for the LPC1343-SK board from IAR */ #define INPUT_CLOSED 1 #define INPUT_OPEN (1-INPUT_CLOSED) #define INPUT0_PORT PORT2 #define INPUT0_CPORT LPC_GPIO2 #define INPUT0_BIT 4 #define INPUT1_PORT PORT2 #define INPUT1_CPORT LPC_GPIO2 #define INPUT1_BIT 5 #define INPUT2_PORT PORT2 #define INPUT2_CPORT LPC_GPIO2 #define INPUT2_BIT 6 #define INPUT3_PORT PORT2 #define INPUT3_CPORT LPC_GPIO2 #define INPUT3_BIT 7
Компилируем наш проект:
Code:
'Invoking: Cross ARM GNU Print Size' arm-none-eabi-size --format=berkeley "usb_hid_rom.elf" text data bss dec hex filename 1316 4 32 1352 548 usb_hid_rom.elf 'Finished building: usb_hid_rom.siz' ' ' 21:10:51 Build Finished (took 314ms)
В меню Run->External Tools выбираем созданный нами пункт jlink-swd lpc1343 после этого мы должны подключиться к нашей плате:
Запускаем отладку нажав на значок с зеленым пауком ))) и выбрав там пункт usb_hid_rom Debug :
В результате мы получили USB HID устройство, которым можно управлять с помощью утилиты LPC1343 HID Demonstration.exe:
Исходные файлы проекта: usb_hid_rom.zip
Утилита для управления: LPC1343 HID Demonstration.zip