Jump to content

    

zombi

Свой
  • Content Count

    3502
  • Joined

  • Last visited

Everything posted by zombi


  1. В СИ не пишу. Вот так на асме делаю. Работает. ; RH,RL - адрес ; RA - данные WREPR: SBIC EECR,1 RJMP WREPR OUT EEARH,RH OUT EEARL,RL OUT EEDR,RA SBI EECR,2 SBI EECR,1 RET
  2. Я бы вот так попробывал void led(void){ sbi(PORTA,PA4); _delay_us(50); cbi(PORTA,PA4); _delay_us(50); } int main(void) { sbi(DDRA,PA4); while(1) { led(); } }
  3. Спасибо XVR за проверку. Понятно что таблицу можно и заранее сформировать. Меня интересовало правильно ли я алгоритм формирования таблицы и рассчета срс на паскале повторил.
  4. Вот именно, нужен какой нибудь тест озу! Ну не простож написать "RAM test" и через какоето время "completed" можнож в это время и потестить ченить Спасибо Rst7 за идею, будем ее думать :rolleyes:
  5. В таком случае я протестирую только одну ячейку памяти, а хотелось бы всю память протестить. Да память SRAM, страниц нету.
  6. Спасибо за разьяснение! Еслиб я знал это раньше по кучу неиспользуемых ног на землю бы посадил, но теперь поздно. EPM3256 подключена к "HIGH-SPEED ASYNCHRONOUS CMOS STATIC RAM WITH 3.3V SUPPLY" а я даже не знаю на что назначены пины, а как правильно назначить пины для работы альтеры с такой памятью???
  7. Нужно проверить именно работоспособность RAM а не достоверность находящихся в ней данных! Проверить нуно хотябы что нет кз по ШД т.е. по любому адресу пишется и читается правильно $00,$FF,$55,$AA
  8. Имеется система AVR и внешняя энергонезависимая RAM 32Kb. Как можно протестировать RAM на работоспособность, но так чтобы в случае выключения питания во время теста не испортить содержимое RAM?
  9. Спасибо, приму к сведению! Разьясните плиз: что значит "тяжелый" режим и какая польза от использования этих выходов как КМОП в нуле???
  10. Был создан проэкт и разведена PCB для EPM3256ATC-144. Можно ли использовать в устройстве EPM7256AETC-144 если четыре пина (26,77,94,114-> gnd у ерм3256) в новом проэкте для epm7256a назначить входами???
  11. Спасибо Всем! Но меня очень интересует Ваше мнение на мой вопрос в сообщении #12
  12. Исходник на СИ : unsigned long Crc32(unsigned char *buf, unsigned long len) { unsigned long crc_table[256]; unsigned long crc; for (int i = 0; i < 256; i++) { crc = i; for (int j = 0; j < 8; j++) crc = crc & 1 ? (crc >> 1) ^ 0xEDB88320UL : crc >> 1; crc_table[i] = crc; }; crc = 0xFFFFFFFFUL; while (len--) crc = crc_table[(crc ^ *buf++) & 0xFF] ^ (crc >> 8); return crc ^ 0xFFFFFFFFUL; }; Переписал на Паскале var data:array[0..$ffff] of byte; { подготовка массива data[] } { Считает crc в массиве data[] от start до endd } procedure CRC32(start,endd:word):dword; var crc_table:array [0..255] of dword; crc:dword; i,j:word; begin for i:=0 to 255 do begin crc:=i; for j:=0 to 7 do if (crc and 1)=1 then crc:=((crc shr 1) xor $EDB88320) else crc:=crc shr 1; crc_table[i]:=crc; end; crc:=$FFFFFFFF; for i:=start to endd do begin crc:=(crc_table[(crc xor data[i]) and $ff]) xor (crc shr 8); end; CRC32:=crc xor $FFFFFFFF; end; Поправьте меня если ошибся.
  13. Спасибо aaarrr, теперь все понятно :yeah: Ув. программеры подскажите правильно ли я конвертировал этот код с си: unsigned char ser_data; static unsigned int crc; crc = (unsigned char)(crc >> 8) | (crc << 8); crc ^= ser_data; crc ^= (unsigned char)(crc & 0xff) >> 4; crc ^= (crc << 8) << 4; crc ^= ((crc & 0xff) << 4) << 1; на паскаль var ser_data:byte; crc:word; begin crc:=(crc shr 8) or (crc shl 8); crc:=crc xor ser_data; crc:=crc xor ((crc and $00f0) shr 4); crc:=crc xor (crc shl 12); crc:=crc xor ((crc and $00ff) shl 5); end; Просто паскаль ближе мне для понимания. А затем уже и на асме повторим.
  14. Мне тоже кажется что первая строчка это просто обмен местами старшего и младшего байта. Но следующая строка : crc ^= ser_data; Это просто присвоение? Если да, то нафига крутить вертеть в первой строке? А что означает "^" перед знаком равенства?
  15. Спасибо Nickolya_K. А дай пожалуйста ссылочку на Application Note 27 от Dallas! // Update the CRC for transmitted and received data using // the CCITT 16bit algorithm (X^16 + X^12 + X^5 + 1). unsigned char ser_data; static unsigned int crc; crc = (unsigned char)(crc >> 8) | (crc << 8); crc ^= ser_data; crc ^= (unsigned char)(crc & 0xff) >> 4; crc ^= (crc << 8) << 4; crc ^= ((crc & 0xff) << 4) << 1; Спасибо Pasha. Но не силен я в СИ ! Я тока понял что на входе "unsigned char"-байт на выходе "unsigned int"-слово тобиш CRC16, или нет!? Помогите разжевать вот эту запись плиз : crc = (unsigned char)(crc >> 8) | (crc << 8);
  16. Ув. форумчане, посоветуйте какой нибудь желательно не сложный но надежный и быстрый алгоритм рассчета CRC блока RAM. Очень важна скорость расчета. Размер блока может быть от 0.1 до 32 Кб. Сейчас я планирую просто просуммировать весь блок ка 4-х байтные числа, в результате буду иметь КС 4 байта. Но боюсь что такой метод не очень надежен. Читал про алгоритмы типа MD5... др. прикинул сколько кода понадобится для его реализации на асме авра и понял что время расчета будет очень большим, а мне нужно чем побыстрее.
  17. Ой, сорри. Я думал что установлен RSTDISBL которого у 162меги нету :laughing: Может у мег внутр. генератор и хорош, но у меня както повелось еще с ат90-х всегда ставить внешний супервизор и генератор, может это и перестраховка зато с этими узлами никогда небыло проблем и я уверен в стабильности поскольку требования довольно высокие :rolleyes:
  18. Если включен внутренний BOD, то абсолютно все равно че происходит на ноге сброса и тем более происходит оно медленно или быстро! А вот от использования кварцев давнооо отказался, токо внешний генератор!
  19. Прошу прощения за поднятую бучу! Все оказалось гораздо проще. Ко входу D.4 подключен выход сдвигового регистра 74hc157. Опрос пина был сразу после строба SCK и регистр просто не успевал переключится. Частота процессора 16MHz а у регистра время установления выхода большое вот от он то успевал то нет. А команда CLI просто добавляла необходимую задержку :laughing: Но благодаря defunct возможно сразу избежал следующего косяка с прерываниями: Если время выполнения прерывания TIM1 окажется больше чем период TIM2 то возможен повторный вход в в TIM2. Устранил эту ситуацию запретом прерывания по TIM2 путем записи в TIMSK на старте и последующим разрешением на выходе. TIM2: PUSH RTMPA LDI RTMPA,$40 OUT TIMSK,RTMPA SEI IN RTMPA,SREG PUSH RTMPA . . . POP RTMPA OUT SREG,RTMPA LDI RTMPA,$50 CLI OUT TIMSK,RTMPA POP RTMPA RETI
  20. Не думаю что я гдето порчу RTMPA ведь с CLI/SEI нечего не портится!!! Всетаки мне кажется проблема с входом в прерывание в момент выполнения SBIC/S возможно даже именно с PIND.4. В любом случае экспериментировать надоело , запрет/разрешение прерываний спасает и пару лишних тактов не жмет, работает и бог с ним. :rolleyes:
  21. avrasm.exe

    О спасибо. Но на сайте атмела не могу чето их найти. SergeyTT поскажи где скачать можно?
  22. Конечно с таблицей векторов и POPами PUSHами все впорядке. Это просто апычатки :laughing: sorry.
  23. avrasm.exe

    Существует ли более свежая версия транслятора чем AVRASM: AVR macro assembler version 1.30 (Jan 27 1999 01:30:00)
  24. Спасибо всем ответившим. Через рег тоже пробывал, не помогло. А что с выходом из TIM0? Если вы имеете ввиду RET а не RETI то я же прерывания разрешаю в теле обратотчика. Ув. _Pasha подскажите что не правильно в инициализации TIM0? Просто я всегда так инициализирую, подскажите где ошибка. Незнаю. Надо попробывать . Спасибо defunct. Но думаю что прерывание должно срабатывать по фронту? Но даже еслиб вход выполнялся несколько раз то в мл.бите регистра RTMPA всеравно должна быть единица ведь состояние PIND.4 стабильно. Попробывал. Результат отрицательный. Глюки продолжаются. И так пробывал но тоже глючит. Глюки исчезают только если CLI находится перед LSL или еще раньше, но никак не перед SBIC: ;************* CBI PORTB,7 SBI PORTB,7 CLI <---------------------- LSL RTMPA SBIC PIND,4 ORI RTMPA,$01 SEI <---------------------- ;*****