Skip to content

Commit

Permalink
Update README.MD
Browse files Browse the repository at this point in the history
  • Loading branch information
AndrejChoo authored Sep 22, 2023
1 parent 44a9039 commit 5c9256c
Showing 1 changed file with 1 addition and 1 deletion.
2 changes: 1 addition & 1 deletion README.MD
Original file line number Diff line number Diff line change
@@ -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).
Expand Down

0 comments on commit 5c9256c

Please sign in to comment.