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

 
 
 
Reply to this topicStart new topic
> UART: инициализация скорости, Отличия от "классики", напр. C8051Fxxx
gala
сообщение Mar 22 2007, 13:55
Сообщение #1


Частый гость
**

Группа: Свой
Сообщений: 119
Регистрация: 29-11-05
Из: Украина, Черкассы
Пользователь №: 11 564



Ув. пользователи MCS-51

Много лет применял инициализацию скорости UART.
Потерял 2 дня для адаптации к SiLabs C8051F064 (читать Datasheet было лень)
Оказалось, инициализация по-умолчанию НЕ соответствует "классике" Intel MCS-51

For classic MCS-51:
Th1=(signed char)(K*Osc_Freq)/(Baud_Rate*32*12); //if(SMOD==1) K=2; else K=1;
T2 =(signed word)(K*Osc_Freq)/(Baud_Rate*32); //K=1;

For SiLabs C8051Fxx:
Th1=(signed char)(K*Osc_Freq)/(Baud_Rate*32*N); //N=1,4,12,48(SysCLC) or N=8(ExtCLC)
T2 =(signed word)(K*Osc_Freq)/(Baud_Rate*16*N); //N=1,2,12(SysCLC) or N=8(ExtCLC);

Готового FAQ по отличиям инициализации скорости UART для разных MCU-51 не нашел.

Предлагаю поделиться грустным опытом
Go to the top of the page
 
+Quote Post
Волощенко
сообщение Mar 22 2007, 15:02
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 347
Регистрация: 16-02-06
Из: г.Николаев, Украина
Пользователь №: 14 377



Цитата(gala @ Mar 22 2007, 14:55) *
Предлагаю поделиться грустным опытом
Вот здесь http://www.silabs.ru/appnotes.php есть все...
Для UART можно смело AN115 – «Примеры и софт для UART»
Отличий есть и много, хотя бы CrossBar не забыть определить (см.AN101). Здесь очень полезен Code Configuration Wizard, в том числе и для UART.
Есть еще много чего в:
http://www.silabs.ru/publication.php
http://www.dito97.narod.ru/document.htm
http://www.electrosnab.ru/silabs/Silabs_1_1.htm
Go to the top of the page
 
+Quote Post
gala
сообщение Mar 22 2007, 16:24
Сообщение #3


Частый гость
**

Группа: Свой
Сообщений: 119
Регистрация: 29-11-05
Из: Украина, Черкассы
Пользователь №: 11 564



Цитата(Волощенко @ Mar 22 2007, 16:02) *
Вот здесь http://www.silabs.ru/appnotes.php есть все...
Для UART можно смело AN115 – «Примеры и софт для UART»
Отличий есть и много, хотя бы CrossBar не забыть определить (см.AN101). Здесь очень полезен Code Configuration Wizard, в том числе и для UART.
Есть еще много чего в:
http://www.silabs.ru/publication.php
http://www.dito97.narod.ru/document.htm
http://www.electrosnab.ru/silabs/Silabs_1_1.htm


Полностью согласен=хорошие ссылки по SiLabs

А по другим производителям семейства MCS-51 замечены отличия???
Go to the top of the page
 
+Quote Post
AlexanderX
сообщение Mar 22 2007, 17:46
Сообщение #4


Частый гость
**

Группа: Свой
Сообщений: 107
Регистрация: 21-07-05
Из: Киев
Пользователь №: 6 977



В процессорах Silabs C8051F06x очень много разнообразной периферии и не все регистры специального назначения (SFR) поместились в стандартное адресное пространство. Для решения этой проблемы был введен регистр указатель активной страницы для доступа к соответствующим SFR.

Теперь по поводу инициализации UART:
1. Определяете от какого генератора работает процессор, если от внешнего то его нужно инициализировать
2. Инициализируете Crossbar со включенным UART
3. Собственно инициализация режима UART

Пример кода инициализации скорости работы и режима UART т.е. пункт 3.
//
// Initialize UART
// Use Timer 1
//
void UART_Init (void)
{
SFRPAGE = 0x00; // ATTENTION Set Page 0 !!!!
CKCON |= 0x10; // Timer1 clocked from SYSCLK = 24MHz
TMOD &= 0x0F;
TMOD |= 0x20; // Timer1 set to 8-bit mode with auto-reload
TH1 = 0xF3;
TL1 = 0xF3; // Set UART speed 115200
TCON |= 0x40; // Run Timer1
SCON0 = 0xD0; // Receiver enabled, simple 9-bit mode
SSTA0 = 0x10; // Timer 1 is source baudrate for UART
ES0 = 1; // UART interrupt enable
}

