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

MSP430F449 UART - необходима помощь....

Люди, если не трудно, помогите студенту: Хочу связать MSP430F449 с PC через COM (ну хотя бы, чтоб контроллер эхо на HyperT дал) и ничего не получается.

Заранее спасибо.

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


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

UART процессора - драйвер RS232 (напр. ST232) - COM порт компьютера. В самом простейшем случае используются только цепи TXD, RXD и GND.

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


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

а какие конкретно проблемы? ставится микросхема типа ST232, настраивается UART (в доке достаточно точно описан этот процесс) - и все! правда у меня иногда бывали проблемы именно с гипертерминалом (почему-то байты приходят. но не отправляются. в этом смысле беспроигрышный вариант - mTTY

MTTTY.rar

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


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

Проблема скорее всего в неправильной инициализации UARTA. Описание его настроек лучше чем в мане ты вряд ли где найдешь, там и блок схемки есть, по которым мож набить свою программу. Под иаровским симулятором посмотри регистры USART0. Ну, если совсем глухо, наверно железяка мертвая.

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


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

Думаю, что студенту помощь в виде уже готовой программы нужна. Нахяляву так сказать. Иначе он привел бы свой код и спросил что он не так делает. Студент, я угадал? ;)

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


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

Господа разработчики, вы неправильно поняли fenriza!

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

В качестве преобразователя уровней RS-232 в TTL используется MAX232 со стандартной обвязкой взятой из мануала. Текст программы следующий:

 

#include <msp430x44x.h>

 

void main(void)

{

WDTCTL = WDTPW + WDTHOLD; // Stop WDT

 

FLL_CTL0 |= XCAP18PF; // Configure load caps

 

P2SEL |= 0x30; // P2.4,5 = USART0 TXD/RXD

ME1 |= UTXE0 + URXE0; // Enable USART0 TXD/RXD

 

UCTL0 |= CHAR; // 8-bit character

UTCTL0 |= SSEL0; // UCLK = ACLK

UBR00 = 0x0D; // 32k/2400 - 13.65

UBR10 = 0x00;

UMCTL0 = 0x6B; // Modulation

UCTL0 &= ~SWRST; // Initialize USART state machine

IE1 |= URXIE0; // Enable USART0 RX interrupt

 

// Mainloop

for (;;)

{

_BIS_SR(LPM3_bits + GIE); // Enter LPM3 w/interrupt

while (!(IFG1 & UTXIFG0)); // USART0 TX buffer ready?

TXBUF0 = RXBUF0; // RXBUF0 to TXBUF0

}

}

 

// UART0 RX ISR will for exit from LPM3 in Mainloop

__interrupt void usart0_rx (void);

USART0RX_ISR(usart0_rx)

__interrupt void usart0_rx (void)

{

_BIC_SR_IRQ(LPM3_bits); // Clear LPM3 bits from 0(SR)

}

 

Взят из стандартных примеров Тексаса. Среда - Code Composer.

Контроллер находится в отадочной плате, т.е. питание и прочая разводка выполнена заводстким методом. Единственная добавленная деталь - кварц на 32 КГц с обвязкой из двух кондеров на 10 пФ. Сам микроконтролер рабочий - работоспосоност проверена с помощью тестовой программы с лапочкой. Сама микросхема MAX232 также рабочая. Соответсвенно возникает вопрос - где ошибка? :huh:

Думается что скорее всего в коде. Он перед вами - надеемся на совет.

Халявы нам не надо, а нужна помощь или совет более опытных людей! :rolleyes:

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


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

лучше бы не MAX232, а MAX3232.

а

32 КГц с обвязкой из двух кондеров на 10 пФ
соответствует даташиту?

Сделайте пока без всяких выпендриваний с приемом и засыпанием

// Mainloop
  for (;; )
  { while ( !( IFG1 & UTXIFG0 ))
     ; // USART0 TX buffer ready?
      TXBUF0 = 0x55;
  }

должен передавать непрерывно 0х55 и смотрите осцилом, че у Вас получается.

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


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

Не вижу принципиальной разницы между MAX232 и MAX3232... Может объясните в чем она?

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

 

Кондеры для кристала взяты в соответствии с опытом работы с AVR и по рекомендации мануала.

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


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

Попробывал забить буфер передачи TXBUF0=0x55 - результат 0. Состояние буфера на дебагере - "пустой".

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


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

Попробывал забить буфер передачи TXBUF0=0x55 - результат 0. Состояние буфера на дебагере - "пустой".

А ты отключил переход в режим LPM3?

Если нет - отключи

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


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

Не вижу принципиальной разницы между MAX232 и MAX3232... Может объясните в чем она?

Я тоже не вижу, кроме того, что MAX3232 предназначена для 3-х Вольтового питания, а MAX232 для 5 и при 3В может не запустится. Во всяком случае это всегда можно проверить тем-же осцилографом.

 

Кондеры для кристала взяты в соответствии с опытом работы с AVR и по рекомендации мануала.

А здесь надо руководствоваться мануалом на MSP :-)

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

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


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

Bolg, если используете MAX232 вместо MAX3232, то запитайте ее от 5В, а на входе URXD0 MSP430 установите резисторный делитель, чтобы на нем не было превышения уровня сигнала выше питания.

 

Для MSP430F149 с кварцем 32786Гц для скорости 2400,8,n,1 процедура инициализации USART0 примерно такая.

 

#define PIN_TXD0 0x10
#define PIN_RXD0 0x20

U0CTL=SWRST;
U0CTL|=CHAR;
U0TCTL=SSEL0;
U0BR1=0x00;
U0BR0=0x0D;
U0MCTL=0x6B;
ME1|=UTXE0+URXE0;
U0RCTL=URXEIE;
U0CTL&=~SWRST;
P3SEL|=PIN_TXD0+PIN_RXD0;
IFG1&=~(UTXIFG0+URXIFG0);
IE1|=UTXIE0+URXIE0;

 

Кстати, проверьте, что часовой кварц действительно генерит.

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


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

MAX232 запитывается 5-ю вольтами: с физикой проблем нет всё работает как часы. UART запустил - эхо снял (Код ассемблеровый - texas-овские мануалы помогли) - с сишным кодом пока траблы.

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


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

Как уже заметил Fenriz, питание на MAX232 подавалось 5В. Впрочем это следовало оговорить сразу :)

Вообщем-то проблема с одной стороны разрешилась (ассемблер работает), но с другой стороны возникает вопрос почему С++ не работает? Ведь авторы кода одни и те же - ТI!!!

 

To Rezident

 

Спасибо конечно за код, но не вижу принципиальных отличий от предложенного мной :) Хочу лишь спросить - он проверен на реальном устройстве? Что касается кварца, то тут сомнений никаких - 32КГц, железно!

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


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

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

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

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

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

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

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

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

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

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