Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Возможности USART в MSP430F449
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > MSP430
Petrooo
Добрый день, уважаемые коллеги!
Имеется следующая задача.
Блок на основе MSP430F449.
Для проверки работоспособности интерфейсного разъема RS232 сигнал TXD с помощью заглушки заведен на RXD (в том же интерфейсном разъеме). Это сигналы порта USART0 - TXD(P2.4)/RXD(P2.5).
Возможно ли в MSP430 настройть USART так, чтобы можно было бы сигналами TXD/RXD играться "вручную" как в процах 8051, 8052 - ставить TXD в 0/1 и ловить эти значения RXD?
Или в MSP430 такое вообще не возможно?

Вот так не работает blink.gif
Код
#define  TX0  (P2OUT & 0x10)
#define  RX0  (P2IN  & 0x20)
#define  ClrTX0  P2OUT &= ~0x10
#define  SetTX0  P2OUT |=  0x10

void TestRS_PC() {
   P2SEL |= 0x30;         // P2.4,5 = USART0 TXD(P2.4)/RXD(P2.5)
   P2DIR |= 0x10;        // P2.4 output direction

   IE1 &= ~(UTXIE0 + URXIE0);
   ME1 |= UTXE0 + URXE0;         // Enable USART0 TXD/RXD

   UCTL0 = SYNC;   // пробовал так   1
//   UCTL0 = СHAR;    и вот так         2
//   UCTL0 = 0;          и так тоже       3

   do {
     ClrTX0;
     Delay(500);  // задержка 500 мс
     if (RX0) ShowMsg(msgRX_HIGH);  // на индикатор RXD = 1
     else ShowMsg(msgRX_LOW);        // на индикатор RXD = 0

     SetTX0;                             // после этой команды RX0 все равно = 0 !!!
     Delay(500);
     if (RX0) ShowMsg(msgRX_HIGH);  // на индикатор RXD = 1
     else ShowMsg(msgRX_LOW);        // на индикатор RXD = 0
   } while(!GetKey());
}
rezident
Цитата(Petrooo @ Jul 28 2006, 16:01) *
Возможно ли в MSP430 настройть USART так, чтобы можно было бы сигналами TXD/RXD играться "вручную" как в процах 8051, 8052 - ставить TXD в 0/1 и ловить эти значения RXD?
Или в MSP430 такое вообще не возможно?

Во-первых, если вы хотите использовать пины для дискретного ввода/вывода, то и используйте их на здоровье.
P3SEL&=~0x30;
Настроить пины на ввод/вывод в P3DIR, писать в P3OUT, читать состояние из P3IN. На настройки USART эти манипуляции никак не повлияют. Т.е. потом можно будет "легким движением руки" вернуть все обратно к функциям UART.
P3SEL|=0x30;
Во-вторых, для тестирования функционирования программной части работы с UART (но не внешнего железа/обвески) можно воспользоваться встроенной в USART функцией loopback. Для этого достаточно лишь установить соответствующий бит в регистре UxCTL
U0CTL|=LISTEN;
или
U0CTL|=0x08;
Или разъясните доступнее, что вам хочется? cranky.gif
diper
2 rezident
Уважаемый rezident, ну зачем так быстро отвечать на вопросы, дайте же простым смертым набрать эти полезные сообщения sad.gif
Petrooo
Благодарю Вас, уважаемый rezident, за скорый и исчерпывающий ответ.
Как оказывется все просто - P3SEL&=~0x30; smile.gif
Цитата(rezident @ Jul 28 2006, 13:31) *
Или разъясните доступнее, что вам хочется? cranky.gif

Разумеется требуется протестить все внешнее железо/обвеску, как на выход, так и на вход - в этом собственнно и смысл теста.
Честно говоря мне уже удалось забороть проблему через одно место:
Код
void TestRS_PC() {
   P2SEL |= 0x30;         // P2.4,5 = USART0 TXD(P2.4)/RXD(P2.5)
   P2DIR |= 0x10;        // P2.4 output direction

   IE1 &= ~(UTXIE0 + URXIE0);

   do {
     UCTL0 = SYNC;            // логический 0 (U=+6В на выходе TXD интерфейсного разъема)

     Delay(500);
     if (RX0) ShowMsg(msgRX_HIGH);
     else ShowMsg(msgRX_LOW);

    UCTL0 = CHAR;              // логическая 1 (U=-6В на выходе TXD интерфейсного разъема)

     Delay(500);
     if (RX0) ShowMsg(msgRX_HIGH);
     else ShowMsg(msgRX_LOW);
   } while(!GetKey());
}

Но Ваш ответ расставил все по своим местам twak.gif
Еще раз Вам спасибо
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.