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

 
 
5 страниц V  < 1 2 3 4 > »   
Reply to this topicStart new topic
> USB Device на AT91SAM7, Насколько сложно и что нужно
beer_warrior
сообщение Jun 16 2006, 13:26
Сообщение #16


Профессионал
*****

Группа: Свой
Сообщений: 1 065
Регистрация: 8-10-05
Из: Kiev, UA
Пользователь №: 9 380



Цитата
Как изменить этот пример, чтобы можно было передавать свои данные в микроконтроллер и управлять им ?

Хороший вопрос smile.gif
1.Выбрасываем все лишнее(USART, DBGU).
2.Находим в файле main такой код
Код
    if (pCDC.IsConfigured(&pCDC)) {
#ifndef USART_COM
        // Loop
       length = pCDC.Read(&pCDC, data, MSG_SIZE);
       pCDC.Write(&pCDC, data, length);
....

Подставляем туда данные которые хотим передавать/принимать.
3.Таким же образом поступаем с РС кодом
4.Наслаждаемся
5.Разбираемся с прерываниями и переписываем код для работы с ними.


--------------------
Вони шукають те, чого нема,
Щоб довести, що його не існує.
Go to the top of the page
 
+Quote Post
Lomalkin
сообщение Jun 16 2006, 15:19
Сообщение #17





Группа: Новичок
Сообщений: 5
Регистрация: 9-06-06
Пользователь №: 17 939



Цитата(beer_warrior @ Jun 16 2006, 17:26) *
5.Разбираемся с прерываниями и переписываем код для работы с ними.

А вот с этого места пожалуйста подробнее...

Переделал я этот примерчик для моргания светодиодами, частота должна меняться пакетом данных с компа. Однако если вставляю этот код-моргалку непосредственно в функцию main() USB-примера, прога зависает прямо в микроконтроллере и связь обрывается. Появилась гипотеза, что прерывания могут помочь, но я никогда с ними не работал. Можете привести пример минимального кода для запуска/остановки с PC моргания светодиодом с использованием прерываний ?

Сообщение отредактировал Lomalkin - Jun 16 2006, 15:26
Go to the top of the page
 
+Quote Post
beer_warrior
сообщение Jun 16 2006, 18:33
Сообщение #18


Профессионал
*****

Группа: Свой
Сообщений: 1 065
Регистрация: 8-10-05
Из: Kiev, UA
Пользователь №: 9 380



Если честно, time critical задач с использованием USB у меня еще не было, поэтому USB прерывания не трогал. Удовлетворяюсь пока поллингом. Но помигать светодиодами можно и с ним smile.gif
Код
char data;
while(1);
  {
  if (pCDC.IsConfigured(&pCDC))
     {
     length = pCDC.Read(&pCDC, data,1);
     if(!length) continue; // если ошибка
     if(data == 1)
         {
         LED_ON();
         }
    else LED_OFF();
    data = 0xff;   //подтверждаем
    pCDC.Write(&pCDC, data, 1);
     }}


Это безусловный примитив, лучше разработать нормальную систему команд.
Также, первым делом, стоит написать обработчик системного таймера(PIT) и помигиать светодиодами по нему(http://gandalf.arubi.uni-kl.de/avr_projects/arm_projects/at91sam7s64_Atmel_interrupt_20051029.zip), командой разрешая или запрещая мигание.
И последнее - этот код (ARM и PC) крайне чувствителен к размеру пакета - если не соответствует аргументу length, девайс зависает намертво. Поэтому, если в пакете присутсвуют данные отличные от DWORD, устанавливаейте выравнивание.


--------------------
Вони шукають те, чого нема,
Щоб довести, що його не існує.
Go to the top of the page
 
+Quote Post
Lomalkin
сообщение Jun 16 2006, 22:31
Сообщение #19





Группа: Новичок
Сообщений: 5
Регистрация: 9-06-06
Пользователь №: 17 939



Цитата(beer_warrior @ Jun 16 2006, 22:33) *
Это безусловный примитив

Спасибо.
На данный момент мой код выглядит почти один в один как и ваш smile.gif
Пока для моей задачи этого достаточно, но всё же видимо прийдется позже разобраться и с прерываниями.

Сообщение отредактировал Lomalkin - Jun 16 2006, 22:32
Go to the top of the page
 
+Quote Post
GetSmart
сообщение Jun 26 2006, 15:34
Сообщение #20


.
******

Группа: Участник
Сообщений: 4 005
Регистрация: 3-05-06
Из: Россия
Пользователь №: 16 753



У меня другая гипотеза - во всём вмноват ник. Думаю лучше сменить.


--------------------
Заблуждаться - Ваше законное право :-)
Go to the top of the page
 
+Quote Post
AVR
сообщение Aug 20 2006, 18:09
Сообщение #21


фанат Linux'а
*****

Группа: Свой
Сообщений: 1 353
Регистрация: 23-10-05
Из: SPB.RU
Пользователь №: 10 008



У меня такая платка: http://olimex.com/dev/sam7-h64.html
Подключаю usb-шнурком: пишет надено "atm6124.Sys ATMEL AT91xxxxx Test Board"
Исправляю #define USART_COM на //#define USART_COM
Запускаю ram-debug под IAR
Запускаю BasicUSB_6124.exe
Если платка не подключена - пишет что не подключена ок
Если подключена, но не запущена программа на ней, то выполняет две попытки записи и пишет что не отвечает, ок
Однако же когда запускаю программу на платке - пишет что ошибка записи...
Что может быть? help.gif


--------------------
Go to the top of the page
 
+Quote Post
EugeneB
сообщение Sep 4 2006, 08:31
Сообщение #22





Группа: Новичок
Сообщений: 7
Регистрация: 6-08-06
Пользователь №: 19 356



Цитата(Lomalkin @ Jun 17 2006, 01:31) *
...
Спасибо.
На данный момент мой код выглядит почти один в один как и ваш smile.gif
Пока для моей задачи этого достаточно, но всё же видимо прийдется позже разобраться и с прерываниями.

Писал недавно для себя класс для USB обмена через прерывания. Проблема сразу возникла с зависаниями контроллера. Обмен идет пару сек, а потом зависание. Решил просто - непосредственно в обработчике прерывания отключаю в именно AIC прерываение по USB. А main-е, когда необходимо читать с порта что-нить - включаю.

Сообщение отредактировал EugeneB - Sep 4 2006, 08:32
Go to the top of the page
 
+Quote Post
AVR
сообщение Sep 4 2006, 21:00
Сообщение #23


фанат Linux'а
*****

Группа: Свой
Сообщений: 1 353
Регистрация: 23-10-05
Из: SPB.RU
Пользователь №: 10 008



Извините за назойливость, но очень хотелось бы понять почему невозможно открыть com-порт, который появляется при подключении sam7s64 с драйвером usbser.sys к USB wacko.gif
Причем ни гипер-терминал и никакая другая программа не хочет его открывать... Чем он может быть забит сразу после появления?...

Сообщение отредактировал AVR - Sep 4 2006, 21:01


--------------------
Go to the top of the page
 
+Quote Post
nameless
сообщение Sep 5 2006, 05:36
Сообщение #24


Частый гость
**

Группа: Свой
Сообщений: 174
Регистрация: 9-07-04
Пользователь №: 305



Цитата(AVR @ Sep 5 2006, 00:00) *
Извините за назойливость, но очень хотелось бы понять почему невозможно открыть com-порт, который появляется при подключении sam7s64 с драйвером usbser.sys к USB wacko.gif
Причем ни гипер-терминал и никакая другая программа не хочет его открывать... Чем он может быть забит сразу после появления?...


Я вот только так и пользуюсь "самом". Открылось всё сразу. Вы уверены в правильности запуска USB_Basic на контроллере ??? Кстати, если подключать дебаггер (Wiggler), то обмена нет, только после заливки во флешь и запуска....Вот только с прерываниями никак не получается. Пробовал и SOFINT, и ENDBUSRES, и RESUME - ну никак...
Go to the top of the page
 
+Quote Post
AVR
сообщение Sep 5 2006, 12:56
Сообщение #25


фанат Linux'а
*****

Группа: Свой
Сообщений: 1 353
Регистрация: 23-10-05
Из: SPB.RU
Пользователь №: 10 008



Цитата(nameless @ Sep 5 2006, 09:36) *
Я вот только так и пользуюсь "самом". Открылось всё сразу. Вы уверены в правильности запуска USB_Basic на контроллере ??? Кстати, если подключать дебаггер (Wiggler), то обмена нет, только после заливки во флешь и запуска....Вот только с прерываниями никак не получается. Пробовал и SOFINT, и ENDBUSRES, и RESUME - ну никак...

Спасибо, по всей видимости проблема именно в этом, ведь я то wiggler'ом ram-debug использовал... Ведь необходимо, чтобы устройство отвечало при самом его подключении к USB...


--------------------
Go to the top of the page
 
+Quote Post
AVR
сообщение Oct 28 2006, 21:35
Сообщение #26


фанат Linux'а
*****

Группа: Свой
Сообщений: 1 353
Регистрация: 23-10-05
Из: SPB.RU
Пользователь №: 10 008



Подскажите, пожалуйста, бедному несчастному ламеру как для примера IAR USB Basic написать драйвер для ОС Windows XP (32 бит SP 2)?
Пробовал с помощью WinDriver 8.11, но при первых шагах создания шаблона вылетает ошибка "не могу получить кофигурацию", хотя программа на SAM7 запущена (Read и Write убраны, в бесконечном цикле идет вызов IsConfigured).
Пробовал и DriverStudio 3.2. Но к сожалению не получилось собрать ни библиоткеи, ни те проекты которые создались Wizard'ом. Установленная у меня версия WinXP DDK 2600. Где можно скачать последнюю версию DDK для Windows XP?


--------------------
Go to the top of the page
 
+Quote Post
Dron_Gus
сообщение Oct 28 2006, 22:05
Сообщение #27


Профессионал
*****

Группа: Свой
Сообщений: 1 202
Регистрация: 9-01-05
Из: Санкт-Петербург
Пользователь №: 1 861



Я с DriverStudio тоже долго бодался. Даже не пытался получать конфигурацию из устройства - вводил вручную. Заставить работать с VisualStudio 2000 и выше не получилось. Заработало лишь с VC++ 6.0. После установки DDK (последняя версия на microsoft.com) в VC++ надо компильнуть библиотеки для соответствующей версии виндов (build -cZ). После установки DriverStudio в VC++ должна появится новая панель. Там настройка DriverStudio, запуск помошника и ГЛАВНОЕ кнопка "компилировать с помошью DDK".


--------------------
Если сверху смотреть, то сбоку кажется, что снизу ничего не видно.
Go to the top of the page
 
+Quote Post
AVR
сообщение Oct 29 2006, 22:25
Сообщение #28


фанат Linux'а
*****

Группа: Свой
Сообщений: 1 353
Регистрация: 23-10-05
Из: SPB.RU
Пользователь №: 10 008



Dron_Gus, большое спасибо за помощь, действительно с VS 6 и последней DDK всё собралось a14.gif


--------------------
Go to the top of the page
 
+Quote Post
AVR
сообщение Nov 5 2006, 00:28
Сообщение #29


фанат Linux'а
*****

Группа: Свой
Сообщений: 1 353
Регистрация: 23-10-05
Из: SPB.RU
Пользователь №: 10 008



Подскажите, пожалуйста, как отлаживать драйвер, если при обращении к некоторым его функциям возникают BSOD? У меня появляется такая ошибка KERNEL_MODE_EXCEPTION_NOT_HANDLED, пишет что
Цитата
If exception code 0x80000003 occurs, this indicates that a hard-coded breakpoint or assertion was hit, but the system was started with the /NODEBUG switch. This problem should rarely occur. If it occurs repeatedly, make sure a kernel debugger is connected and the system is started with the /DEBUG switch.
Если запускаю WinXP с ключем /DEBUG - просто виснет... Можно ли настроить так, чтобы при исключениях или ошибках не вешалось вообще всё?
Например, обработчик функции WriteFile или ReadFile работает до тех пор пока не дойдет до BuildBulkTransfer, но как выяснить причину ошибки - непонятно...


--------------------
Go to the top of the page
 
+Quote Post
Edmundo
сообщение Nov 5 2006, 07:21
Сообщение #30


Мастер
****

Группа: Свой
Сообщений: 730
Регистрация: 18-02-06
Из: Москва
Пользователь №: 14 474



Цитата(AVR @ Nov 5 2006, 03:28) *
Подскажите, пожалуйста, как отлаживать драйвер, если при обращении к некоторым его функциям возникают BSOD? У меня появляется такая ошибка KERNEL_MODE_EXCEPTION_NOT_HANDLED, пишет что
Цитата
If exception code 0x80000003 occurs, this indicates that a hard-coded breakpoint or assertion was hit, but the system was started with the /NODEBUG switch. This problem should rarely occur. If it occurs repeatedly, make sure a kernel debugger is connected and the system is started with the /DEBUG switch.
Если запускаю WinXP с ключем /DEBUG - просто виснет... Можно ли настроить так, чтобы при исключениях или ошибках не вешалось вообще всё?
Например, обработчик функции WriteFile или ReadFile работает до тех пор пока не дойдет до BuildBulkTransfer, но как выяснить причину ошибки - непонятно...

Как избавиться от синих экранов -- не знаю, но помню когда я отлаживал USB-драйвер для SAM7, словил кучу синих экранов, пока не исправил

Код
    PipeIn.Initialize(m_Lower, 82, 64);    
    PipeOut.Initialize(m_Lower, 1, 64);    
// заменил на
    PipeIn.Initialize(m_Lower, 0x82, 64);    
    PipeOut.Initialize(m_Lower, 0x01, 64);

Там похоже Wizard и я не поняли друг друга smile.gif
А потом вроде проблем не было. Я делал драйвер визардом, и копировал потом Bulk-обмен из примера. И все.


--------------------
شامل
Go to the top of the page
 
+Quote Post

5 страниц V  < 1 2 3 4 > » 
Reply to this topicStart new topic
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0

 


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


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