Vladimir_T
Dec 5 2006, 13:31
Почему при обращении к внешней памяти, данные не стробируются сигналами WR/RD? Вот код, но что-то не учел, подскажите, пожалуйста... Давно бьюсь, документацию до дыр зачитал....
#define write_reg_addr 0x2000
MCUCR |= 1 << SRE; // enable external static memory
SFIOR |= 1 << XMBK; // enable bus keeper
SFIOR &= ~((1 << XMM0) | (1 << XMM1)); //enable section
*(byte*)write_reg_addr = 0x01; // Test XRAM
Vladimir_T
Dec 5 2006, 18:16
Когда сбрасываешь флаг доступа к внешней памяти, то сигналы появляются. Все работает
MCUCR &= ~(1 << SRE); // disable external static memory
Непонял... Это что же получается: бит SRE в MCUCR работает строго наоборот, чем описано об этом в документации? Какое тогда его значение после сброса? По документам - ноль. Если и у Вас - также, то как mega162 нормально работает с портами PA, PC, PD7...PD6 в случае, если бит SRE никто не изменяет?
defunct
Dec 5 2006, 21:19
IAR сам инициализирует шину памяти.
General Options -> System ->Enable External Memory Bus
Для M162 IAR по-умолчанию инициализирует шину вот таким вот образом:
LDI R16, 0xC0 // <-- (1 << SRE) | (1 << SRW10)
OUT MCUCR, R16
проект с такой инициализацией уже давно в серии,
вероятно Вам стоит поискать проблему где-то в другом месте,
возможно Fuse бит M161C у Вас запрограммирован.
Vladimir_T
Dec 6 2006, 07:36
Спасибо за помощь. Fuse бит M161C, действительно установлен. Проверил в настройках проекта
General Options -> System ->Enable External Memory Bus,
шина автоматически не инициализируется. но ведь утром программа заработала как надо, с инициализацией, как описал в посте #1. Странно это. Очень даже...
Проверял, конечно, по включении линии PA , PC инициализируютя как порты, а при установке бита SRE, они инициализируются как шина XMEM - все как описано в документе.
Так, может быть, все дело в fuse M161C? В mega161 нет работы с внешней памятью - вот работа с ней в mega162 в режиме совместимости с mega161 и происходит как-то криво?
Для просмотра полной версии этой страницы, пожалуйста,
пройдите по ссылке.