示例#1
0
static void Llc_VolumeSet(uint8_t volume)
{
  uint8_t buffer[2];
  if(volume > (uint8_t)100)
  {
    volume = 100; /* Limit volume to 100% */
  }
  /* Scale down the volume value to 0 - 31 range */
  volume = (volume * 31) / 100;
  buffer[0] = mVREG_CMD_c;
  buffer[1] = (volume & 0xFF) << 3;
  I2c_SendData(mSLAVE_DEV_ADDRESS_c, &buffer[0], 2, gI2cMstrReleaseBus_c);
}
示例#2
0
////////////////////////////////////////////////////////////////////////////////////////////////////
// Name     I2C_WriteMem
// Author   Nivis LLC, Dorin Muica
// Brief    write data to EEPROM memory
// Param    p_pcAddrAndData -  is formated as Addr HI byte, Addr LO byte, Data bytes
//          p_nAddrAndDataLen -  length of p_pcAddrAndData 2bytes+Effective Data bytes
// Return   0 if fail, !=0 if success
// Remarks  p_pcAddrAndData is formated as Addr HI, Addr LO, Data
////////////////////////////////////////////////////////////////////////////////////////////////////
uint8 I2C_WriteMem(uint8 *p_pcAddrAndData, uint16 p_nAddrAndDataLen ) // NOT TESTED
{
  if(p_nAddrAndDataLen > 2)
  {
    uint16 ulAddress;
    uint16 unCnt;
    
    ulAddress = ((uint16)(p_pcAddrAndData[0]) << 8) | p_pcAddrAndData[1];
    
    p_nAddrAndDataLen -= 2;
    
    EEPROM_WRITE_ENABLE();
    do
    {
      uint8  acMem[2];
      uint16 unWriteSize = EEPROM_PAGE_SIZE - (ulAddress & (EEPROM_PAGE_SIZE-1));
      
      if( unWriteSize > p_nAddrAndDataLen )
      {
        unWriteSize = p_nAddrAndDataLen;
      }
      
      acMem[0] = p_pcAddrAndData[0]; // save previous data
      acMem[1] = p_pcAddrAndData[1];
      
      p_pcAddrAndData[0] = (uint8)(ulAddress >> 8);
      p_pcAddrAndData[1] = (uint8)(ulAddress);
          
      unCnt =  FAILURE_RETRIES ;
      do
      {
        if( I2c_SendData(CONTROL_BYTE_WRITE, p_pcAddrAndData, unWriteSize+2, gI2cMstrReleaseBus_c ) == gI2cErrNoError_c )
        {
          p_nAddrAndDataLen -= unWriteSize;
          break;
        }
      }while(--unCnt);
      
      p_pcAddrAndData[0] = acMem[0]; //restore previous data
      p_pcAddrAndData[1] = acMem[1];
      p_pcAddrAndData += unWriteSize;
      ulAddress += unWriteSize;
      
    }while( p_nAddrAndDataLen && unCnt );
    
    
    while (I2CSR_MBB)  // wait until bus is idle
      ;
    EEPROM_WRITE_DISABLE();
  }