AT91rm9200 AS-9200 IAR4.42
Разрешил прерывания RXBUFF и ENDRX. На шине тишина, а прерывания эти срабатывают! В чем может быть дело?
//== Обработчик прерываний static __arm __irq void IRQ1_RS232() { unsigned int status; unsigned int status1; //---------------------------------- AT91C_BASE_AIC->AIC_IVR = 0 ; /* enter interrupt in protected mode */ DBGU.PrintString("\n\rINTERUPT_USART1\n\r"); status = (AT91C_BASE_US1->US_CSR) ; status1 = (AT91C_BASE_US1->US_IMR); status &=status1; // //* Disable all interrupts // AT91C_BASE_US1->US_IDR = (0xFFFFFFFF); if( status & AT91C_US_TXEMPTY ){DBGU.PrintString("\n\rAT91C_US_TXEMPTY\n\r");} if( status & AT91C_US_RXBUFF ) { RxBuffer[count++] = AT91F_US_GetChar(AT91C_BASE_US1); if(count==5) { count=0; for(int i=0;i<10;i++) RxBuffer[i]=0; } DBGU.PrintString("\n\rAT91C_US_RXBUFF\n\r"); } if( status & AT91C_US_TXBUFE ){DBGU.PrintString("\n\rAT91C_US_TXBUFE\n\r");} if( status & AT91C_US_TIMEOUT ){DBGU.PrintString("\n\rAT91C_US_TIMEOUT\n\r");} if( status & AT91C_US_ENDTX ){DBGU.PrintString("\n\rAT91C_US_ENDTX\n\r");} if( status & AT91C_US_ENDRX ) { RxBuffer[count++] = AT91F_US_GetChar(AT91C_BASE_US1); if(count==5) { count=0; for(int i=0;i<10;i++) RxBuffer[i]=0; } } if( status & AT91C_US_ITERATION ){;} if( status & AT91C_US_NACK ){;} if( status & AT91C_US_RIIC ){;} if( status & AT91C_US_DSRIC ){;} if( status & AT91C_US_DCDIC ){;} if( status & AT91C_US_CTSIC ){;} AT91C_BASE_US1->US_CR = AT91C_US_RSTSTA; AT91C_BASE_AIC->AIC_EOICR = 0 ; /* unstack one level */ }
status = (AT91C_BASE_US1->US_CSR) ; Эта операция не чистит статус рег. можно опять вызвать status = (AT91C_BASE_US1->US_CSR) ; и статус снова будет тем же
|