решил прошить платку с LPC1768 примером от кейла. пример не заработал, стал разбираться в чем дело. Отлаживаю через JLink. вижу, что в регистр PLL0FEED ничего не записывается. поглядел в память по адресу, где находится регистр, тоже ничего. поэтому не настраивается тактирование.Попробовал отладку в симуляторе - там все работает. Почему не записывается в PLL0FEED?
ура. все-таки дошел до момента, когда вроде быт USB-device проинициализировался. и даже прочитал тестовый регистр и получил то, что нужно (A50F). теперь не могу дождаться ни одного прерывания. немного не понимаю дальнейший процесс. что должно происходить после инициализации? контроллер по идее должен подать на линию сигнал о подключении нового устройства, и от хоста должен придти запрос установки адреса устройства. как его отловить? разрешил прерывания по приему, но так и ничего не получаю. вот код:
Хочу внести свою лепту в описание LPC1768. Купив платку сразу созрел план сделать USB-HID клавиатуру падонка. Но столкнулся. В общем пока дошло только до правильного определения HID - клавиатуры
изменял пример кайла файл usbdesc.c
#include "type.h"
#define HID_INPUT_REPORT_BYTES 1 /* size of report in Bytes */
#define HID_OUTPUT_REPORT_BYTES 1 /* size of report in Bytes */
#define HID_FEATURE_REPORT_BYTES 1 /* size of report in Bytes */
/*========E.1===Device Descriptor=======Дескрипторы устройства=========*/
const U8 USB_DeviceDescriptor[] = {
USB_DEVICE_DESC_SIZE, /* bLength Число Размер дескриптора в байтах (для дескриптора устройства размер 18 байт) */
USB_DEVICE_DESCRIPTOR_TYPE, /* bDescriptorType Константа Тип - Device Descriptor (0x01) */
WBVAL(0x100), /* 2.00 */ /* bcdUSB BCD Номер спецификации USB, с которой совместимо устройство. */
0x00, /* bDeviceClass Class Код класса (назначается организацией USB Org)
Если равно 0, то каждый интерфейс указывает свой собственный код класса.
Если равен 0xFF, то код класса определяется вендором.
Иначе поле содержит код стандартного класса.*/
0x00, /* bDeviceSubClass SubClass Код подкласса (назначается организацией USB Org) */
0x00, /* bDeviceProtocol Протокол Код протокола (назначается организацией USB Org) */
USB_MAX_PACKET0, /* bMaxPacketSize0 Число Максимальный размер пакета для конечной точки 0.
Допустимые размеры 8, 16, 32, 64 */
WBVAL(0xC251), /* VID idVendor ID Vendor ID, VID (назначается организацией USB Org) */
WBVAL(0x2201), /* PID idProduct ID Product ID, PID (назначается организацией - производителем) */
WBVAL(0x0100), /* 1.00 */ /* bcdDevice BCD Device Release Number (номер версии устройства)*/
0x04, /* iManufacturer Индекс Индекс строки, описывающей производителя */
0x0E, /* iProduct Индекс Индекс строки, описывающей продукт */
0x30, /* iSerialNumber Индекс Индекс строки, содержащей серийный номер */
0x01 /* bNumConfigurations Целое Количество возможных конфигураций */
};
/*==========END==E1==================*/
/*=======E.2===Descriptor=Дескрипторы конфигурации===================*/
/* All Descriptors (Configuration, Interface, Endpoint, Class, Vendor) */
const U8 USB_ConfigDescriptor[] = {
/*++++++E.2.1+++Configuration Descriptor+Дескрипторы конфигурации++++++++++++++++++++++++*/
USB_CONFIGUARTION_DESC_SIZE, /* bLength Число Размер дескриптора в байтах */
USB_CONFIGURATION_DESCRIPTOR_TYPE, /* bDescriptorType Константа Дескриптор конфигурации (0x02) */
WBVAL( /* wTotalLength Число Полная длина возвращаемых данных в байтах */
USB_CONFIGUARTION_DESC_SIZE +
USB_INTERFACE_DESC_SIZE +
HID_DESC_SIZE +
USB_ENDPOINT_DESC_SIZE),
0x01, /* bNumInterfaces Число Количество интерфейсов */
0x01, /* bConfigurationValue Число Величина, используемая как аргумент для выбора этой конфигурации */
0x00, /* iConfiguration Индекс Индекс строкового дескриптора, описывающего эту конфигурацию */
USB_CONFIG_BUS_POWERED /*|*/ /* bmAttributes Набор бит D7 зарезервировано, установлено в 1. (USB 1.0 Bus Powered)
D6 самозапитываемое (Self Powered)
D5 удаленное пробуждение (Remote Wakeup)
D4..0 зарезервировано, установлено в 0. */
/*USB_CONFIG_REMOTE_WAKEUP*/,
USB_CONFIG_POWER_MA(100), /* bMaxPower, мА Максимальное энергопотребление в единицах 50 мА */
/*++++++E.2.2+++Interface Descriptor+Дескрипторы интерфейса++++++++++++++++++++++++*/
USB_INTERFACE_DESC_SIZE, /* bLength Число Размер дескриптора в байтах (9 байт) */
USB_INTERFACE_DESCRIPTOR_TYPE, /* bDescriptorType Константа Дескриптор интерфейса (0x04) */
0x00, /* bInterfaceNumber Число Количество интерфейсов */
0x00, /* bAlternateSetting Число Величина, используемая для выбора альтернативной установки */
0x01, /* bNumEndpoints Число Количество конечных точек, используемых в интерфейсе */
USB_DEVICE_CLASS_HUMAN_INTERFACE, /* bInterfaceClass Класс Код класса (назначается организациейUSB Org) */
HID_SUBCLASS_BOOT, /* bInterfaceSubClass Подкласс Код подкласса (назначается организациейUSB Org) */
HID_PROTOCOL_KEYBOARD, /* bInterfaceProtocol Протокол Код протокола (назначается организациейUSB Org)*/
0x00, /* iInterface Индекс Индекс строкового дескриптора, описывающего этот интерфейс */
/*++++++E.2.3+++HID Class Descriptor+Дескрипторы HID++++++++++++++++++++++++*/
/* HID_DESC_OFFSET = 0x0012 */
HID_DESC_SIZE, /* bLength */
HID_HID_DESCRIPTOR_TYPE, /* bDescriptorType */
WBVAL(0x101), /* 1.00 */ /* bcdHID */
0x00, /* bCountryCode */
0x01, /* bNumDescriptors */
HID_REPORT_DESCRIPTOR_TYPE, /* bDescriptorType */
WBVAL(HID_REPORT_DESC_SIZE), /* wDescriptorLength */
/*++++++E.2.4+++Endpoint Descriptor+Дескрипторы конечной точки++++++++++++++++++++++++*/
USB_ENDPOINT_DESC_SIZE, /* bLength Число Размер дескриптора в байтах (7 байт) */
USB_ENDPOINT_DESCRIPTOR_TYPE, /* bDescriptorType Константа Дескриптор конечной точки (0x05) */
USB_ENDPOINT_IN(0x81), /* bEndpointAddress Конечная точка Адрес конечной точки
биты 0..3 номер конечной точки
биты 4..6 заразервированы, установлены в 0
бит 7 направление 0 = Out, 1 = In (для конечных точек игнорируется) */
USB_ENDPOINT_TYPE_INTERRUPT, /* bmAttributes Набор бит биты 0..1 тип передачи
00 = Control
01 = Isochronous
10 = Bulk
11 = Interrupt
биты 2..7 зарезервированы. Если конечная точка изохронная, то:
биты 3..2 = тип синхронизации (режим Iso)
00 = No Synchonisation
01 = Asynchronous
10 = Adaptive
11 = Synchronous
биты 5..4 = тип использования Usage Type (режим Iso)
00 = конечная точка данных
01 = конечная точка обратной связи (Feedback Endpoint)
10 = явная конечная точка обратной связи данных (Explicit Feedback Data Endpoint)
11 = зарезервировано */
WBVAL(0x0008), /* wMaxPacketSize Число Максимальный размер пакета этой конечной точки,
подходящий для отправки или приема */
0x0A /* 32ms */ /* bInterval Число Интервал для того, чтобы опросить передачи данных конечной точки.
Указывается в количестве фреймов.
Поле игнорируется для конечныйх точек Bulk и Control.
Для конечных точек Isochronous должно быть равно 1 и
для конечных точек interrupt может лежать в диапазоне 1..255. */
};