Введение

CnCterm - Терминальная программа для работы с COM портами.

Возможности

  • Поддержка любых COM портов, в том числе виртуальных, с выбором номера от 1 до 20.
  • Работа в текстовом (ASCII) и шестнадцатеричном (HEX) режимах.
  • Формирование списка команд с возможностью редактирования и быстрой отправки.
  • Точная настройка скорости обмена.
  • Сохранение в файлах параметров порта и команд.
  • Сохранение принятых данных в бинарных файлах.
  • Передача файлов через последовательный порт.
  • Настройка задержек для байтов и блоков.
  • Режим "Эхо"
  • Измерение задержек между принятыми данными
  • Управление цепями DTR, RTS, отображение DSR, CTS, CD, RI
  • Режим "Эхо"
  • Программа не требует инсталляции


System Requirements

Требования к конфигурации компьютера

Orange5 нормально функционирует в следующих условиях:

  • Компьютер IBM PC/AT либо совместимый с ними;
  • Процессор 486 и выше;
  • VGA (SVGA) - совместимый видеоадаптер;
  • Свободный USB 2.0 порт;
  • устройство "МЫШЬ"- (рекомендуется);
  • Операционная система MS Windows XP;
  • 32 Mb ОЗУ;
  • Как минимум 2Mb на жестком диске.


FAQ

Frequently Asked Questions
(Часто Задаваемые Вопросы)
по CnCterm

Версия 1.01 (12.02.2011)

Q: Как добавлять символы перевода строки для текстовых команд?
A: В меню Commands-Terminator вписать HEX значение 0D или 0D 0A.


HPL

Описание языка HPL rev 2.3

20.06.2007

Язык HPL (Hardware Programming Language) разработан специально для описания низкоуровневых протоколов обмена с различными устройствами.

Рассмотрим реализацию языка HPL в трансляторе логического анализатора Omega LA.
Cимволом (*) обозначены примеры в данном документе.
Cимволом (W) обозначены операторы и команды, поддерживаемые только Windows версией.

Символ ';' является признаком комментария - конец строки начиная с этого символа не обрабатывается. Все пробелы внутри текста удаляются, за исключением текстовых строк. Ключевые слова пишутся только в верхнем регистре (большими буквами).

  • Числа. Числа могут задаваться в двоичном, десятичном и шестнадцатеричном формате:
    (*) 1234 - десятичная константа
    (*) 010101B - двоичная
    (*) 0x1234 или 01234H - шестнадцатеричная.
  • Строки. Текстовой строкой является последовательность символов, заключенных в двойные кавычки (*) "Test"
    Пробелы внутри строк не удаляются. При необходимости использования символа " внутри самой строки, он заменяется на две простые кавычки: ' '.
  • Адрес. Ключевое слово ADR содержит текущее значение адресного регистра (32 разряда), по которому выполняется чтение/запись данных. Для адресного регистра могут использоваться операции установки и инкремента.
  • Данные. Для доступа к данным в буфере по текущему адресу используется ключевое слово DATA. Данные доступны пословно (8 или 16 бит в зависимости от установленного типа памяти) или поразрядно.
  • Регистры. Для выполнения математических и логических операций, описания констант и хранения данных можно использовать 32 32-разрядных регистров R0...R9,RA...RF. Формат объявления регистров дан ниже Кроме этого, существуют системные регистры специального назначения.
    $SIZE - текущий размер блока данных
    $MAXSIZE - максимальный размер блока данных
    $FREQ - текущий размер блока данных
    $CHNS - число каналов

    Параметры устанавливаются атоматически перед запуском секции.

Описание протокола состоит из нескольких секций, обязательными из них являются две: начальная, [READ] - декодирование слова памяти.

Кроме этого, дополнительно можно использовать необязательные секции:

[SETUP] - начальная установка, вызывается однократно при загрузке модуля
[INIT] - инициализация, вызывается однократно перед всеми операциями.
[END] - завершение операции, вызывается один раз для любой операции.

При необходимости могут быть описаны дополнительные пользовательские секции, которые добавляются в меню под своим именем. Их названия также записываются в скобках []. При использовании пробелов имена следует дополнительно заключать в кавычки:
(*)["Test 1"]
Секция с именем [---] служит для использования в качестве разделителя в меню и не вызвается.

