Микроконтроллеры | MSSP(IIC) и USART |
|
---|---|---|
Совершенно верно, тиками таймера управляется как передача, так и прием. У меня просто еще выполнялся останов таймера, когда ни прием, ни передача не требовались |
|
|
chav1961: |
|
|
|
||
А я не понял.... |
|
|
Если сегодня будет время, нарисую временную диаграмму. Будет понятно Может быть, и АНТОХА что-нибудь напишет/нарисует. |
|
|
Tim18, выкладываю обещанное (см рисунок). С АНТОХИной программой есть некоторые расхождения непринципиального характера. Предполагается, что интервал между тиками таймера в 8 раз короче, чем длительность передаваемого (принимаемого) бита данных. И передача, и прием данных выполняется в обработчике прерываний от таймера. Процесс передачи (8 бит без контроля четности, 1 стоповый бит) выполняется следующим образом: Если при передаче на входной линии появился принимаемый сигнал, одновременно с передачей начинается процесс приема. Для этого через 4 тика с момента появления сигнала считывается состояние приемной линии - это будет стартовый бит (на рисунке моменты чтения обозначены стрелочками). Через 4 - для того, чтобы попасть в середину принимаемого бита, где его значение наиболее "правильное". Затем, через 8 тиков, считывается старший бит (опять, чтобы попасть в середину бита), затем, также через 8 тиков - следующий, следующий и т.д. пока не будет считано 10 битов, т.е. цикл чтения приемной линии выполняется 10 раз (хотя последний стоп-бит можно и не читать - тогда 9 раз). Первый и последний считанные биты отбрасываются, получается принятый байт. Вот в все Если таймер выставлен корректно, никаких подгонок с точностью до машинных циклов не требуется. Если нужно разгрузить систему, таймер при отсутствии передачи и приема можно отключить. При передаче он включается программно, перед началом передачи байта, при приеме - прерыванием от входной линии. Полагаю, с этим у Вас проблем не будет. |
|
|
chav1961: интервал между тиками таймера в 8 раз короче Если таймер выставлен корректно Теперь надо внести ясность в вышесказанное. |
|
|
Gregory, тот подход, что я описал, обеспечивает не более 9600 бод на 8 Мгц на любой Меге. Реализовывать программным путем 31кбод и выше - издевательство и над собой, и над девайсом, потому что ничем, кроме приема/передачи, такой девайс больше заниматься не сможет. Не жалко железку-то ? Речь именно о высокоскоростном UARTе в топике не шла, поэтому разговор и пошел в нынешнем русле. |
|
|
chav1961: издевательство |
|
|
Gregory: Я описАл способ ПРАВИЛЬНОГО построения UART, с определёнными характеристиками (данные в статье). Наш с chav1961 UART тоже правильный И к тому же дуплексный, в отличие от Отсутствует только многократное семплирование, то есть помехоустойчивость похуже, вот и всё. Аппаратные реализации UART семплируют по 16 раз на бит, я сомневаюсь, что Вы это реализовали. Gregory: Жаль, конечно, что, видимо, никто не смотрел моей программы. |
|
|
Форум про радио — сайт, посвященный обсуждению электроники, компьютеров и смежных тем. pro-radio.online | Обратная связь |
© 2003—2024 |