控制Windows Mobile的LED之四:多色呼吸LED SN3199的驱动

来源:互联网 发布:汽车用单片机 编辑:程序博客网 时间:2024/04/29 22:11
 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);