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

UART не принимает больше одного байта. Контроллер MSP430F4152

Такое может быть, что просто уарт испортился?

OlegALL, Вы пропускаете очевидные советы и склоняетесь к невероятным? UART синхронизируется системными клоками. Коэффициент деления у Вас должен быть 3.41, а поставить можно только 3 - это какой уход частоты будет, сами посчитаете? И в какую фазу клока попадет второй, третий по очереди байт?

 

P.S. Как вариант - установите скорость обмена 1200 и коэффициент соответствующий, есть такая возможность? Результат потом огласите :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Если настройки USCI соответствуют приведённым в http://caxapa.ru/609239.html, то для 9600 б/с на 32768Гц

коэффициент в модуляторе неправильный: N=32768/9600=3.41 (слишком большая ошибка для целочисленного коэффициента)

=> UCBRx=INT(N)=3, а UCBRSx=round((N-INT(N))*8)=3, т.е. UCA0MCTL не может иметь младший ниббл AH.

Изменено пользователем Obam

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Если настройки USCI соответствуют приведённым в http://caxapa.ru/609239.html, то для 9600 б/с на 32768Гц

коэффициент в модуляторе неправильный: N=32768/9600=3.41 (слишком большая ошибка для целочисленного коэффициента)

=> UCBRx=INT(N)=3, а UCBRSx=round((N-INT(N))*8)=3, т.е. UCA0MCTL не может иметь младший ниббл AH.

 

 

Скорость 1200 не помогла. При создании тестового проекта, как советовали выше, вообще ничего не получается - не принимает и не передаёт.

 

Вот код с сайта ti. У них же преддедлитель 3:

 

 

/* --COPYRIGHT--,BSD_EX
* Copyright © 2012, Texas Instruments Incorporated
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* *  Redistributions of source code must retain the above copyright
*    notice, this list of conditions and the following disclaimer.
*
* *  Redistributions in binary form must reproduce the above copyright
*    notice, this list of conditions and the following disclaimer in the
*    documentation and/or other materials provided with the distribution.
*
* *  Neither the name of Texas Instruments Incorporated nor the names of
*    its contributors may be used to endorse or promote products derived
*    from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
*******************************************************************************
* 
*                       MSP430 CODE EXAMPLE DISCLAIMER
*
* MSP430 code examples are self-contained low-level programs that typically
* demonstrate a single peripheral function or device feature in a highly
* concise manner. For this the code may rely on the device's power-on default
* register values and settings such as the clock configuration and care must
* be taken when combining code from several examples to avoid potential side
* effects. Also see www.ti.com/grace for a GUI- and www.ti.com/msp430ware
* for an API functional library-approach to peripheral configuration.
*
* --/COPYRIGHT--*/
//******************************************************************************
//   MSP430F41x2 Demo - USCI_A0, Ultra-Low Pwr UART 9600 Echo ISR, 32kHz ACLK
//
//   Description: Echo a received character, RX ISR used. Normal mode is LPM3,
//   USCI_A0 RX interrupt triggers TX Echo.
//   ACLK = BRCLK = LFXT1 = 32768, MCLK = SMCLK = DCO~1048k
//   Baud rate divider with 32768hz XTAL @9600 = 32768Hz/9600 = 3.41 (0003h 03h)
//   //* An external watch crystal is required on XIN XOUT for ACLK *//	
//
//
//                 MSP430F41x2
//             -----------------
//         /|\|              XIN|-
//          | |                 | 32kHz
//          --|RST          XOUT|-
//            |                 |
//            |     P6.5/UCA0RXD|------------>
//            |                 | 9600 - 8N1
//            |     P6.6/UCA0TXD|<------------
//
//  P. Thanigai
//  Texas Instruments Inc.
//  January 2009
//  Built with CCE Version: 3.1 and IAR Embedded Workbench Version: 4.11
//******************************************************************************

#include <msp430.h>

int main(void)
{
 volatile unsigned int i;

 WDTCTL = WDTPW+WDTHOLD;                   // Stop WDT
 FLL_CTL0 |= XCAP11PF;                     // Configure load caps

 do
 {
   IFG1 &= ~OFIFG;                         // Clear OSCFault flag
   for (i = 0x47FF; i > 0; i--);           // Time for flag to set
 }
 while ((IFG1 & OFIFG));                   // OSCFault flag still set?

 P6SEL |= BIT5+BIT6;                       // P6.5,6 = USCI_A0 RXD/TXD
 UCA0CTL1 |= UCSSEL_1;                     // CLK = ACLK
 UCA0BR0 = 0x03;                           // 32k/9600 - 3.41
 UCA0BR1 = 0x00;                           //
 UCA0MCTL = 0x06;                          // Modulation
 UCA0CTL1 &= ~UCSWRST;                     // **Initialize USCI state machine**
 IE2 |= UCA0RXIE;                          // Enable USCI_A0 RX interrupt

 _BIS_SR(LPM3_bits + GIE);                 // Enter LPM0, interrupts enabled
}

//  Echo back RXed character, confirm TX buffer is ready first
#pragma vector=USCIAB0RX_VECTOR
__interrupt void USCIA0RX_ISR (void)
{
 while(!(IFG2&UCA0TXIFG));
 UCA0TXBUF = UCA0RXBUF;                    // TX -> RXed character
}



Изменено пользователем OlegALL

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Скорость 1200 не помогла.

На стороне передатчика, надеюсь, тоже выставили скорость 1200 ? И столько же стоп-битов, сколько и в Вашем коде (кстати, неплохо бы его в тег убрать, пока от модератора нагоняй не получили)?

Что касается примера TI - если пойдет непрерывный поток из нескольких байт (кадр), при таком делении неизбежно сорвется синхронизация, что и получилось :laughing:

// | P6.5/UCA0RXD|------------>

// | | 9600 - 8N1

// | P6.6/UCA0TXD|<------------

Это всего лишь пример, работает на заглушку, что передает - то и принимает. С другим устройством будет "подглючивать" :)

Изменено пользователем Abell

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

На стороне передатчика, надеюсь, тоже выставили скорость 1200 ? И столько же стоп-битов, сколько и в Вашем коде

 

 

да

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

При настройке УАПП, мне в своё время, очень понравилось останавливать (под JTAGом) "проц" и тупо руками задавать данные в UCAxTXBUF (результат отображался в терминале на ПК). Так же данные, посылаемые в "проц", отображались в UCAxRXBUF. И Tx, RX полезно осциллографом (иногда :)) смотреть. Это я к тому, что "…вообще ничего не получается - не принимает и не передаёт…"

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

И что не получилось, какие симптомы, можно подробнее?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Такое может быть, что просто уарт испортился?

Может и скорее всего так и произошло. Причин может быть несколько, самая простая это статическое электричество.

Вы работает без коврика, без заземления и браслета. Стол обычный, плата на бумаге в лучшем случае.

Сели за стол, все сдохло просто так. Обычная ситуация.

 

Пытаться программировать непроверенное оборудование это гарантированная потеря времени и сил.

Вот сначала надо убедиться что они все работоспособные.

У Вас может не работать порт на компе, USB шнурок, трансивер RS232 или порт на процессоре.

Чтоб их проверить закольцуйте прием на передачу на этот же порт процессора, или на другой порт

обычно у процессоров несколько UART. Тоже с шнурком, его можно проверить с другим компом,

или как минимум самого на себя.

Пока у Вас нерабочее предположительно железо которое сдохло от миллиона причин.

Как проверите что микросхемы и порты все работает по отдельности или в любой комбинации

можно приступать к программированию коэффициентов деления генератора.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...