Удачи.
Go to the top of the page
 
+Quote Post
evg123
сообщение Mar 23 2007, 17:45
Сообщение #5


Местный
***

Группа: Свой
Сообщений: 353
Регистрация: 11-09-06
Из: Минск
Пользователь №: 20 282



Силабсы достаточно навороченные в отличие от стандартных. Мне пришлось дня два-три потратить прежде чем я перешёл от AT89S8252 на F310. Берите pdf-ник по F064 и распечатывайте целиком (полный вариант, т.к. с экрана читать даже на ЖКИ будет не сильно приятно) и затем читайте его целиком и медленно (т.к. потом это сэкономит кучу времени, ведь программируете вы не только УАРТ). Там, можно сказать, всё не так, как в стандартном 51-ом за исключением системы команд. Но всё, что написано - работает хорошо. Есть книга О.И.Николайчук "x51-совместимые микроконтроллеры контроллеры фирмы Cygnal" djvu. Она правда весит 16 метров и там много полезной информации.
Go to the top of the page
 
+Quote Post
Halfback
сообщение Apr 3 2007, 21:33
Сообщение #6


Местный
***

Группа: Участник
Сообщений: 322
Регистрация: 28-05-05
Пользователь №: 5 512



А может кто написать маленький примерчик как заставить на МЦУ С51 работать UART без использования таймера + обработчик прерывания от трансмиттера. А то я понять не могу почему у меня программа в отладчике в этот обработчик не входит...

Сообщение отредактировал Halfback - Apr 3 2007, 21:34
Go to the top of the page
 
+Quote Post
Kolia
сообщение Apr 4 2007, 09:49
Сообщение #7


Частый гость
**

Группа: Свой
Сообщений: 188
Регистрация: 28-09-06
Из: Minsk
Пользователь №: 20 762



Цитата(Halfback @ Apr 3 2007, 22:33) *
UART без использования таймера + обработчик прерывания от трансмиттера. А то я понять не могу почему у меня программа в отладчике в этот обработчик не входит...


UART без таймера не работает -> соответственно и в прерывание не входит huh.gif
Go to the top of the page
 
+Quote Post
Halfback
сообщение Apr 4 2007, 19:30
Сообщение #8


Местный
***

Группа: Участник
Сообщений: 322
Регистрация: 28-05-05
Пользователь №: 5 512



Цитата
UART без таймера не работает -> соответственно и в прерывание не входит

ну в общем я разобрался в чём я был не прав - там помимо EA=1 (разрешение всех прерываний) надо было выставить ES = 1 (разрешить индивидуально для UART)
А вот как заставить заработать UART без таймера я так и не разобрался. Смысл в том что в кейле байты по УАРТу шлются а протеусовская симуляция не работает =) может глюк протеуса 6,9 SP5 ???
Go to the top of the page
 
+Quote Post
Kolia
сообщение Apr 5 2007, 11:15
Сообщение #9


Частый гость
**

Группа: Свой
Сообщений: 188
Регистрация: 28-09-06
Из: Minsk
Пользователь №: 20 762



Цитата(Halfback @ Apr 4 2007, 20:30) *
может глюк протеуса 6,9 SP5 ???


Скореее всего глюки blink.gif Keila или просто глюки wacko.gif.

Вообще таймер определяет скорость передачи по UART. Соответственно если таймер выключен, то скорость = 0. Если не веришь проверь в режиме эмуляции кейла Peripherals->Serial->Baudrate.
Go to the top of the page
 
+Quote Post
Halfback
сообщение Apr 5 2007, 18:39
Сообщение #10


Местный
***

Группа: Участник
Сообщений: 322
Регистрация: 28-05-05
Пользователь №: 5 512



Цитата
Если не веришь проверь в режиме эмуляции кейла Peripherals->Serial->Baudrate

Дык там в кейле и проверял - байты слались без проблем и при этом таймер в конфигурации вообще не трогал wink.gif А протеус молчит.
Кстати а как сделать так чтобы отсылка по УАРТа велась без участия тела майн ??? Что там в обработчике прерывания написать надо??? И есть ли толковая книга (ну или сайт какой-нибудь) с примерами на СИ по МЦУ С51??? а то имеются только по AVR...
Go to the top of the page
 
