|
UART не принимает больше одного байта. Контроллер MSP430F4152 |
|
|
|
Jul 16 2015, 12:42
|

профессиональный дилетант
   
Группа: Участник
Сообщений: 866
Регистрация: 16-03-06
Из: Шебекино - Лысьва - Тюмень
Пользователь №: 15 292

|
Цитата(OlegALL @ Jul 16 2015, 15:06)  Такое может быть, что просто уарт испортился? OlegALL, Вы пропускаете очевидные советы и склоняетесь к невероятным? UART синхронизируется системными клоками. Коэффициент деления у Вас должен быть 3.41, а поставить можно только 3 - это какой уход частоты будет, сами посчитаете? И в какую фазу клока попадет второй, третий по очереди байт? P.S. Как вариант - установите скорость обмена 1200 и коэффициент соответствующий, есть такая возможность? Результат потом огласите
--------------------
Скоро дело сказывается, да не скоро сказка делается, или тише будешь - дальше уедешь...  
|
|
|
|
|
Jul 16 2015, 13:29
|

Знающий
   
Группа: Участник
Сообщений: 756
Регистрация: 14-11-14
Пользователь №: 83 663

|
Если настройки 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 - Jul 16 2015, 13:35
--------------------
Пролетарий умственного труда.
|
|
|
|
|
Jul 17 2015, 07:43
|
Участник

Группа: Участник
Сообщений: 70
Регистрация: 30-11-10
Пользователь №: 61 275

|
Цитата(Obam @ Jul 16 2015, 17:29)  Если настройки 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: CODE /* --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 - Jul 17 2015, 09:49
|
|
|
|
|
Jul 17 2015, 08:05
|

профессиональный дилетант
   
Группа: Участник
Сообщений: 866
Регистрация: 16-03-06
Из: Шебекино - Лысьва - Тюмень
Пользователь №: 15 292

|
Цитата(OlegALL @ Jul 17 2015, 10:43)  Скорость 1200 не помогла. На стороне передатчика, надеюсь, тоже выставили скорость 1200 ? И столько же стоп-битов, сколько и в Вашем коде (кстати, неплохо бы его в тег убрать, пока от модератора нагоняй не получили)? Что касается примера TI - если пойдет непрерывный поток из нескольких байт (кадр), при таком делении неизбежно сорвется синхронизация, что и получилось  Цитата // | P6.5/UCA0RXD|------------> // | | 9600 - 8N1 // | P6.6/UCA0TXD|<------------ Это всего лишь пример, работает на заглушку, что передает - то и принимает. С другим устройством будет "подглючивать"
Сообщение отредактировал Abell - Jul 17 2015, 08:10
--------------------
Скоро дело сказывается, да не скоро сказка делается, или тише будешь - дальше уедешь...  
|
|
|
|
|
Jul 17 2015, 09:46
|
Участник

Группа: Участник
Сообщений: 70
Регистрация: 30-11-10
Пользователь №: 61 275

|
Цитата(Abell @ Jul 17 2015, 12:05)  На стороне передатчика, надеюсь, тоже выставили скорость 1200 ? И столько же стоп-битов, сколько и в Вашем коде да
|
|
|
|
|
Jul 17 2015, 10:51
|
Знающий
   
Группа: Свой
Сообщений: 790
Регистрация: 6-02-14
Из: Омск
Пользователь №: 80 379

|
Цитата(OlegALL @ Jul 16 2015, 15:06)  Такое может быть, что просто уарт испортился? Может и скорее всего так и произошло. Причин может быть несколько, самая простая это статическое электричество. Вы работает без коврика, без заземления и браслета. Стол обычный, плата на бумаге в лучшем случае. Сели за стол, все сдохло просто так. Обычная ситуация. Пытаться программировать непроверенное оборудование это гарантированная потеря времени и сил. Вот сначала надо убедиться что они все работоспособные. У Вас может не работать порт на компе, USB шнурок, трансивер RS232 или порт на процессоре. Чтоб их проверить закольцуйте прием на передачу на этот же порт процессора, или на другой порт обычно у процессоров несколько UART. Тоже с шнурком, его можно проверить с другим компом, или как минимум самого на себя. Пока у Вас нерабочее предположительно железо которое сдохло от миллиона причин. Как проверите что микросхемы и порты все работает по отдельности или в любой комбинации можно приступать к программированию коэффициентов деления генератора.
|
|
|
|
|
Jul 27 2015, 06:01
|
Участник

Группа: Участник
Сообщений: 70
Регистрация: 30-11-10
Пользователь №: 61 275

|
Всё работает, неправильно сделал инициализацию. Спасибо ответившим
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|