реклама на сайте
подробности

 
 
> Снова UART
!Roma!
сообщение Jan 25 2007, 18:09
Сообщение #1





Группа: Новичок
Сообщений: 14
Регистрация: 17-01-07
Пользователь №: 24 520



Здравствуйте, недавно начал осваивать программирование микроконтроллеров, в частности msp430F169, столкнулся с проблемой передачи данных с него на компьютер.
При передаче странно работает флаг UTXIFG0, т.е. он абсолютно не реагирует на помещение данных в U0TXBUF(хотя судя по руководству, должен сбрасываться), сбрасываеися лишь после вызова обработчика прерываний, и потом так и остается в нуле до PUC или SWRST=1.

Научите уму-разуму)), подскажите где ошибка. Спасибо.

Источник тактирования DCO (800kHz)

#include "msp430x16x.h"

int TransmitPacket(char *pData, int nDataSize);

int main()
{
// Остановить WatchDog timer
WDTCTL = WDTPW + WDTHOLD;

/**
Сбросить модуль USART (SWRST=1),
Настроить порт:
8 бит в пакете,
без контроля четности,
1 стоп-бит
*/
U0CTL = SWRST;

// Установить длину данных - 8 бит
U0CTL |= CHAR;

// Источник тактирования - SMCLK
U0TCTL |= SSEL1;

// Установить скорость работы порта 9600 бод
U0BR0 = 0x53;

U0BR1 = 0x00;

U0MCTL = 0x03;

// Включить модуль USART через SFR (прием и передача)
ME1 |= UTXE0 | URXE0;

// Разрешить прерывания по приему
IE1 |= URXIE0;

// Очищаем SWRST бит
U0CTL &= ~SWRST;

/*____________________Проверка_отправки_данных_на_компьютер______________________
_____*/

char aCheckData[] = {0x31,0x32,0x33};

int nCheckDataLen = 3;

for (;;)
{
TransmitPacket(aCheckData,nCheckDataLen);
}

}//main

/**
\fn int TransmitPacket(char *pData, int nDataSize)
\param pData - указатель на передаваемый буфер
nDataSize - размер передаваемых данных
\brief Отправить данные в порт
*/

int TransmitPacket(char *pData, int nDataSize)
{
// Разрешить прерывания по приему
IE1 |= UTXIE0;

// Переменная для хранения очередного байта данных (для ускорения операции доступа к данным массива)
char *pTmpData = pData;

// Цикл передачи данных
for (int nCount=nDataSize; nCount>0; nCount--)
{
// Разрешить маскированные прерывания (прерывания от периферийных модулей)
_EINT();

// Дождаться готовности передатчика к приему новых данных
while ( !(IFG1 & UTXIFG0) );

// Буфер готов к приему, записать очередной байт данных
U0TXBUF = *pTmpData++;

// Дождаться завершения предыдущей операции записи
while ( !(U0TCTL & TXEPT) );
}

// Передача завершена, прекратить вызов обработчика прерываний
IE1 ^= UTXIE0;

return 0;

}// end of TransmitPacket()

#pragma vector = UART0TX_VECTOR

/**
\fn void Uart0_TX (void)
\brief Функция-обработчик прерываний от UART0 (при передаче)
*/
__interrupt void Uart0_TX (void)
{
// Прерывание обработано, сбросить GIE-бит
_BIC_SR_IRQ(GIE);
}
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
rezident
сообщение Jan 30 2007, 04:09
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882



Так и будете в час, точнее в день по чайной ложке или все-таки прочитаете этот RTFM? wink.gif
Цитата
UTXIFG0 is set when U0TXBUF is empty.

Установленный флаг UTXIFG0 свидетельствует о том, что UART готов к передаче (записи в буфер TXBUF) следующего байта, а не о том что он занят. Поскольку у него двойная буферизация, то два байта подряд он хавает на ура. Если бы проблема была только в этом флаге, то на терминале вы получили бы как минимум два символа. Поскольку вы не получаете ни одного, то проблема не там, где вы ее ищете. Если используете винусовый гипертерминал, то такое вполне может быть. Он по умолчанию требует handshake. Попробуйте вот с этим терминалом.
P.S. а осциллографом вы смотрели сигналы? Может просто скорость передачи сильно отличается от ожидаемой?
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- !Roma!   Снова UART   Jan 25 2007, 18:09
- - rezident   Во-первых, в опциях создания сообщения есть тэги ц...   Jan 25 2007, 22:13
- - Lucky:)   // Разрешить прерывания по приему IE1 |= UTXIE0; э...   Jan 25 2007, 22:26
- - !Roma!   Спасибо за дельные замечания, постараюсь учесть на...   Jan 26 2007, 12:09
|- - rezident   Цитата(!Roma! @ Jan 26 2007, 14:0...   Jan 26 2007, 15:28
- - !Roma!   Подрихтовал исходники )), проблемма все таже: флаг...   Jan 29 2007, 21:11
- - jorikdima   я от МСП430 и в виндовозном терминале все прекрано...   Jan 30 2007, 09:35
- - !Roma!   Ну на счет manual могу чесно сказать, что прочитал...   Jan 30 2007, 20:47
|- - rezident   Цитата(!Roma! @ Jan 30 2007, 22:4...   Jan 30 2007, 21:31
|- - Lucky:)   Цитата(rezident @ Jan 30 2007, 21:31) Как...   Jan 30 2007, 21:41
|- - rezident   Цитата(Lucky:) @ Jan 30 2007, 23...   Jan 30 2007, 22:09
|- - Lucky:)   Цитата(rezident @ Jan 30 2007, 22:09) Не ...   Jan 30 2007, 22:40
- - !Roma!   ЦитатаДа не игнорировал он его Что ж на это мне от...   Feb 3 2007, 11:55
|- - Lucky:)   Цитата(!Roma! @ Feb 3 2007, 11:55...   Feb 3 2007, 19:41
|- - Dog Pawlowa   Цитата(!Roma! @ Feb 3 2007, 12:55...   Feb 3 2007, 20:58
|- - Сергей Борщ   Цитата(!Roma! @ Feb 3 2007, 12:55...   Feb 3 2007, 23:29
|- - Dog Pawlowa   >>>>>>Хм. Но с прерываниями по п...   Feb 4 2007, 16:43
|- - rezident   Цитата(!Roma! @ Feb 3 2007, 13:55...   Feb 4 2007, 20:05
|- - Dog Pawlowa   Цитата(rezident @ Feb 4 2007, 21:05) Цита...   Feb 5 2007, 17:10
|- - IgorKossak   Цитата(Dog Pawlowa @ Feb 5 2007, 16:10) 1...   Feb 5 2007, 20:39
|- - rezident   Цитата(Dog Pawlowa @ Feb 5 2007, 19:10) Н...   Feb 6 2007, 01:10
|- - Dog Pawlowa   Цитата(rezident @ Feb 6 2007, 02:10) ... ...   Feb 7 2007, 17:39
- - AlHakim   [quote name='!Roma!' date='Feb...   Feb 3 2007, 16:10


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 11th August 2025 - 10:40
Рейтинг@Mail.ru


Страница сгенерированна за 0.01379 секунд с 7
ELECTRONIX ©2004-2016