Hi All,
Подключил я флэшку AT49F040 к AVR 8515 по стандартной схеме (как внешнюю SRAM), старшие три разряда к порту B подпаял. Но никак не получается записать во флэшку и похоже стереть тоже (проверить последнее сложнее, т.к. программатора для такой флэшки у меня нет). При чтении байта значение равно
0xFF, но опять же IMHO это ничего не значит.char __low_level_init() { DDRD = 0xE3; // initialise port D as O/I, all OUT except PD2,PD3,PD4 DDRB = 0xFF; // initialise port B as Output PORTB = 0; PORTD = 0; // external SRAM enabled, rising edge of INT0 and INT1 MCUCR = ( (1<<SRE) | (1<<SRW) | (1<<ISC11) | (1<<ISC10) | (1<<ISC01) | (1<<ISC00) );
ACSR |= 1<<ACD; // shut down comparator to save power
OCR1AH = 0; OCR1AL = 3; TCCR1A = 0; // Counter1 disconnected from output pin OC1B TCCR1B = ( (1<<CTC1) | (1<<CS10) ); // CK
/* Return 1 to indicate that normal segment */ /* initialization should be performed. If */ /* normal segment initialization should not */ /* be performed, return 0. */ return 1; }
long g_counter; // счетчик обращений к внешней памяти // составной указатель к ячейке внешней памяти unsigned char *addr_low; unsigned char addr_high;
void WriteByte(unsigned char ch) { if ( g_counter == EXT_SRAM_SIZE ) return; g_counter++; if ( addr_low == EXT_SRAM_END ) { addr_low = EXT_SRAM_BASE; addr_high++; } else { addr_low++; } PORTB &= 0x1F; // предварительно выполняем команды для записи байта cImage[0x5555] = 0xAA; cImage[0x2AAA] = 0x55; cImage[0x5555] = 0xA0; PORTB |= (addr_high << 5); *addr_low = ch;
delay_us(50); }
З.Ы. Самое смешное и больное ТО, что я уже запарился искать причину неработоспособности всего этого. З.Ы.Ы. Флэшка КМОП, а вот регистр-защелка ТТЛ (Кр1533ИР22) - вопрос к спецам: может быть в этом косяк???