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

 
 
> MSP430F449 UART работает только на 19200
ArtemTom
сообщение Jun 21 2010, 06:58
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 58
Регистрация: 22-06-09
Пользователь №: 50 523



Чип MSP430F449IPZ, кварцевый резонатор PK-206 32.768MHz.

Комп <-RS232-> MSP430F449 <-> Внешнее устройство
С компа передаются данные на внешнее устройство через плату с MSP, внешнее устройство отправляет по запросу данные назад на ПК.
В программе начинаю так и все работает:
Код
#include <msp430x44x.h>

#define P1ON 0x90
#define P2ON 0x60
#define DTR1 0x02
#define DTR2 0x01

void main(void)
{
  WDTCTL = WDTPW + WDTHOLD;

// FLL module
  FLL_CTL0 |= XCAP0PF;                
  FLL_CTL1= XT2OFF;                      //SMCLK - on, XT2 - off, MCLK - DC0CLK, SMCLK -DCOCLK, ACLK devider 1
  FLL_CTL0 = DCOPLUS;
  SCFQCTL = 128-1;                      
  SCFI0 = FLLD_2 +FN_2;                // DCO 1.4 - 12 MHz (FLLD_2 +FN_2)
// FLL module

// Порты на комп
  UCTL0=SWRST;
  UTCTL0 = SSEL1;          // UCLK = SMCLK
  UBR10 = 0x01;              // 8MHz 19200
  UBR00 = 0xA0;             // 8MHz 19200
  UMCTL0 = 0xBB;           // 8MHz 19200
  UCTL0 =  0x10;             // 8n1
  P2SEL |= 0x30;             // P2.4,5 = USART0 TXD/RXD
  P2DIR |= 0x10;             // P2.4 output
  ME1 |= UTXE0 + URXE0;   // вкл USART0 TXD/RXD
  UCTL0 &= ~SWRST;
  IE1 |= URXIE0;            //  вкл USART0 RX interrupt

//Внешнее устройство
  UTCTL1 = SSEL1;           // UCLK = SMCLK
  UBR11 = 0x01;             // 8MHz 19200
  UBR01 = 0xA0;             // 8MHz 19200
  UMCTL1 = 0xBB;            // 8MHz 19200
  UCTL1 =  0x10;            // 8n1
  P4SEL = 0x03;             // P4.0,1 = USART1 TXD/RXD
  P4DIR = 0xFD;             // P4.1 output
  ME2 |= UTXE1 + URXE1;     //  USART1 TXD/RXD
  IE2 &= ~0x30;             // откл RxTx interrupts

  P4OUT = 0x50;             // откл RX and TX

  BTCTL = BT_ADLY_125;      // BT_fLCD_DIV128
  SVSCTL = 0x70;            // SVS 2.65 volt

  P1IE = DTR1+DTR2;       // вкл INT at port 1 and port 2
  IE2 |= BTIE;              // вкл basic timer
  WDTCTL = WDT_ARST_1000;   // Start WDT (1sec)
  IE1 |= 0x01;              // вкл WDT interrupt;

  _EINT();
}

#pragma vector=UART0RX_VECTOR
__interrupt void usart0_rx (void)
{
    IFG1 &= ~URXIFG0;    
    while ((IFG2 & UTXIFG1) == 0);
    TXBUF1 = RXBUF0;
}

#pragma vector=UART1RX_VECTOR
__interrupt void usart1_rx (void)
{
    IFG2 &= ~URXIFG1;    
    while ((IFG1 & UTXIFG0) == 0);
    TXBUF0 = RXBUF1;
}

#pragma vector=BASICTIMER_VECTOR
__interrupt void RTC(void)
{
  IFG2 &= ~BTIFG;
  // Reset WotchDog Timer
  WDTCTL = WDT_ARST_1000;
}


Пытаюсь менять строки:
Код
UBR10 = 0x01;              // 8MHz 19200
UBR00 = 0xA0;             // 8MHz 19200
UMCTL0 = 0xBB;           // 8MHz 19200


На другую скорость, при этом передаются иероглифы.
Пробовал но нескольким файлам расчетов этих параметров.
Наверно затупил где-то?

Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
rezident
сообщение Jun 21 2010, 11:15
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882



