|
Проблема с UART, выводит несуразицу |
|
|
|
Jul 13 2011, 05:34
|
Знающий
   
Группа: Участник
Сообщений: 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 принимает его и кидает в компорт компьютера), то он работает со сбоями (сначала всё хорошо, потом символы не передаются, потом передаётся чепуха...) Нужна помощь, всю голову сломал((
Эскизы прикрепленных изображений
|
|
|
|
|
 |
Ответов
|
Jul 19 2011, 06:25
|
Знающий
   
Группа: Участник
Сообщений: 634
Регистрация: 27-10-10
Пользователь №: 60 464

|
Вот. исправил код. Светодиод горит всё время. В порт не выводится ничего( CODE #include <msp430x471x7.h> #include <stdint.h>
#define FREQMCLK 9830400UL //MCLK #define FREQSMCLK 9830400UL //SMCLK //#define FREQSMCLK 16000000UL //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_CTL1 = 0; //D=2, MCLK=fDCOCLK/D, SMCLK=fDCOCLK/D, ACLK=LFXT/1 FLL_CTL2 = XT2S1; //для работы XT2=16МГц FLL_CTL0 = XCAP8PF; //XT1=LF, DCO/D, XCAP=8пФ while ((FLL_CTL0 & LFOF) != 0); //ждем готовности генератора 32768Гц // while ((FLL_CTL0 & XT2OF) != 0); //ждем готовности генератора 16МГц SCFI0 = FLLD_4 | FN_2; //D=4, fDCOCLK = 1.4-12MHz SCFQCTL = SCFQ_M + (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 // FLL_CTL1 |= SELS; //MCLK=DCO, SMCLK=XT2, ACLK=LFXT/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; //установим флаг готовность буфера передатчика //Инициализация LED P5DIR |= BIT7; P5SEL &= ~BIT7; P5OUT &= ~BIT7; idx=0; tickStamp = tick_ms; //зафиксировать временную метку __enable_interrupt(); //разрешим прерывания for (;;) { if ((UC1IFG & UCA1TXIFG) != 0) //буфер передатчика готов? { UCA1TXBUF='A'; //вывод символа 'A' P5OUT ^= BIT7; } } }
думаю косяк в железе(может в в разводке). Но ведь первоначальный вариант (первый пост) выводил хоть что-то в порт (чупуху но всё же). Бывает ли такое?
|
|
|
|
Сообщений в этой теме
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 rezident Как вы определяете, что ничего не выводится? Осцил... Jul 19 2011, 22:54 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
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|