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