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

 
 
> UART не принимает больше одного байта. Контроллер MSP430F4152
OlegALL
сообщение Jul 14 2015, 09:45
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 70
Регистрация: 30-11-10
Пользователь №: 61 275





Проблема в теме. Обсуждение здесь: http://caxapa.ru/609239.html
Помогите
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Abell
сообщение Jul 16 2015, 06:02
Сообщение #2


профессиональный дилетант
****

Группа: Участник
Сообщений: 866
Регистрация: 16-03-06
Из: Шебекино - Лысьва - Тюмень
Пользователь №: 15 292



Обсуждение читать там, а ответы давать здесь? biggrin.gif
Вот ключевая фраза:
Цитата
Причём работало раньше всё нормально, принимались 14 байт, а в один момент работать перестало.

Значит, что-то пошло не так laughing.gif Уход частоты, уровней и прочее, в том числе со стороны передатчика тоже. В общем, все, не касающееся кода - его ведь не меняли, пока все работало нормально, верно?


--------------------
Скоро дело сказывается, да не скоро сказка делается, или тише будешь - дальше уедешь...

Go to the top of the page
 
+Quote Post
OlegALL
сообщение Jul 16 2015, 06:52
Сообщение #3


Участник
*

Группа: Участник
Сообщений: 70
Регистрация: 30-11-10
Пользователь №: 61 275



Цитата(Abell @ Jul 16 2015, 10:02) *
Обсуждение читать там, а ответы давать здесь? biggrin.gif
Вот ключевая фраза:

Значит, что-то пошло не так laughing.gif Уход частоты, уровней и прочее, в том числе со стороны передатчика тоже. В общем, все, не касающееся кода - его ведь не меняли, пока все работало нормально, верно?


Да, загрузил версию, которая работала. Сейчас не работает. 2 байта принимаются через раз
Go to the top of the page
 
+Quote Post
yuri_t
сообщение Jul 16 2015, 08:32
Сообщение #4


Частый гость
**

Группа: Свой
Сообщений: 163
Регистрация: 24-08-05
Пользователь №: 7 937



Цитата(OlegALL @ Jul 16 2015, 09:52) *
Да, загрузил версию, которая работала. Сейчас не работает. 2 байта принимаются через раз


Ну тогда подключаем "тяжёлую артиллерию"

0. Создаем отдельный тестовый проект

1. Програмируем UART на 9600 бит/сек (формат 8 бит 1 старт 1 стоп, без Automatic baud rate detection)
RX/ ТХ прерывания- запрещены) согласно MSP430F41x2_Code_Examples (TI file slac288e.zip)
При это рабоч частота проц и периферии должна быть >= 1 MHZ

2. Сначала проверяем передачу (не прием !)

Пример кода
Код
  const char str_to_send[] = "Str to send\r\n";
  
  int len = strlen((char*)str_to_send);
  int i;

  for(;;)
  {
      for(i=0; i < len; i++)
     {
         while(!(IFG2&UCA0TXIFG));
         UCA0TXBUF = str_to_send[i];
     }
     delay_1_sec();
}

Подключаем стандартный Windows/Linux serial port терминал и убеждаемся в правильности передачи.
Если передача не проходит или искажена, с помощью осц проверяем форму и длительность импульсов,
а так же формат(8 бит 1 стоп 1 старт)

3. Если передача работает, то проверяем прием

3.1 Разрешаем RX interrupts

3.2 Пример кода обработчика
Код
   // Globals
    volatile int rx_val = 0;
    volatile int rx_cnt_ok = 0;
    volatile int rx_cnt_bad = 0;
  

#pragma vector=USCIAB0RX_VECTOR
__interrupt void USCIA0RX_ISR (void)
{
      rx_val = UCA0RXBUF;
      if((UCA0STAT & (UCFE |  UCOE )) != 0)
      {
          rx_cnt_bad++;
      }
      else
      {
           rx_cnt_ok++;
           if(rx_cnt_ok >= 14)
               rx_val++;    // Just to make the compiler happy
      }  
}


3.3 Ставим breakpoints на rx_cnt_bad++ и на rx_val++;

3.4 С терминала посылаем строки типа "1234567890123456"
и убеждаемся что символы принимаются и ошибок нет

4. Переходим к реальному проекту

Go to the top of the page
 
+Quote Post
OlegALL
сообщение Jul 16 2015, 09:53
Сообщение #5


Участник
*

Группа: Участник
Сообщений: 70
Регистрация: 30-11-10
Пользователь №: 61 275



Цитата(yuri_t @ Jul 16 2015, 12:32) *
Ну тогда подключаем "тяжёлую артиллерию"

0. Создаем отдельный тестовый проект

1. Програмируем UART на 9600 бит/сек (формат 8 бит 1 старт 1 стоп, без Automatic baud rate detection)
RX/ ТХ прерывания- запрещены) согласно MSP430F41x2_Code_Examples (TI file slac288e.zip)
При это рабоч частота проц и периферии должна быть >= 1 MHZ

