Визуальная электроника

В первом проекте для 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:
  1. monitor speed auto
  2. monitor endian little
  3. monitor flash device = LPC1343
  4. monitor flash download = 1
  5. monitor flash breakpoints = 1

На вкладке Common добавляем нашу конфигурацию в меню отладки.

Далее изменяем USB дескрипторы с описанием нашего устройства:

C++ Code:
  1. /* USB String Descriptor (optional) */
  2. const uint8_t USB_StringDescriptor[] = {
  3. /* Index 0x00: LANGID Codes */
  4. 0x04, /* bLength */
  5. USB_STRING_DESCRIPTOR_TYPE, /* bDescriptorType */
  6. WBVAL(NXP_VID), /* US English */ /* wLANGID */
  7. /* Index 0x04: Manufacturer */
  8. 0x1C, /* bLength */
  9. USB_STRING_DESCRIPTOR_TYPE, /* bDescriptorType */
  10. 'v',0,
  11. 'i',0,
  12. 's',0,
  13. 'u',0,
  14. 'a',0,
  15. 'l',0,
  16. 'e',0,
  17. '.',0,
  18. 'r',0,
  19. 'u',0,
  20. ' ',0,
  21. ' ',0,
  22. ' ',0,
  23. /* Index 0x20: Product */
  24. 0x28, /* bLength */
  25. USB_STRING_DESCRIPTOR_TYPE, /* bDescriptorType */
  26. 'V',0,
  27. 'E',0,
  28. '-',0,
  29. 'X',0,
  30. 'C',0,
  31. '6',0,
  32. 'S',0,
  33. 'L',0,
  34. 'X',0,
  35. '9',0,
  36. ' ',0,
  37. 'H',0,
  38. 'I',0,
  39. 'D',0,
  40. ' ',0,
  41. ' ',0,
  42. ' ',0,
  43. ' ',0,
  44. ' ',0,
  45. /* Index 0x48: Serial Number */
  46. 0x1A, /* bLength */
  47. USB_STRING_DESCRIPTOR_TYPE, /* bDescriptorType */
  48. 'D',0,
  49. 'E',0,
  50. 'M',0,
  51. 'O',0,
  52. '0',0,
  53. '0',0,
  54. '0',0,
  55. '0',0,
  56. '0',0,
  57. '0',0,
  58. '0',0,
  59. '0',0,
  60. /* Index 0x62: Interface 0, Alternate Setting 0 */
  61. 0x0E, /* bLength */
  62. USB_STRING_DESCRIPTOR_TYPE, /* bDescriptorType */
  63. 'H',0,
  64. 'I',0,
  65. 'D',0,
  66. ' ',0,
  67. ' ',0,
  68. ' ',0,
  69. };

 Далее в файле config.h переопределим порты вывода под нашу плату:

C++ Code:
  1. /* Define the output pins controlled by the USB HID client */
  2. #if defined(__VISUALE__)
  3. /* LED outputs for the LPC1343-SK board from IAR */
  4. #define OUTPUT_ON 1
  5. #define OUTPUT_OFF (1-OUTPUT_ON)
  6.  
  7. #define OUTPUT0_PORT PORT2
  8. #define OUTPUT0_BIT 0
  9.  
  10. #define OUTPUT1_PORT PORT2
  11. #define OUTPUT1_BIT 1
  12.  
  13. #define OUTPUT2_PORT PORT2
  14. #define OUTPUT2_BIT 2
  15.  
  16. #define OUTPUT3_PORT PORT2
  17. #define OUTPUT3_BIT 3

И порты ввода: 

C++ Code:
  1. /* Define the input pins controlled by the USB HID client */
  2. #if defined(__VISUALE__)
  3. /* Pushbuttons for the LPC1343-SK board from IAR */
  4. #define INPUT_CLOSED 1
  5. #define INPUT_OPEN (1-INPUT_CLOSED)
  6.  
  7. #define INPUT0_PORT PORT2
  8. #define INPUT0_CPORT LPC_GPIO2
  9. #define INPUT0_BIT 4
  10.  
  11. #define INPUT1_PORT PORT2
  12. #define INPUT1_CPORT LPC_GPIO2
  13. #define INPUT1_BIT 5
  14.  
  15. #define INPUT2_PORT PORT2
  16. #define INPUT2_CPORT LPC_GPIO2
  17. #define INPUT2_BIT 6
  18.  
  19. #define INPUT3_PORT PORT2
  20. #define INPUT3_CPORT LPC_GPIO2
  21. #define INPUT3_BIT 7

 Компилируем наш проект:

Code:
  1. 'Invoking: Cross ARM GNU Print Size'
  2. arm-none-eabi-size --format=berkeley "usb_hid_rom.elf"
  3. text data bss dec hex filename
  4. 1316 4 32 1352 548 usb_hid_rom.elf
  5. 'Finished building: usb_hid_rom.siz'
  6. ' '
  7.  
  8. 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

Добавить комментарий