+Quote Post
Kolia
сообщение Apr 6 2007, 13:30
Сообщение #11


Частый гость
**

Группа: Свой
Сообщений: 188
Регистрация: 28-09-06
Из: Minsk
Пользователь №: 20 762



Цитата(Halfback @ Apr 5 2007, 19:39) *
Дык там в кейле и проверял - байты слались без проблем и при этом таймер в конфигурации вообще не трогал wink.gif А протеус молчит.


А какой у тубя Keil. У меня 3.31, и в мем при отключенном таймере baubrate = 0 (как и должно быть).

А вообще чего мучаться с протеус и нельзя ли все промоделировать в железе(Сейчас практически во всех МК есть UART) + ПС.

Документация здесь
h**p://electronix.ru/forum/index.php?act=Attach&type=post&id=10553

Цитата
Кстати а как сделать так чтобы отсылка по УАРТа велась без участия тела майн ???

Без main() - это что-то новенькое. А где у тебя код инициализации контроллера будет?

В ощем возьми какой нибудь пример работы с uart, разберись хорошенько и будет santa2.gif w00t.gif

Вот с этого файла я начинал свое знакомство с UART -> режим работы без прерываниия

Сообщение отредактировал Kolia - Apr 6 2007, 13:42
Go to the top of the page
 
+Quote Post
koyodza
сообщение Apr 19 2007, 12:07
Сообщение #12


Местный
***

Группа: Свой
Сообщений: 213
Регистрация: 28-02-07
Из: Киев
Пользователь №: 25 744



Грусным делиться вроде и нечем. Использовал разные сигналы (06Х, 12Х, 31Х, 35Х). Глюков или несоответствия документации практически нет. Только в 35Х есть небольшое несоответствие в виде отсутствия "минусового" ключа между встроенной опорой и землей, хотя на блок-схеме он показан. Характеристики всех АЦП очень неплохие, а главное, соответствуют заявленным.
Что не нравится - так это страничные SFR в 0ХХ-1ХХ, а также деление памяти данных на idata, pdata, xdata, но это все наследие 51 архитектуры.
Теперь по существу вопроса. На сайте силабса есть утилита ConfigWizard, которая очень помогает разобраться с тем, как инициализировать ту или иную периферию. Причем она полезна как начинающим разбираться с сигналами, так и уже опытным
http://www.silabs.com/tgwWebApp/public/web...u_configwiz.htm
Go to the top of the page
 
+Quote Post
Настовьяк Артём
сообщение Nov 19 2007, 07:58
Сообщение #13





Группа: Новичок
Сообщений: 6
Регистрация: 21-02-07
Пользователь №: 25 549



1 Для работы уарта (F064) обязательно нужен таймер
2 если вы хотите максимальную скорость обмена, то работайте с прерыванием.
3 если вы хотите работать на скоростях выше стандартной (115200), то работайте с UART1 а не UART0.
стабильно работает с ПК через мост CP2101 на скорости 921600.
Примечание: стабильно работает при использовании для тактирования кварца 22118400, т.е. погрешность выставления скорости передачи = 0%. С использованием встроенного генератора не проверял.
Go to the top of the page
 
+Quote Post
alvol
сообщение Nov 19 2007, 11:04
Сообщение #14


Частый гость
**

Группа: Свой
Сообщений: 153
Регистрация: 15-05-06
Из: Николаев
Пользователь №: 17 119



Цитата(Настовьяк Артём @ Nov 19 2007, 09:58) *
3 если вы хотите работать на скоростях выше стандартной (115200), то работайте с UART1 а не UART0.
стабильно работает с ПК через мост CP2101 на скорости 921600.
Примечание: стабильно работает при использовании для тактирования кварца 22118400, т.е. погрешность выставления скорости передачи = 0%. С использованием встроенного генератора не проверял.


Работа СР2103 на скорости 921600 с использованием внутреннего генератора при работе контроллера идет отлично (на C8051F32x)
Все действия лучше делать по прерыванию УАРТа. Только нужно всего лиш проверять причину прерывания: прием илии передача и не забывать программно очищать этот флаг.
Go to the top of the page
 
+Quote Post

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

 


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


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