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

 
 
> Проблема с UART, выводит несуразицу
Zelepuk
сообщение Jul 13 2011, 05:34
Сообщение #1


Знающий
****

Группа: Участник
Сообщений: 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 принимает его и кидает в компорт компьютера), то он работает со сбоями (сначала всё хорошо, потом символы не передаются, потом передаётся чепуха...)

Нужна помощь, всю голову сломал((
Эскизы прикрепленных изображений
Прикрепленное изображение
 
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
rezident
сообщение Jul 19 2011, 22:54
Сообщение #2


Гуру
******

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



Как вы определяете, что ничего не выводится? Осциллографом выход смотрели или в программе-терминале ничего не принимается? По свечению светодиода в данном случае вы ничего не поймете, т.к. темп вывода на скорости 9600 будет давать ему подсветку постоянно. В моем первоначальном примере вепеключение светодиода было синхронизирован по времени с таймаутом в 0,5с, что позволяло определить работоспособность. А у вас - нет.
Я нашел еще одну свою ошибку в инициализации FLL. Битом SCFQ_M модуляция выключается. И-за этого частота DCO может отличаться от расчетной. Попробуйте еще раз вот такой пример.
CODE
#include <msp430x471x7.h>
#include <stdint.h>

#define FREQMCLK 9830400UL //MCLK
#define FREQSMCLK 9830400UL //SMCLK
#define FREQACLK 32768UL //ACLK
#define BAUDRATE 9600UL //baudrate
#define TICK_MS_ADDVAL 100U //инкремент таймера тиков [мс]
#define BLINK_TIME_MS 500U //полупериод мерцания LED [мс]

int __low_level_init(void)
{ WDTCTL = WDTPW | WDTHOLD; //останов WDTimer
return 1;
}

uint16_t tick_ms; //счетчик миллисекунд
uint8_t uart_buf[]={'0','1','2','3','4','5','6','7','8','9','\n','\r'};//буфер UART

void main(void)
{ uint16_t tickStamp, idx;
uint32_t lTmp;
//Инициализация системы тактирования
FLL_CTL1 = XT2OFF; //D=2, MCLK=fDCOCLK/D, SMCLK=fDCOCLK/D, ACLK=LFXT/1, XT2=off
FLL_CTL2 = XT2S1; //для работы XT2=16МГц
FLL_CTL0 = XCAP11PF; //XT1=LF, DCO/D, XCAP=11пФ
while ((FLL_CTL0 & LFOF) != 0); //ждем готовности генератора 32768Гц
SCFI0 = FLLD_4 | FN_3; //D=4, fDCOCLK = 2.2-17Mhz
SCFQCTL = (75U-1U); //fDCOCLK=32768*(75)*4=9830400Гц, DCO=fDCOCLK/4
while ((FLL_CTL0 & DCOF) != 0); //ждем готовности FLL
FLL_CTL0 |= DCOPLUS; //MCLK=DCO/1, SMCLK=DCO/1
do
{ IFG1 &= ~OFIFG;
} while ((IFG1&OFIFG) != 0); //ждем готовности всей системы тактирования
//Инициализация UART
UCA1CTL1 |= UCSWRST; //Reset USCI
UCA1CTL0 = 0; //Parity=disable, 8bit, 1stop-bit
UCA1CTL1 = UCSSEL_2 | UCSWRST; //BRCLK=SMCLK
lTmp=FREQSMCLK/BAUDRATE;
UCA1BR1 = (uint8_t)(lTmp>>8UL); //
UCA1BR0 = (uint8_t)(lTmp); //BITCLK=BRCLK/(UCAxBR1*256+UCAxBR0)
UCA1MCTL = 0; //регистр модуляции
UCA1STAT = 0; //сброс всех битов ощибок
UCA1IRTCTL = 0; //IRDA disable
UCA1CTL1 &= ~UCSWRST;
P1SEL |= BIT6 | BIT7; //P1.6 = USCI TXD, P1.7 = USCI RXD
UC1IE &= ~(UCA1TXIE | UCA1RXIE); //запретим прерывания USCI_A1
UC1IFG &= ~UCA1RXIFG; //сбросим флаг готовности буфера приемника
UC1IFG |= UCA1TXIFG; //установим флаг готовность буфера передатчика
//Иницализация TimerA
TACTL = TASSEL_1 | TACLR; //TACLK=ACLK/1
TACCR0=(uint16_t)(FREQACLK/10UL); //период около 100мс
TACCTL0 = CCIE; //разр. прерывание от CCR0
TACCTL1 = 0;
TACCTL2 = 0;
TACTL |= MC_1; //запустить таймер в режиме CountUP
//Инициализация LED
P5DIR |= BIT7;
P5SEL &= ~BIT7;
P5OUT &= ~BIT7;
idx=0;
tickStamp = tick_ms; //зафиксировать временную метку
__enable_interrupt(); //разрешим прерывания
for (;;)
{ if ((tick_ms - tickStamp) >= BLINK_TIME_MS)//полупериод мерцания закончился?
{ tickStamp = tick_ms; //запомним новое значение метки времени
if ((UC1IFG & UCA1TXIFG) != 0)//буфер передатчика готов?
{ UCA1TXBUF = uart_buf[idx]; //вывод текущего символа
P5OUT |= BIT7; //включаем LED
if (idx < (sizeof(uart_buf)-1))//увеличение индекса
idx += 1;
else
idx = 0;
}
else
P5OUT &= ~BIT7; //выключаем LED
}
}
}

#pragma vector=TIMERA0_VECTOR
#pragma type_attribute=__interrupt
void TimerA0_ISR (void)
{
tick_ms += TICK_MS_ADDVAL; //инкремент счтечика тиков [мс]
}


Кстати, насчет ESR часового кварца. В errata присутствует описание бага XOSC8, про который я упоминал выше.
Цитата
XOSC8 LFXT1 Module
Function ACLK failure when crystal ESR is below 40 kΩ
Description When ACLK is sourced by a low-frequency crystal with an ESR below 40 kΩ, the duty
cycle of ACLK may fall below the specification; the OFIFG may become set or, in some
instances, ACLK may stop completely.
Workaround See the application report XOSC8 Guidance (SLAA423) for information regarding
working with this erratum.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Zelepuk   Проблема с UART   Jul 13 2011, 05:34
- - rezident   Модуль тактирования проинициализируйте полностью...   Jul 13 2011, 12:23
|- - Zelepuk   Цитата(rezident @ Jul 13 2011, 16:23) Мод...   Jul 14 2011, 05:40
|- - MrYuran   Цитата(Zelepuk @ Jul 14 2011, 09:40) Кто ...   Jul 14 2011, 07:40
|- - rezident   Цитата(Zelepuk @ Jul 14 2011, 10:40) Кто ...   Jul 14 2011, 15:51
|- - Zelepuk   Цитата(rezident @ Jul 14 2011, 19:51) Я ж...   Jul 14 2011, 17:12
||- - rezident   Цитата(Zelepuk @ Jul 14 2011, 22:12) нуже...   Jul 14 2011, 18:50
|- - Zelepuk   Цитата(rezident @ Jul 14 2011, 19:51) Еще...   Jul 15 2011, 14:17
|- - 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
- - 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


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

 


RSS Текстовая версия Сейчас: 20th August 2025 - 08:17
Рейтинг@Mail.ru


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