LPC1768 и его регистр PLL0FEED

Обсуждаем цифровые устройства...
Ответить
Открыл глаза
Сообщения: 43
Зарегистрирован: Чт окт 08, 2009 15:00:53

Сообщение n_User123 »

решил прошить платку с LPC1768 примером от кейла. пример не заработал, стал разбираться в чем дело. Отлаживаю через JLink. вижу, что в регистр PLL0FEED ничего не записывается. поглядел в память по адресу, где находится регистр, тоже ничего. поэтому не настраивается тактирование.Попробовал отладку в симуляторе - там все работает. Почему не записывается в PLL0FEED?
Реклама
Открыл глаза
Сообщения: 43
Зарегистрирован: Чт окт 08, 2009 15:00:53

Сообщение n_User123 »

ура. все-таки дошел до момента, когда вроде быт USB-device проинициализировался. и даже прочитал тестовый регистр и получил то, что нужно (A50F). теперь не могу дождаться ни одного прерывания. немного не понимаю дальнейший процесс. что должно происходить после инициализации? контроллер по идее должен подать на линию сигнал о подключении нового устройства, и от хоста должен придти запрос установки адреса устройства. как его отловить? разрешил прерывания по приему, но так и ничего не получаю. вот код:

void USBInit()
{
unsigned int tmp[2];
LPC_SC->PCONP|=0x80000000U;
LPC_SC->USBCLKCFG=5; // äåëèì ÷àñòîòó 288 íà 6 ïîëó÷àå&#236 ; 48 Ìãö
LPC_USB->USBClkCtrl|=0x02;
while((LPC_USB->USBClkSt&0x02)!=0x02);
LPC_USB->USBClkCtrl|=0x10;
while((LPC_USB->USBClkSt&0x10)!=0x10);
LPC_PINCON->PINSEL1|=0x14000000;
LPC_PINCON->PINSEL3|=0x20802090;
LPC_PINCON->PINSEL4|=0x00040000;
LPC_PINCON->PINMODE3|=0x20000000;
LPC_USB->USBDevIntClr=0x100;
LPC_USB->USBEpInd=0;
LPC_USB->USBMaxPSize=64;
while(!(LPC_USB->USBDevIntSt&0x100));
LPC_USB->USBDevIntClr=0x100;
LPC_USB->USBEpInd=1;
LPC_USB->USBMaxPSize=64;
while(!(LPC_USB->USBDevIntSt&0x100));
LPC_USB->USBDevIntClr=0x100;

LPC_USB->USBEpIntClr|=0xFFFFFFFF;
LPC_USB->USBDevIntClr|=0xFFFFFFFF;
LPC_USB->USBEpIntEn|=0x3;
// set mode SEI
tmp[0]=1U;
SetWriteCommand(CMD_SET_MODE,tmp,1U);
LPC_USB->USBDevIntEn|=0x0000000E;
NVIC_EnableIRQ(USB_IRQn);
LPC_SC->USBIntSt|=0x80000000;

tmp[0]=0x80U;
SetWriteCommand(CMD_SET_ADDRESS,tmp,1U);
tmp[0]=1U;
SetWriteCommand(CMD_DEV_STATUS,tmp,1U);
SetReadCommand(CMD_TST_REG,tmp,2);
}

void SetReadCommand(unsigned int cmd,unsigned int *data,unsigned int len)
{
LPC_USB->USBDevIntClr=0x30;
LPC_USB->USBCmdCode=cmd+0x00000500U;
while(!(LPC_USB->USBDevIntSt&0x10));
LPC_USB->USBDevIntClr=0x10;
for(unsigned int i=0;i<len;i++)
{
LPC_USB->USBCmdCode=cmd+0x0000200U;
while(!(LPC_USB->USBDevIntSt&0x20));
LPC_USB->USBDevIntClr=0x20;
data=LPC_USB->USBCmdData;
}
}

void SetWriteCommand(unsigned int cmd,unsigned int *data,unsigned int len)
{
LPC_USB->USBDevIntClr=0x10;
LPC_USB->USBCmdCode=(cmd<<16)|0x00000500;
while(!(LPC_USB->USBDevIntSt&0x10));
LPC_USB->USBDevIntClr=0x10;
for(unsigned int i=0;i<len;i++)
{
LPC_USB->USBCmdCode=(data<<16)|0x0000100;
while(!(LPC_USB->USBDevIntSt&0x10));
LPC_USB->USBDevIntClr=0x10;
}
}

int main()
{
SystemInit();
UART0Init();
GPIOInit();
USBInit();
__enable_irq();

LPC_USB->USBCtrl|=1;

while(1)
{
}

return 0;
}

в systeminit настройка тактирования. после pll0 на USB и процессор идет по 48 МГц
Реклама
Родился
Сообщения: 1
Зарегистрирован: Вс окт 23, 2011 18:48:59

Сообщение Jek_point »

