接收满中断意思就是接收的fifo里面数据满了多少就触发中断。
发送空中断就是先发送数据到fifo里面,然后数不断被搬运走,然后fifio里面数据不断减少,减少到所触发的阈值。然后就进入中断。
static int jz_i2c_write(struct jz_i2c_drv *drv, int device_addr, char *buf, int len, int cmd)
{
int ret = 0;
int id = drv->id;
int timeout = timeout_us(id, len);
unsigned long smb_intm = jz_i2c_read_reg(id, SMB_INTM);
jz_i2c_dev[id].tx_buf = buf;
jz_i2c_dev[id].len = len;
jz_i2c_dev[id].cmd = cmd;
INIT_COMPLETION(drv->complete);
/* 清除STOP TXABT中断 */
jz_i2c_get_bit(id, SMB_CSTP, SMBCSTP);
jz_i2c_get_bit(id, SMB_CTXABT, SMBCTXABT);
/* 设置TX触发中断的阈值 */
jz_i2c_set_bit(id, SMB_TXTL, SMBTXTL_TXTL, 0);
if (cmd & I2C_START) {
jz_i2c_write_reg(id, SMB_TAR, device_addr);
}
/* 执行第一次写操作 */
jz_i2c_write_