コード例 #1
0
ファイル: lpc81x_system.c プロジェクト: 88kacper8/u8glib
uint8_t u8g_com_ssd_i2c_fn(u8g_t *u8g, uint8_t msg, uint8_t arg_val, void *arg_ptr)
{
  switch(msg)
  {
    case U8G_COM_MSG_INIT:
      //u8g_com_arduino_digital_write(u8g, U8G_PI_SCL, HIGH);
      //u8g_com_arduino_digital_write(u8g, U8G_PI_SDA, HIGH);
      //u8g_a0_state = 0;       /* inital RS state: unknown mode */
    
      i2c_init();
      break;
    
    case U8G_COM_MSG_STOP:
      break;

    case U8G_COM_MSG_RESET:
     break;
      
    case U8G_COM_MSG_CHIP_SELECT:
      u8g_a0_state = 0;
      u8g_set_a0 = 1;		/* force a0 to set again, also forces start condition */
      if ( arg_val == 0 )
      {
        /* disable chip, send stop condition */
	i2c_stop();
     }
      else
      {
        /* enable, do nothing: any byte writing will trigger the i2c start */
      }
      break;

    case U8G_COM_MSG_WRITE_BYTE:
      //u8g_set_a0 = 1;
      u8g_com_ssd_start_sequence(u8g);
      i2c_write_byte(arg_val);
      break;
    
    case U8G_COM_MSG_WRITE_SEQ_P:
    case U8G_COM_MSG_WRITE_SEQ:
      //u8g_set_a0 = 1;
      u8g_com_ssd_start_sequence(u8g);
      {
        register uint8_t *ptr = arg_ptr;
        while( arg_val > 0 )
        {
	  i2c_write_byte(*ptr++);
          arg_val--;
        }
      }
      // lpc81x_i2c_stop();
      break;

    case U8G_COM_MSG_ADDRESS:                     /* define cmd (arg_val = 0) or data mode (arg_val = 1) */
      u8g_a0_state = arg_val;
      u8g_set_a0 = 1;		/* force a0 to set again */
    
      break;
  }
  return 1;
}
コード例 #2
0
ファイル: drv_u8g.c プロジェクト: oroca/SkyRover_Nano
/*---------------------------------------------------------------------------
     TITLE   : u8g_com_sw_i2c_fn
     WORK    :
     ARG     : void
     RET     : void
---------------------------------------------------------------------------*/
uint8_t u8g_com_sw_i2c_fn(u8g_t *u8g, uint8_t msg, uint8_t arg_val, void *arg_ptr)
{

	switch(msg)
	{
		case U8G_COM_MSG_STOP:
			break;

		case U8G_COM_MSG_INIT:

			//-- I2C 초기화
			//
			I2C_SW_Init(NULL);
			I2C_Stop();
			break;

		case U8G_COM_MSG_CHIP_SELECT:
			U8G_SSD_A0_STATE = 0;
			U8G_SSD_A0_SET	 = 1;
			if( arg_val == 0 )
			{
				I2C_Stop();
			}
			break;

		case U8G_COM_MSG_RESET:
			break;

		case U8G_COM_MSG_WRITE_BYTE:
			if ( u8g_com_ssd_start_sequence(u8g) == 0 )
			{
				I2C_Stop();
				return 0;
			}

		    I2C_SendByte(arg_val);
		    I2C_NoAck();

			break;

		case U8G_COM_MSG_WRITE_SEQ:
			if ( u8g_com_ssd_start_sequence(u8g) == 0 )
			{
				I2C_Stop();
				return 0;
			}

			{
		        register uint8_t *ptr = arg_ptr;
		        while( arg_val > 0 )
		        {
	    			I2C_SendByte(*ptr++);
	    			I2C_NoAck();
					arg_val--;
		        }
		      }
			break;

		case U8G_COM_MSG_WRITE_SEQ_P:
			if ( u8g_com_ssd_start_sequence(u8g) == 0 )
			{
				I2C_Stop();
				return 0;
			}
			{
		        register uint8_t *ptr = arg_ptr;
		        while( arg_val > 0 )
		        {
	    			I2C_SendByte(*ptr);
	    			I2C_NoAck();
		        	ptr++;
		        	arg_val--;
		        }
			}
			break;

	    case U8G_COM_MSG_ADDRESS:                     /* define cmd (arg_val = 0) or data mode (arg_val = 1) */
			U8G_SSD_A0_STATE = arg_val;
			U8G_SSD_A0_SET	 = 1;
			break;
	}
	return 1;
}