Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: I2C от opencores
Форум разработчиков электроники ELECTRONIX.ru > Программируемая логика ПЛИС (FPGA,CPLD, PLD) > Системы на ПЛИС - System on a Programmable Chip (SoPC)
alexPec
Всем доброго дня. Прицепил к системе I2c отсюда http://opencores.org/project,i2c

Цепляется к ниосу через avalon-mm как на рисунке

В ниосе делаю так:

Код
    IOWR_8DIRECT(I2C_PORT_BASE,2,0);//Dasable i2c
    IOWR_8DIRECT(I2C_PORT_BASE,0,0);//load prescaler (inclk=50MHz, out=100kHz*5)
    IOWR_8DIRECT(I2C_PORT_BASE,1,0x63);
    IOWR_8DIRECT(I2C_PORT_BASE,2,0x80);//Enable I2C
    IOWR_8DIRECT(I2C_PORT_BASE,3,0xa0);//Device adress (24LC00)
    IOWR_8DIRECT(I2C_PORT_BASE,4,0x90);//Start&WR
    uuu=2;
    while ((uuu&0x2)!=0)  //Wait for complete
        uuu=IORD_8DIRECT(I2C_PORT_BASE,4);
    IOWR_8DIRECT(I2C_PORT_BASE,3,0xe);//memeory adress
    IOWR_8DIRECT(I2C_PORT_BASE,4,0x10);//WR
    uuu=2;
    while ((uuu&0x2)!=0) //Wait for complete
        uuu=IORD_8DIRECT(I2C_PORT_BASE,4);
    IOWR_8DIRECT(I2C_PORT_BASE,3,0xa5);//Data
    IOWR_8DIRECT(I2C_PORT_BASE,4,0x50);//WR&stop
    uuu=2;
    while ((uuu&0x2)!=0)//Wait for complete
        uuu=IORD_8DIRECT(I2C_PORT_BASE,4);


Из статуса всегда читается 0, на линиях i2c нет никакой активности вообще.
Что сделано не так, подскажите кто пользовал ?
iosifk
Цитата(alexPec @ Apr 13 2013, 21:10) *
Из статуса всегда читается 0, на линиях i2c нет никакой активности вообще.
Что сделано не так, подскажите кто пользовал ?

1. Насколько я помню, I2C шина не с третьим сосоянием, а с отрытым коллектором.
2. Может при симуляции нужет подпор?
alexPec
Цитата(iosifk @ Apr 13 2013, 22:01) *
1. Насколько я помню, I2C шина не с третьим сосоянием, а с отрытым коллектором.
2. Может при симуляции нужет подпор?


1. Ну да, но если 2 открытых коллектора - это третье состояние (если убрать внешний резистор)
2. Я не симулирую, я в железе проверяю. Там резисторы ноги подтягивают к плюсу. Сигнал тапом прицепился к ногам контроллера I2c. На вход записывается все как надо - по нужным адресам нужные данные. На выходе - ничего не меняется.
FLTI
А почему не используете i2c_opencores_hw.tcl и не делеете через QSYS?
А затем .bsf, полученный в QSYS добавляете в .bdf.

У меня встречный вопрос: откуда Вы взяли функцию IOWR_8DIRECT ?
Не встречалась ли Вам функция записи/чтения по I2C Opencores в удобном виде, где в одной строке задаются три параметра:
1). адрес,
2). субадрес
3). что записывается по данному адресу/субадресу и что читается


alexPec
Цитата(FLTI @ May 30 2014, 09:36) *
А почему не используете i2c_opencores_hw.tcl и не делеете через QSYS?
А затем .bsf, полученный в QSYS добавляете в .bdf.

У меня встречный вопрос: откуда Вы взяли функцию IOWR_8DIRECT ?
Не встречалась ли Вам функция записи/чтения по I2C Opencores в удобном виде, где в одной строке задаются три параметра:
1). адрес,
2). субадрес
3). что записывается по данному адресу/субадресу и что читается


Я в Q91 сижу, там еще нет I2C
IOWR_8DIRECT - взял из темплейт проекта memory test. Там и IOWR_8DIRECT и IOWR_16DIRECT и IOWR_32DIRECT есть.

А насчет такой функции - тоже хотел такое сделать, но как то не универсально получается. У кого-то субадрес 8-ми битный, у кого-то 16-ти. Проще на программном уровне - ресурсов не на много больше съест
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.