Как получить более 5 байтов от UART?
- Микроконтроллер: dsPIC30F4013
- Компилятор: xc16
Я пытаюсь получить массив из UART, но я получаю только первые 5 байтов.
Я знаю, что буфер приемника имеет глубину 4 слова, но мне нужно получить и другие байты. Может быть, используя круговой буфер, но я не знаю, как это использовать.
Может ли кто-нибудь помочь мне получить все байты в массиве?
Это мой текущий код:
void __attribute__((__interrupt__, auto_psv)) _U1RXInterrupt(void) {
IFS0bits.U1RXIF = 0;
int i = 0;
while (U1STAbits.URXDA) {
array[i] = U1RXREG;
i++;
if (i == 10) {
break;
}
}
}
Я отправляю каждую позицию массива на ПК:
Извините за мой плохой английский.
2 ответа
Пример:
Байт 1: 'S': начальный байт
Байт 2: arrayByte[0]
Байт 3: arrayByte [1]
.......
Байт 11: arrayByte[9]
Байт 12: контрольная сумма (может быть младший бит суммы всех отправленных байтов)
Получатель начнет прием только в том случае, если полученный байт представляет собой "S".
После полного получения всех байтов получатель должен был снова вычислить контрольную сумму, чтобы убедиться, что байты не потеряны.
После многих попыток у меня был успех.
Я делюсь правильным кодом для всех, кому это нужно.
int k;
void __attribute__((__interrupt__, auto_psv)) _U1RXInterrupt(void) {
IFS0bits.U1RXIF = 0;
array[k++] = U1RXREG;
if (k == 10) {
k = 0;
}
}