Страница 1 из 1

RS485, проблема с отправкой пакета

Добавлено: Вс окт 05, 2008 12:17:19
Nik_UFO
Добрый день.

В написанной мной программе для MSP430F2272 имеется функция (отправляет пакет):

void SendPackage (unsigned char *TrData, unsigned int NumberByte)
{
P4OUT|=0xC0;//переключаемся на передачу
unsigned int NumberByte2=0;
while (NumberByte2<NumberByte)
{
if((IFG2&0x02)==2){UCA0TXBUF=TrData[NumberByte2];NumberByte2++;}
}
while ((IFG2&0x02)!=2);//ждём отправку последнего байта
P4OUT&=0x3F;//переключаемся на приём
}

Для передачи данных c микроконтроллера использую модуль UART. Данные предаются по интерфейсу RS485, для преобразования использую ADM2483.

Проблема в том, что надо передать N байт, а приходит N-1, последний байт или вообще не приходит или приходит с ошибкой. Если убрать строчку P4OUT&=0x3F; или поставить перед ней задержку, то пакет передаётся полностью.
Подскажите, пожалуйста, в чём ошибка?

Добавлено: Пн окт 06, 2008 07:09:09
BerZerK-ku
Проблема в том, что надо передать N байт, а приходит N-1, последний байт или вообще не приходит или приходит с ошибкой. Если убрать строчку P4OUT&=0x3F; или поставить перед ней задержку, то пакет передаётся полностью.
Вероятно вы вырубаете передатчик УАПП раньше, чем байт был передан. Учтите что, с момента загрузки байта данных в буфер передатчика должно пройти достаточно времени чтобы он был передан.
С вашим МК незнаком, но например у AVR есть 2 прерывания: по опустошению регистра данных и по завершению передачи. И если отключить УАПП в первом из них, то данные никуда не передадутся.