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

 
 
> Проблема с 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 20 2011, 20:14
Сообщение #2


Гуру
******

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



Я так и не понял, осциллограф у вас есть? Если есть, то посмотрите наличие и частоту сигналов SMCLK и ACLK. В примере который привожу ниже они выведены на P1.4 и P1.5 соответственно.
Очередной пример, использующий XT2=16МГц в качестве частоты тактирования UART. Посредством UART должны непрерывно (без задержек) выводиться строки
"0123456789"
Поведение светодиода: после инициализации он светится. Если передача идет, то он мерцает с частотой 2Гц. Если же передачи нет, то он гаснет. Поскольку я не знаю как именно у вас светодиод подключен (между плюсом питания и P5.7 или между P5.7 и общим?), то переопределите уж сами макросы LED_OFF и LED_ON так, чтобы они соответствовали правильной полярности управляющего сигнала.
CODE
#include <stdint.h>
#include <msp430x471x7.h>

#define FREQMCLK 2097152UL //MCLK
#define FREQSMCLK 16000000UL //SMCLK
#define FREQACLK 32768UL //ACLK
#define BAUDRATE 9600UL //baudrate
#define TICK_MS_ADDVAL 10U //инкремент таймера тиков [мс]
#define BLINK_TM_MS 250U //полупериод мерцания LED [мс]
#define LED_ON P5OUT&=~BIT7//включить LED
#define LED_OFF P5OUT|=BIT7 //выключить LED
#define LED_TOGGLE P5OUT^=BIT7 //переключить LED

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

volatile 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, flag;
uint32_t lTmp;
//Инициализация системы тактирования
FLL_CTL1 = 0; //D=2, MCLK=fDCOCLK/D, SMCLK=fDCOCLK/D, ACLK=LFXT/1, XT2=on
FLL_CTL2 = XT2S1; //для работы XT2=16МГц
FLL_CTL0 = XCAP11PF; //XT1=LF, DCO/D, XCAP=11пФ
while ((FLL_CTL0 & LFOF) != 0); //ждем готовности генератора 32768Гц
SCFI0 = FLLD_2; //D=2, fDCOCLK = 0.65-6.1Mhz
SCFQCTL = (32U-1U); //fDCOCLK=32768*(32)*2=2097152Гц, DCO=fDCOCLK/2
FLL_CTL0 |= DCOPLUS; //MCLK=DCO/1, SMCLK=DCO/1
do
{ IFG1 &= ~OFIFG;
} while ((IFG1&OFIFG) != 0); //ждем готовности всей системы тактирования
FLL_CTL1 |= SELS; //MCLK=fDCOCLK, SMCLK=XT2, ACLK=LFXT/1, XT2=on
//Инициализация 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*TICK_MS_ADDVAL/1000UL); //период около 10мс
TACCTL0 = CCIE; //разр. прерывание от CCR0
TACCTL1 = 0;
TACCTL2 = 0;
TACTL |= MC_1; //запустить таймер в режиме CountUP
//Инициализация LED
P5DIR |= BIT7;
P5SEL &= ~BIT7;
LED_ON;
//Настройка пинов чтобы посмотреть частоту SMCLK и ACLK
P1DIR |= BIT4 | BIT5;
P1SEL |= BIT4 | BIT5; //P1.4 = SMCLK, P1.5 = ACLK

idx=0;
flag=0;
tickStamp = tick_ms; //зафиксировать временную метку
__enable_interrupt(); //разрешим прерывания
for (;;)
{ if ((UC1IFG & UCA1TXIFG) != 0) //буфер передатчика готов?
{ UCA1TXBUF = uart_buf[idx]; //вывод текущего символа
flag=1; //установим флаг готовности UART
if (idx < (sizeof(uart_buf)-1))//увеличение индекса элемента буфера
idx += 1;
else
idx = 0;
}
if ((tick_ms - tickStamp) >= BLINK_TM_MS)//полупериод мерцания закончился?
{ tickStamp = tick_ms; //запомним новое значение метки времени
if (flag != 0) //проверка флага готовности UART
{ LED_TOGGLE; //включаем LED
flag = 0; //сбросим флаг готовности UART
}
else
LED_OFF; //выключаем LED
}
}
}

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

Если и этот пример у вас не будет работать, то я уже теряюсь в догадках о причинах такого поведения вашего устройства. sad.gif На всякий случай попробуйте вместо виндусового Гипертерминала использовать программу Br@y's Terminal.
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
- - rezident   Как вы определяете, что ничего не выводится? Осцил...   Jul 19 2011, 22:54
- - Zelepuk   rezident Попробовал последний вариант вашего кода ...   Jul 20 2011, 11:07
- - 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 Текстовая версия Сейчас: 19th June 2025 - 20:32
Рейтинг@Mail.ru


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