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

 
 
> HELP! MEGA16 UART, как правильно инициализировать UART?
pimen
сообщение Jul 9 2009, 18:04
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 67
Регистрация: 30-11-07
Пользователь №: 32 846



Столкнулся с проблемой - не получается инициализировать UART в МЕГЕ16.
Причина: не получается запрограммировать регистр UCSRC, который отвечает за кол-во бит в пакете. Как известно, данный регистр по адресу (0х20(0х40)) совпадает с регистром UBRRH, а выбор того или иного осуществляется записью в бит URSEL определенного значения. Не получается запрограммировать ни тот, ни другой. Требуется РАБОТАЮЩИЙ кусок кода на С для инициализации UART.

Код
C Code Example
#define FOSC 1843200// Clock Speed
#define BAUD 9600
#define MYUBRR FOSC/16/BAUD-1
void main( void )
{
:.
USART_Init ( MYUBRR );
:.
}
void USART_Init( unsigned int ubrr)
{
/* Set baud rate */
UBRRH = (unsigned char)(ubrr>>8);
UBRRL = (unsigned char)ubrr;
/* Enable receiver and transmitter */
UCSRB = (1<<RXEN)|(1<<TXEN);
/* Set frame format: 8data, 2stop bit */
UCSRC = (1<<URSEL)|(1<<USBS)|(3<<UCSZ0);
}

- это не заработало (пример из doc8154.pdf, стр 153)
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
pimen
сообщение Jul 13 2009, 19:43
Сообщение #2


Участник
*

Группа: Участник
Сообщений: 67
Регистрация: 30-11-07
Пользователь №: 32 846



Цитата
19.5 USART Initialization
...
The following simple USART initialization code examples show one assembly and one C function
that are equal in functionality. The examples assume asynchronous operation using polling
(no interrupts enabled) and a fixed frame format. The baud rate is given as a function parameter.
For the assembly code, the baud rate parameter is assumed to be stored in the r17:r16 registers.
When the function writes to the UCSRC Register, the URSEL bit (MSB) must be set due to
the sharing of I/O location by UBRRH and UCSRC.


Цитата
19.10.2 Read Access
Doing a read access to the UBRRH or the UCSRC Register is a more complex operation. However,
in most applications, it is rarely necessary to read any of these registers.
The read access is controlled by a timed sequence. Reading the I/O location once returns the
UBRRH Register contents. If the register location was read in previous system clock cycle, reading
the register in the current clock cycle will return the UCSRC contents. Note that the timed
sequence for reading the UCSRC is an atomic operation. Interrupts must therefore be controlled
(for example by disabling interrupts globally) during the read operation.
The following code example shows how to read the UCSRC Register contents.


По русски:
запрещены прерывания во время записи и чтения регистров UBRRH и UCSRC.
для записи в UBRRH бит URSEL должен быть равен 0, для записи в регистр UCSRC бит URSEL должен быть равен 1.
для чтения UBRRH его надо считать первым. повторное чтение данного регистра вернет содержимое регистра UCSRC.

Цитата
Студия некорректно отбражает этот регистр - читайе описание ее багов в хелпе. Смею предположить, что и JTAGICE и JTAGICE mkII при отображении в окнах регистров также отображают UCSRC неправильно, ибо читает его как и все остальные регистры - однократным чтением.


подтверждаю )

Всем спасибо, разобрался

Сообщение отредактировал pimen - Jul 13 2009, 19:45
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- pimen   HELP! MEGA16 UART   Jul 9 2009, 18:04
- - manul78   Цитата(pimen @ Jul 9 2009, 22:04) Столкну...   Jul 9 2009, 18:10
|- - pimen   Цитата(manul78 @ Jul 9 2009, 22:10) Пожал...   Jul 9 2009, 18:20
|- - mempfis_   Цитатаээээ, спасибо конечно, но требуется код с ин...   Jul 9 2009, 18:44
||- - pimen   Цитата(mempfis_ @ Jul 9 2009, 22:44) Ну д...   Jul 9 2009, 18:49
||- - mempfis_   Цитата(pimen @ Jul 9 2009, 21:49) это я у...   Jul 9 2009, 18:57
||- - pimen   Цитата(mempfis_ @ Jul 9 2009, 22:57) А ко...   Jul 9 2009, 19:11
||- - mempfis_   Нашёл в одном работающем проекте код инициализации...   Jul 9 2009, 19:31
|- - manul78   Цитата(pimen @ Jul 9 2009, 22:20) ээээ, с...   Jul 9 2009, 18:55
- - manul78   Блин ! Чем дальше в лес, тем больше дров ...   Jul 9 2009, 21:00
|- - Сергей Борщ   Цитата(manul78 @ Jul 10 2009, 00:00) Как ...   Jul 9 2009, 21:47
|- - manul78   Цитата(Сергей Борщ @ Jul 10 2009, 01:47) ...   Jul 9 2009, 22:18
|- - Палыч   Цитата(manul78 @ Jul 10 2009, 01:18) Дата...   Jul 10 2009, 05:34
|- - mempfis_   Цитата(manul78 @ Jul 10 2009, 01:18) Если...   Jul 10 2009, 05:41
|- - manul78   Цитата(mempfis_ @ Jul 10 2009, 09:41) Раз...   Jul 10 2009, 07:56
|- - Палыч   Цитата(manul78 @ Jul 10 2009, 10:56) Блин...   Jul 10 2009, 08:32
|- - manul78   Цитата(Палыч @ Jul 10 2009, 12:32) Вот, и...   Jul 10 2009, 12:28
|- - Палыч   Цитата(manul78 @ Jul 10 2009, 15:28) Инте...   Jul 10 2009, 13:03
|- - Сергей Борщ   Цитата(manul78 @ Jul 10 2009, 15:28) Пото...   Jul 10 2009, 13:08
|- - manul78   Цитата(Сергей Борщ @ Jul 10 2009, 17:08) ...   Jul 14 2009, 09:56
- - TechMike   Вот работающий код, mega16+кварц 8мгц, avr studio+...   Jul 10 2009, 07:39


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

 


RSS Текстовая версия Сейчас: 30th July 2025 - 02:54
Рейтинг@Mail.ru


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