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

 
 
> sam7 и UDP проблема
3TTT3TTT
сообщение Dec 10 2010, 16:04
Сообщение #1





Группа: Новичок
Сообщений: 3
Регистрация: 8-06-10
Пользователь №: 57 795



Здравствуйте. Вот возникла проблема с модулем USB, вроде и частоты те, и USB разрешен, но кроме 4-х ENDBUSRES ни чего не поймал.
Пробовал разные варианты решений которые советовали в аналогичных темах, но наверное что-то упустил, кому не трудно взгляните код, на наличие подозрительных мест.
Плата от OLIMEX, проц sam7s256, отладчик ARM-USB-TYNY, среда IAR 5.42.

CODE
#include "ioat91sam7x256.h"
//--определение прерываний
#pragma vector=0x18
__irq void IRQ_Handler(void)
{
void (*VF)();
unsigned int vector;
vector=AT91C_BASE_AIC->AIC_IVR;
VF = (void(*)())vector;
(*VF)();
}



unsigned int kd[20],kp[20],i,res,p,k[20],c;

void false_irq (void)
{
AT91C_BASE_AIC->AIC_EOICR=0;

}

void usb_irq(void) //обработчик usb прерываний
{
unsigned int status;
status = AT91C_BASE_UDP->UDP_ISR;
// status &= AT91C_BASE_UDP->UDP_IMR;
kd[i]= AT91C_BASE_UDP->UDP_IMR;
AT91C_BASE_UDP->UDP_IER = 0xFFFF;
kp[i]=status;

if (status & AT91C_UDP_ENDBUSRES)
{
AT91C_BASE_UDP->UDP_ICR = AT91C_UDP_ENDBUSRES;
// reset all endpoints
AT91C_BASE_UDP->UDP_RSTEP = (unsigned int)-1;
AT91C_BASE_UDP->UDP_RSTEP = 0;
// Enable the function
AT91C_BASE_UDP->UDP_FADDR = AT91C_UDP_FEN;
// Configure endpoint 0
AT91C_BASE_UDP->UDP_CSR[0] = (AT91C_UDP_EPEDS | AT91C_UDP_EPTYPE_CTRL);
res++;
}

else if (status & AT91C_UDP_EPINT0)
{
AT91C_BASE_UDP->UDP_ICR = AT91C_UDP_EPINT0;
p++;
}


k[i]= AT91C_BASE_UDP -> UDP_IMR;
i++;
c++;
AT91C_BASE_AIC->AIC_IECR=(1<<11);
AT91C_BASE_AIC->AIC_EOICR=0;

}



void main(void)
{


AT91C_BASE_WDTC->WDTC_WDMR = AT91C_WDTC_WDDIS;//отключение сторожа

//--настройка частот

AT91C_BASE_PMC->PMC_MOR = ((AT91C_CKGR_OSCOUNT&(0x40 <<8)|AT91C_CKGR_MOSCEN ));
while(!(AT91C_BASE_PMC->PMC_SR & AT91C_PMC_MOSCS));
AT91C_BASE_PMC->PMC_PLLR = AT91C_CKGR_USBDIV_1 | (16 << 8) | (AT91C_CKGR_MUL & (124 << 16)) | (AT91C_CKGR_DIV & 24);
while( !(AT91C_BASE_PMC->PMC_SR & AT91C_PMC_LOCK) );
while( !(AT91C_BASE_PMC->PMC_SR & AT91C_PMC_MCKRDY) );
AT91C_BASE_PMC->PMC_MCKR = AT91C_PMC_PRES_CLK_2;
while( !(AT91C_BASE_PMC->PMC_SR & AT91C_PMC_MCKRDY) );
AT91C_BASE_PMC->PMC_MCKR |= AT91C_PMC_CSS_PLL_CLK;
while( !(AT91C_BASE_PMC->PMC_SR & AT91C_PMC_MCKRDY) );

//--разрешение тактирования
AT91C_BASE_PMC->PMC_SCER=0x781;



AT91C_BASE_PMC->PMC_PCER |=(1 <<AT91C_ID_UDP);
AT91C_BASE_PMC->PMC_PCER |=(1 << AT91C_ID_PIOA);

//--вывод управления подтягивающим резистором


AT91C_BASE_PIOA->PIO_PER|=(1<<8);//разрешение вывода
AT91C_BASE_PIOA->PIO_OER|=(1<<8);//назначение на выход

AT91C_BASE_PIOA->PIO_SODR|=(1<<8); //отключить


//--выводы с подкл. светодиодами

AT91C_BASE_PIOA->PIO_PER|=(1<<18);
AT91C_BASE_PIOA->PIO_OER|=(1<<18);
AT91C_BASE_PIOA->PIO_PER|=(1<<17);
AT91C_BASE_PIOA->PIO_OER|=(1<<17);



//--настройка AIC

AT91C_BASE_AIC->AIC_IDCR=(1<<11);

AT91C_BASE_AIC->AIC_SPU=(unsigned int) *false_irq;

AT91C_BASE_AIC->AIC_SVR[11] = (unsigned int) *usb_irq;
AT91C_BASE_AIC->AIC_SMR[11] = ((1<<6) | 7) ;

AT91C_BASE_AIC->AIC_ICCR =(1<< 11);
AT91C_BASE_AIC->AIC_IECR=(1<<11);

AT91C_BASE_AIC->AIC_EOICR=AT91C_BASE_AIC->AIC_IVR;





unsigned int flag;
flag=0;


for(;;)

{

if ((!(AT91C_BASE_PIOA->PIO_PDSR & (1<<19)))&(flag)) //если нажата кнопка 1
{
flag=!flag;
AT91C_BASE_PIOA->PIO_CODR|=(1<<8); //подключить резистор
AT91C_BASE_PIOA->PIO_CODR|=(1<<17); //зажечь
AT91C_BASE_PIOA->PIO_SODR|=(1<<18); //потушить

}
if ((!(AT91C_BASE_PIOA->PIO_PDSR & (1<<20)))&(!flag)) //если нажата кнопка 2
{
flag=!flag;
AT91C_BASE_PIOA->PIO_SODR|=(1<<8); //отлючить резистор
AT91C_BASE_PIOA->PIO_CODR|=(1<<18); //зажечь
AT91C_BASE_PIOA->PIO_SODR|=(1<<17); //потушить
}

}

}


