Чтение и запись с авто- инкрементом для - “LIS302DL”
Для – квадратной(IIC & TWI) шины
Что-то похожие на перевод (авто)
(из серии “ – загрузить бревно запросов…”)
I 2 C, встроенный в LIS302DLH, ведет себя как подчиненное устройство и следующее
протокол должен соблюдаться. После условия запуска (ST) отправляется подчиненный адрес, ведомое подтверждение (SAK), передается 8-битный суб-адрес (SUB):
7 LSb представляют собой фактический адрес регистра, в то время как MSB включает автоматическое увеличение адреса. Если MSb поля SUB равно «1», SUB (адрес регистра) автоматически увеличивается до разрешить несколько чтения / записи данных получено.
I 2 C, встроенный в LIS302DLH, ведет себя как подчиненное устройство и следующее
протокол должен соблюдаться. После условия запуска (ST) отправляется подчиненный адрес, ведомое подтверждение (SAK), передается 8-битный суб-адрес (SUB):
7 LSb представляют собой фактический адрес регистра, в то время как MSB включает автоматическое увеличение адреса. Если MSb поля SUB равно «1», SUB (адрес регистра) автоматически увеличивается до разрешить несколько чтения / записи данных.
SAD + Модели чтения / записи
Команда SAD [6: 1] SAD [0] = SA0 R / W SAD + R / W ,
Читать 001100 0 1 00110001 (31 час)
Написать 001100 0 0 00110000 (30 часов)
Читать 001100 1 1 00110011 (33h)
Написать 001100 1 0 00110010 (32 часа)
----
Как это в коде будет выглядеть, а то каждый раз делать
Старт и стоп после каждой операции записи/чтения
Да и по времени очень долго(в тиках).
Код:
void lis302d_init(void){
twi_start();
twi_wr(lis302d_addrs_w); // lis302d_addrs_w 0x38
twi_wr(Ctrl_Reg1); //0x20
twi_wr(0b11000101);
twi_stop();
twi_start();
twi_wr(lis302d_addrs_w);
twi_wr(Ctrl_Reg2); //0x21
twi_wr(0b01011100);
twi_stop();
twi_start();
twi_wr(lis302d_addrs_w);
twi_wr(Ctrl_Reg3); // 0x22
twi_wr(0b01110111);
twi_stop();
twi_start();
twi_wr(lis302d_addrs_w);
twi_wr( FF_WU_THS_1); ///порог, в регистре FF_WU_THS_1
twi_wr(0b00100000);
twi_stop();
twi_start();
twi_wr(lis302d_addrs_w);
twi_wr(FF_WU_THS_2); // прерывание FF_WU_THS_2
twi_wr(0b00100000);
twi_stop();
twi_start();
twi_wr(lis302d_addrs_w); // 0x38 запись
twi_wr(Who_Am_I);
twi_start();
twi_wr(lis302d_addrs_r); // 0x39 чтение
lis302d_id= (twi_rd(0));
twi_stop();
twi_start();
twi_wr(lis302d_addrs_w); // 0x38 запись
…(init reg)
twi_stop();
…
};
Как будет выгладить код, с запсь/чтение несколько регистров подряд?!
Стандартно как для «ds3231/ds1307» не катит!
Код:
twi_start();
twi_wr(0xd0);
twi_wr(0x00);
twi_start();
twi_wr(0xd1);
*sec = bcd2bin(twi_rd(1)); // 1
*minut = bcd2bin(twi_rd(1)); // 1
*hour = bcd2bin(twi_rd(1)); // 1
*day = bcd2bin(twi_rd(1)); // 1
*date = bcd2bin(twi_rd(1)); // 1
*month = bcd2bin(twi_rd(1)); // 1
*year = bcd2bin(twi_rd(0)); // 0 no_ask
twi_stop();
Не реагирует
Как выполнить этот «SAD + Модели чтения / записи»
???!