From 5c9256c98403c297775882954e03b8e2d3796252 Mon Sep 17 00:00:00 2001 From: AndrejChoo <97045273+AndrejChoo@users.noreply.github.com> Date: Fri, 22 Sep 2023 10:02:26 +0300 Subject: [PATCH] Update README.MD --- README.MD | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.MD b/README.MD index e406bae..d56ec25 100644 --- a/README.MD +++ b/README.MD @@ -1,7 +1,7 @@ Этот проект разрабатывался исключительно в развлекательных целях (да простит меня Atmel и Microchip) и спортивного интереса. Цель проекта была создать ядро AVR, которое можно программировать стандартными инструментами (AVR GCC) на языке Си, а также "заливать" прошивку без использования дополнительного оборудования (отладчиков, типа J-Link или им подобных). Также обязательным условием было использования встроенной блочной памяти без внешних Flash и Sram. В конечном итоге (с третьей попытки) получилось родить работоспособное ядро, которое может не только помигать светодиодом, но и работать с разнообразной периферией по SPI,UART,I2C, работать с массивами в ОЗУ и всё это с использованием стандартных инструментов разработки для микроконтроллеров AVR. -Само ядро, естественно, не копирует 1 в 1 оригинал такт в такт, а только исполняет его набор инструкций. Главное основное отличие - машинный цикл (исполнение одной инструкции) выполняется за два такта (в оригинале - за 1 такт), но это легко компенсируется поддержкой более высокой входной частоты (проверено до 50MHz, что в итоге эквивалентно 25MHz оригинала). Также, благодаря использованию 2-портовой RAM и ROM памяти, удалось сократить такие команды, как PUSH, ST, STD, RCALL до одного машинного цикла, POP, RET, RETI, LD, LDD и им подобные до 2 машинных циклов (в отличии от 2 и 3 соотв. у оригинала), что очень заметно особенно при обработке прерываний (где особенно часто используются команды POP и PUSH при компиляции Си кода). Из нереализованных остались команды умножения с плавающей точкой (FMUL, FMULS,FMULSU). Каждая команда может быть индивидуально включена или выключена из компиляции проекта с помощью макросов. +Само ядро, естественно, не копирует 1 в 1 оригинал такт в такт, а только исполняет его набор инструкций. Главное основное отличие - машинный цикл (исполнение одной инструкции) выполняется за два такта (в оригинале - за 1 такт), но это легко компенсируется поддержкой более высокой входной частоты (проверено до 50MHz, что в итоге эквивалентно 25MHz оригинала). Также, благодаря использованию 2-портовой RAM и ROM памяти, удалось сократить такие команды, как PUSH, ST, STD, RCALL до одного машинного цикла, POP, RET, RETI, LD, LDD и им подобные до 2 машинных циклов (в отличии от 2 и 3 соотв. у оригинала), что очень заметно особенно при обработке прерываний (где особенно часто используются команды POP и PUSH при компиляции Си кода). Из нереализованных остались команды умножения с плавающей точкой (FMUL, FMULS,FMULSU) и команды самопрограммирования SPM. Каждая команда может быть индивидуально включена или выключена из компиляции проекта с помощью макросов. Из периферии реализовано: GPIO: три двунаправленных восьмиразрядных порта (PB,PC,PD).