реклама на сайте
подробности

 
 
> Отправка пакета через USB из LPC1778 в ПК
ДЕЙЛ
сообщение Dec 21 2014, 18:42
Сообщение #1


Местный
***

Группа: Участник
Сообщений: 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
 
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- ДЕЙЛ   Отправка пакета через 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
- - toweroff   В общем виде - да. Так же, как и то, что обработк...   Dec 22 2014, 20:36
|- - ДЕЙЛ   Цитата(toweroff @ Dec 23 2014, 00:36) В о...   Dec 22 2014, 20:43
|- - SM   Цитата(ДЕЙЛ @ Dec 22 2014, 23:43) Мне пок...   Dec 22 2014, 20:48
- - ДЕЙЛ   Понапридумывают же... Попробую ещё раз перечита...   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


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 20th July 2025 - 16:34
Рейтинг@Mail.ru


Страница сгенерированна за 0.01359 секунд с 7
ELECTRONIX ©2004-2016