Хочу внести свою лепту в описание LPC1768. Купив платку сразу созрел план сделать USB-HID клавиатуру падонка. Но столкнулся. В общем пока дошло только до правильного определения HID - клавиатуры
изменял пример кайла файл usbdesc.c
#include "type.h"

#include "usb.h"
#include "usbcfg.h"
#include "usbdesc.h"

#include "hid.h"

/*------------------------------------------------------------------------------
HID Report Descriptor
*------------------------------------------------------------------------------*/

/* Bit Input Output
0 Joystick LED0
1 Joystick LED1
2 Joystick LED2
3 Joystick LED3
4 Joystick LED4
5 --- LED5
6 --- LED6
7 --- LED7
*/

#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 */

const U8 HID_ReportDescriptor[] = {
HID_UsagePage ( HID_USAGE_PAGE_GENERIC ),
HID_Usage ( HID_USAGE_GENERIC_KEYBOARD ),
HID_Collection ( HID_Application ),
HID_ReportSize ( 1 ),
HID_ReportCount ( 8 ),
HID_UsagePage ( HID_USAGE_PAGE_KEYBOARD ),
HID_UsageMin ( 0xe0 ),
HID_UsageMax ( 0xe7 ),
HID_LogicalMin ( 0 ),
HID_LogicalMax ( 1 ),
HID_Input ( HID_Data | HID_Variable | HID_Absolute ),
HID_ReportCount ( 1 ),
HID_ReportSize ( 8 ),
HID_Input ( HID_Constant ),

HID_ReportCount ( 5 ),
HID_ReportSize ( 1 ),
HID_UsagePage ( HID_USAGE_PAGE_LED ),
HID_UsageMin ( 1 ),
HID_UsageMax ( 5 ),
HID_Output ( HID_Data | HID_Variable | HID_Absolute ),
HID_ReportCount ( 1 ),
HID_ReportSize ( 3 ),
HID_Output ( HID_Constant ),
HID_ReportCount ( 6 ),
HID_ReportSize ( 8 ),
HID_LogicalMin ( 0 ), /* value range: 0 - 0xFF */
HID_LogicalMax ( 255 ),
HID_UsagePage ( HID_USAGE_PAGE_KEYBOARD ),
HID_UsageMin ( 0 ),
HID_UsageMax ( 255 ),
HID_Input ( HID_Data | HID_Array ),
HID_EndCollection,
};

const U16 HID_ReportDescSize = sizeof(HID_ReportDescriptor);

/*========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. */
};


/* USB String Descriptor (optional) */
/* Строковые дескрипторы*/
const U8 USB_StringDescriptor[] = {
/* Index 0x00: LANGID Codes */
0x04, /* bLength Число Размер дескриптора в байтах */
USB_STRING_DESCRIPTOR_TYPE, /* bDescriptorType Константа Строковый дескриптор (0x03) */
WBVAL(0x0009), /* US English */ /* wLANGID Число Код поддерживаемого языка 0
(например 0x0409 Английский - United States) */
/* Index 0x01: Manufacturer */
(13*2 + 2), /* bLength (13 Char + Type + lenght) */
USB_STRING_DESCRIPTOR_TYPE, /* bDescriptorType Constant Строковый дескриптор (0x03) */
'J',0,
'e',0,
'k',0,
's',0,
' ',0,
'S',0,
'o',0,
'f',0,
't',0,
'w',0,
'a',0,
'r',0,
'e',0,
/* Index 0x02: Product */
(16*2 + 2), /* bLength (16 Char + Type + lenght) */
USB_STRING_DESCRIPTOR_TYPE, /* bDescriptorType Constant Строковый дескриптор (0x03) */
'J',0,
'e',0,
'k',0,
' ',0,
' ',0,
'M',0,
'C',0,
'B',0,
'1',0,
'7',0,
'6',0,
'8',0,
' ',0,
'H',0,
'I',0,
'D',0,
/* Index 0x03: Serial Number */
(12*2 + 2), /* bLength (12 Char + Type + lenght) */
USB_STRING_DESCRIPTOR_TYPE, /* bDescriptorType Constant Строковый дескриптор (0x03) */
'L',0, /* allowed characters are */
'o',0, /* 0x0030 - 0x0039 ('0'..'9') */
'c',0, /* 0x0041 - 0x0046 ('A'..'F') */
'a',0, /* length >= 26 */
't',0,
'o',0,
'r',0,
' ',0,
'K',0,
'e',0,
'y',0,
' ',0,
/* Index 0x04: Interface 0, Alternate Setting 0 */
( 4*2 + 2), /* bLength (3 Char + Type + lenght) */
USB_STRING_DESCRIPTOR_TYPE, /* bDescriptorType Constant Строковый дескриптор (0x03) */
'D',0,
'E',0,
'M',0,
'O',0,
};
Ответить

Вернуться в «Цифровая техника»