IM31-P2-Display/DP1208/mcu_app/bsp/drv_slave_iic.c
2025-05-21 11:31:07 +08:00

71 lines
1.6 KiB
C

#include "drv_slave_iic.h"
#include "bsp_register_map.h"
#include <stdio.h>
#include "cola_os.h"
extern void logWrite(const char *fmt, ...);
static task_t *pSlaveRxTask = NULL;
ST_I2C_RX_TX drv_stRxTxBuf;
void IIC_callback(i2c_slave_event_t slaveEvent, void *userData)
{
// /* Get instance number from userData */
i2c_instance_t * instance;
instance = (i2c_instance_t *) userData;
if (slaveEvent == I2C_SLAVE_EVENT_RX_REQ)
{
if(drv_stRxTxBuf.rxbuf != NULL)
I2C_SlaveSetRxBuffer(instance, drv_stRxTxBuf.rxbuf, drv_stRxTxBuf.rxlength);
if(pSlaveRxTask != NULL)
cola_set_event(pSlaveRxTask, 0x01);
}
if (slaveEvent == I2C_SLAVE_EVENT_TX_REQ)
{
if(drv_stRxTxBuf.txbuf != NULL)
I2C_SlaveSetTxBuffer(instance, drv_stRxTxBuf.txbuf, drv_stRxTxBuf.txlength);
}
}
void bsp_drv_slave_iic_init(void)
{
i2c_pal_lpi2c0_SlaveConfig0.callbackParam = (uint32_t *) &lpi2c0_instance;
I2C_SlaveInit(&lpi2c0_instance, &i2c_pal_lpi2c0_SlaveConfig0);
}
void bsp_drv_slave_iic_Deinit(void)
{
I2C_SlaveDeinit(&lpi2c0_instance);
}
void bsp_drv_slave_iic_read(uint8_t *pBuf,int len)
{
I2C_SlaveReceiveData(&lpi2c0_instance,pBuf,len);
}
void bsp_drv_slave_iic_write(const uint8_t *pBuf,int len)
{
I2C_SlaveSendData(&lpi2c0_instance,pBuf,len);
}
void bsp_drv_slave_iic_cfg(uint8_t *pRxBuf,int *iRxLength)
{
}
void bsp_drv_slave_iic_ctrl_task(void *task)
{
pSlaveRxTask = (task_t*)task;
}
void bsp_drv_slave_iic_ctrl_buf(void *task)
{
uint32_t * p = task;
drv_stRxTxBuf.rxbuf = *p;
drv_stRxTxBuf.rxlength = *(p+1);
drv_stRxTxBuf.txbuf = *(p+2);
drv_stRxTxBuf.txlength = *(p+3);
}