Сообщение отредактировал IgorKossak - Dec 10 2010, 19:31
Причина редактирования: Для длинного кода пользуйтесь тэгом codebox
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов (1 - 5)
Danis
сообщение Dec 10 2010, 18:22
Сообщение #2


Twilight Zone
***

Группа: Свой
Сообщений: 454
Регистрация: 17-02-09
Из: Челябинск
Пользователь №: 44 990



Цитата(3TTT3TTT @ Dec 10 2010, 20:04) *
Здравствуйте. Вот возникла проблема с модулем USB.....



Че то я не понял, а тема была такая: sam7 и UDP проблема.


--------------------
Magic Friend
Go to the top of the page
 
+Quote Post
3TTT3TTT
сообщение Dec 10 2010, 20:26
Сообщение #3





Группа: Новичок
Сообщений: 3
Регистрация: 8-06-10
Пользователь №: 57 795



Было похожее, там проблема решилась, то-ли не те частоты были, или тактирование не вкл. было, что там советовали вроде как пробовал и проверял, пока не пробовал запустить код из флеша.

Может-ли отладчик влиять на работу UDP?
Go to the top of the page
 
+Quote Post
Dron_Gus
сообщение Dec 13 2010, 10:22
Сообщение #4


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

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



Отладчик влиять может, если открыты окна с регистрами контроллера прерываний или другие регистры, где сбрасываются биты чтением.

В прерывании надо проверять все возможные источники. Т.е. закоментированное маскирование все же должно быть. Плюс перед вторым условием else не надо, ибо могут возникнуть несколько событий. Ну и возможен не только ресет и событие по первой точке.


--------------------
Если сверху смотреть, то сбоку кажется, что снизу ничего не видно.
Go to the top of the page
 
+Quote Post
3TTT3TTT
сообщение Dec 14 2010, 04:50
Сообщение #5





Группа: Новичок
Сообщений: 3
Регистрация: 8-06-10
Пользователь №: 57 795



То что окна с регистрами алиять могут я в курсе, и стараюсь их не выводить.
Для проверки других возможных источников, вызвавших прерывание, используется переменная kp.
Go to the top of the page
 
+Quote Post
kichnamid
сообщение May 30 2011, 16:18
Сообщение #6


Участник
*

Группа: Участник
Сообщений: 17
Регистрация: 25-01-11
Из: Москва
Пользователь №: 62 467



даже если не открывать окна у меня при дебаге сетап запросы не обрабатывались. это на jtag, может на айсе по-другому.
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 23rd June 2025 - 05:45
Рейтинг@Mail.ru


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