
RQ: AT32UC3C2: проблем с USART (AVR32_USART_CSR_OVRE_MASK)
Честит празник, на който празнува! Независимостта е хубаво нещо, уверен съм, че нашето общество някога ще си я спечели.По темата:
Ще съм благодарен за всяка помощ, съвет и препоръка.
RQ: AT32UC3C2: проблем с USART (AVR32_USART_CSR_OVRE_MASK)
Програмирам чипа, девайстът тръгва (лампичките си мигат), изпраща стринг по USART (приемам го на PC), мога и 100 стринга да изпратя, но когато от PC му изпратя стринг към девайса, още първия път, когато
usart_test_hit(usartPorts[uartPort])
върне TRUE
проверката в ASF, usart.c,
функция
открива, проблем и връща USART_RX_ERROR от тука:
Как да ги нулирам тия (май AVR32_USART_CSR_OVRE_MASK е проблема)?
ето малко код, на който му се чете:
това по-горе се вика от това по-долу
 |  |  |
 | Код: Bool COM_ReceiveLine(char* psz, Bool* overflow) { static int n = 0; //N303 static char buf[MAX_VCOM_REC_BUF]; static U8 buf[MAX_VCOM_REC_BUF];
bool xRet = FALSE;
U8 xbuf[MAX_VCOM_REC_BUF]; U8 bt = 0; U8 i; WORD nLen; *overflow = FALSE; if(!bInit) { return FALSE; } //N303 if( UART_ReadByte( serCom, &bt) ) //N303 while (usart_read_char( serCom, &bt)=USART_SUCCESS) nLen = MAX_VCOM_REC_BUF; UART_Read( serCom, &nLen, &xbuf[0]); if (nLen>0) { i=0; while (i<nLen) { bt = buf[i]; if(bt == 13) // skip CR, CR/LF sequence expected as EOL { } else { if(bt == 10) // check LF { for(int j=0; j<i; j++) { *(psz+j) = buf[j]; } memmove( &psz[0], &buf[0], i); // ??? Len = i*sizeof(buf[0]) *(psz+i) = 0; // NULL terminated n = 0; if (! overflow){ xRet = TRUE; // true, if not overflow detect } } else { // check for legal characters, ignore non-printable characters and ASCII codes above 7F hex if( bt > 0x7 && bt <= 0x7F) { buf[n++] = bt; if(n >= MAX_VCOM_REC_BUF-1) { *overflow = TRUE; n = 0; // buffer overflow } } } } i++; } } return xRet; }
|  |
 |  |  |