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

Дикая Ошибка При Передаче По Uart


Рекомендуемые сообщения

Требуеться отсылать данные по UART-у с большой точностью, делаю как по примеру. Схема аналогична примеру

//******************************************************************************
//	 MSP430x47xx Demo - USCI_A0, 115200 UART Echo ISR, DCO SMCLK
//
// Description: Echo a received character, RX ISR used. Normal mode is LPM0.
// USCI_A0 RX interrupt triggers TX Echo.
// Baud rate divider with 1048576hz = 1048576/115200 = ~9.1 (009h|01h)
// ACLK = LFXT1 = 32768Hz, MCLK = SMCLK = default DCO = 32 x ACLK = 1048576Hz
// //* An external watch crystal between XIN & XOUT is required for ACLK *//
//
//				 MSP430x47xx
//			 -----------------
//		 /|\|			 XIN|-
//		 | |				 | 32kHz
//		 --|RST		 XOUT|-
//		 |				 |
//		 |	 P2.4/UCA0TXD|------------>
//		 |				 | 115200 - 8N1
//		 |	 P2.5/UCA0RXD|<------------
//
// P. Thanigai / K.Venkat
// Texas Instruments Inc.
// November 2007
// Built with CCE Version: 3.2.0 and IAR Embedded Workbench Version: 3.42A
//******************************************************************************
#include "msp430x47x4.h"
void main(void)
{
volatile unsigned int i;
WDTCTL = WDTPW+WDTHOLD;				 // Stop WDT
FLL_CTL0 |= XCAP14PF;					 // 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?
P2SEL |= BIT4+BIT5;					 // P2.4,5 = USCI_A0 RXD/TXD
UCA0CTL1 |= UCSSEL_2;					 // SMCLK
UCA0BR0 = 0x09;						 // 1MHz 115200
UCA0BR1 = 0x00;						 // 1MHz 115200
UCA0MCTL = 0x02;						 // Modulation
UCA0CTL1 &= ~UCSWRST;					 // **Initialize USCI state machine**
IE2 |= UCA0RXIE;						 // Enable USCI_A0 RX interrupt
_BIS_SR(LPM0_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
}

#include "msp430x47x4.h"
#include "main.h"

extern char Hello_World[] = {"Hello, World!\n\r"}; //Current RSSI as ASCII.

void main(void)
{

WDTCTL = WDTPW+WDTHOLD; // Stop WDT

// ================[ Crystal Oscillator ]===============
FLL_CTL0 |= XCAP14PF; // 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?
// =====================================================

// ====================[ UART config ]==================
//UART1:
P4SEL |= BIT0+BIT1;
UCA1CTL1 |= UCSSEL_2;
UCA1BR0 = 0x09;
UCA1BR1 = 0x00;
UCA1MCTL = 0x02;
UCA1CTL1 &= ~UCSWRST;
// UC1IE |= UCA1RXIE;
// =====================================================


CCTL0 = CCIE; // CCR0 interrupt enabled
TimerChacker = 0;
TACCR0 = 62500 - 1;
TACTL = TASSEL_2 + ID_3 + MC_1 + TACLR; // SMCLK, up mode

_BIS_SR(LPM0_bits + GIE); // Enter LPM3

}

// =============== [ Timer actions ] ==================
#pragma vector=TIMERA0_VECTOR
__interrupt void Timer_A (void)
{
if (++TimerChacker == 3) {
sendToWizFi(Hello_World);
TimerChacker = 0;
}
}
// =====================================================

int getLength(unsigned char mess[]){
int j;
for (j=0; j<MAX_BUFF; j++){
if ((mess[j] == '\r')) break;
}
return j;
}

void sendToUART(unsigned char mess[]){
int maxLen = getLength(mess);
for (int j=0; j<=maxLen; j++){
while(!(UC1IFG&UCA1TXIFG));
UCA1TXBUF = mess[j];
}
}

Что странно, первые пару секунд все без ошибок, а потом начинается этот адок

post-129151-0-07358800-1364368664_thumb.png

Изменено пользователем ftp27
Ссылка на комментарий
Поделиться на другие сайты

Реклама: ООО ТД Промэлектроника, ИНН: 6659197470, Тел: 8 (800) 1000-321

20% скидка на весь каталог электронных компонентов в ТМ Электроникс!

Акция "Лето ближе - цены ниже", успей сделать выгодные покупки!

Плюс весь апрель действует скидка 10% по промокоду APREL24 + 15% кэшбэк и бесплатная доставка!

Перейти на страницу акции

Реклама: ООО ТМ ЭЛЕКТРОНИКС, ИНН: 7806548420, info@tmelectronics.ru, +7(812)4094849

Скорость пробовал по-меньше? Или надо принципиально 115200? Провода покороче попробуй.

Пробовал 9600. Та же фигня. Но желательно именно 115200

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

Выбираем схему BMS для корректной работы литий-железофосфатных (LiFePO4) аккумуляторов

 Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ, также как и для других, очень важен контроль процесса заряда и разряда, а специализированных микросхем для этого вида аккумуляторов не так много. Инженеры КОМПЭЛ подготовили список имеющихся микросхем и возможных решений от разных производителей. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

хЕЛЛО, вОРЛД вместо Hello, World? Как так? Компилятор учился у punto switcher'а чтоль? :blink:

Это очень не похоже ни на помехи, ни на рассинхронизацию... Но в любом случае я бы начал с цифроосцилла, сделал бы маску с верной передачи и сравнивал остальные, типа pass/fail, чтоб убедиться, что передатчик передает одно и то же...

> Правила форума <

...из древних времен доходят до нас слухи о колдунах и волшебниках... - кто бы мог подумать, что так может начинаться дипломная работа по радиотехнике...

...это не дым от канифоли, нет... это души умерших транзисторов....

Первый закон Ома: никому не рассказывать про Ома!

Ну вот, а ты говорил ноль...

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

Первый код эхо нормально отдает? Если да, во втором коде сделай передачу в основном цикле, прерывания отключи.

Изменено пользователем КЭС
Ссылка на комментарий
Поделиться на другие сайты

Блин, да не может происходить транслитерация из-за банального завала таймингов...

> Правила форума <

...из древних времен доходят до нас слухи о колдунах и волшебниках... - кто бы мог подумать, что так может начинаться дипломная работа по радиотехнике...

...это не дым от канифоли, нет... это души умерших транзисторов....

Первый закон Ома: никому не рассказывать про Ома!

Ну вот, а ты говорил ноль...

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

Сейчас тыкал, перетыкал проводки от первого ко второму юарту. Ошибка исчезла. Хотя я только поменял прошивку для того чтобы обойтись без прерываний при отправке (а GIE оставил!!)

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

...(а GIE оставил!!)

Процедуру __interrupt убрал?

А смысл, если прерывания так таковой выключены. К тому же я сейчас вернул таймер и с ним тоже без ошибок шлется

Самое удивительное, что он транслитит сообщение на кириллицу иногда

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

На счет PuntoSwitcher - не шутка. Бывало при попытке отправки через гипертерминал он введённые данные менял согласно раскладке. Так что на такую штуку стоит обратить внимание.

Через чего смотришь порт?

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

На счет PuntoSwitcher - не шутка. Бывало при попытке отправки через гипертерминал он введённые данные менял согласно раскладке. Так что на такую штуку стоит обратить внимание.

Через чего смотришь порт?

микроконтроллер припаян юартом к модулю. Проводок передачи от микроконтроллера идет к COM-порту компа. Смотрю через PuTTY

UDP: Опять начал мусором кошмарить

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

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

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

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Ответить в этой теме...

×   Вставлено с форматированием.   Восстановить форматирование

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

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

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

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

Загрузка...
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...