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

 
 
> msp430f5419 и msp430f1611, Полудуплекс
maxim_P
сообщение Mar 31 2011, 12:45
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 39
Регистрация: 14-06-07
Из: Минск, Беларусь
Пользователь №: 28 436



Добрый день. Стоит задача обмена данными между двумя процессорами msp430f5419 и msp430f1611 через полудплекс. msp430f1611 (далее 1611) посылает команду, а msp430f5419 (далее 5419) должен ответить. 5419 команду принимает корректно, формирует ответ, а вот уже ответа на 1611 нет. Смотрел осциллографом, импульсы ответа очень низкие по амплитуде. Не могу понять что не так.

настройки UART Для 5419:

P3DIR |= BIT4;
P3SEL = BIT4 + BIT5; // разрешаем работу USART0
UCA0CTL1 |= UCSWRST; // **Put state machine in reset**
UCA0CTL1 |= UCSSEL_1; // ACLK
UCA0BR0 = 0x03; // 9600
UCA0BR1 = 0; // 9600
UCA0MCTL = 0x06; // Modulation
UCA0CTL1 &= ~UCSWRST; // **Initialize USCI state machine**
UCA0IE |= UCRXIE; // Enable USCI_A0 RX interrupt

прием по прерыванию.
как только был принят последний байт
начинаю передавать данные:
for (n2 = 0; n2 < transmit_buf[1] + 1; n2 ++)
{
while (!(UCA0IFG&UCTXIFG)); // USCI_A0 TX buffer ready?
UCA0TXBUF = transmit_buf[write_rec_ptr]; // TX -> RXed character
}
данные передаю в прерывании по приему.

настройки UART Для 1611:

P3SEL |= (BIT4 + BIT5); // P3.4,5 = USART0 TXD/RXD
P3DIR |= BIT4;
U0CTL |= SWRST ; // RST
U0CTL &= ~SYNC ; // UART MODE
U0CTL |= CHAR; // 8-bit char, SWRST=1 1 Stop Bit
UTCTL0 |= SSEL0; // UCLK = ACLK
U0BR0 = 0x03; // 9600 from 8,0Mz
U0BR1 = 0x00;
U0MCTL = 0x06; // Modulation
UCTL0 &= ~SWRST; // Enable USART
ME1 |= UTXE0; // Enabled UART0 TXD

как только был передан последний байт
переключаемся на прием:
ME1 = URXE0; // Enabled UART0 RXD
IE1 = URXIE0;
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
rezident
сообщение Mar 31 2011, 14:26
Сообщение #2


Гуру
******

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



1. Если вы пользуетесь прерываниями, то не нужно опрашивать флаги готовности. Если опрашиваете флаг UCTXIFGx или UTXIFGx, то запретите прерывания от передатчика.
2. Маски при инициализации регистров следует накладывать только после того, как вы записали туда вместо дефолтного значения (после POR) явное значение.
3. При переключении с приема на передачу не следует отключать сам модуль USART, достаточно только запретить/разрешить прерывание. Команда
Код
ME1 |= UTXE0; // Enabled UART0 TXD

разрешает функцию пина P3.4 как TXD, но не разрешает функцию P3.5 как RXD. Возможно поэтому возникает конфликт на линии и сигнал "просаживается". Ведь значение P3DIR.bit5 вы явно нигде не задали. И P3OUT.bit5 по-умолчанию в нуле.
Go to the top of the page
 
+Quote Post
maxim_P
сообщение Apr 1 2011, 06:16
Сообщение #3


Участник
*

Группа: Участник
Сообщений: 39
Регистрация: 14-06-07
Из: Минск, Беларусь
Пользователь №: 28 436



Цитата(rezident @ Mar 31 2011, 17:26) *
1. Если вы пользуетесь прерываниями, то не нужно опрашивать флаги готовности. Если опрашиваете флаг UCTXIFGx или UTXIFGx, то запретите прерывания от передатчика.
2. Маски при инициализации регистров следует накладывать только после того, как вы записали туда вместо дефолтного значения (после POR) явное значение.
3. При переключении с приема на передачу не следует отключать сам модуль USART, достаточно только запретить/разрешить прерывание. Команда
Код
ME1 |= UTXE0; // Enabled UART0 TXD

