Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: MSP430 флаги UART
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > MSP430
ThE_BuZz
Использую контроллер CC430F5137. Возникла проблема с флагами уарта - а именно передача массива данных (опустошение буффера передатчика). Контроллер напроч не обращает внимание на флаги UCA0TXIFG и на UCBUSY. В итоге - мясо из байтов. Может кто сталкивался с таким?.

while(temp!=RxBuffer[0])
{
P3OUT |= BIT2; //Tx on
while((UCA0IFG&BIT1 == 0)&& (UCA0STAT&UCBUSY !=0));
UCA0TXBUF=RxBuffer[temp+1];

// for(i=0; i<8; i++)
// {
// }
temp++;
P3OUT &= ~BIT2; //Tx off
}
MrYuran
Не вдаваясь в прочие тонкости, так делать в корне неправильно.
У вас процессор сидит и скучает, пока байт неспешно вываливается наружу. И ладно, если на 115200, а если 1200?
Лучше работать через прерывания.
"мясо из байтов" - это что?
ThE_BuZz
Я работаю с РС485 - т.е. мне еще нужно выставлять бит на приём/передачу. Вся проблемма в том, как его грамматно выставить на каждый байт.
Сергей Борщ
QUOTE (ThE_BuZz @ Apr 10 2012, 09:33) *
while((UCA0IFG&BIT1 == 0)&& (UCA0STAT&UCBUSY !=0));
Здесь с логикой точно все в порядке? Ждать пока не взведен первый бит в UCA0IFG и взведен USBUSY? Просто взгляд зацепился, логики работы UART в 430 я уже не помню.
ThE_BuZz
UCA0IFG&BIT1 ==1 при опусташении буффера передатчика. USBUSY==1 на время приёма/передачи.
MrYuran
Цитата(ThE_BuZz @ Apr 10 2012, 13:50) *
UCA0IFG&BIT1

Вот эти штучки тоже бросьте.
Ведь есть же наверняка у этого бита мнемоническое обозначение.

А насчет переключения шины - можно же отправить пакет по прерываниям, а потом уже шаманить с отправкой последнего байта.
ThE_BuZz
Цитата(MrYuran @ Apr 10 2012, 14:51) *
Вот эти штучки тоже бросьте.
Ведь есть же наверняка у этого бита мнемоническое обозначение.

А насчет переключения шины - можно же отправить пакет по прерываниям, а потом уже шаманить с отправкой последнего байта.


USCI_Ax Interrupt Flag Register (UCAxIFG)

UCTXIFG Bit 1 Transmit interrupt flag. UCTXIFG is set when UCAxTXBUF empty.
0 No interrupt pending
1 Interrupt pending
UCRXIFG Bit 0 Receive interrupt flag. UCRXIFG is set when UCAxRXBUF has received a complete character.
0 No interrupt pending
1 Interrupt pending
Проблемма в том, что бит UCTXIFG имеет нехорошее св-во не выставляться.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.