phy6222 IIC从机配置

phy6222 IIC从机配置

一、IIC从机初始化配置

void user_iic_slave_init(void)
{
    hal_gpio_pin_init(P33, IE);
    hal_gpio_pin_init(P34, IE);
    hal_gpio_pull_set(P33, STRONG_PULL_UP);
    hal_gpio_pull_set(P34, STRONG_PULL_UP);

    uint8_t op_ret = 0;
    I2C_Slave_Parameter iic_slave_cfg;
    iic_slave_cfg.id = 0;
    iic_slave_cfg.workmode = Slave;
    iic_slave_cfg.AddressMode = I2C_ADDR_7bit;
    iic_slave_cfg.RX_FIFO_Len = 3;
    iic_slave_cfg.Tx_FIFO_Len = 3;
    iic_slave_cfg.SDA_PIN = P33;
    iic_slave_cfg.SCL_PIN = P34;
    iic_slave_cfg.Slave_Address = BLE_LOCK_IIC_ADDRESS;
    iic_slave_cfg.IRQ_Source = I2C_MASK_RD_REQ | I2C_MASK_RX_FULL; //(I2C_MASK_TX_ABRT | I2C_MASK_RD_REQ | I2C_MASK_RX_DONE | I2C_MASK_RX_FULL); //
    iic_slave_cfg.evt_handler = __iic_slave_evt;
    op_ret = Hal_I2C_Slave_Init(&iic_slave_cfg, &iic_id);
    if (0 != op_ret) {
        LOG("iic slave init false!");
        return;
    }
    // LOG("iic slave init sucess!");
    // Hal_I2c_Slave_Open(iic_id);
}

二、IIC中断处理函数

static void __iic_slave_evt(I2C_Evt_t *pev)
{
    // LOG("type:%d, len:%d\r\n", pev->type, pev->len);
    // Hal_I2C_Slave_CLR_IRQs(iic_id, pev->type);
    for (uint8_t i = 0; i < 16; i++){
        if (pev->type& (0x0001 << i)) {
            Hal_I2C_Slave_CLR_IRQs(iic_id, 0x0001 << i);
            if (5 == i) {
                Hal_I2C_Slave_WriteTX_FIFO(iic_id, &test_data, 1);
                // LOG("send test_data:%d\r\n", test_data);
                // Hal_I2c_Slave_Open(iic_id);
            } else if (2 == i) {
                Hal_I2C_Slave_ReadRX_FIFO(iic_id, iic_data, 1);
                if (iic_data[0] == 0xaa) {
                    Hal_I2C_Slave_Deinit(&iic_id);
                    user_iic_slave_init();
                }
                // LOG("iic_data:%d\r\n", iic_data[0]);
            }
        }
        // LOG("data[%d]:%d", i, pev->data[i]);
    }
}

PS:当IIC中断信号为I2C_MASK_RX_FULL,需要使用iic从机数据获取的函数(Hal_I2C_Slave_ReadRX_FIFO)来清除中断信号,使用iic中断清除函数(Hal_I2C_Slave_CLR_IRQs)无法清除改中断信号

三、中断向量表需要添加IIC中断入口

在jump_table.c文件的jump_table_base[256]中断数组中添加中断入口函数
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

坚持学习的小王同学

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值