x86128: (Default)
[personal profile] x86128 posting in [community profile] besm6
В целях практики в Verilog изобрел для МЭСМ-6 велосипед UART.



Код тут: gist

Со стороны МЭСМ программируется через два регистра - управляющий/статусный и регистр буфера FIFO.
Управляющий регистр при записи имеет вид:

Запись в управляющий регистр устанавливает делитель частоты, включает цепи приема/передачи и режим самотестирования(loopback).
Разрядность делителя 9 бит (+4 бита для постоянного множителя х16).UART работает на частоте процессора 50МГц поэтому 9 битного делителя хватает на диапазон скоростей от 9600 до 115200.
Во время чтения регистра поля имеют вид:

где rx/tx empty сообщает о том что соотв. FIFO пустое.
tx_finish - устанавливается когда все байты из tx FIFO переданы и выдвинуты все биты последнего байта.

Запись байта в буфер FIFO укладывает его в очередь, если очередь переполнена, то затирается последний уложенный байт.
При чтении из буфера FIFO, вместе с 8-мью битами данных читается бит состояния очереди, который равен 0 если биты данных имеют смысл и 1 если очередь была пуста.


Короткая программка реализующая "эхо" полученных символов:
*
* UART echo-test.
*
start   start   '1'
* UART registers
U0_DT   equ     '77740'   , data fifo
U0_CT   equ     '77747'   , control and status reg
U0_CTS  equ     '77746'   , set bits
U0_CTC  equ     '77745'   , clear bits
        ntr 3
* reset uart
        xta     '0'
        atx     U0_CT
* set divider
        xta     =b'033'    , 115200
        atx     U0_CTS
        xta     =b'1000'   , enable rx tx
        atx     U0_CTS
l4      xta     U0_DT
        ati     4
        aax     =b'400'    , wait for data
        u1a     l4
        ita     4
        atx     U0_DT      , push data to tx fifo
* wait for send complete
loop    xta     U0_CT
        aax     =b'10000'   , tx_finish bit
        uza     loop
        uj l4
*-------------------------
align   адрес   start+'1777'            , данные с адреса 2000
        fin


Нужны ли для МЭСМ режимы передачи отличные от 8n1, т.е. с битом четности, доп. стопом и произвольной длиной байта?

Забавно получилось. Когда пришел за резисторами в местный Чип и Дип, спросил есть ли у них логический пробник, молодые люди сделали вопросительные удивленные лица. Видимо сейчас даже у самого начинающего радиолюбителя есть осциллограф для таких целей 😂

Date: 2019-05-21 05:09 am (UTC)
spamsink: (Default)
From: [personal profile] spamsink
Режимы передачи, отличные от 8N1, были от различных степеней бедности, поэтому сейчас уже не нужны.

Date: 2019-05-21 05:40 am (UTC)
vak: (Default)
From: [personal profile] vak
Изобретать велосипед полезно время от времени, чтобы не забывать, как это делается.

Не надо другие режимы. Поля в регистру конфигурации для них стоит предусмотреть на будущее, но реализовывать не обязательно.

Date: 2019-05-21 05:54 am (UTC)
vak: (Default)
From: [personal profile] vak
Да, обязательно. Такая ошибка называется "Framing Error". Ситуация часто возникает, если на вход сыпется мусор. Софт должен про это знать, иначе трудно реализовывать устойчивые к ошибкам протоколы.
Edited Date: 2019-05-21 06:02 am (UTC)

Profile

Сообщество любителей БЭСМ-6

December 2025

S M T W T F S
 123456
78910111213
14151617181920
21222324252627
282930 31   

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Jan. 15th, 2026 09:47 am
Powered by Dreamwidth Studios