Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: UART+System Clock
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > MSP430
Olegovich
Такая ерудна творится, я недавно на MSP пересел...

Надо настроить UART, сам UART вроде настраиваю нормально, всё по методе, а частота получается раз в 10 меньше, чем надо.

Дело, видимо, в том что надо на него подать сигнал SMCLK, и как настроить уже вот этот сигнал, чтоб он шел от MCLK, да и сам MCLK надо ли перед этим как-то настраивать???
rezident
Выбор частоты тактирование SMCLK настраивается при инициализации основного модуля тактирования (регистр BCSCTL2). Процедура инициализации модуля тактирования описана в User's Manual или см. перевод на gaw.ru. Там же и про настройку UART описано. Кстати, какой именно кристалл используете?
Olegovich
Цитата(rezident @ Apr 20 2005, 14:09)
Выбор частоты тактирование SMCLK настраивается при инициализации основного модуля тактирования (регистр BCSCTL2). Процедура инициализации модуля тактирования описана в User's Manual или см. перевод на gaw.ru. Там же и про настройку UART описано. Кстати, какой именно кристалл используете?
*


MSP430F149
пока не получается...
VAI
Гляньте здесь. Я прикладывал свои исходники для UART в файле 1.rar
Olegovich
Если быть конкретнее -
у меня 8 МГц кварц подключен на XIN:CLK,
надо установить битрейт 38400, что делать?....

smile3046.gif
rezident
Цитата(Olegovich @ Apr 20 2005, 18:15)
Если быть конкретнее -
у меня 8 МГц кварц подключен на XIN:CLK,
надо установить битрейт 38400, что делать?....
*


Если хочется получить точные частоты для UART, то рекомендую использовать кварц 7372,8кГц вместо 8МГц.

Значится инициализация модуля тактирования будет такая.
Код
#include <msp430x14x.h>

#pragma vector=NMI_VECTOR
__interrupt void OSC_Fault(void)
{
// =======   Инициализация источников тактирования ACLK, MCLK, SMCLK ====
 BCSCTL2 = SELM_0 + DIVM_0 + DIVS_0;             // сначала перейдем на внутреннее тактирование
 BCSCTL1 = DIVA_0+RSEL2+RSEL1+RSEL0;             // ACLK=LFXT/1=32768Гц
 DCOCTL = DCO1 + DCO2;                           // DCO около 4МГц
 while ((IFG1 & OFIFG) != 0) IFG1 &=~OFIFG;      // Ожидаем пока стабилизируются колебания кварца
 BCSCTL2 = SELM_2 + DIVM_0 + SELS + DIVS_0;      // MCLK=XT2/1=7.3728МГц, SMCLK=XT2/1=7.3728МГц
 IE1 |= OFIE;                                    // разрешить прерывание от детектора ошибки резонатора
}

void main(void)
{
 WDTCTL = WDTPW + WDTHOLD;                       // Останов сторожевого таймера
 IE1 |= OFIE + WDTIE;                            // разрешить прерывание от детектора ошибки резонатора
 IFG1 |= OFIFG;                                  // установка бита прерывания ошибки осциллятора, для вызова процедуры
//***********
// тут будет ваш код main
//***********
}


Процедура инициализации UART такая:
для кварца 7372,8кГц;
baud 38400;
четность используется;
проверка на четность;
8-ми битные данные;
Код
void _init_uart0(void)
{
U0CTL = SWRST;                                   // уст.бит прогр. сброса модуля UART0
U0CTL |= PENA+PEV+CHAR;                          // уст.режим UART-четн.,1стоп-бит, 8бит данные  
U0TCTL = SSEL0 + SSEL1;                          // U0CLK = SMCLK
U0BR1 = 0x00;                                    // уст.старший байт предделителя BITCLK
U0BR0 = 0xC0;                                    // уст.младший байт предделителя BITCLK
U0MCTL = 0x00;                                   // установка регистра модуляции
// для кварца 8МГц
//  U0BR1 = 0x00;                                 // уст.старший байт предделителя BITCLK
//  U0BR0 = 0xD0;                                 // уст.младший байт предделителя BITCLK
//  U0MCTL = 0x92;                                // установка регистра модуляции
ME1 |= UTXE0 + URXE0;                            // разрешаем работу модуля UART0
U0RCTL = URXEIE;                                 // разр.прерыв. для ош. прин.символов
U0CTL &=~ SWRST;                                 // очистим бит программного сброса
IE1 |= URXIE0 + UTXIE0;                          // разрешить прерывания для UART0
//********************
//  здесь можно добавать инициализацию Port3
//  точнее тех пинов которые относятся к UTXD и URXD
//*********************
}


Премопередача будет вестись по прерываниями от модуля UART. Их можете сами оформить. Успехов!
VAI
Я в сообщении выше ссылку забыл http://forum.electronix.ru/index.php?showtopic=3794&hl=#
Olegovich
thanks!
Разобрался.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.