Всем здравствуйте.
Возникла у меня необходимость задать нестандартную скорость работы COM-порта в программе, написанной на языке Си.
Подскажите каким образом можно это осуществить?
Задать нестандартную скорость COM порта
Согласно "man termios" и описанию в нём функции cfsetospeed,
скорость должна быть одной из предопределённых. Устанавливать
произвольную скорость нельзя, т.к. это не поддерживается аппаратно
и произойдёт рассинхронизация приёмника и предатчика из-за
ошибки отработки интервалов.
Если порт реализован программно, на PCI-плате и работает через
специальный драйвер, то не знаю, зависит от драйвера. Но сомневаюсь,
чтобы там кто-нибудь позаботился о такой возможности.
Пётр.
Я работаю с платой, у которой скорость работы COM 56000 бод, плата и комп связаны через переходник USB-COM на pl2303.
Мне все подойдет - любой способ - опробую, о результатах отпишусь.
Насколько я знаю, установить нестандартную скорость СОМ со стороны компьютера нельзя. На чём собрана ваша плата, которая связана с компом? Можно ли в ней скорректировать прошивку, чтобы установить стандартную скорость СОМ-порта (например 57600 бод)?
Плата собрана на сигнальном процессоре MSP430, ну и MAX-ы стоят для преобразования уровней и АЦП.
С перепрошивкой действительно там проблемы, поэтому я и хотел решить проблему посредством настройки порта компьютера.
MSP430 --- это не сигнальный процессор. TexasInstrument выпускает сигнальный процессор, который называется TMS320. В чём проблемы с перепрошивкой? Вероятно нет исходника?
Если вкратце, то для MSP430 скорость UART задаётся в регистрах UCA0BR0 и UCA0BR1. Вместо 0 --- номер модуля USCI. Значения этих регистров рассчитываются исходя из частоты тактового генератора и скорости UART (см. даташит на ваш MSP430).
Проблема в нестандартном кварце, которым тактируется MSP, из-за него я не могу получить стандартную скорость UART.
И раз уж пошел о нём разговор, есть ли у него внутренний тактовый генератор, и хватит ли его стабильности для нормальной работы UART?
P.S.: Плату на MSP430 - на я делал, поэтому отдельное спасибо за пояснения по поводу MSP, так как я в нем не шарю. Я не разбирался с даташитом, но раз уж это походу единственный вариант - буду)
Проблема в нестандартном кварце, которым тактируется MSP, из-за него я не могу получить стандартную скорость UART.
Поскольку там есть два регистра для настройки скорости порта,
то вы сможете получить если не в точности стандартную, то достаточно близкую.
У процессоров PIC для этого тоже есть два регистра и можно получить
стандартную скорость с пренбрежимо малой ошибкой.
Пётр.
Внутренний тактовый генератор у MSP430 есть, его частоту можно установить 1 МГц или 16 МГц, но он не термостабилен. То есть при отклонении температуры от комнатной его частота может уйти. Менять кварц на внутренний генератор не стоит. Константы, которые нужно записывать в регистры UCA0BR0 и UCA0BR1 для стандартных скоростей для внутреннего тактового генератора есть в даташите.
Какая у вас на плате частота кварца? При работе от нестандартного кварца можно использовать низкие скорости UART (например 9600) для низкой скорости UART ошибка установки скорости при нестандартной частоте кварца заметно ниже. Для них нужно пересчитать константы по формулам из даташита.
Ещё нужно проверить, что UART тактируется именно от кварца.