Abell 0 16 июля, 2015 Опубликовано 16 июля, 2015 · Жалоба Такое может быть, что просто уарт испортился? OlegALL, Вы пропускаете очевидные советы и склоняетесь к невероятным? UART синхронизируется системными клоками. Коэффициент деления у Вас должен быть 3.41, а поставить можно только 3 - это какой уход частоты будет, сами посчитаете? И в какую фазу клока попадет второй, третий по очереди байт? P.S. Как вариант - установите скорость обмена 1200 и коэффициент соответствующий, есть такая возможность? Результат потом огласите :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Obam 38 16 июля, 2015 Опубликовано 16 июля, 2015 (изменено) · Жалоба Если настройки 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. Изменено 16 июля, 2015 пользователем Obam Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
OlegALL 0 17 июля, 2015 Опубликовано 17 июля, 2015 (изменено) · Жалоба Если настройки 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 } Изменено 17 июля, 2015 пользователем OlegALL Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Abell 0 17 июля, 2015 Опубликовано 17 июля, 2015 (изменено) · Жалоба Скорость 1200 не помогла. На стороне передатчика, надеюсь, тоже выставили скорость 1200 ? И столько же стоп-битов, сколько и в Вашем коде (кстати, неплохо бы его в тег убрать, пока от модератора нагоняй не получили)? Что касается примера TI - если пойдет непрерывный поток из нескольких байт (кадр), при таком делении неизбежно сорвется синхронизация, что и получилось :laughing: // | P6.5/UCA0RXD|------------> // | | 9600 - 8N1 // | P6.6/UCA0TXD|<------------ Это всего лишь пример, работает на заглушку, что передает - то и принимает. С другим устройством будет "подглючивать" :) Изменено 17 июля, 2015 пользователем Abell Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
OlegALL 0 17 июля, 2015 Опубликовано 17 июля, 2015 · Жалоба На стороне передатчика, надеюсь, тоже выставили скорость 1200 ? И столько же стоп-битов, сколько и в Вашем коде да Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Obam 38 17 июля, 2015 Опубликовано 17 июля, 2015 · Жалоба При настройке УАПП, мне в своё время, очень понравилось останавливать (под JTAGом) "проц" и тупо руками задавать данные в UCAxTXBUF (результат отображался в терминале на ПК). Так же данные, посылаемые в "проц", отображались в UCAxRXBUF. И Tx, RX полезно осциллографом (иногда :)) смотреть. Это я к тому, что "…вообще ничего не получается - не принимает и не передаёт…" Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Abell 0 17 июля, 2015 Опубликовано 17 июля, 2015 · Жалоба И что не получилось, какие симптомы, можно подробнее? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
agregat 0 17 июля, 2015 Опубликовано 17 июля, 2015 · Жалоба Такое может быть, что просто уарт испортился? Может и скорее всего так и произошло. Причин может быть несколько, самая простая это статическое электричество. Вы работает без коврика, без заземления и браслета. Стол обычный, плата на бумаге в лучшем случае. Сели за стол, все сдохло просто так. Обычная ситуация. Пытаться программировать непроверенное оборудование это гарантированная потеря времени и сил. Вот сначала надо убедиться что они все работоспособные. У Вас может не работать порт на компе, USB шнурок, трансивер RS232 или порт на процессоре. Чтоб их проверить закольцуйте прием на передачу на этот же порт процессора, или на другой порт обычно у процессоров несколько UART. Тоже с шнурком, его можно проверить с другим компом, или как минимум самого на себя. Пока у Вас нерабочее предположительно железо которое сдохло от миллиона причин. Как проверите что микросхемы и порты все работает по отдельности или в любой комбинации можно приступать к программированию коэффициентов деления генератора. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
OlegALL 0 27 июля, 2015 Опубликовано 27 июля, 2015 · Жалоба Всё работает, неправильно сделал инициализацию. Спасибо ответившим Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться