Skip to content

Commit

Permalink
Create main.cpp
Browse files Browse the repository at this point in the history
  • Loading branch information
0Nera committed Oct 1, 2023
1 parent 6a061fd commit 742271c
Showing 1 changed file with 77 additions and 0 deletions.
77 changes: 77 additions & 0 deletions modules/com/main.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,77 @@
#include <stdint.h>


namespace com {
// Базовые адреса для COM портов (COM1-COM8)
constexpr uint16_t com_base_addresses[] = {0x3F8, 0x2F8, 0x3E8, 0x2E8, 0x5F8, 0x4F8, 0x5E8, 0x4E8};

static int error = 0;

// Функция для отправки данных через COM порт
void send(uint8_t data, uint8_t port_index) {
if (port_index > 7) {
error = -1;
return;
}

error = 0;

asm volatile (
"outb %0, %1"
:
: "a"(data), "dN"(com_base_addresses[port_index])
);
}

// Функция для приема данных через COM порт
uint8_t receive(uint8_t port_index) {
uint8_t data;

if (port_index > 7) {
error = -1;
return 0;
}

error = 0;



asm volatile (
"inb %1, %0"
: "=a"(data)
: "dN"(com_base_addresses[port_index])
);
return data;
}

int get_error() {
return (int)error;
}

// Функция для инициализации COM порта
void init(uint8_t port_index) {
if (port_index > 7) {
error = -1;
return;
}

error = 0;

send(0x00, port_index); // Отключить все прерывания
send(0x80, port_index); // Включить DLAB (установить делитель скорости передачи)
send(0x01, port_index); // 115200 скорость (115200 / 1)
send(0x00, port_index);
send(0x03, port_index); // 8 бит, без паритета, один стоп-бит
send(0xC7, port_index); // Включить FIFO, очистить их, с порогом в 14 байт
send(0x0B, port_index); // Включить IRQ, установить RTS/DSR
send(0x1E, port_index); // Установить в режим петли, протестировать последовательный чип
send(0xAE, port_index); // Проверить последовательный чип (отправить байт 0xAE и проверить, вернется ли тот же байт)

if (receive(port_index) != 0xAE) {
error = 1;
return;
}

send(0x0F, port_index); // Установить в нормальный режим работы (без петли с включенными IRQ и включенными битами OUT#1 и OUT#2)
}
}

0 comments on commit 742271c

Please sign in to comment.