Перейти к содержанию
    

Рома81

Новичок*
  • Постов

    2
  • Зарегистрирован

  • Посещение

Репутация

0 Обычный
  1. Любопытный ответ, особенно насчет точки с запятой! Как вы думайте запустилась такая программа? Ессно здесь код не полностью. И чего вам не понравилось в бесконечном цикле и записи в регистор передачи я не понял. Отвечать - "сами разберетесь или нет", по меньшей мере не профессионально, коль уж отвечать взялись, если б я сам разобрался я б сюда не писал. Хотя если помочь ничем конкретно не можете - не отвечайте. мож кто другой нужную идею подкинет. А проблема в следующем - меня беспокоит периодическое возникновение бита сбоя генератора DCO, он то устанавливается, то сбрасывается причем не постоянно а время от времени, проц уходит в прерывание от неисправности осцилятора и сидит там очень долго (сек от 10 до 20 ) потом выходит работает некоторое время и снова туда. Когда нет сбоя, Usart передает как надо, хоть один байт хоть 20 - все на месте. Причем здесь переполнение потока?
  2. Usart не работает

    такая вот ситуация: просматриваю порт 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; } }
×
×
  • Создать...