реклама на сайте
подробности

 
 
> Usart не работает, Usart не работает
Рома81
сообщение Nov 7 2006, 09:25
Сообщение #1





Группа: Новичок
Сообщений: 2
Регистрация: 4-11-06
Пользователь №: 21 974



такая вот ситуация:
просматриваю порт RS485 (c UARTа - постоянно посылаю байт), с другого контроллера (мастер -ICPDAS - там простая програма считывания байта с порта RS485)

и вот приходит сначала все нормально, что послано то и приходит, а потом начинается глюк, приходит непонятно что и функция готовности порта (показывает что с порта что то пришло) скачет (то true, то false) потом через некоторое время, снова все налаживается и.т.д.

некоторые намекают на не стабильность такотвого генератора, иногда сразу после RESET возникает бит сбоя DCO (если прирывание разрешить), и потом висит постоянно, после следующего RESET не появлется,

мож кто обяснит в чем дело

использую MSP430FE427 - на ACLK (это вроде LFT1CLK) кварц 32768 Гц, на MCLK и SMCLK = ACLK*32 = 1MГц. - это устанавливется после сброса, и регистры все проверены поэтому FLL не настраивается в программе.

SCFQCTL = 1F (умножается на 32)
SCIFO = 00 (деление на 1, диапазон от 0,6 - 6МГц)
FLL_CTL0 = 00

приведу код мож кто найдет ошибку:

void init_UART(unsigned long baud)

P2SEL |= (BIT4 + BIT5); // P2.4,5 = USART0 TXD/RXD

P2DIR |= BIT4+BIT3; // P2.4 на вывод - UTXD0
// P2.3 на вывод - SVS - направление передачи для RS485
// P2.5 на ввод - URXD0
U0CTL = SWRST;
U0CTL = CHAR + SWRST;

switch(baud)
{
case 9600:

UTCTL0 = SSEL1;
UBR00 = 0x6D; // 1MHz/9600
UBR10 = 0x00; //
UMCTL0 = 0X03;

break;

case 19200:
UTCTL0 = SSEL1;
UBR00 = 0x36; // 1MHz/19200
UBR10 = 0x00; //
UMCTL0 = 0x6B;
break;

case 115200:
UTCTL0 = SSEL1;
UBR00 = 0x09; // 1Mhz/115200
UBR10 = 0x00; //
UMCTL0 = 0x08; //
break;
default:
while(1){;}
//break;
} // окончание switch(baud)


U0ME |= UTXE0+URXE0;

U0IFG &= ~URXIFG0; //очистка флагов
U0IFG &= ~UTXIFG0;

UCTL0 &= ~(SWRST);
U0IE |= URXIE0+UTXIE0;

}

int main(void)
{


WDTCTL = WDTPW + WDTHOLD;
init_system(); //для портов
init_UART(9600)

P2OUT |= BIT3; //на передачу P2.3 = (1) ..
//P2OUT &= ~BIT3; // на прием P2.3 = (0)

_EINT();

while (1)
{ if (UTXIFG0==0x80) TXBUF0=0x01;

}

}
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 22nd July 2025 - 13:17
Рейтинг@Mail.ru


Страница сгенерированна за 0.01362 секунд с 7
ELECTRONIX ©2004-2016