Author |
Message |
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22821 Location: Silicon Valley
|
В доке нигде точно не написано в каких битах каких байтов сидят CKSEL и CKOPT. Ну предположим CKSEL я могу угадать - это младшие 4 бита Fuse Low Byte, т.к. там значение по умолчанию 0001 стоит, но вот где находится CKOPT я угадать не смогу - т.к. это один бит по умолчанию 1 который надо запрограммировать в 0
|
15 Apr 2006 18:34 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22821 Location: Silicon Valley
|
Обнаружил описание поиском в разделе "Memory Programming"
CKSEL как я ипредполагал - четыре младших бита во Fuse Low Byte
CKOPT - бит 4 во Fuse High Byte
Получается что для перепрограммирование чипа на использование внешнего кварца надо выполнить команду:
uisp -dprog=dapa --wr_fuse_l=0xee --wr_fuse_h=0xc9
|
15 Apr 2006 18:41 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22821 Location: Silicon Valley
|
Уррраааа! Заработала!
Досовская терминальная программа CONEX (запущенная на досовском ноуте, который подключён к NedoPC-90 через RS-232) печатает символ и его код, посланные с авра, правда похоже перевод строки идет без возврата каретки и они печатаются лесенкой:
Вставил в код программы \r\n вместо \n и оно поправилось - стало печатать в столбик
Сопутствующий вопрос - щас мы имеем тока вывод на терминал, а как сделать обоюдный обмен с терминалом, т.е. и возможность ввода тоже?
|
15 Apr 2006 18:56 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22821 Location: Silicon Valley
|
А minicom в линуксе я так и не могу настроить
Вроде все модемное обнулил - однако оно OFFLINE пишет всё время - на команду инициализации модема в правый нижний угол вешается красный квадратик и ничего не происходит, а на попытку набрать номер оно ругается что не может и пытается снова...
|
15 Apr 2006 19:42 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22821 Location: Silicon Valley
|
Вобщем переписал вывод на двухстрочный дисплей:
| | | | Code: //---------------------------------------------------------------------- // Main program //----------------------------------------------------------------------
int clflag = 0;
// StdOutput int stdoutc(char ch) { int i; #if 0 if(!uart0_wr(&ch)) {return(0);} else {return(-1);} #else if(ch=='\n') { wp1602_ni15_curat(0,1); clflag = -clflag; } if(ch>=0x20) { if(clflag < 0) { for(i=0;i<-clflag;i++) wp1602_ni15_outc(' '); wp1602_ni15_curat(0,1); clflag = 0; } wp1602_ni15_outc(ch); clflag++; } // wp1602_ni15_outsrom(PSTR("on WP1602A test.")); #endif return -1; }
void init(void) { wp1602_ni15_clear(); wp1602_ni15_curat(0,0); wp1602_ni15_outsrom(PSTR("NedoPC-90.AVROS")); wp1602_ni15_curat(0,1); stdout = fdevopen(stdoutc, NULL, 0); stderr = fdevopen(stdoutc, NULL, 0); printf("Stdio Inited\n"); }
//---------------------------------------------------------------------- // Main progam int main() {AUTOINIT_ALL_MODULES();
init(); int ch,c2; while(1) {ch=keypad40_getch(); printf("%c 0x%2.2X\n",ch,ch); } return(0); } //----------------------------------------------------------------------
| | | | |
Вот фотка одновременного теста клавиатурки и дисплейчика:
Теперь можно приступать к кодингу виртуальной машины RW0! Одно удручает - уже сейчас программа занимает 6296 байт, а ведь на борту их всего 8К
|
15 Apr 2006 21:09 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22821 Location: Silicon Valley
|
Заметил одну особенность - с включенным в компиляцию но не подсоединенным UART клавиатурка иногда подвисала. После того как отключил - подвисать перестала и размер кода уменьшился до 5404 байта.
|
15 Apr 2006 21:48 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22821 Location: Silicon Valley
|
Поддержка клавиатуры поддержана просто блестяще
SfS - ты настоящий герой недопцшного труда!
Есть предложение по доработке. Мне для реализации прототипа наладонника с языком программирования внутри потребовалось введение еще одной виртуальной раскладки клавиатуры, которая бы включалась в режиме Fn вместо обычной дополнительной раскладки, а также нужно на уровне приложения отдетектировать режим CapsLock. Чтобы сильно не коверкать код NedoPC-90.AVROS я предлагаю внести следующие изменения в код SfS:
в файле hl/keypad40.h надо вставить две строчки:
#define KEYPAD40_KEY_CAPS 0x07
и
#define KEYPAD40_KEY_FN2 0x0F
в файле hl/keypad40.c вместо строки:
0x17, KEYPAD40_KEY_BACKSPC, KEYPAD40_KEY_BACKSPC,
надо написать:
0x17, KEYPAD40_KEY_BACKSPC, KEYPAD40_KEY_FN2,
а также вместо строки:
0x19, ' ', ' ',
надо написать:
0x19, ' ', KEYPAD40_KEY_CAPS,
далее убираем вот это:
else if((ch==KEYPAD40_SPC_KDN) && KEYPAD40_F(KEYPAD40_Fn)){KEYPAD40_INVF(KEYPAD40_FCAPSLOOK);}
а в ветку получения кода символа в режиме Fn непосредственно перед return(ch); следует вставить вот это:
if(ch==KEYPAD40_KEY_CAPS) KEYPAD40_INVF(KEYPAD40_FCAPSLOOK);
После чего сочетание клавиш Fn+BackSp получит свой уникальный код, по которому моя предполагаемая надстройка над интерфейсом SfS-a включит режим "второго Fn" для реализации еще одной дополнительной раскладки (на картинке помечено зелёным):
Причём повторное нажатие Fn+BackSp вернет обратно обычный Fn-режим (на картинке помечено красным) - при этом светодиоды Fn1 и Fn2 будут соответственно зажигаться и гаснуть в соответствии с выбранным режимом.
Кроме того выбор режима CapsLock теперь может быть прочитано программой пользователя - что позволит программно зажечь соответствющий светодиод CapsLock. Если SfS посчитает что выдавать код этого действия наружу не всегда уместно - могу предложить обернуть это дело в #ifdef - чтобы по умолчанию код не возвращался на уровень юзера, а в моём приложении - будет возвращаться.
На уровне hl думаю надо оставить только две стандартные раскладки (с моим небольшим изменением). Всё-таки на уровне системы - это реализация поддержки конкретной клавиатурки без всяких дополнительных раскладок - дополнительный слой будет этажом выше - в программе на пользовательском уровне.
|
16 Apr 2006 18:33 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22821 Location: Silicon Valley
|
Будет примерно вот так:
| | | | Code: typedef unsigned char byte;
unsigned int count = 0;
void COUNTER() { count++; }
int clflag = 0;
// StdOutput int stdoutc(char ch) { int i; #if 0 if(!uart0_wr(&ch)) {return(0);} else {return(-1);} #else if(ch=='\n') { wp1602_ni15_curat(0,1); clflag = -clflag; } if(ch>=0x20) { if(clflag < 0) { for(i=0;i<-clflag;i++) wp1602_ni15_outc(' '); wp1602_ni15_curat(0,1); clflag = 0; } if(ch=='\\') ch=4; if(ch=='~') ch=5; wp1602_ni15_outc(ch); clflag++; } #endif return -1; }
byte symbol_04[8] PROGMEM = {0x00,0x10,0x08,0x04,0x02,0x01,0x00,0x00}; // '\' byte symbol_05[8] PROGMEM = {0x00,0x08,0x15,0x02,0x00,0x00,0x00,0x00}; // '~'
void init(void) { wp1602_ni15_setchar_rom(4,symbol_04); wp1602_ni15_setchar_rom(5,symbol_05); wp1602_ni15_clear(); wp1602_ni15_curat(0,0); wp1602_ni15_outsrom(PSTR("NedoPC-90.AVROS")); wp1602_ni15_curat(0,1); stdout = fdevopen(stdoutc, NULL, 0); stderr = fdevopen(stdoutc, NULL, 0); printf("Hello, World!\n"); output(DDRB,input(DDRB)|0x0F);_NOP();_NOP(); output(PORTB,0xF7); }
void led(byte i, byte s) { byte mask = 8>>i; byte newb = (input(PORTB)&(~mask)); if(!s) newb|=mask; output(PORTB,newb); }
#define led_clr(x) led(x,0) #define led_set(x) led(x,1)
byte sh_mode = 0;
char sh_getch(void) { char ch = 0; while(1) { ch = keypad40_getch(); if(ch==0x0F) // Fn switch { if(sh_mode&1) // Fn 2 { // set Fn 1 sh_mode = (sh_mode&0xFE); led_set(0); led_clr(1); } else // Fn 1 { // set Fn 2 sh_mode = (sh_mode&0xFE)|1; led_set(1); led_clr(0); } } else if(ch==0x07) // Caps { if(sh_mode&2) // Caps On { // set Caps Off sh_mode = (sh_mode&0xFD); led_clr(2); } else // Caps Off { // set Caps On sh_mode = (sh_mode&0xFD)|2; led_set(2); } } else break; } if(sh_mode&1) { // + 130 progam bytes if(ch=='/') ch='\\'; else if(ch==':') ch=';'; else if(ch=='(') ch='['; else if(ch==')') ch=']'; else if(ch==',') ch='<'; else if(ch=='.') ch='>'; else if(ch=='1') ch='~'; else if(ch=='2') ch='`'; else if(ch=='3') ch='#'; else if(ch=='4') ch='|'; else if(ch=='5') ch='%'; else if(ch=='6') ch='^'; else if(ch=='7') ch='&'; else if(ch=='8') ch='_'; else if(ch=='9') ch='{'; else if(ch=='0') ch='}'; } return ch; }
| | | | |
В знакогенераторе дисплея нету двух важных символов '\' и '~', для отображения которых пришлось ввести два символа устанавливаемых программно с кодами 4 и 5 соответственно - эти коды подменяют коды '\' и '~' в момент отправки их на печать.
|
16 Apr 2006 20:36 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22821 Location: Silicon Valley
|
по идее при таком способе переключения раскладок мне ненужно будет иметь два светодиода - одного с пометкой Fn2 будет вполне достаточно
|
17 Apr 2006 18:16 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22821 Location: Silicon Valley
|
Обдумываю подключение внешних ОЗУ и ПЗУ по шине NI-15 - пока предполагаю в таком модуле памяти иметь три адресуемых регистра внешней адресации R0, R1, R2 и один буфер обмена данными. Выходит что таким образом можно адресовать до 16 Мб. Также можно организовать возможность блочного чтения-записи, когда адрес будет инкрементироваться автоматически (хотя бы в пределах сегментов по 64 Кб). В этом адресном пространстве можно будет иметь байткод RW0 и переменные исполняемой виртуальной программы.
|
18 Apr 2006 05:53 |
|
|
cr0acker
God
Joined: 03 Feb 2003 13:53 Posts: 1078
|
Дык возьми пзухи с шино И2Ц.
_________________
Формат конференции позволяет сказать то что я действительно думаю о проблемах...
(с) Путин
|
18 Apr 2006 06:01 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22821 Location: Silicon Valley
|
Ага и сидеть ждать пока там побитно все будет заливать?
|
18 Apr 2006 09:56 |
|
|
cr0acker
God
Joined: 03 Feb 2003 13:53 Posts: 1078
|
Зачем у вас же ось. Некиц буфер в байт(или 2). По таймеру обращение с ПП заливания. Скорость передачи в и2ц может менятся. 500Кгц я думаю тебе хватит. БЫстрее код всё равно не заинтерпритируешь. Учти что скорость вывода на экран тоже ограничена, скоротость работы КБ1013ВГ6 совместимого контроллера.
_________________
Формат конференции позволяет сказать то что я действительно думаю о проблемах...
(с) Путин
|
18 Apr 2006 11:59 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22821 Location: Silicon Valley
|
Я буду интерпретировать быстрее (во всяком случае постараюсь), поэтому мне надо быстрый доступ к внешней памяти.
|
18 Apr 2006 14:34 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22821 Location: Silicon Valley
|
Подробнее о плате памяти NedoMemory-1 читаем тут
|
19 Apr 2006 19:31 |
|
|