Перейти к содержанию
    

UART+System Clock

Такая ерудна творится, я недавно на MSP пересел...

 

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

 

Дело, видимо, в том что надо на него подать сигнал SMCLK, и как настроить уже вот этот сигнал, чтоб он шел от MCLK, да и сам MCLK надо ли перед этим как-то настраивать???

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Выбор частоты тактирование SMCLK настраивается при инициализации основного модуля тактирования (регистр BCSCTL2). Процедура инициализации модуля тактирования описана в User's Manual или см. перевод на gaw.ru. Там же и про настройку UART описано. Кстати, какой именно кристалл используете?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Выбор частоты тактирование SMCLK настраивается при инициализации основного модуля тактирования (регистр BCSCTL2). Процедура инициализации модуля тактирования описана в User's Manual или см. перевод на gaw.ru. Там же и про настройку UART описано. Кстати, какой именно кристалл используете?

 

MSP430F149

пока не получается...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Если быть конкретнее -

у меня 8 МГц кварц подключен на XIN:CLK,

надо установить битрейт 38400, что делать?....

 

:smile3046:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Если быть конкретнее -

у меня 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. Их можете сами оформить. Успехов!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...