ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Воскресенье
14 сентября
1542006 Топик полностью
Eddy_Em (Вчера, 22:36, просмотров: 31) ответил Eddy_Em на Вот же ядрен батон! Выставляю STOP после записи адреса регистра - получаю абсолютно ту же картинку! Т.е. выходит, что когда мне STOP был не нужен и я не писал AUTOEND, STOP все равно вылезал!
Ну, я просто ни хрена не понимаю! 

Сделал уже явно:

static uint8_t i2c_startw(uint8_t addr, uint8_t nbytes, uint8_t stop){
    if(!i2c_chk(1)) return 0;
    USND("a) I2C1->CR2="); USND(uhex2str(I2C1->CR2)); newline();
    I2C1->CR2 = nbytes << 16 | addr;
    if(stop){
        USND("(add autoend)\n");
        I2C1->CR2 |= I2C_CR2_AUTOEND; // autoend
    }else{
        I2C1->CR2 &= ~I2C_CR2_AUTOEND;
    }
    USND("b) I2C1->CR2="); USND(uhex2str(I2C1->CR2)); newline();
    //else I2C1->CR2 |= I2C_CR2_RELOAD;
    // now start transfer
    I2C1->CR2 |= I2C_CR2_START;
    return 1;
}

Запускаю запись. И таки что бы вы думали я вижу?

a) I2C1->CR2=0x00
b) I2C1->CR2=0x020066 

Вроде, все ОК, а на осциллографе у меня все также маячит STOP и START "в одном флаконе". На удлиненном в 3 раза высоком уровне CLK...

eddy-em.livejournal.com github.com/eddyem