Портал для радиолюбителей и разработчиков электроники · с 2003 годаРеклама на сайте
Найти компонент, схему или даташит

Даташиты, справочник отечественных приборов, схемы с разбором и живой форум

AVR Раздел по микроконтроллерам компании Atmel - AVR / ATtiny / ATmega / ATMega128 / ATxmega, вопросы по программированию в AVR studio и все, относящееся к AVR...

 
Опции темы

Проблема с UART в Xmega

Непрочитано 17.07.2015, 23:18  
Nosaer
Прохожий
 
Аватар для Nosaer
 
Регистрация: 14.07.2015
Сообщений: 1
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
Nosaer на пути к лучшему
По умолчанию Проблема с UART в Xmega

Здравствуйте)
Набросал не большой код:
UART настраивал на скорость в 9600 , 8 бит данных, 1 стоп бит и без бита парритета. Плюс отключен параметр удвоения скорости.

Код:
#define F_CPU 12000000UL
#define __DELAY_BACKWARD_COMPATIBLE__

#include ‹stdlib.h›
#include ‹avr/io.h›
#include ‹stdio.h›
#include ‹stddef.h›
#include ‹avr/interrupt.h›
#include ‹avr/pgmspace.h›

//Переменные
volatile char buf[26]={0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xF  F,0xFF,0xFF};
volatile char dat[26]={0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x5  5,0x55,0x55};
unsigned char i,cnt,y;

// Функция включения USART_D1, cкорость 9600( а надо 250000) bod
void StartUsartD1()
{		
	USARTD1_BAUDCTRLB = 0;
    USARTD1_BAUDCTRLA = 0x4D; 
    USARTD1_CTRLA = 0;									//Отключение прерываний
    USARTD1_CTRLC = USART_CHSIZE_8BIT_gc;				//8 data bits, no parity and 1 stop bit
    USARTD1_CTRLB = USART_TXEN_bm | USART_RXEN_bm;		//Включение приема передатчика
	PORTD_OUTSET = PIN7_bm; 							//Настраиваем выводы PC6 и PC7
	PORTD_DIRSET = PIN7_bm; 
	PORTD_OUTCLR = PIN6_bm;
	PORTD_DIRCLR = PIN6_bm;
}
	
// Функция получения данных USART_D1.
char getChar1(void)
{
	char buffer1;	
	while (1)
		{
		while( !(USARTD1_STATUS & USART_RXCIF_bm) );
		buffer1=USARTD1_DATA;
		//if ((USARTD1_STATUS & (USART_BUFOVF_bm))==0)	
		if ((USARTD1_STATUS & (USART_FERR_bm | USART_PERR_bm | USART_BUFOVF_bm))==0)
        return buffer1;
		};	
}

// Фунуция передачи данных USART_D1
void sendChar1(char d1)
{
	while( !(USARTD1_STATUS & USART_DREIF_bm) );
	USARTD1_DATA = d1;
}
 

// Функция инициализации 
int main(void)
{
	// Настройка работы от внешнего кварца в 12МГц
	cli();			
	OSC.XOSCCTRL = 0x8B;				
								
	OSC.CTRL = 0x08;										
	while((OSC.STATUS & 0x08) == 0);		
	
	//PORTD.OUTSET =0x04;	
	PORTD.DIR = 0x04;												
	
	//Активация USART
	StartUsartD1();
			
while (1)
      {
        cnt = getChar1();
        if (cnt ==0x55) {
						for (i=0;i‹12;i++) sendChar1(buf[i]); 
                         
                       }   
        else           {                             
                          for (i=0;i‹12;i++) sendChar1(dat[i]); }  
      };
}
Скомпилировал, прошил, запускаю терминал
По моей задумке если я отправляю 0x55(символ юникода получается U) то мне шлется массив с 0xFF, если что нить другое то 0x55.
В итоге две проблемы:
1) ответ идет в виде массива 0x0E, в теории говорит что скорость настроена не правильно. Но вроде перепроверил все.


BSEL = 12000000/(2^0 * 16 * 9600) = 78.125 -1 = 77 (0x4D)
2) Как только прошил схему, без отправки контроллеру чего либо, он мне уже присылает в ответ 2 массива.

Помогите пожалуйста разобраться...
Либо буду рад готовым рабочим примерам)
Реклама:
Nosaer вне форума  
 
Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
USB client + 3 UART and SPI на WindowsMobile LionRJ Микроконтроллеры, АЦП, память и т.д 8 08.04.2011 11:05
Инверсия uart в at89c52 sanek231081 Микроконтроллеры, АЦП, память и т.д 2 04.01.2011 11:22
Проблема с FT232BM (FT232BL) anbsoft Микроконтроллеры, АЦП, память и т.д 27 07.08.2010 09:33
Нужно 2 UART на мк , как быть? Zemlyanov Микроконтроллеры, АЦП, память и т.д 77 04.05.2010 19:26
проблема с UART yaki_5 Микроконтроллеры, АЦП, память и т.д 4 08.10.2008 18:10


Часовой пояс GMT +4, время: 02:19.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.