разрешает функцию пина P3.4 как TXD, но не разрешает функцию P3.5 как RXD. Возможно поэтому возникает конфликт на линии и сигнал "просаживается". Ведь значение P3DIR.bit5 вы явно нигде не задали. И P3OUT.bit5 по-умолчанию в нуле.


1. Прерывания от передатчика запрещены в обоих процессорах, прерывания только по приему.
2. Не совсем понял.
3. P3.5 выбран как RXD (P3SEL |= BIT4 + BIT5) или ему еще нужно направление задать? Модули все включил, все вавно та же ситуация.
Еще по поводу просаживания. Когда нет обмена, на линии высокий уровень, когда идет передача данных, тогда уровень меняется с высокого на низкий, в моей ситуации уровень не доходит до нуля, он только немного опускается, но этого не достаточно для вызова прерывания.

Сообщение отредактировал maxim_P - Apr 1 2011, 06:22
Go to the top of the page
 
+Quote Post
rezident
сообщение Apr 1 2011, 07:41
Сообщение #4


Гуру
******

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



Цитата(maxim_P @ Apr 1 2011, 12:16) *
2. Не совсем понял.
После подачи питания или сброса регистры периферии (не все!) принимают какое-то дефотное состояние. Я вам рекомендую не надеятся на это и прописывать все регистры используемой периферии явными значениями и только потом уже в коде программы накладывать маски, модифицируя отдельные биты.
Цитата(maxim_P @ Apr 1 2011, 12:16) *
3. P3.5 выбран как RXD (P3SEL |= BIT4 + BIT5) или ему еще нужно направление задать?
Конечно нужно. Посмотрите внимательно схемотехнику (блок-схему) пинов в конце даташита.
Цитата(maxim_P @ Apr 1 2011, 12:16) *
в моей ситуации уровень не доходит до нуля, он только немного опускается
А не может так случиться, что пин уже "битый"? Осциллографом, например, неудачно ткнулись. Кстати, осциллограф у вас заземлен? Проверьте это предположение (неисправности пина), запрограммировав его как входной пин GPIO. Также проверьте соответствующий подключению пин на другом кристалле, запрограммировав его как выходной пин GPIO, при этом сформируйте программно его переключение. Эти простые тесты помогут определиться с тем, где именно проблема - в аппаратуре или в программе?
Go to the top of the page
 
+Quote Post
maxim_P
сообщение Apr 1 2011, 08:35
Сообщение #5


Участник
*

Группа: Участник
Сообщений: 39
Регистрация: 14-06-07
Из: Минск, Беларусь
Пользователь №: 28 436



Цитата(rezident @ Apr 1 2011, 10:41) *
После подачи питания или сброса регистры периферии (не все!) принимают какое-то дефотное состояние. Я вам рекомендую не надеятся на это и прописывать все регистры используемой периферии явными значениями и только потом уже в коде программы накладывать маски, модифицируя отдельные биты.
Конечно нужно. Посмотрите внимательно схемотехнику (блок-схему) пинов в конце даташита.
А не может так случиться, что пин уже "битый"? Осциллографом, например, неудачно ткнулись. Кстати, осциллограф у вас заземлен? Проверьте это предположение (неисправности пина), запрограммировав его как входной пин GPIO. Также проверьте соответствующий подключению пин на другом кристалле, запрограммировав его как выходной пин GPIO, при этом сформируйте программно его переключение. Эти простые тесты помогут определиться с тем, где именно проблема - в аппаратуре или в программе?

Все порты РхDIR и РхOUT в начале программы обнуляются. А какое направление RXD еще нужно задать? Пины не битые. При разрыве линии между процессорами сигналы четкие с обоих сторон. А когда линию соединяю, послылаю команду, то сигнал тоже не опускается полностью до нуля, но по амплитуде он достаточно высокий, чтобы прочитать данные. Питание 3,3 вольта. Амплитуда команды примерно 2,7В, амплитуда ответа примерно 0,6В. В сумме они дают 3,3В. Осциллограф заземлен. Прикладываю осциллограмму.

Сообщение отредактировал maxim_P - Apr 1 2011, 08:38
Прикрепленные изображения
Прикрепленное изображение
 
Go to the top of the page
 
+Quote Post
rezident
сообщение Apr 1 2011, 15:30
Сообщение #6


Гуру
******

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



