TxFIFO empty interrupt/RxFIFO full interrupt

本文详细解释了I2C通信中TxFIFO空中断和RxFIFO满中断的工作原理。TxFIFO空中断在FIFO数据被快速发送出去时触发,而RxFIFO满中断则需要手动读取数据才能触发,因为接收到的数据不会自动被CPU读取。文中展示了相关的代码实现,以帮助理解中断设置和处理流程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

接收满中断意思就是接收的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_

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

c2h5oh2012

有用记得给点打赏yo

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值