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

 
 
> sam4s4b UDP
Chameleon
сообщение May 7 2015, 13:47
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 50
Регистрация: 5-07-08
Пользователь №: 38 757



Пытаюсь перенести проект с SAM7 на SAM4. На SAM7 все работает.

Проблема с подключением по USB. Используется USB СВС класс.

Вот лог инициализации при подключении к компьютеру

1. USB interrupt: ISR = 00000100 // RXSUSP
2. USB interrupt: ISR = 00000200 // RXRSM
3. USB interrupt: ISR = 00001000 // Bus RESET
ENDBUSRES
// эти значения я устанавливаю при получении сигнала сброс
// они читаются обратно для проверки

UDP_CSR[O] = 00008000 // EPEDS = 1, Endpoint0 разрешена
UDP_FADDR = 00000100 // FEN = 1 Funsction endpoint enabled
UDP_IMR = 00003F0F // Все возможные прерывания от USB разрешены
UDP_GLB_STAT = 00000010 //

Далее после этого должен прийти установочный запрос для EP0, но его нет (вернее наверно он есть, но нет прерывания UDP), просто небольшая пауза и опять Bus RESET, Bus RESET и появляется сообщение о неизвестном устростве. Причина в том, что нет прерывания для EP0, соответственно я ничего не отвечаю на запрос и система думает, что устройство не работает.

Код абсолютно рабочий на SAM7S, под sam4s исправил только символьные имена регистров и битов.

Может в sam4s UDP есть какие-то особенности мелким шрифтом?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Chameleon
сообщение May 8 2015, 14:30
Сообщение #2


Участник
*

Группа: Участник
Сообщений: 50
Регистрация: 5-07-08
Пользователь №: 38 757



Как вообще включаются прерывания с NVIC?

Для таймера 0 сделал

NVIC_ClearPendingIRQ((IRQn_Type) ID_TC0);
NVIC_SetPriority((IRQn_Type) ID_TC0, 4);
NVIC_EnableIRQ((IRQn_Type) ID_TC0);

В основной программе так же сделал

__enable_irq();

Заголовок обработчика прерывания для таймера такой

void TC0_Handler(void)
{
...
}

Вижу что таймер стчитает до заданного предела, обнуляется и считает дальше, а прерывания не происходит.

Сообщение отредактировал Chameleon - May 8 2015, 14:31
Go to the top of the page
 
+Quote Post
_4afc_
сообщение May 9 2015, 05:41
Сообщение #3


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

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



С таймерами не работал, ночто-то типа этого:

void TC0_Handler(void)
{
NVIC_ClearPendingIRQ(TC0_IRQn);
...
}

NVIC_DisableIRQ(TC0_IRQn);
__enable_irq(); // возможно необязателен, если не выключали

TC0->TC_IER = XXXX;

NVIC_ClearPendingIRQ(TC0_IRQn);
NVIC_SetPriority(TC0_IRQn, 4);
NVIC_EnableIRQ(TC0_IRQn);
Go to the top of the page
 
+Quote Post



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

 


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


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