Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Проблема с интерфейсом I2C
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему
Via4eslav
Привет всем заглянувшим)
Пытаюсь организовать интерфейс I2C между lpc2106 и eeprom 24LC16B(не по прерываниям). Запись байта вроде бы проходит. Только не знаю, как проверить?? Чтение воплощаю через random read. По статусным кодам весь процесс протекает хорошо. Но вместо нужного мне байта в регистре I2DAT находится предыдущая информация (0xA1). Как достать нужный мне байт??? Кстати, среда программирования CrossWorks 1.3.
Контрольные вопросы:
1.Как проверить пишутся данные в ПЗУ, если чтение не удается??
2.Разумно ли пользоваться отладчиком в таких задачах??
3.Как прочитать байт из внешнего ПЗУ??
Вот кусок проги :

I2CONSET=(1<<I2C_STA); // повторное состояние старт
I2CONCLR=(1<<I2C_SI); // сброс бита прерывания
I2CONCLR=(1<<I2C_STA); // чистим бит старта
I2DAT=0xa1; // операция на чтение
I2CONCLR=(1<<I2C_SI); // сброс бита прерывания
data=I2DAT; // тут вся проблема: data =0xa1, вместо нужного мне записанного байта
rv3dll(lex)
Цитата(Via4eslav @ Apr 1 2007, 14:26) *
Привет всем заглянувшим)
Пытаюсь организовать интерфейс I2C между lpc2106 и eeprom 24LC16B(не по прерываниям). Запись байта вроде бы проходит. Только не знаю, как проверить?? Чтение воплощаю через random read. По статусным кодам весь процесс протекает хорошо. Но вместо нужного мне байта в регистре I2DAT находится предыдущая информация (0xA1). Как достать нужный мне байт??? Кстати, среда программирования CrossWorks 1.3.
Контрольные вопросы:
1.Как проверить пишутся данные в ПЗУ, если чтение не удается??
2.Разумно ли пользоваться отладчиком в таких задачах??
3.Как прочитать байт из внешнего ПЗУ??
Вот кусок проги :

I2CONSET=(1<<I2C_STA); // повторное состояние старт
I2CONCLR=(1<<I2C_SI); // сброс бита прерывания
I2CONCLR=(1<<I2C_STA); // чистим бит старта
I2DAT=0xa1; // операция на чтение
I2CONCLR=(1<<I2C_SI); // сброс бита прерывания
data=I2DAT; // тут вся проблема: data =0xa1, вместо нужного мне записанного байта

может это адрес устройства?
Via4eslav
в А1 содержится номер блока, а адрес блока передается раньше.
почему не обновляется регистр данных??? А1 предыдущее содержимое регистра..
rumit2000
А имеется ли возможность осцилоскопом поглядеть - что происходит?
Сергей Борщ
Цитата(Via4eslav @ Apr 2 2007, 06:23) *
в А1 содержится номер блока, а адрес блока передается раньше. почему не обновляется регистр данных??? А1 предыдущее содержимое регистра..
Дайте весь минимально необходимый код. В ваших строчках не видно ожидания окончаний обмена. и еще:
I2CONCLR=(1<<I2C_SI); // сброс бита прерывания
I2CONCLR=(1<<I2C_STA); // чистим бит старта
лучше объединить в одну команду I2CONCLR=(1<<I2C_SI)|(1<<I2C_STA);
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.