|
Отправка пакета через USB из LPC1778 в ПК |
|
|
|
Dec 21 2014, 18:42
|
Местный
  
Группа: Участник
Сообщений: 234
Регистрация: 7-11-13
Пользователь №: 79 085

|
Пытаюсь отправить пакет в ПК, где его ждёт программа-монитор USBTrace. При включении подтягивающего резистора в мониторе вижу, что винда отправила какой-то запрос, все байты на виду, но мне они пока не нужны. Жду окончания запроса и пытаюсь отправить свой пакет, но почему-то пока никак. Делаю всё по описанию - включаю изохронную точку на выход, указываю максимальную длину пакета и начальное значение счётчика, затем записываю данные в буфер и вызываю команду проверки буфера, после которой при первом прерывании фрейма этот буфер улетает в ПК. Для индикации прерываний фреймов задействовал одну ножку и на осциллографе наблюдаю импульсы через каждую миллисекунда с точностью до микросекунд, т.е. тактирование настроено правильно. Код #include "iolpc1778.h" #include "LPC17xx.h" unsigned int i; void main(void) {
{ //INIT SCS |= 0x20; //подключение осциллятора while(!(SCS&0x40)){} //ожидание запуска //Настройка тактирования ЦПУ PLL0CON |= 0x01; //включение PLL0 PLL0CFG |= 0x09; //умножение частоты на 10 PLL0FEED = 0xAA; //разрешение PLL0FEED = 0x55; //изменений CCLKSEL |= 0x100; //переключение источника тактирования //настройка тактирования USB PLL1CON |= 0x01; //Включение PLL1 PLL1CFG |= 0x03; //Умножаем частоту на 4 (12МГц*4=48МГц) PLL1FEED = 0xAA; //разрешение PLL1FEED = 0x55; //изменений USBCLKSEL = 0x201; //Тактирование USB от PLL1 и частота тактирования 48МГц IOCON_P1_25 = 0; //PIO FIO1DIR = 0x2000000; //Выход PIN1_25 для индикации прерывания { //init USB PCONP |= 0x80000000; //включение питания USB USBCLKCTRL |= 0x12; //устанавливаем флаги DEV_CLK_EN + AHB_CLK_EN while(!(USBCLKST & 0x12)){}//ждём установки флагов USBCLKCTRL |= 8; //устанавливаем флаг доступа к регистру выбора конфигурации функции порта while(!(USBCLKST & 0x08)){}//ждём установки флага USBPORTSEL = 3; //U2 - ведомый USBCLKCTRL &=~8; //сброс флага доступа IOCON_P0_31 = 1; //функция ножк U2D+, на U2D- других функций нет IOCON_P0_14 = 0; //USBCONNECT - управление подтягивающим резистором FIO0DIR |= 0x4000; //bit 14 - OUT USBDEVINTEN = 0x01; //разрешение прерываний FRAME } PCLKSEL = 1; //тактирование переферии 1:1 CLKSRCSEL |= 1; //тактирование CPU от PLL0 AIRCR = 0x05FA0200; //настройка IP1 = 0x00000800; //и разрешение NVIC_EnableIRQ(USB_IRQn); //прерываний }
while(1) { FIO0SET |= 0x4000; //1.5 kOm USBREEP |= 0x80; //задействована изохронная точка 7 (IN) while(!(USBDEVINTST & 0x100)){} //ждём установки флага EP_RLZED for(i=0; i<0x2FFFFFF; i++ ) { __NOP(); } //небольшая пауза для пропуска запроса от windows USBTXPLEN = 40; //начальное значение счётчика байтов в пакете USBEPIN = 7; //индекс конечной точки USBMAXPSIZE = 40; //максимальный размер пакета для указанной конечной точки while(!(USBDEVINTST & 0x100)){} //ждём установки флага EP_RLZED USBCMDCODE = 0x0500 + 0x070000; //выбор конечной точик USBCTRL = 0x2 + 0xC; //WP_EN = 1, LOG_ENDPOINT = 3; TDATA = 0x12345678; TDATA = 0x91011121; TDATA = 0x31415161; TDATA = 0x71819202; TDATA = 0x12223248; TDATA = 0x12345678; TDATA = 0x12345678; TDATA = 0x12345678; TDATA = 0x12345678; TDATA = 0x98765432; //после этой команды сбрасывается WP_EN
USBCMDCODE = 0x0500 + 0xFA0000; //команда + проверка буфера for(i=0; i<0x8FFFFFF; i++ ){__NOP(); } FIO0CLR |= 0x4000; //отключение резистора 1.5 кОм for(;;){} } }
void USB_IRQHandler (void) { USBDEVINTCLR |= 0x3FF; //clear alls interrupt FIO1CLR = 0x2000000; FIO1SET = 0x2000000; FIO1CLR = 0x2000000; NVIC_ClearPendingIRQ(USB_IRQn); return; } что я не так делаю?
Прикрепленные файлы
LPC.rar ( 929.05 килобайт )
Кол-во скачиваний: 11
|
|
|
|
|
 |
Ответов
|
Dec 22 2014, 20:43
|
Местный
  
Группа: Участник
Сообщений: 234
Регистрация: 7-11-13
Пользователь №: 79 085

|
Цитата(toweroff @ Dec 23 2014, 00:36)  В общем виде - да. Если инициирование программное, то после него ведомое устройство может передавать данные в комп? Если оно может передавать данные, то почему нельзя их передать без инициации самовольно? Мне пока не нужно, чтобы комп правильно определил тип устройства, просто хочу увидеть свои байты в нём.
|
|
|
|
|
Dec 22 2014, 20:48
|
Гуру
     
Группа: Свой
Сообщений: 7 946
Регистрация: 25-02-05
Из: Moscow, Russia
Пользователь №: 2 881

|
Цитата(ДЕЙЛ @ Dec 22 2014, 23:43)  Мне пока не нужно, чтобы комп правильно определил тип устройства, просто хочу увидеть свои байты в нём. Это невозможно. Так протокол устроен, пока хост не попросил данных, их отправить нельзя. Подготовить к отправке - можно - но физически они никуда не отправятся. Таким образом: Сначала - вся енумерация и корректное определение в компе - это обязательно (без этого следующий шаг невозможен). Потом - драйвер в компе, который делает запрос на IN передачу - это тоже обязательно (без этого, тоже, следующий шаг невозможен). И только потом, когда устройство увидит IN токен, инициированный драйвером, оно реально отправит данные. Без этого никак.
|
|
|
|
Сообщений в этой теме
ДЕЙЛ Отправка пакета через USB из LPC1778 в ПК Dec 21 2014, 18:42 jcxz Цитата(ДЕЙЛ @ Dec 22 2014, 00:42) Для инд... Dec 22 2014, 10:09 ДЕЙЛ Цитата(jcxz @ Dec 22 2014, 14:09) Ну если... Dec 22 2014, 11:03  jcxz Цитата(ДЕЙЛ @ Dec 22 2014, 17:03) Чем бря... Dec 22 2014, 13:44   ДЕЙЛ Цитата(jcxz @ Dec 22 2014, 17:44) Если Вы... Dec 22 2014, 19:18    toweroff Цитата(ДЕЙЛ @ Dec 22 2014, 22:18) Приятно... Dec 22 2014, 19:29     ДЕЙЛ Цитата(toweroff @ Dec 22 2014, 23:29) ой ... Dec 22 2014, 20:07      toweroff Цитата(ДЕЙЛ @ Dec 22 2014, 23:07) Светоди... Dec 22 2014, 20:22    jcxz Цитата(ДЕЙЛ @ Dec 23 2014, 01:18) Приятно... Dec 23 2014, 06:21 ig_z QUOTE (ДЕЙЛ @ Dec 21 2014, 20:42) Пытаюсь... Dec 22 2014, 20:15 ДЕЙЛ Цитата(ig_z @ Dec 23 2014, 00:15) Если хо... Dec 22 2014, 20:32 ДЕЙЛ Понапридумывают же... Попробую ещё раз перечита... Dec 22 2014, 20:59 toweroff Там особо умного-то нет, нужно только четко предст... Dec 22 2014, 21:03 ДЕЙЛ для чего в описании USB фигурирует I2C? В общих че... Feb 16 2015, 12:45 alexeyv ЦитатаПонапридумывают же... sm.gif Попробую ещё р... Feb 17 2015, 05:03 ДЕЙЛ Вот картинка из Агурова. Правильно я понимаю, что ... Feb 19 2015, 08:48 ДЕЙЛ Опять вернулся к этой теме. Почитал Агурова и опис... Mar 10 2015, 14:06 toweroff Цитата(ДЕЙЛ @ Mar 10 2015, 17:06) Опять в... Mar 10 2015, 20:36
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|