реклама на сайте
подробности

 
 
> Проблема с интерфейсом I2C, Не могу считать байт
Via4eslav
сообщение Apr 1 2007, 13:26
Сообщение #1





Группа: Новичок
Сообщений: 2
Регистрация: 1-04-07
Пользователь №: 26 671



Привет всем заглянувшим)
Пытаюсь организовать интерфейс 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, вместо нужного мне записанного байта
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов (1 - 4)
rv3dll(lex)
сообщение Apr 1 2007, 19:39
Сообщение #2


Полное ничтожество
*****

Группа: Banned
Сообщений: 1 991
Регистрация: 20-03-07
Из: Коломна
Пользователь №: 26 354



Цитата(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, вместо нужного мне записанного байта

может это адрес устройства?
Go to the top of the page
 
+Quote Post
Via4eslav
сообщение Apr 2 2007, 07:23
Сообщение #3





Группа: Новичок
Сообщений: 2
Регистрация: 1-04-07
Пользователь №: 26 671



в А1 содержится номер блока, а адрес блока передается раньше.
почему не обновляется регистр данных??? А1 предыдущее содержимое регистра..
Go to the top of the page
 
+Quote Post
rumit2000
сообщение Apr 2 2007, 09:57
Сообщение #4


Частый гость
**

Группа: Свой
Сообщений: 175
Регистрация: 16-03-07
Из: Москва
Пользователь №: 26 228



А имеется ли возможность осцилоскопом поглядеть - что происходит?


--------------------
Быстро, Дёшево, Качественно-выбери любые 2 пункта
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Apr 2 2007, 13:08
Сообщение #5


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(Via4eslav @ Apr 2 2007, 06:23) *
в А1 содержится номер блока, а адрес блока передается раньше. почему не обновляется регистр данных??? А1 предыдущее содержимое регистра..
Дайте весь минимально необходимый код. В ваших строчках не видно ожидания окончаний обмена. и еще:
I2CONCLR=(1<<I2C_SI); // сброс бита прерывания
I2CONCLR=(1<<I2C_STA); // чистим бит старта
лучше объединить в одну команду I2CONCLR=(1<<I2C_SI)|(1<<I2C_STA);


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 21st July 2025 - 09:44
Рейтинг@Mail.ru


Страница сгенерированна за 0.01373 секунд с 7
ELECTRONIX ©2004-2016