Jump to content

    

gitgit

Новичок
  • Content Count

    4
  • Joined

  • Last visited

Community Reputation

0 Обычный

Информация

  • Город
    Array

Recent Profile Visitors

906 profile views
  1. добрый день! тоже хотел подключить к контроллеру этот дисплей. но после того как я пишу в него массив чисел, из приведенной Вами ссылки, никаких видимых изменений не происходит. так и должно быть или он должен какой нибудь мусор показать?
  2. Вы правы! когда в обработчике прерываний начал считывать регистр приемника AT91C_BASE_US0->US_RHR, все заработало. Спасибо!
  3. если AT91C_BASE_AIC->AIC_EOICR=0 написать, то от 1 символа программа зацикливается на этой функции. с этим не знаю что делать. про вставление тэгов: попробую так делать. пока у меня браузер их не показывает. другой поставлю
  4. здравствуйте, я начал зучать контроллер AT91sam7s256 и у меня появилась такая проблема при работе с прерываниями. прерывания от УАРТ происходят только 1 раз. по моей задумке они должны возникать при получении каждого символа с порта. что я сделал не так? привожу текст функций(компилятор IAR). //инициализация void InitUART(void) { // AT91F_PIO_CfgPeriph( AT91C_BASE_PIOA,((unsigned int) AT91C_PA5_RXD0) | ((unsigned int) AT91C_PA6_TXD0 ),0); // Peripheral B AT91C_BASE_PMC->PMC_PCER = 1<<AT91C_ID_US0; AT91C_BASE_US0->US_IDR = (unsigned int) -1; //* Reset receiver and transmitter AT91C_BASE_US0->US_CR = AT91C_US_RSTRX | AT91C_US_RSTTX | AT91C_US_RXDIS | AT91C_US_TXDIS ; //* Define the baud rate divisor register AT91F_US_SetBaudrate(AT91C_BASE_US0, MCK, COM0_BAUD); //* Write the Timeguard Register AT91F_US_SetTimeguard(AT91C_BASE_US0, 0); AT91C_BASE_US0->US_MR = 0x08c0; AT91F_AIC_ConfigureIt (AT91C_BASE_AIC, AT91C_ID_US0, USART_INTERRUPT_LEVEL,AT91C_AIC_SRCTYPE_INT_LEVEL_SENSITIVE,(void (*)(void))irq_handler0); //AT91C_BASE_AIC->AIC_FFER=(1 << AT91C_ID_US0); AT91F_AIC_EnableIt (AT91C_BASE_AIC, AT91C_ID_US0); AT91C_BASE_US0->US_IER = AT91C_US_RXRDY; AT91C_BASE_US0->US_CR = AT91C_US_RXEN | AT91C_US_TXEN ; } //обработчик прерывания __ramfunc void irq_handler0() { unsigned int inter; char informstroka[10]; AT91C_BASE_PIOA->PIO_ODSR=(AT91C_BASE_PIOA->PIO_PDSR)|0x08; writeStr("irq_handler0\n\r"); if(((AT91C_BASE_US0->US_IMR) & AT91C_US_RXRDY)!=0) { //printf("asdas"); writeStr("?????????? ?? AT91C_US_RXRDY\n\r"); } inter=AT91C_BASE_AIC->AIC_IVR; writeStr("\n\AT91C_BASE_AIC->AIC_IVR=0x"); writeStr(LWordToHex(informstroka,inter)); writeStr("\n\r"); inter=AT91C_BASE_AIC->AIC_FVR; writeStr("\n\AT91C_BASE_AIC->AIC_FVR=0x"); writeStr(LWordToHex(informstroka,inter)); writeStr("\n\r"); // AT91C_BASE_AIC->AIC_ICCR=(1 << AT91C_ID_US0); AT91C_BASE_US0->US_CR = AT91C_US_RSTSTA; //AT91C_BASE_AIC->AIC_EOICR = 0; } //главная функция void main(void) { unsigned char ii; unsigned int x; a=0; //AT91C_BASE_AIC->AIC_EOICR = 0; InitPIO(); InitUART(); InitSPI(); AT91C_BASE_PIOA->PIO_ODSR=(AT91C_BASE_PIOA->PIO_PDSR)|0x04; writeStr("\n\r?????? ???\n\r"); writeStr("\n\rwhile...\n\r"); ii=0; while(1) { //while(1) PutChar(GetChar()); if((((AT91C_BASE_PIOA->PIO_PDSR)&SW1_MASK)!=0))AT91C_BASE_PIOA->PIO_ODSR=(AT91C_BASE_PIOA->PIO_PDSR)|0x01; else AT91C_BASE_PIOA->PIO_ODSR=(AT91C_BASE_PIOA->PIO_PDSR)&0xfffffffE; if((((AT91C_BASE_PIOA->PIO_PDSR)&SW2_MASK)!=0)) { ii=1; } else { ii=0; info(); } } } //вывод информации void info(void) { char informstroka[15]; unsigned int inf,jj; inf=AT91C_BASE_AIC->AIC_IECR; writeStr("\n\rAT91C_BASE_AIC->AIC_IECR=0x"); writeStr(LWordToHex(informstroka,inf)); inf=AT91C_BASE_AIC->AIC_IDCR; writeStr("\n\rAT91C_BASE_AIC->AIC_IDCR=0x"); writeStr(LWordToHex(informstroka,inf)); inf=(unsigned int)irq_handler0; writeStr("\n\r(unsigned int)irq_handler0=0x"); writeStr(LWordToHex(informstroka,inf)); /*inf=(unsigned int)AT91F_Default_IRQ_handler; writeStr("\n\r(unsigned int)AT91F_Default_IRQ_handler=0x"); writeStr(LWordToHex(informstroka,inf)); inf=(unsigned int)AT91F_Default_FIQ_handler; writeStr("\n\r(unsigned int)AT91F_Default_FIQ_handler=0x"); writeStr(LWordToHex(informstroka,inf));*/ inf=AT91C_BASE_US0->US_IMR; writeStr("\n\rAT91C_BASE_US0->US_IMR=0x"); writeStr(LWordToHex(informstroka,inf)); inf=AT91C_BASE_AIC->AIC_IMR; writeStr("\n\rAT91C_BASE_AIC->AIC_IMR=0x"); writeStr(LWordToHex(informstroka,inf)); inf=AT91C_BASE_AIC->AIC_IPR; writeStr("\n\rAT91C_BASE_AIC->AIC_IPR=0x"); writeStr(LWordToHex(informstroka,inf)); inf=AT91C_BASE_AIC->AIC_ISR; writeStr("\n\rAT91C_BASE_AIC->AIC_ISR=0x"); writeStr(LWordToHex(informstroka,inf)); inf=AT91C_BASE_AIC->AIC_SVR[AT91C_ID_US0]; writeStr("\n\rAT91C_BASE_AIC->AIC_SVR[AT91C_ID_US0]=0x"); writeStr(LWordToHex(informstroka,inf)); for(jj=0;jj<31;jj++) { inf=AT91C_BASE_AIC->AIC_SMR[jj]; writeStr("\n\rAT91C_BASE_AIC->AIC_SMR["); writeStr(ByteToHex(informstroka,jj)); writeStr("]=0x"); writeStr(LWordToHex(informstroka,inf)); inf=AT91C_BASE_AIC->AIC_SVR[jj]; writeStr("\n\rAT91C_BASE_AIC->AIC_SVR["); writeStr(ByteToHex(informstroka,jj)); writeStr("]=0x"); writeStr(LWordToHex(informstroka,inf)); } inf=AT91C_ID_US0; writeStr("\n\rAT91C_ID_US0=0x"); writeStr(LWordToHex(informstroka,inf)); inf=(1<<AT91C_ID_US0); writeStr("\n\r(1<<AT91C_ID_US0)=0x"); writeStr(LWordToHex(informstroka,inf)); inf=AT91C_BASE_AIC->AIC_SPU; writeStr("\n\rAT91C_BASE_AIC->AIC_SPU=0x"); writeStr(LWordToHex(informstroka,inf)); inf=AT91C_BASE_AIC->AIC_FFSR; writeStr("\n\rAT91C_BASE_AIC->AIC_FFSR=0x"); writeStr(LWordToHex(informstroka,inf)); inf=AT91C_BASE_AIC->AIC_IVR; writeStr("\n\rAT91C_BASE_AIC->AIC_IVR=0x"); writeStr(LWordToHex(informstroka,inf)); inf=AT91C_BASE_AIC->AIC_FVR; writeStr("\n\rAT91C_BASE_AIC->AIC_FVR=0x"); writeStr(LWordToHex(informstroka,inf)); }