[an error occurred while processing this directive]
Забыл сказать...
(«Телесистемы»: Конференция «Микроконтроллеры и их применение»)

миниатюрный аудио-видеорекордер mAVR

Отправлено Sot 29 сентября 2002 г. 19:58
В ответ на: Ответ: отправлено Владимир Н. 28 сентября 2002 г. 22:15

У меня были проблемы с попаданием в режим программирования, в связи с чем завел в качестве входа сигнал RST и опрашиваю его, если процессор действительно аппаратно (тумблером) перевели в него, только после этого посылаю в чип команду Programming Enable. Но даже в этом случае не всегда срабатывало, поэтому дополнительно пишу в последний байт EEPROM маркер и проверяю его, если совпал - считаю, что режим программирования установлен и перехожу к дальнейшим операциям. Здесь есть одно но, если чип залочен, перед записью маркера пытаюсь очистить его командой Erase. Код на C ниже:

void spi_open(char cmd) {
char i, rst = 1;

atexit(spi_close);

outp(port + 4, ~oSCK | ~oMOSI);

while(1) {

if(rst) cprintf("Take up RST key ...\n");

if(kbhit()) exit(EXIT_SUCCESS);

if(rst = inp(port + 6) & ~iRST) {

cprintf("Wait ");
delay(10);

for(i = 0; i < 30; i++) {

outp(port + 4, ~oSCK | ~oMOSI);

spi_out(0xAC);
spi_out(0x53); spi_out(0x53);
delay(1);

switch(cmd) {
case cERASE:
spi_out(0xAC);
spi_out(0x04); spi_out(0x04);
delay(32);

default:
spi_out(0x06 | (MARKADR >> 5 & 0x38)); spi_out(MARKADR);
spi_out(MARK);
delay(ms);

spi_out(0x05 | (MARKADR >> 5 & 0x38)); spi_out(MARKADR);
if(spi_in() == MARK) { cprintf(" Ok\n"); return; }
else cprintf(".");
break;
}
}
cprintf(" Error\n");
}
}
}

Составить ответ  |||  Конференция  |||  Архив

Ответы



Перейти к списку ответов  |||  Конференция  |||  Архив  |||  Главная страница  |||  Содержание  |||  Без кадра

E-mail: info@telesys.ru