|
Подключение внешней памяти через мультиплексированную шину, ATMEGA128 чтение, запись из внешней памяти |
|
|
|
Dec 22 2005, 09:21
|
Участник

Группа: Участник
Сообщений: 47
Регистрация: 12-05-05
Пользователь №: 4 940

|
Подскажите пожалуйста как обратится к внешней памяти, используя альтернативные выводы (ALE, WR, RD)? Работаю в CodeVision
........
MCUCR = 0x80; // Разрешаем работу с внешним ОЗУ
XMCRB = 0x07; // Адресные выводы порта С A8...A15 не использовать
а вот как прочитать записать по определенному адресу? Подскажите пожалуйста.
|
|
|
|
|
Dec 22 2005, 11:03
|
Участник

Группа: Участник
Сообщений: 47
Регистрация: 12-05-05
Пользователь №: 4 940

|
Честно говоря я использую не память, а контроллер USB ISP1581, который использует такой же интерфейс - мультиплексированную шину адреса/данных. Вот не совсем понятно как прочитать, записать байт по определенному адресу.
|
|
|
|
|
Dec 22 2005, 11:58
|

Профессионал
    
Группа: Свой
Сообщений: 1 301
Регистрация: 30-11-04
Из: Россия, Н.Новгород
Пользователь №: 1 264

|
Цитата(nagserg @ Dec 22 2005, 14:03)  Честно говоря я использую не память, а контроллер USB ISP1581, который использует такой же интерфейс - мультиплексированную шину адреса/данных. Вот не совсем понятно как прочитать, записать байт по определенному адресу. Посмотрите блок схему подключения USB ISP1581 к микроконтроллеру. http://www.gaw.ru/html.cgi/txt/publ/interface/usb.htmи соотнесите адресное пространство внешней памяти своего микроконтроллера с имеющимися адресамиадресами в USB ISP1581. Писать и читать ячейки данной памяти (USB ISP1581), точно так же как и память внутреннюю. Можете объявить ее, как массив или присвоить начальной области значение указателя. А наверняка там имеются и регистры управления, для инициализации устройства. Лучше всего организовать структуру в которой бы описывалась внутренняя организация регистров и ячеек памяти для данных. Для компилятора надо указывать тип данных, как внешняя память.
--------------------
Не корысти ради, не в целях наживы, а во исполнение велений души!
|
|
|
|
|
Dec 22 2005, 12:58
|
Знающий
   
Группа: Свой
Сообщений: 709
Регистрация: 3-05-05
Пользователь №: 4 693

|
Цитата XMCRB = 0x07; // Адресные выводы порта С A8...A15 не использовать Круто... У м128, ваще-то, 4К нутрянной мемори. Так что из А8...А15, кой-кого пользовать, таки, придёцца ;О) Ымею в виду, что-нить типа CS для внешней микрухи. Ну и писать, соотвецтвенно, в память выше $1100, предварительно опустив/подняв CS в нуную позу. Вот.
|
|
|
|
|
Dec 22 2005, 13:03
|
Участник

Группа: Участник
Сообщений: 47
Регистрация: 12-05-05
Пользователь №: 4 940

|
Цитата(BVU @ Dec 22 2005, 14:58)  Цитата(nagserg @ Dec 22 2005, 14:03)  Честно говоря я использую не память, а контроллер USB ISP1581, который использует такой же интерфейс - мультиплексированную шину адреса/данных. Вот не совсем понятно как прочитать, записать байт по определенному адресу.
Посмотрите блок схему подключения USB ISP1581 к микроконтроллеру. http://www.gaw.ru/html.cgi/txt/publ/interface/usb.htmи соотнесите адресное пространство внешней памяти своего микроконтроллера с имеющимися адресамиадресами в USB ISP1581. Писать и читать ячейки данной памяти (USB ISP1581), точно так же как и память внутреннюю. Можете объявить ее, как массив или присвоить начальной области значение указателя. А наверняка там имеются и регистры управления, для инициализации устройства. Лучше всего организовать структуру в которой бы описывалась внутренняя организация регистров и ячеек памяти для данных. Для компилятора надо указывать тип данных, как внешняя память. Вот например в ISP1581 есть адрес Mode 0x0C. Задача: записать в этот адрес какое-нибудь число, затем прочитать. Просто сначала хочу хотя бы это научится, потом буду думать как соотнести адресное пространство внешней памяти контроллера с адресами в USB1581
|
|
|
|
|
Dec 22 2005, 13:12
|
Знающий
   
