Интересный глюк c UARTом у atmega8515
(«Телесистемы»: Конференция «Микроконтроллеры и их применение»)
|
Отправлено
Олег13 17 июня 2004 г. 12:54
|
|
|
|
Устройство на ATMEGA8515 заворачивает данные по UARTу (все что принимает отправляет обратно).Кварц 14745600Гц, UBRR = 7. При рваном потоке (паузы между пакетами составляют мкс) все работает нормально. При непрерывном потоке проскакивают ошибки(приблизно раз в 10 секунд).
Все прерывания (кроме ReceiveInterrupt) запрещены.
Текст программы:
MainProgram:
cli ;запрещение прерываний
;Инициализация указателя стека
ldi AL, low(StackPointer)
ldi AH, high(StackPointer)
out SPH, AH
out SPL, AL
ldi AH, (CrystalFrequency/(16*BaudRate)-1)
out UBRR, AH
sbi UCR, RXCIE ; UART - прерывание RX Complete разрешено
sbi UCR, TXEN ; UART - передача разрешена
sbi UCR, RXEN ; UART - прием разрешен
sei;
L_MainLoop:
rjmp L_MainLoop
ReceiveInterrupt:
in bTempSREG, SREG ; сохранение значения регистра статуса
in Temp, USR
in AL, UDR ; чтение данных UART
out UDR, AL ; запись UART Data Register
out SREG, bTempSREG
reti
Составить ответ
|||
Конференция
|||
Архив
Ответы
- Ответ: А вы учли, что там Uart буфферизирован????(-) — ишущий (17.06.2004 18:27, пустое)
- Может быть дело в том что тактовые частоты UART на PC и микроконтроллера разбегаются при непрерывной передачес одним стопом. Попробуйте больше стоповых битов. — andy_P (17.06.2004 18:08, пустое)
- Ответ: Новый текст программы !!! — Олег13 (17.06.2004 15:20, 1128 байт)
- Ввел буфера и анализ флагов - таже фигня !!! Буфер переполняется. Передатчик не успевает передавать данные! — Олег13 (17.06.2004 15:11, пустое)
- сниму с электронных устройств сглаз, порчу, недорого :) — шаман (17.06.2004 14:57, пустое)
- Насколько мне известно все AVRы имеют буферизированный передатчик и приемник UART, поэтому в конкретном случае флаги проверять не надо. Проблема, скорее всего, была именно в кварце. — =TriD= (17.06.2004 14:34, пустое)
- Все правильно внизу Тумблер написал: надо в буферный регистр UDR записывать передаваемый байт ТОЛЬКО при установленном UDRE в USR (+) — Щ.С. (17.06.2004 14:17, 88 байт)
- Еще один момент !!! — Олег13 (17.06.2004 13:37, 101 байт)
- Ответ: — Олег13 (17.06.2004 13:35, 216 байт)
- Ответ: — Олег13 (17.06.2004 13:31, 216 байт)
- Похоже, что Tx порт иногда не успевает передать предыдущее слово, а Вы ему новое суете. Нужно буфферизовать и обслуживать Tx по прерываниям. — andy_P (17.06.2004 13:24, пустое)
- А посмотреть флажок готовности передатчика сначала а уж потом пихать в него данные ! (Это раз) — miv (17.06.2004 13:23, пустое)
- Ответ: — -Tумблер- (17.06.2004 13:06, 489 байт)
Перейти к списку ответов
|||
Конференция
|||
Архив
|||
Главная страница
|||
Содержание
|||
Без кадра
E-mail:
info@telesys.ru