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

 
 
> 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



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

 


RSS Текстовая версия Сейчас: 25th June 2025 - 10:40
Рейтинг@Mail.ru


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