Группа: Свой
Сообщений: 709
Регистрация: 3-05-05
Пользователь №: 4 693

|
Цитата от например в ISP1581 есть адрес Mode 0x0C. Задача: записать в этот адрес какое-нибудь число, затем прочитать. Код ... cbi portX,_CS_ISP1581_ ldi r16,direct_data sts $1100+$0c,r16 lds r16,$1100+$0c sbi portX,_CS_ISP1581_ ...
|
|
|
|
|
Dec 22 2005, 14:06
|
Участник

Группа: Участник
Сообщений: 47
Регистрация: 12-05-05
Пользователь №: 4 940

|
Спасибо огромное за ответы, смысл понятен, хотелось бы конечно на Си, а то я в ассемблере ни бум-бум.
|
|
|
|
|
Dec 25 2005, 23:56
|

кекс
     
Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326

|
Цитата(Rash @ Dec 22 2005, 11:51)  А какую внешню память в качестве ОЗУ используете, её тип? Используем SRAM. дешевые и доступные микросхемы UT621024-LL70, UT62256-LL70. Стандартная схема включения через защелки (LATCH). В качестве защелки используем отечественный 1533ИР22. А для работы с внешней памятью в C не требуется никаких специфических телодвижений.. MCUCR = ( 1 << SRE) и все.. на асме аналогично Код ldi al, (1 << SRE) out MCUCR, al и читать/писать ld/st, lds/sts как и внутренний SRAM. Читать с определенного адреса: Код ldi ZH, High( Определенный адрес) ldi ZL, Low( Определенный адрес) ld AL, Z на C будет типа такого: Код char* vp = (char *)Определенный Адрес; char a; a = *vp; // читать *vp = a; // писать
|
|
|
|
|
Dec 26 2005, 09:19
|
Участник

Группа: Участник
Сообщений: 47
Регистрация: 12-05-05
Пользователь №: 4 940

|
char* vp = (char *)Определенный Адрес; char a; a = *vp; // читать *vp = a; // писать
Так всё работает прекрасно, но вот возник такой вопрос: создана структура типа:
typedef union { unsigned char byte; struct { unsigned char b0 : 1; unsigned char b1 : 1; unsigned char b2 : 1; unsigned char b3 : 1; unsigned char b4 : 1; unsigned char b5 : 1; unsigned char b6 : 1; unsigned char b7 : 1; } bit_field; } as_bit_field_of_byte;
|
|
|
|
|
Dec 26 2005, 10:49
|
Участник

Группа: Участник
Сообщений: 47
Регистрация: 12-05-05
Пользователь №: 4 940

|
Цитата(nagserg @ Dec 26 2005, 12:19)  char* vp = (char *)Определенный Адрес; char a; a = *vp; // читать *vp = a; // писать
Так всё работает прекрасно, но вот возник такой вопрос: создана структура типа:
typedef union { unsigned char byte; struct { unsigned char b0 : 1; unsigned char b1 : 1; unsigned char b2 : 1; unsigned char b3 : 1; unsigned char b4 : 1; unsigned char b5 : 1; unsigned char b6 : 1; unsigned char b7 : 1; } bit_field; } as_bit_field_of_byte; Каким образом привязать адрес этой структуры к "Определенному адресу" char* vp = (char *)Определенный Адрес;
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|