2. Сначала проверяем передачу (не прием !)

Пример кода
Код
  const char str_to_send[] = "Str to send\r\n";
  
  int len = strlen((char*)str_to_send);
  int i;

  for(;;)
  {
      for(i=0; i < len; i++)
     {
         while(!(IFG2&UCA0TXIFG));
         UCA0TXBUF = str_to_send[i];
     }
     delay_1_sec();
}

Подключаем стандартный Windows/Linux serial port терминал и убеждаемся в правильности передачи.
Если передача не проходит или искажена, с помощью осц проверяем форму и длительность импульсов,
а так же формат(8 бит 1 стоп 1 старт)

3. Если передача работает, то проверяем прием

3.1 Разрешаем RX interrupts

3.2 Пример кода обработчика
Код
   // Globals
    volatile int rx_val = 0;
    volatile int rx_cnt_ok = 0;
    volatile int rx_cnt_bad = 0;
  

#pragma vector=USCIAB0RX_VECTOR
__interrupt void USCIA0RX_ISR (void)
{
      rx_val = UCA0RXBUF;
      if((UCA0STAT & (UCFE |  UCOE )) != 0)
      {
          rx_cnt_bad++;
      }
      else
      {
           rx_cnt_ok++;
           if(rx_cnt_ok >= 14)
               rx_val++;    // Just to make the compiler happy
      }  
}


3.3 Ставим breakpoints на rx_cnt_bad++ и на rx_val++;

3.4 С терминала посылаем строки типа "1234567890123456"
и убеждаемся что символы принимаются и ошибок нет

4. Переходим к реальному проекту



Спасибо. Передача-то работает нормально. По поводу кварца - у меня 32 кГц. Что, мало?
Go to the top of the page
 
+Quote Post
Abell
сообщение Jul 16 2015, 10:21
Сообщение #6


профессиональный дилетант
****

Группа: Участник
Сообщений: 866
Регистрация: 16-03-06
Из: Шебекино - Лысьва - Тюмень
Пользователь №: 15 292



Цитата(OlegALL @ Jul 16 2015, 12:53) *
По поводу кварца - у меня 32 кГц. Что, мало?

32768 Гц ?
Цитата
UCA0BR0 = 0x03; // 32k/9600 - 3.41

Цитата
а MCLK не от часового кварца пилит? может банально не успевает? - Nikolay801_

Но - раньше все работало? Что изменилось? Кто предает эти байты, которые не принимаются?


--------------------
Скоро дело сказывается, да не скоро сказка делается, или тише будешь - дальше уедешь...

Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- OlegALL   UART не принимает больше одного байта. Контроллер MSP430F4152   Jul 14 2015, 09:45
- - mcheb   Сначала надо установить сброс УАРТа потом его вклю...   Jul 14 2015, 11:35
- - OlegALL   Что за сброс?   Jul 14 2015, 11:53
|- - mcheb   Цитата(OlegALL @ Jul 14 2015, 15:53) Что ...   Jul 14 2015, 13:20
|- - OlegALL   Цитата(mcheb @ Jul 14 2015, 17:20) КодUCA...   Jul 15 2015, 06:06
- - yuri_t   Заработал ли UART ?   Jul 16 2015, 04:44
|- - OlegALL   Цитата(Abell @ Jul 16 2015, 14:21) 32768 ...   Jul 16 2015, 10:48
|- - Abell   Цитата(OlegALL @ Jul 16 2015, 13:48) Да 3...   Jul 16 2015, 10:58
- - agregat   Скорее всего процессор был частично испорчен в про...   Jul 16 2015, 11:40
|- - OlegALL   Цитата(agregat @ Jul 16 2015, 15:40) Скор...   Jul 16 2015, 12:06
|- - Abell   Цитата(OlegALL @ Jul 16 2015, 15:06) Тако...   Jul 16 2015, 12:42
|- - agregat   Цитата(OlegALL @ Jul 16 2015, 15:06) Тако...   Jul 17 2015, 10:51
- - Obam   Если настройки USCI соответствуют приведённым в ht...   Jul 16 2015, 13:29
|- - OlegALL   Цитата(Obam @ Jul 16 2015, 17:29) Если на...   Jul 17 2015, 07:43
|- - Abell   Цитата(OlegALL @ Jul 17 2015, 10:43) Скор...   Jul 17 2015, 08:05
|- - OlegALL   Цитата(Abell @ Jul 17 2015, 12:05) На сто...   Jul 17 2015, 09:46
- - Obam   При настройке УАПП, мне в своё время, очень понрав...   Jul 17 2015, 09:59
- - Abell   И что не получилось, какие симптомы, можно подробн...   Jul 17 2015, 10:06
- - OlegALL   Всё работает, неправильно сделал инициализацию. Сп...   Jul 27 2015, 06:01


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

 


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


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