Цитата(maxim_P @ Apr 1 2011, 14:35) *
Все порты РхDIR и РхOUT в начале программы обнуляются.
Ну я же не профессиональный телепат, чтобы угадывать неопубликованные исходные тексты. rolleyes.gif
Цитата(maxim_P @ Apr 1 2011, 14:35) *
А какое направление RXD еще нужно задать?
Для RXD вход, для TXD - выход. Пин RXD одного контроллера должен соединяться с TXD второго. Соответственно TXD первого с RXD второго.
Цитата(maxim_P @ Apr 1 2011, 14:35) *
Питание 3,3 вольта. Амплитуда команды примерно 2,7В, амплитуда ответа примерно 0,6В. В сумме они дают 3,3В.
А выводы DVSS обоих контроллеров соединить не забыли случайно?
Цитата(maxim_P @ Apr 1 2011, 14:35) *
Осциллограф заземлен.
Именно заземлен или подключен к трехпроводной сети? Рекомендую убрать заземляющий контакт у осциллографа. Особенно, когда к плате подключен эмулятор, подключенный в свою очередь к PC.

Go to the top of the page
 
+Quote Post
maxim_P
сообщение Apr 1 2011, 17:42
Сообщение #7


Участник
*

Группа: Участник
Сообщений: 39
Регистрация: 14-06-07
Из: Минск, Беларусь
Пользователь №: 28 436



Цитата(rezident @ Apr 1 2011, 18:30) *
Для RXD вход, для TXD - выход. Пин RXD одного контроллера должен соединяться с TXD второго. Соответственно TXD первого с RXD второго.

Я же настраиваю P3.4, P3.5 на UART, как настроены POUT, PDIR не имеет значения, так по крайней мере написано в конце даташита. Используется полудуплекс - RXD и TXD закорочены на обоих контроллерах.
Цитата(rezident @ Apr 1 2011, 18:30) *
А выводы DVSS обоих контроллеров соединить не забыли случайно?
Именно заземлен или подключен к трехпроводной сети? Рекомендую убрать заземляющий контакт у осциллографа. Особенно, когда к плате подключен эмулятор, подключенный в свою очередь к PC.

Земля между контроллерами есть. По поводу заземления точно сказать не могу. Как я уже выше писал, если линию разорвать, то импульсы имеют амплитуду
3,3В (что и требуется) на обоих контроллерах (измерял осциллографом в тех же условиях), то есть проблема не с осциллографом, а скорее с настройками обмена данных.

Сообщение отредактировал maxim_P - Apr 1 2011, 17:44
Go to the top of the page
 
+Quote Post
rezident
сообщение Apr 1 2011, 18:40
Сообщение #8


Гуру
******

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



Цитата(maxim_P @ Apr 1 2011, 23:42) *
Используется полудуплекс - RXD и TXD закорочены на обоих контроллерах.
Поясните эту фразу. Что значит "закорочены"? Соединены между собой? У вас обмен между МК всего по одному проводу идет что ли? cranky.gif
Go to the top of the page
 
+Quote Post
maxim_P
сообщение Apr 1 2011, 18:49
Сообщение #9


Участник
*

Группа: Участник
Сообщений: 39
Регистрация: 14-06-07
Из: Минск, Беларусь
Пользователь №: 28 436



Цитата(rezident @ Apr 1 2011, 21:40) *
Поясните эту фразу. Что значит "закорочены"? Соединены между собой? У вас обмен между МК всего по одному проводу идет что ли? cranky.gif

ага
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- maxim_P   msp430f5419 и msp430f1611   Mar 31 2011, 12:45
- - rezident   Вот же блин! В таком случае вам нужно после ...   Apr 1 2011, 18:58
- - maxim_P   Цитата(rezident @ Apr 1 2011, 21:58) Вот ...   Apr 1 2011, 19:35
- - rezident   Цитата(maxim_P @ Apr 2 2011, 01:35) Вообщ...   Apr 1 2011, 19:50
- - maxim_P   Цитата(rezident @ Apr 1 2011, 22:50) У ва...   Apr 1 2011, 20:23
- - rezident   Цитата(maxim_P @ Apr 2 2011, 02:23) Как я...   Apr 1 2011, 21:25
- - maxim_P   Спасибо за информацию, на следующей неделе попробу...   Apr 2 2011, 07:45
- - maxim_P   Добрый день.В 1611 после передачи команды делаю за...   Apr 5 2011, 08:31


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

 


RSS Текстовая версия Сейчас: 20th June 2025 - 23:21
Рейтинг@Mail.ru


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