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

Вопросы настройки, программирования, прошивки микроконтроллеров и микросхем программируемой логики
Закрыто
Родился
Сообщения: 4
Зарегистрирован: Вс окт 05, 2008 06:44:05

Сообщение 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; или поставить перед ней задержку, то пакет передаётся полностью.
Подскажите, пожалуйста, в чём ошибка?
Реклама
Мучитель микросхем
Сообщения: 492
Зарегистрирован: Вт июл 22, 2008 08:10:54

Сообщение BerZerK-ku »

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

Вернуться в «Микроконтроллеры и ПЛИС»