Ну, я просто ни хрена не понимаю! Сделал уже явно:
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...