SN3199是一款多色呼吸的LED驱动控制芯片,用来支持我目前项目上的LED控制。因为项目需求在内核和BOOT LOADER中都需要闪烁,所以用这种One Shot控制的芯片是最有效最省资源的。
芯片采用I2C控制方式,通讯时序如下:
以上是典型的读写方式,该芯片还支持地址自加模式,即只要往某地址写入了一系列数据,后续的数据会自动写入接连自加的地址中。时序图如下:
所以读写函数如下:
XLLP_STATUS_T Xllp3199WriteRegs(XLLP_I2C_T *i2cRegs, XLLP_OST_T *ostRegs, XLLP_UINT8_T reg,
XLLP_UINT8_T *val_buf, XLLP_UINT8_T val_count){ XLLP_STATUS_T status; XLLP_UINT8_T buf[0x28]={0x00}; //初始化内部数组,需要组合数据用,确定0x27个字节传入
int lock,i; buf[0] = reg; //首字节是地址 for( i=1; i<=val_count;i++) { buf[i] = *(val_buf+i); //保存写入数据 } lock = ACQUIRE_LOCK(); INTS_OFF();
status = XllpI2CWrite(i2cRegs, ostRegs, sn3199_saddr, buf, val_count+1, 1); //sn3199_saddr是七位地址 INTS_ON(); RELEASE_LOCK(lock); return status;}
用法:Xllp3199WriteRegs(s_Device.m_pI2CCtrlReg,s_Device.m_pOSTimer,REG_00_SoftOn,sn3199_reg,0x27);