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

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> 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
mcheb
сообщение Jul 14 2015, 11:35
Сообщение #2


Местный
***

Группа: Участник
Сообщений: 326
Регистрация: 30-05-06
Пользователь №: 17 602



Сначала надо установить сброс УАРТа потом его включить

Сообщение отредактировал mcheb - Jul 14 2015, 11:43
Go to the top of the page
 
+Quote Post
OlegALL
сообщение Jul 14 2015, 11:53
Сообщение #3


Участник
*

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



Что за сброс?
Go to the top of the page
 
+Quote Post
mcheb
сообщение Jul 14 2015, 13:20
Сообщение #4


Местный
***

Группа: Участник
Сообщений: 326
Регистрация: 30-05-06
Пользователь №: 17 602



Цитата(OlegALL @ Jul 14 2015, 15:53) *
Что за сброс?

Код
UCA0CTL1 &= ~UCSWRST;                     // **Initialize USCI state machine**
Go to the top of the page
 
+Quote Post
OlegALL
сообщение Jul 15 2015, 06:06
Сообщение #5


Участник
*

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



Цитата(mcheb @ Jul 14 2015, 17:20) *
Код
UCA0CTL1 &= ~UCSWRST;                     // **Initialize USCI state machine**




не помогло
Go to the top of the page
 
+Quote Post
yuri_t
сообщение Jul 16 2015, 04:44
Сообщение #6


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

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



Заработал ли UART ?
Go to the top of the page
 
+Quote Post
Abell
сообщение Jul 16 2015, 06:02
Сообщение #7


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

Группа: Участник
Сообщений: 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
Сообщение #8


Участник
*

Группа: Участник
Сообщений: 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
Сообщение #9


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

Группа: Свой
Сообщений: 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
Сообщение #10


Участник
*

Группа: Участник
Сообщений: 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
Сообщение #11


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

Группа: Участник
Сообщений: 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
сообщение Jul 16 2015, 10:48
Сообщение #12


Участник
*

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



Цитата(Abell @ Jul 16 2015, 14:21) *
32768 Гц ?


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



Да 32768. Общается с МК программа верхнего уровня. Раньше работало, но немного подглючивало, в целом работало в общем.
2 байта не принимаются от терминала PCOMM.
Go to the top of the page
 
+Quote Post
Abell
сообщение Jul 16 2015, 10:58
Сообщение #13


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

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



Цитата(OlegALL @ Jul 16 2015, 13:48) *
Да 32768.... Раньше работало, но немного подглючивало, в целом работало в общем.

Немного подглючивало - значит, не работало. Частота кварца крайне низкая laughing.gif


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

Go to the top of the page
 
+Quote Post
agregat
сообщение Jul 16 2015, 11:40
Сообщение #14


Знающий
****

Группа: Свой
Сообщений: 790
Регистрация: 6-02-14
Из: Омск
Пользователь №: 80 379



Скорее всего процессор был частично испорчен в процессе экспериментов и скорее всего надо просто заменить проц и приемопередатчик...

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


Участник
*

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



Цитата(agregat @ Jul 16 2015, 15:40) *
Скорее всего процессор был частично испорчен в процессе экспериментов и скорее всего надо просто заменить проц и приемопередатчик...


Такое может быть, что просто уарт испортился?
Go to the top of the page
 
+Quote Post

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

 


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


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