ArtemTom, у вас тактовая частота SMCLK выбрана 12МГц, вы от нее же и тактируете UART, так почему же расчетная частота для тактирования у вас 8МГц? Это раз.
Во-вторых, изучите внимательно раздел, где описаны источники прерываний USART и условия при которых сбрасываются флаги прерываний. Никакие опросы флагов в прерывании не требуются. Переход по вектору прерывания уже является фактом наличия установленного флага прерывания. Для передатчика этот же факт перехода по вектору прерывания является причиной для автоматического сброса флага данного прерывания. Программно сбрасывать флаг не нужно. Так можно потерять следующее прерывание. Для сброса же флага прерывания приемника UASRT есть два условия: чтение буфера приемника, либо программный сброс флага.
Go to the top of the page
 
+Quote Post
ArtemTom
сообщение Jun 21 2010, 12:35
Сообщение #3


Участник
*

Группа: Участник
Сообщений: 58
Регистрация: 22-06-09
Пользователь №: 50 523



Цитата(rezident @ Jun 21 2010, 15:15) *
у вас тактовая частота SMCLK выбрана 12МГц, вы от нее же и тактируете UART, так почему же расчетная частота для тактирования у вас 8МГц? Это раз.
Я думал что 8MHz указал.
В примерах правда такой вариант есть:
Код
FLL_CTL0 |= DCOPLUS + XCAP18PF;                // DCO+ set, freq = xtal x D x N+1
SCFI0 |= FN_4;                                // x2 DCO freq, 8MHz nominal DCO
SCFQCTL = 121;                              // (121+1) x 32768 x 2 = 7.99 MHz
Можете ткнуть пальцем почему в моём случае 12 MHz, а то я видимо не разобрался?
Если можно, разъясните пожалуйста по подробней про UMCTL0, не разберусь с этой модуляцией, как её указывать?

Цитата
а вы случайно половинки регистров от разных УАРТов не перемешали?
Проверьте для успокоения. Похоже на то.
Тут я видимо тоже не понял. Как проверить?

Да, флаги я тоже зря наставил.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- ArtemTom   MSP430F449 UART работает только на 19200   Jun 21 2010, 06:58
- - MrYuran   Цитата(ArtemTom @ Jun 21 2010, 10:58) Про...   Jun 21 2010, 08:12
- - Xenia   Цитата(ArtemTom @ Jun 21 2010, 10:58) Нав...   Jun 21 2010, 08:55
- - ArtemTom   Кодwhile ((IFG2 & UTXIFG1) == 0...   Jun 21 2010, 09:54
|- - MrYuran   Цитата(ArtemTom @ Jun 21 2010, 13:54) Код...   Jun 21 2010, 10:14
|- - Xenia   Цитата(MrYuran @ Jun 21 2010, 14:14) Это ...   Jun 21 2010, 10:32
- - Сергей Борщ   Цитата(ArtemTom @ Jun 21 2010, 09:58) ква...   Jun 21 2010, 10:19
|- - ArtemTom   Цитата(Сергей Борщ @ Jun 21 2010, 14:19) ...   Jun 21 2010, 10:53
|- - MrYuran   Цитата(ArtemTom @ Jun 21 2010, 14:53) Про...   Jun 21 2010, 11:07
- - ArtemTom   Да вроде ничего не перемешивал на 19200 все же раб...   Jun 21 2010, 11:15
|- - MrYuran   Цитата(ArtemTom @ Jun 21 2010, 15:15) Да ...   Jun 21 2010, 11:24
|- - rezident   Цитата(ArtemTom @ Jun 21 2010, 18:35) Мож...   Jun 21 2010, 14:28
|- - MrYuran   Цитата(ArtemTom @ Jun 21 2010, 16:35) Тут...   Jun 21 2010, 15:18
- - ArtemTom   Спасибо за файл, встречал его уже в темах. Я разоб...   Jun 22 2010, 06:07
|- - rezident   Цитата(ArtemTom @ Jun 22 2010, 12:07) А к...   Jun 23 2010, 01:05
- - ArtemTom   rezident, большое спасибо, буду разбираться. Книга...   Jun 24 2010, 04:28
- - ArtemTom   Интересно а можно ли как-то в процессе программы и...   Jul 8 2010, 12:25
- - Dog Pawlowa   Цитата(ArtemTom @ Jul 8 2010, 15:25) Как-...   Jul 8 2010, 16:34


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

 


RSS Текстовая версия Сейчас: 22nd July 2025 - 21:26
Рейтинг@Mail.ru


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