Все только за!SfS wrote:Кстати - может статью в следующий номер NedoPC тиснуть о написании программного UARTа и драйвера клавиатуры ? Никто не против ?

Moderator: Shaos
Еще не все. Драйвер сырой. И ОС тоже надо поставить переработанную.Shaos wrote: Теперь у нас все есть, чтобы воплотить проект NedoPC-PROTO2 в жизнь! Статью конечно пиши - опубликуем.
Насчет статьи идея такая. Не циклиться на клавиатуре. Там собственно ничего интересного нет - просто таблица перекодировки и все. Вся соль была - скорость подобрать и коди клавишь выписать.Mac Buster wrote:Все только за!SfS wrote:Кстати - может статью в следующий номер NedoPC тиснуть о написании программного UARTа и драйвера клавиатуры ? Никто не против ?
Принимается. Только еще опиши поподробнее пример с общением между PC и AVR по последовательному порту (со стороны PC к примеру будем иметь HyperTerminal).SfS wrote:Насчет статьи идея такая. Не циклиться на клавиатуре. Там собственно ничего интересного нет - просто таблица перекодировки и все. Вся соль была - скорость подобрать и коди клавишь выписать.Mac Buster wrote:Все только за!SfS wrote:Кстати - может статью в следующий номер NedoPC тиснуть о написании программного UARTа и драйвера клавиатуры ? Никто не против ?
Тема примерно такая "Последовательный интерфейс связи между устройствами. Аппаратно-программная поддержка."
И три части сделать.
1. Подробное описание последовательного протокола. Так сказать "чтобы дворнику понятно было".
2. Обзор возможностей AVR в этом плане. Описание аппаратного UART и работы с ним (с примером драйвера для ОС).
3. Эмуляция UART с помощью таймера и прерывания (типа подзаголовка "что делать если UARTов не хватает?"). Подробное описание как реализован программный UART, почему написан именно такой код, а не иной (там есть ньюансы в плане скорости).
Так же - предложения и замечания приветствуются. Пока идея вылеживается
Лично я пользуюсь линуксовой самописной програмулиной. Окно терминала делится на две части. В верхнюю идет весь ввод с клавиатуры и по Enterу выводится в ком-порт. В нижнюю отабражается весь ввод с компорта. Примитивно и просто. Но для устройств, где на компорту только Rx и Tx - вполне подходит. Впрочем дописать ее нетрудно. Могу выложить, если надо.Mac Buster wrote:Ни кто не знает достойной замены Hyper Terminal-у ? Что-то он мне страшно не нравится...Shaos wrote:Только еще опиши поподробнее пример с общением между PC и AVR по последовательному порту (со стороны PC к примеру будем иметь HyperTerminal).
Лично я пользуюсь терминалкой Tera Term Pro.Mac Buster wrote:Ни кто не знает достойной замены Hyper Terminal-у ? Что-то он мне страшно не нравится...
А оно у меня не собираетсяSfS wrote:Вот тут лежит версия NedoPC-90.AVROS с поддержкой клавиатурки.
http://www.nedopc.org/nedopc/upload/Ned ... st.tar.bz2
Она полностью сконфигурирована для тестовой программки по AT90S8535. Программка читает символ с клавиатуры и
(с учетом CapsLook и Fn) выводит его в поледовательный порт.
Клавиатура подключается к ноге INT0 процессора.
Коды всех служебных клавиш можно посмотреть в файле ../hl/keypad40.h
Схема сопряжения и коды всех клавиш лежат в ../hl/doc.hl/keypad40.txt
Также добавлен модуль поддержки таймера-1.
Клавиатура пока работает только через программный UART, который настроен только на прием (в общем не UART, а UAR).
Как появится макет с двумя UARTами добавлю поддержку клавиатуры через аппаратный UART.
В общем "на посмотреть" все работает - но кое что еще буду править. Всетаки за несколько часов все не отладить
In file included from hl/timer0.c:6,
from hl/__tmpsrc__.c:2:
/usr/include/avr/signal.h:7:2: warning: #warning "please include sig-avr.h instead"
In file included from hl/__tmpsrc__.c:14:
hl/keypad40.c: In function `keypad40_puart_init':
hl/keypad40.c:42: invalid lvalue in assignment
hl/keypad40.c: In function `keypad40_puart_int_handler':
hl/keypad40.c:56: `OCR1A' undeclared (first use in this function)
hl/keypad40.c:56: (Each undeclared identifier is reported only once
hl/keypad40.c:56: for each function it appears in.)
hl/keypad40.c:57: `TCNT1' undeclared (first use in this function)
hl/keypad40.c: In function `keypad40_puart_timer_handler':
hl/keypad40.c:74: `OCR1A' undeclared (first use in this function)
hl/keypad40.c:75: `TCNT1' undeclared (first use in this function)
hl/keypad40.c: In function `keypad40_getch':
hl/keypad40.c:221: warning: implicit declaration of function `pgm_read_byte'
make: *** [create_hl] Ошибка 1
Очевидно по какойто причине не подключается файл io8535.h. Или ты под что его собрать пытаешься ?Shaos wrote: А оно у меня не собирается
In file included from hl/timer0.c:6,
from hl/__tmpsrc__.c:2:
/usr/include/avr/signal.h:7:2: warning: #warning "please include sig-avr.h instead"
In file included from hl/__tmpsrc__.c:14:
hl/keypad40.c: In function `keypad40_puart_init':
hl/keypad40.c:42: invalid lvalue in assignment
hl/keypad40.c: In function `keypad40_puart_int_handler':
hl/keypad40.c:56: `OCR1A' undeclared (first use in this function)
hl/keypad40.c:56: (Each undeclared identifier is reported only once
hl/keypad40.c:56: for each function it appears in.)
hl/keypad40.c:57: `TCNT1' undeclared (first use in this function)
hl/keypad40.c: In function `keypad40_puart_timer_handler':
hl/keypad40.c:74: `OCR1A' undeclared (first use in this function)
hl/keypad40.c:75: `TCNT1' undeclared (first use in this function)
hl/keypad40.c: In function `keypad40_getch':
hl/keypad40.c:221: warning: implicit declaration of function `pgm_read_byte'
make: *** [create_hl] Ошибка 1
Все тоже. Я просто собираю то что в архиве. В makefile поправил только -I к инклудникам AVR-a.SfS wrote:Очевидно по какойто причине не подключается файл io8535.h. Или ты под что его собрать пытаешься ?
Попробуй в Makefile дописать
AVR-INC= -I/usr/include/avr \
--include avr/io.h \
--include system/compincs.h \ # удалить !!!!
--include system/sysdef.h \
--include string.h \
--include stdio.h \
--include stdlib.h \
--include ina90.h # добавить !!!
Или напрямую
AVR-INC= -I/usr/include/avr \
--include avr/io.h \
--include system/compincs.h \
--include system/sysdef.h \
--include string.h \
--include stdio.h \
--include stdlib.h \
--include io8535.h \
--include pgmspace.h
Это навскидку. попробуешь - скажи что получилось. И под что собираешь конкретно ?
хм..хм...Shaos wrote:/usr/include/avr/signal.h:7:2: warning: #warning "please include sig-avr.h instead"
In file included from hl/__tmpsrc__.c:14:
hl/keypad40.c: In function `keypad40_puart_init':
hl/keypad40.c:42: invalid lvalue in assignment
hl/keypad40.c: In function `keypad40_puart_int_handler':
hl/keypad40.c:56: `OCR1A' undeclared (first use in this function)
hl/keypad40.c:56: (Each undeclared identifier is reported only once
hl/keypad40.c:56: for each function it appears in.)
hl/keypad40.c:57: `TCNT1' undeclared (first use in this function)
hl/keypad40.c: In function `keypad40_puart_timer_handler':
hl/keypad40.c:74: `OCR1A' undeclared (first use in this function)
hl/keypad40.c:75: `TCNT1' undeclared (first use in this function)
hl/keypad40.c: In function `keypad40_getch':
hl/keypad40.c:221: warning: implicit declaration of function `pgm_read_byte'
Старая версия AVROS ведь у меня нормально собиралась - я с тех пор ничего не менял:SfS wrote:хм..хм...Shaos wrote:/usr/include/avr/signal.h:7:2: warning: #warning "please include sig-avr.h instead"
In file included from hl/__tmpsrc__.c:14:
hl/keypad40.c: In function `keypad40_puart_init':
hl/keypad40.c:42: invalid lvalue in assignment
hl/keypad40.c: In function `keypad40_puart_int_handler':
hl/keypad40.c:56: `OCR1A' undeclared (first use in this function)
hl/keypad40.c:56: (Each undeclared identifier is reported only once
hl/keypad40.c:56: for each function it appears in.)
hl/keypad40.c:57: `TCNT1' undeclared (first use in this function)
hl/keypad40.c: In function `keypad40_puart_timer_handler':
hl/keypad40.c:74: `OCR1A' undeclared (first use in this function)
hl/keypad40.c:75: `TCNT1' undeclared (first use in this function)
hl/keypad40.c: In function `keypad40_getch':
hl/keypad40.c:221: warning: implicit declaration of function `pgm_read_byte'
Слушай - напиши свою версию avr-glibc.
Далее - проверь в инклюднике /usr/include/avr/avr/io8535.h наличие определенй:
* Timer/Counter 1 */
#define TCNT1 _SFR_IO16(0x2C)
#define TCNT1L _SFR_IO8(0x2C)
#define TCNT1H _SFR_IO8(0x2D)
/* Timer/Counter1 Output Compare Register A */
#define OCR1A _SFR_IO16(0x2A)
#define OCR1AL _SFR_IO8(0x2A)
#define OCR1AH _SFR_IO8(0x2B)
Маловероятно, но может быть у тебя макросы регистров подругому определены. Имена в смысле другие.
Если все это есть - попробуй в файл ../system/sysdef.h
перед самым первым инклюдом добавить строчки
#include <avr/io8535.h>
#include <avr/pgmspace.h>
Это некорректно, но поможет установить где собака зарыта. И собрать программу.
попробуй строчку инклюдников.Shaos wrote: Старая версия AVROS ведь у меня нормально собиралась - я с тех пор ничего не менял:
binutils-2.13.2.1
gcc-3.2.3
avr-libc-20020203