|
Проблема с UART, выводит несуразицу |
|
|
|
Jul 13 2011, 05:34
|
Знающий
   
Группа: Участник
Сообщений: 634
Регистрация: 27-10-10
Пользователь №: 60 464

|
Вот код CODE #include "msp430x471x7.h"
void main(void) { volatile unsigned int i; P5DIR |= BIT7; WDTCTL = WDTPW+WDTHOLD; // Stop WDT FLL_CTL0 |= XCAP14PF; // Configure load caps
do { IFG1 &= ~OFIFG; // Clear OSCFault flag for (i = 0x47FF; i > 0; i--); // Time for flag to set } while ((IFG1 & OFIFG)); // OSCFault flag still set?
P1SEL |= BIT6+BIT7; // P2.4,5 = USCI_A0 RXD/TXD UCA1CTL1 |= UCSSEL_1; // CLK = ACLK UCA1BR0 = 0x03; // 32k/9600 - 3.41 UCA1BR1 = 0x00; // UCA1MCTL = 0x06; // Modulation UCA1CTL1 &= ~UCSWRST; // **Initialize USCI state machine** // IE2 |= UCA1RXIE; // Enable USCI_A0 RX interrupt char c = 'A'; // _BIS_SR(LPM3_bits + GIE); // Enter LPM3, interrupts enabled while(1) { while(!(IFG2&UCA1TXIFG)); UCA1TXBUF = c; P5OUT ^= BIT7; for(i=2500;i>0;i--); } }
Пытаюсь просто выводить в терминал символ 'A' и зажигать светодиод. Светодиод горит, на терминал выводится сами видите что (см. приложенное фото). В чём может быть дело? Ещё когда пробую проект "эхо"(посылаем символ с клавиатуры компьютера - MSP430 принимает его и кидает в компорт компьютера), то он работает со сбоями (сначала всё хорошо, потом символы не передаются, потом передаётся чепуха...) Нужна помощь, всю голову сломал((
Эскизы прикрепленных изображений
|
|
|
|
|
 |
Ответов
|
Jul 14 2011, 05:40
|
Знающий
   
Группа: Участник
Сообщений: 634
Регистрация: 27-10-10
Пользователь №: 60 464

|
Цитата(rezident @ Jul 13 2011, 16:23)  Модуль тактирования проинициализируйте полностью! У меня MSP430F47197 подклюен часовой кварц(32768) и кварцевый резонатор(16 мегагерц). Если я правильно понял, то можно тактировать USCI модуль от разных источников: DCO, SMCLK, ACLK. Я предпочёл ACLK (см. код выше). Я делаю так CODE FLL_CTL0 |= XCAP0PF; // Set load capacitance FLL_CTL1 &= ~XT2OFF; // Turn on XT2 FLL_CTL1 = SELS; // Select SMCLK source as XT2CLK FLL_CTL2 |= XT2S_2; По-моему у серии MSP430F47XX несколько сложнее, чем у других, система тактирования (так как есть FLL). Кто знает поправьте если что-то не так.
Сообщение отредактировал Zelepuk - Jul 14 2011, 05:57
|
|
|
|
|
Jul 14 2011, 15:51
|
Гуру
     
Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882

|
Цитата(Zelepuk @ Jul 14 2011, 10:40)  Кто знает поправьте если что-то не так. Я же вам сказал полностью нужно проинициализировать! Т.е. прописать явными значениями все регистры модуля тактирования, а не накладывать маски на дефолтные (после POR) состояния. То же самое касается в отношении регистров USCI. Еще возникает вопрос зачем использовать 32768 для UART? Да еще и при неверном значении регистра модуляции, на что вам MrYuran указал. Подстройте DCO по часовому кварцу к какой-либо типизированной частоте, которая нацело делиться для выбранной скорости UART. Например, 1,152МГц (9600*120=115200*10) или 1,8432МГц (9600*192=115200*16). И потом используйте DCO как источник SMCLK, а тот в свою очередь для тактирования USCI. Либо подключите кварц на XT2 с тем же критерием выбора частоты (нацело делится для стандартного ряда скоростей UART).
|
|
|
|
|
Jul 15 2011, 14:17
|
Знающий
   
Группа: Участник
Сообщений: 634
Регистрация: 27-10-10
Пользователь №: 60 464

|
Цитата(rezident @ Jul 14 2011, 19:51)  Еще возникает вопрос зачем использовать 32768 для UART? Да еще и при неверном значении регистра модуляции, на что вам MrYuran указал. Подстройте DCO по часовому кварцу к какой-либо типизированной частоте, которая нацело делиться для выбранной скорости UART. Например, 1,152МГц (9600*120=115200*10) или 1,8432МГц (9600*192=115200*16). И потом используйте DCO как источник SMCLK, а тот в свою очередь для тактирования USCI. Либо подключите кварц на XT2 с тем же критерием выбора частоты (нацело делится для стандартного ряда скоростей UART). Я подключаю кварц на XT2 (16000кГц) и делю его частоту на скорость UART(115200) получается 138 целых, а дробную часть просто не учитываю (именно так делают TI в своих примерах). Цитата(rezident @ Jul 14 2011, 19:51)  Я же вам сказал полностью нужно проинициализировать! Т.е. прописать явными значениями все регистры модуля тактирования, а не накладывать маски на дефолтные (после POR) состояния. То же самое касается в отношении регистров USCI. Вы имеете ввиду, что нужно проинициализировать все регистры (см. приложенный рисунок) и каждый бит определить требуемым значением (если даже оно и не особо надо)??? Просто у меня есть большая апликуха от TI и там такой подход не практикуется. Цитата(rezident @ Jul 14 2011, 22:50)  DCO нужен всегда! По крайней мере для тактирования MCLK нужен. MCLK: основное тактирование. Модуль MCLK программно выбирается как LFXT1CLK, XT2CLK (если доступен) или DCOCLK. MCLK делится на 1, 2, 4 или 8. MCLK используется ЦПУ и системой. Это прочитано из русского руководства. Получается, если есть два кварца на плате, можно вообще без DCO обойтись.
Сообщение отредактировал Zelepuk - Jul 15 2011, 14:26
|
|
|
|
Сообщений в этой теме
Zelepuk Проблема с UART Jul 13 2011, 05:34  MrYuran Цитата(Zelepuk @ Jul 14 2011, 09:40) Кто ... Jul 14 2011, 07:40   Zelepuk Цитата(rezident @ Jul 14 2011, 19:51) Я ж... Jul 14 2011, 17:12    rezident Цитата(Zelepuk @ Jul 14 2011, 22:12) нуже... Jul 14 2011, 18:50    rezident Цитата(Zelepuk @ Jul 15 2011, 19:10) Я по... Jul 15 2011, 14:20    zltigo QUOTE (Zelepuk @ Jul 15 2011, 16:17) полу... Jul 15 2011, 17:34 Zelepuk Цитата(rezident @ Jul 14 2011, 19:51) Я ж... Jul 16 2011, 12:22 Zelepuk Теперь пробую инициализировать явно все регистры м... Jul 16 2011, 13:36 rezident Есть несколько вариантов организации тактирования ... Jul 17 2011, 00:26 Zelepuk Цитата(rezident @ Jul 17 2011, 04:26) Ест... Jul 17 2011, 19:00  rezident Цитата(Zelepuk @ Jul 18 2011, 00:00) А мо... Jul 17 2011, 21:16 Zelepuk Цитата(rezident @ Jul 18 2011, 01:16) А к... Jul 18 2011, 07:27 rezident Блин! В этой строке ошибка. Я забыл проинверти... Jul 18 2011, 10:05 Zelepuk Да, теперь светодиод мигает с нужным интервалом...... Jul 18 2011, 14:47 rezident Цитата(Zelepuk @ Jul 18 2011, 19:47) проб... Jul 18 2011, 19:09 Zelepuk Да, простите, в основном цикле вообще не трогаю та... Jul 18 2011, 19:56 rezident Ну вот, так сразу видно где у вас ошибки. Готовнос... Jul 18 2011, 20:03 Zelepuk Вот. исправил код. Светодиод горит всё время. В по... Jul 19 2011, 06:25 rezident Как вы определяете, что ничего не выводится? Осцил... Jul 19 2011, 22:54 Zelepuk rezident
Попробовал последний вариант вашего кода ... Jul 20 2011, 11:07 rezident Я так и не понял, осциллограф у вас есть? Если ест... Jul 20 2011, 20:14 Zelepuk Пока осциллографа под рукой нет (завтра планирую п... Jul 21 2011, 14:25 rezident Цитата(Zelepuk @ Jul 21 2011, 19:25) И ещ... Jul 21 2011, 15:20  Zelepuk Цитата(rezident @ Jul 21 2011, 19:20) Я п... Jul 21 2011, 16:54  Zelepuk Цитата(rezident @ Jul 21 2011, 19:20) А л... Jul 23 2011, 15:20 Zelepuk Вот что получаю в окне терминала (см. фото). В тер... Jul 24 2011, 06:56 Zelepuk Что примечательно, заменив преобразователь уровней... Jul 25 2011, 08:49 rezident Эх-ма. Основная проблема большинства начинающих в... Jul 25 2011, 18:54 Zelepuk Схемотехника используется из slaa409 (апликейшн сч... Jul 25 2011, 19:08 Dog Pawlowa Цитата(Zelepuk @ Jul 25 2011, 22:08) Код,... Jul 26 2011, 02:33  Zelepuk Цитата(Dog Pawlowa @ Jul 26 2011, 06:33) ... Jul 26 2011, 08:25   Dog Pawlowa Цитата(Zelepuk @ Jul 26 2011, 11:25) Да, ... Jul 26 2011, 09:28  rezident Цитата(Dog Pawlowa @ Jul 26 2011, 07:33) ... Jul 26 2011, 10:15 rezident "Дьявол кроется в мелочах". Не ссылайт... Jul 25 2011, 20:42 Zelepuk Цитата(Dog Pawlowa @ Jul 26 2011, 13:28) ... Jul 26 2011, 12:52 Dog Pawlowa Цитата(Zelepuk @ Jul 26 2011, 15:52) Цель... Jul 26 2011, 20:31 Zelepuk Теперь можно и putchar писать, теперь видно что св... Jul 27 2011, 11:32 Zelepuk Всем спасибо! Тема закрыта! Jul 28 2011, 13:50
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|