Можно использовать локальные секции (функции). Для описания функций перед именем добавляется символ '_' :

(*) [_START]

Функции должны быть описаны в модуле до их использования. Вызов функции осуществляется по имени:

(*) _START.

Передача параметров возможна с использованием регистров. Разрешено использовать внутри функций вызовы других функций. Не рекомендуется использование рекурсивных вызовов.

Секция [READ] вызываются при выполнении операции DECODE для каждого слова.

Порядок вызова секций в режиме DECODE:

[INIT]
FOR (ADR=0,ADR<SIZE;ADR++{
[READ]
}
[END]

Порядок вызова для пользовательских команд:
[INIT]
[USERSECTION]
[END]

Измение ADR внутри секции не меняет глобального значения.

В начальной секции описываются:

  • Имена каналов (pins):
    (*) PIN=SCL,0 - SCL - имя сигнала, 0 - номер бита для драйвера

    Имена должны быть не длиннее восьми символов. Имена не могут совпадать с зарезервированными ключевыми словами: "BUSO", "BUSI", "CDELAY", "SOCKET", "CONST", "REG", "GET", "LOOP", "ADR", "DATA", "MARK",

  • Дополнительная информация о модуле, которая отображается в нижнем окне. Не более одной строки

    (*) INFO="Новый модуль"

    •

  • Дополнительный справочный файл (вызывается из меню). Рекомендуемый формат файла - chm. (W).

    (*) INFOFILE="megahelp.chm"

    •

  • Объявления регистров, доступных для просмотра и редактирования через меню (Buffer->Registers). Имена регистров не должны совпадать. Если регистры используются локально внутри секций, объявлять их не нужно.

    (*) R0=Protect - где "Protect" - имя регистра

    После имени регистра через запятую может быть указан тип (режим отображения значения) регистра: H - hex, D - Dec, B - Bin, (W) L - List (W) C - CheckBox.
    Если тип набран в нижнем регистре, он не отображается в окне редактирования.

    (*) R1=CODE,h

    Для типов H,D,B,C дополнительно может быть указано число отображаемых знаков:
    (*) R2=FLAGS,B8
    (*) R3=Box,C4

    Для типа L добавляется список текстовых строк.
    Значение регистра соответствует порядковому номеру выбранной строки начиная с 0.
    (*) R0=Mode,L,On,Off

Все остальные секции имеют одинаковый формат записи. в одной строке может быть описано несколько инструкций, между собой они разделяются запятыми.

Краткое описание инструкций приведено ниже:

  • Установка пина константой, битом данных, адреса или регистра:
    (*) SDA=1
    (*) SDA=DATA[2]
    (*) SCL=ADR[3]
    (*) PIN=R2[3]

    •
  • Проверка текущего состояния пина (линий ввода) или бита регистра R0-R7
    (*) DAT?1
    (*) R2[4]?0
    или всего регистра:
    (*) R4?0x1234

    Если после операции сравнения в скобках {} описан блок инструкций, то он выполняется при равенстве бита(регистра) и константы, иначе выполняется инструкция следующая за скобками. Если такой блок не описан, при несовпадении проверяемого значения выполнение операции прерывается с выводом сообщения "Error: Chip not respond!" и номером строки HPL файла, на котором произошла остановка.

    (*) R2[4]?0 {P1=0}, P2=1
    Если 4 бит регистра R2 равен 0, то выполняется инструкция P1=0, а потом P2=1, если бит равен 1 - то сразу P2=1

    Если перед сравниваемым числом стоит символ !, то условие меняется на противоположное. (Блок выполняется при несовпадении значений).

    (*) R2?!1234H {P1=0}
    Если R2 не равен 1234H, то выполняется инструкция P1=0, если R2 = 1234H, выполняется следующая инструкция.

  • Операции с регистрами.

    1. Операции присвоения (копирования):
      Регистр-регистр (*) R2=R5
      Регистр-данные (*) R2=DATA
      Данные-регистр (*) DATA=R3
      Разрядность данных в зависимости от установленного типа микросхемы составляет 8 либо 16 бит.

    2. Арифметические и логические операции
      (В операциях может участвовать константа или другой регистр):
       установка "=" (*) R0=356H
       сложение "+" (*) R0=+123 ; R0=R0+123
       вычитание "-" (*) R0=-R1 ; R0=R0-R1
       умножение "*" (*) R0=*R1 ; R0=R0*R1
       деление "/" (*) R0=/5 ; R0=R0/5
       взятие остатка "%" (*) R0=%10 ; R0=R0%10
       циклический сдвиг ">" (*) R0=>>1 ; сдвиг R0 вправо на 1 разряд
       Логическое И - AND "&" (*) R0=*R2 ; R0=R0 and R2
       Логическое ИЛИ - OR "|" (*) R0=|R2 ; R0=R0 or R2
       Исключающее ИЛИ - XOR "^" (*) R0=^R2 ; R0=R0 xor R2

      В операциях деления и взятия остатка запрещено использовать константу 0 либо регистр, содержащий 0!

      3) Битовые операции с регистрами (*) R0[R1]=1 - бит регистра R0, равный R1 установить в 1

  • LOOP - Циклы. I - Текущее значение счетчика (индекс) цикла доступно Циклы могут быть вложенными, во внутреннем цикле непосредственно доступен только счетчик внутреннего цикла. Для универсальных циклов границы могут быть также заданы через регистры.

    Границы цикла должны лежать в пределах: 0...0x7FFFFFF

    Скобки "{","}" ограничивают тело цикла.

    (*) LOOP=(15,0) {DI=R0[I],...}
    линия вывода DI поочередно принимает значения бит 15..0 значения регистра R0. (*) LOOP=(7,0) {DI=ADR[I],...} (*) LOOP=ADR(7,0) {DI=I,...} - старый вариант линия вывода DI поочередно принимает значения бит 7..0 текущего значения адресного слова.

    (*) LOOP=0,15) {DATA[I]=DO,..} (*) LOOP=DATA(0,15) {I=DO,..} - старый вариант поочередное считывание бит 0..15 слова данных с линии ввода DO.

    (*) R1=10H
    LOOP=(5,0) {D=R1[I],..}
    (*) CONST=10H
    LOOP=CONST(5,0) {D=I,..} - старый вариант линия вывода D поочередно принимает значения бит 5..0 константы (10H)

    (*) LOOP=(R1,R2) {R3[I]=DATA[I]}
    Копирование битов от R1 до R2 адресного слова в соответствующие биты регистра R3

    (*) LOOP=(0,7){ P1=0,LOOP=(6,1){P1=0,P1=1} }
    Вложенные циклы.

    •
  • BREAK - выход из текущего цикла.
    (*) LOOP=(7,0) {PI?0{BREAK}}
  • Задержка (в микросекундах). Значение задержки может быть в пределах 1мкс...65с.
    (*) P=200

    •

  • PRINT Вывод сообщения. Вывод на экран окна с сообщением, строка должна быть заключена в кавычки. Внутри строки можно использовать стандартные модификаторы аналогичные используемым в языке C для printf(). (В DOS версии для всех числовых аргументов необходим дополнительный параметр l (long int)).

    %X - шестнадцатеричное значение
    %u - десятичное значение

    Для самостоятельного использования символа % (процент) внутри строки, он должен быть повторен дважды %%. Транслятор не проверяет правильность и количество передаваемых аргументов!

    (*) PRINT=("Hello, World")
    (*) PRINT=("Code=%04lX",R1) - Вывод значения регистра R1 в шестнадцатеричном виде - минимум 4 цифры.

    Можно также использовать дополнительные модификаторы, определяющие тип окна:
    E - Error - сообщение об ошибке
    (*) PRINT=E("Hello, Mr. Bug!")

    R - Remark - запись комментария в окно сигналов по текущему адресу
    (*) PRINT=S("START")

    S - Status - запись в статусное окно
    (*) PRINT=S("Progress %03lu",R0)

    L - Log - запись в окно протокола (W)
    (*) PRINT=L("Operation %02lu",R0)

    A - Ask - запрос подтверждения пользователя
    Значение возвращается в регистре RA (Ok=1,Cancel=0)
    PRINT=A("Are you ready ?")

    •

  • GET Ввод значений. На экран выводится окно с запросом данных. Строка в скобках задает заголовок окна. Одновременно могут быть введены сразу несколько значений в заданные регистры. Имена регистров и формат данных соответствуют описанным в начальной секции.
    (*) GET=("Enter value",R7,R8)

    •

  • EXIT - Завершение работы текущей секции.

    •

  • RETURN - Выход из функции.

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