vik_ck 0 22 марта, 2007 Опубликовано 22 марта, 2007 · Жалоба Ув. пользователи 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 не нашел. Предлагаю поделиться грустным опытом Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Voloshchenko 0 22 марта, 2007 Опубликовано 22 марта, 2007 · Жалоба Предлагаю поделиться грустным опытомВот здесь 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 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
vik_ck 0 22 марта, 2007 Опубликовано 22 марта, 2007 · Жалоба Вот здесь 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 замечены отличия??? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AlexanderX 0 22 марта, 2007 Опубликовано 22 марта, 2007 · Жалоба В процессорах 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 } Удачи. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
evg123 0 23 марта, 2007 Опубликовано 23 марта, 2007 · Жалоба Силабсы достаточно навороченные в отличие от стандартных. Мне пришлось дня два-три потратить прежде чем я перешёл от AT89S8252 на F310. Берите pdf-ник по F064 и распечатывайте целиком (полный вариант, т.к. с экрана читать даже на ЖКИ будет не сильно приятно) и затем читайте его целиком и медленно (т.к. потом это сэкономит кучу времени, ведь программируете вы не только УАРТ). Там, можно сказать, всё не так, как в стандартном 51-ом за исключением системы команд. Но всё, что написано - работает хорошо. Есть книга О.И.Николайчук "x51-совместимые микроконтроллеры контроллеры фирмы Cygnal" djvu. Она правда весит 16 метров и там много полезной информации. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Halfback 0 3 апреля, 2007 Опубликовано 3 апреля, 2007 (изменено) · Жалоба А может кто написать маленький примерчик как заставить на МЦУ С51 работать UART без использования таймера + обработчик прерывания от трансмиттера. А то я понять не могу почему у меня программа в отладчике в этот обработчик не входит... Изменено 3 апреля, 2007 пользователем Halfback Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Kolia 0 4 апреля, 2007 Опубликовано 4 апреля, 2007 · Жалоба UART без использования таймера + обработчик прерывания от трансмиттера. А то я понять не могу почему у меня программа в отладчике в этот обработчик не входит... UART без таймера не работает -> соответственно и в прерывание не входит :huh: Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Halfback 0 4 апреля, 2007 Опубликовано 4 апреля, 2007 · Жалоба UART без таймера не работает -> соответственно и в прерывание не входит ну в общем я разобрался в чём я был не прав - там помимо EA=1 (разрешение всех прерываний) надо было выставить ES = 1 (разрешить индивидуально для UART) А вот как заставить заработать UART без таймера я так и не разобрался. Смысл в том что в кейле байты по УАРТу шлются а протеусовская симуляция не работает =) может глюк протеуса 6,9 SP5 ??? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Kolia 0 5 апреля, 2007 Опубликовано 5 апреля, 2007 · Жалоба может глюк протеуса 6,9 SP5 ??? Скореее всего глюки :blink: Keila или просто глюки . Вообще таймер определяет скорость передачи по UART. Соответственно если таймер выключен, то скорость = 0. Если не веришь проверь в режиме эмуляции кейла Peripherals->Serial->Baudrate. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Halfback 0 5 апреля, 2007 Опубликовано 5 апреля, 2007 · Жалоба Если не веришь проверь в режиме эмуляции кейла Peripherals->Serial->Baudrate Дык там в кейле и проверял - байты слались без проблем и при этом таймер в конфигурации вообще не трогал ;) А протеус молчит. Кстати а как сделать так чтобы отсылка по УАРТа велась без участия тела майн ??? Что там в обработчике прерывания написать надо??? И есть ли толковая книга (ну или сайт какой-нибудь) с примерами на СИ по МЦУ С51??? а то имеются только по AVR... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Kolia 0 6 апреля, 2007 Опубликовано 6 апреля, 2007 (изменено) · Жалоба Дык там в кейле и проверял - байты слались без проблем и при этом таймер в конфигурации вообще не трогал ;) А протеус молчит. А какой у тубя Keil. У меня 3.31, и в мем при отключенном таймере baubrate = 0 (как и должно быть). А вообще чего мучаться с протеус и нельзя ли все промоделировать в железе(Сейчас практически во всех МК есть UART) + ПС. Документация здесь h**p://electronix.ru/forum/index.php?act=Attach&type=post&id=10553 Кстати а как сделать так чтобы отсылка по УАРТа велась без участия тела майн ??? Без main() - это что-то новенькое. А где у тебя код инициализации контроллера будет? В ощем возьми какой нибудь пример работы с uart, разберись хорошенько и будет :santa2: :w00t: Вот с этого файла я начинал свое знакомство с UART -> режим работы без прерываниия Изменено 6 апреля, 2007 пользователем Kolia Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
koyodza 0 19 апреля, 2007 Опубликовано 19 апреля, 2007 · Жалоба Грусным делиться вроде и нечем. Использовал разные сигналы (06Х, 12Х, 31Х, 35Х). Глюков или несоответствия документации практически нет. Только в 35Х есть небольшое несоответствие в виде отсутствия "минусового" ключа между встроенной опорой и землей, хотя на блок-схеме он показан. Характеристики всех АЦП очень неплохие, а главное, соответствуют заявленным. Что не нравится - так это страничные SFR в 0ХХ-1ХХ, а также деление памяти данных на idata, pdata, xdata, но это все наследие 51 архитектуры. Теперь по существу вопроса. На сайте силабса есть утилита ConfigWizard, которая очень помогает разобраться с тем, как инициализировать ту или иную периферию. Причем она полезна как начинающим разбираться с сигналами, так и уже опытным http://www.silabs.com/tgwWebApp/public/web...u_configwiz.htm Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Aartem 0 19 ноября, 2007 Опубликовано 19 ноября, 2007 · Жалоба 1 Для работы уарта (F064) обязательно нужен таймер 2 если вы хотите максимальную скорость обмена, то работайте с прерыванием. 3 если вы хотите работать на скоростях выше стандартной (115200), то работайте с UART1 а не UART0. стабильно работает с ПК через мост CP2101 на скорости 921600. Примечание: стабильно работает при использовании для тактирования кварца 22118400, т.е. погрешность выставления скорости передачи = 0%. С использованием встроенного генератора не проверял. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
alvol 0 19 ноября, 2007 Опубликовано 19 ноября, 2007 · Жалоба 3 если вы хотите работать на скоростях выше стандартной (115200), то работайте с UART1 а не UART0. стабильно работает с ПК через мост CP2101 на скорости 921600. Примечание: стабильно работает при использовании для тактирования кварца 22118400, т.е. погрешность выставления скорости передачи = 0%. С использованием встроенного генератора не проверял. Работа СР2103 на скорости 921600 с использованием внутреннего генератора при работе контроллера идет отлично (на C8051F32x) Все действия лучше делать по прерыванию УАРТа. Только нужно всего лиш проверять причину прерывания: прием илии передача и не забывать программно очищать этот флаг. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться