Администрация форума не несёт ответственности за достоверность информации и оставляет за собой право редактировать или в особых случаях даже удалять посты без предупреждения. Спасибо за понимание.

Программирование ATMEL в BASCOM.

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.



Вопрос по UART

Сообщений 1 страница 14 из 14

1

Доброго времени. Возможно дилетантский вопрос, но все же. Подскажите, пожалуйста, как проверять, что буфер UART  переполнен?
Вот так я его настраиваю на прерывания и указываю размер буфера (как я это понимаю)

$regfile = "M128def.dat"                                   
$crystal = 16000000                                       
$baud = 9600                                               
$hwstack = 256                                             
$swstack = 256                                             
$framesize = 256 
                                         
Config Serialin = Buffered , Size = 170 , Bytematch = All

как только в UART микроконтроллера приходит много много слов (около 500), МК перезагружается, что крайне негативно влияет на работу. Как можно все это дело отслеживать и очищать, чтобы избежать перезагрузки?

0

2

присоединюсь к вопросу.
как я понимаю, Баском делает свой буфер, так как в самом МК - они минимален (про мегу128 не знаю - не читал, а в других - 2 байта (или слова - и это забыл :)

0

3

Я пробовал считать слова, и когда близко к переполнению, отключаю прерывания - не помогает

0

4

Вам нужно буферизировать именно с помощью Bascom?

0

5

Желательно, даже скорее обязательно. А что не возможно прервать заполнение?

0

6

Если не секрет, причина?

0

7

Сколько байт Вы предполагаете получать, в постоянном потоке, или как?

0

8

Var = BufSpace(n)

Var -  Возвращает объем свободного пространства буфера UART.

N - Константа в диапазоне от 0-3.

Значение 0: выходной буфер первый UART

Значение 1: входного буфера первой UART

Значение 2: выходной буфер второй UART

Значение 3: входного буфера второй UART

Отредактировано sasha_1973 (2013-12-16 09:28:15)

0

9

1. проект человеку буду передавать, а он требует только в бейсике.
2. Спасибо, Var = BufSpace(n) я узнаю сколько осталось, но как почистить буфер, когда переполнение близко? Почему от переполнения контроллер то перезагружается?

0

10

kostr написал(а):

как почистить буфер, когда переполнение близко

CLEAR bufname

http://avrhelp.mcselec.com/  -  запрос (CONFIG SERIALIN)

Отредактировано sasha_1973 (2013-12-16 09:49:06)

0

11

Спасибо

0

12

Вообще с переполнением бороться есть два варианта (как бы ничего нового):

1. Увеличивать сам буфер (чтобы некогда не переполнился, если позволяет железо);
2. Ставим защиту (стопор или FIFO цикличное) от переполнения, данные просто не принимаются или ходят по кругу.

Естественно можно использовать любую комбинацию, удовлетворяющую задачи.

В аппаратных чипах как правило переполнение приводит к пропуску данных (пункт №2).

0

13

1. Да разве до таких размеров буфер увеличишь
2. Почему то мега128 у меня перезагружается когда много в USART летит

0

14

Была тут где-то тема про аппаратный уарт с буфером баскома, вещь весьма глючная (ИМХО). Требуется навык, чтобы в нём разобраться (во всех нюансах).

0