Цитата(-=Space=- @ Jun 9 2005, 13:45)
Чтоб не создавать новую тему, решил залать вопрос здесь
Это не есть хорошо. Лучше создавать свою тему со своим описанием.
Цитата(-=Space=- @ Jun 9 2005, 13:45)
Есть сеть микроконтроллеров, канал связи - RS485
т.к. это полудуплекс, то необходимо управление трансмитером - прием/передача.
однако сложность в том чт опрерывание по передачи выставляется не когда передатчик пуст а раньше - когда пуст буфер передатчика.
Соответственно это прерывание мне бесполезно (я не могу здесь перевести трансмиттре на режим приема - еще передача идет)
я конечно выкрутился
вот даже пример
криво это выглядит
может я чего упустил и можно было сделать проще?
как , например в AVR, там есть флаги прывания по передачи как от "буфер пуст", так и от "передатчик пуст"
Это не то чтобы криво, а просто неправильно. Нужно не только дождаться окончания передачи символа, но еще и выждать паузу, чтобы возможные помехи от переключения линии (при выключении передатчика) не были восприняты принимающим устройством как начало следующего символа. Пауза эта конечно же зависит от примененного протокола и линии связи. Какие-то протоколу чувствительны к этому, какие-то нет. "Растяжка" линии тоже очень способствует улучшению связи.
А паузы формируйте таймерами, как минимум один таймер есть в любом кристалле MSP430. Посчитайте требуемую паузу, необходимую для передачи символа на данной скорости и паузу достаточную для удержания линии после передачи и сразу же после записи в UxTXBUF последнего байта установите CCRx какого-нибудь таймера. Когда пауза окончится, то при возникновении прерывания от CCRx переключайте линию RS485 на прием. Прерывание от CCRx конечно же должно быть заранее разрешено.