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

 
 
5 страниц V  « < 3 4 5  
Reply to this topicStart new topic
> вопрос по инициализации Cirrus EP9307
merk0
сообщение Mar 18 2009, 00:23
Сообщение #61


Участник
*

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



Цитата
На SDA никогда не выставляется единица - драйвер или выдает 0, или отключен.

а попробуйте поставить EEdrive = 2 - это будет opendrain на sda. сразу выставить sda на выход(не меняя никогда), а читку линии sda делать так;
- сначала переводим sda в высокий, потом просто читаем из пина sda.
у меня такая реализация.

с клоком - аналогично.
чтобы делать затягивание просто написано
типа так
set_clk_high(); //ставим клок в высокое состояние
while(get_clk()==0){}; //пока клок опущен другим устройстом - ждем.

Сообщение отредактировал merk0 - Mar 18 2009, 00:24
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Mar 18 2009, 00:30
Сообщение #62


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(merk0 @ Mar 18 2009, 03:23) *
а попробуйте поставить EEdrive = 2 - это будет opendrain на sda. сразу выставить sda на выход(не меняя никогда), а читку линии sda делать так;
- сначала переводим sda в высокий, потом просто читаем из пина sda.

А смысл? По сути ничем не отличается от того, что сделано у меня. Держать выводы в различных конфигурациях неудобно, поэтому видимо я и забил на EEDrive.

Цитата(merk0 @ Mar 18 2009, 03:23) *
с клоком - аналогично.

А вот на клоке у меня pull-down.
Go to the top of the page
 
+Quote Post
merk0
сообщение Mar 18 2009, 00:42
Сообщение #63


Участник
*

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



ну ладно..отличается-не отличается...главное что у меня не работает, хотя - и не отличается...smile.gif

а зачем вы делаете release_sda(см коммент в коде)

u_int i2c_read_byte(u_int ack)
{
u_int a, data;

data = 0;
for(a = 0; a < 8; a++)
{
i2c_force_scl();
i2c_qp_dly();
i2c_release_sda(); // ВОТ ТУТ???
i2c_qp_dly();
i2c_release_scl();
i2c_hp_dly();

data <<= 1;
if(i2c_read_sda()) data |= 1;
}
i2c_force_scl();
i2c_qp_dly();
if(!ack) i2c_force_sda();
else i2c_release_sda();
i2c_qp_dly();
i2c_release_scl();
i2c_hp_dly();

return data;
}

вроде, при вашем подходе вы должны сразу перевести порт на читку из sda бита до цикла, а потом 8 раз клокать и просто читать биты, вставляя их в байт.

Сообщение отредактировал merk0 - Mar 18 2009, 00:43
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Mar 18 2009, 00:50
Сообщение #64


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(merk0 @ Mar 18 2009, 03:42) *
ну ладно..отличается-не отличается...главное что у меня не работает, хотя - и не отличается...smile.gif

А мой код работает, или тоже нет?

Цитата(merk0 @ Mar 18 2009, 03:42) *
а зачем вы делаете release_sda(см коммент в коде)

вроде, при вашем подходе вы должны сразу перевести порт на читку из sda бита до цикла, а потом 8 раз клокать и просто читать биты, вставляя их в байт.

SDA может быть затянут мной в 0 на входе в процедуру чтения. Сразу перевести его в 1 я не могу, т.к. SCL находится в высоком уровне и это действие будет воспринято слейвом как Stop-условие.
Go to the top of the page
 
+Quote Post
merk0
сообщение Mar 18 2009, 08:59
Сообщение #65


Участник
*

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



Цитата
А мой код работает, или тоже нет?

а я так сразу проверить не могу, нужно его под gnu-arm править. я держу ваш код пока в качестве референсного.

Цитата
SDA может быть затянут мной в 0 на входе в процедуру чтения. Сразу перевести его в 1 я не могу, т.к. SCL находится в высоком уровне и это действие будет воспринято слейвом как Stop-условие.

аа ну да, похоже. у меня просто start, read_byte, write_byte так написаны, что на выходе всегда ставят клок - низкий, то есть при входе в любую функцию - он снова низкий. и только на выходе i2c_init и stop клок и дата высокие - поскольку после этих функций шина д.б. свободна.
Go to the top of the page
 
+Quote Post
merk0
сообщение Mar 18 2009, 11:00
Сообщение #66


Участник
*

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



!!!!!!!!!!!!!!!!!!!!

ну все. тема закрывается. начальство сказало что денег нет и не будет. работы остановлены, скорее всего навсегда...
как говорится - не догнал, хоть разогрелся.
жалко.
пошел искать работу.
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Mar 18 2009, 11:58
Сообщение #67


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Да, кризис в действии. Сочувствую. Обращайтесь, если что.
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 23rd July 2025 - 01:54
Рейтинг@Mail.ru


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