Esempio n. 1
0
void DisplayPrint(const char* str)
{
	static const uint8_t SPACE[16] = {0x0};
	char c;
	uint16_t rowEndDistance = 0;
    I2C_SetSlaveAddr(DISPLAY_ADDRESS);
    if( I2C_Write(&CTRL_BYTE_DATA, 1) != I2C_OK ) {
    	Abort(ERR_DISPLAY);
    }
	while(c=*str++) {
		rowEndDistance = DISPLAY_W_DOTS - currentColumn_ - 1;
		if(c!='\n') {
			const tImage* img = Font.chars[c-0x20].image;
			if(rowEndDistance<img->width) {
				if( I2C_ContinueWrite(SPACE, rowEndDistance+1) != I2C_OK) {
			    	Abort(ERR_DISPLAY);
				}
				IncrementCurrentPos(rowEndDistance+1);
			}
			if( I2C_ContinueWrite(img->data, img->width) != I2C_OK) {
		    	Abort(ERR_DISPLAY);
			}
			IncrementCurrentPos(img->width);
		}
		else {
			IncrementCurrentPos(rowEndDistance+1);
			DisplaySetPos_(currentColumn_, currentRow_);
		}
	}
	I2C_Stop();
}
Esempio n. 2
0
void I2C0_Init(void)
{
    /* Open I2C0 and set clock to 100k */
    I2C_Open(I2C0, 100000);

    /* Get I2C0 Bus Clock */
    printf("I2C clock %d Hz\n", I2C_GetBusClockFreq(I2C0));

    /* Set I2C0 2 Slave Addresses */
    I2C_SetSlaveAddr(I2C0, 0, 0x15, I2C_GCMODE_DISABLE);   /* Slave Address : 0x15 */
    I2C_SetSlaveAddr(I2C0, 1, 0x35, I2C_GCMODE_DISABLE);   /* Slave Address : 0x35 */

    /* Enable I2C0 interrupt */
    I2C_EnableInt(I2C0);
    NVIC_EnableIRQ(I2C0_IRQn);
}
Esempio n. 3
0
void DisplayInit(void)
{
	BoardDisplayReset();
    I2C_SetSlaveAddr(DISPLAY_ADDRESS);
    static const uint8_t INIT[] = {
    		0x80, 0x1, // jump to page 111
        	0x80, 0x10, // addressing mode (is vertical)

        	0x80, 0x0E, // jump to page 110
        	0x80, 0x06, // set D,E 0x4,D,E
        	0x80, 0x08, // mirror X, Y
        	0x80, 0x12, // bias
        	0x80, 0x84, // mux rate

        	0x80, 0x01, // jump to page 101
        	0x80, 0x0D,
        	0x80, 0x05, // Vlcd ctrl
        	0x80, 0x08, // Vlcd x 2
        	0x80, 0x10, // Temp coef
        	0x80, 0x80+50, // V op

        	0x80, 0x01, // jump to page 011
        	0x80, 0x0B,
        	0x80, 0x04, // power mode
        	0x80, 0x58 // top row swap / bottom row swap
    };
    I2C_Write(INIT, sizeof INIT);
	I2C_Stop();
	DisplaySetPos(0,0);
}
Esempio n. 4
0
void I2C3_Init(void)
{
    /* Open I2C3 and set clock to 100k */
    I2C_Open(I2C3, 100000);

    /* Get I2C3 Bus Clock */
    printf("I2C clock %d Hz\n", I2C_GetBusClockFreq(I2C3));

    /* Set I2C3 4 Slave Addresses */
    I2C_SetSlaveAddr(I2C3, 0, 0x15, I2C_GCMODE_DISABLE);   /* Slave Address : 0x15 */
    I2C_SetSlaveAddr(I2C3, 1, 0x35, I2C_GCMODE_DISABLE);   /* Slave Address : 0x35 */
    I2C_SetSlaveAddr(I2C3, 2, 0x55, I2C_GCMODE_DISABLE);   /* Slave Address : 0x55 */
    I2C_SetSlaveAddr(I2C3, 3, 0x75, I2C_GCMODE_DISABLE);   /* Slave Address : 0x75 */

    I2C_EnableInt(I2C3);
    NVIC_EnableIRQ(I2C3_IRQn);
}
void Init_MPU6050(void)
{
  I2C_SetSlaveAddr(MPU6050_I2C_PORT, 0, MPU6050_I2C_SLA, I2C_GCMODE_DISABLE);	
	MPU6050_I2C_SingleWrite(MPU6050_PWR_MGMT_1, 0x01);	// CLL_SEL=0: internal 8MHz, TEMP_DIS=0, SLEEP=0 
	MPU6050_I2C_SingleWrite(MPU6050_SMPLRT_DIV, 0x01);  // Gyro output sample rate = Gyro Output Rate/(1+SMPLRT_DIV)
	MPU6050_I2C_SingleWrite(MPU6050_CONFIG, 0x01);      // set TEMP_OUT_L, DLPF=2 (Fs=1KHz)
	MPU6050_I2C_SingleWrite(MPU6050_GYRO_CONFIG, 0x18); // bit[4:3] 0=+-250d/s,1=+-500d/s,2=+-1000d/s,3=+-2000d/s
	MPU6050_I2C_SingleWrite(MPU6050_ACCEL_CONFIG, 0x00);// bit[4:3] 0=+-2g,1=+-4g,2=+-8g,3=+-16g, ACC_HPF=On (5Hz)
}
Esempio n. 6
0
void I2C0_Init(void)
{
    /* Open I2C module and set bus clock */
    I2C_Open(I2C0, 100000);

    /* Get I2C0 Bus Clock */
    printf("I2C clock %d Hz\n", I2C_GetBusClockFreq(I2C0));

    /* Set I2C 4 Slave Addresses */
    I2C_SetSlaveAddr(I2C0, 0, 0x15, 0);   /* Slave Address : 0x15 */
    I2C_SetSlaveAddr(I2C0, 1, 0x35, 0);   /* Slave Address : 0x35 */
    I2C_SetSlaveAddr(I2C0, 2, 0x55, 0);   /* Slave Address : 0x55 */
    I2C_SetSlaveAddr(I2C0, 3, 0x75, 0);   /* Slave Address : 0x75 */

    /* Enable I2C interrupt */
    I2C_EnableInt(I2C0);
    NVIC_EnableIRQ(I2C0_IRQn);
}
Esempio n. 7
0
void DisplaySetVop(uint8_t v)
{
    I2C_SetSlaveAddr(DISPLAY_ADDRESS);

    WriteCmd(0x01);// jump to page 101
	WriteCmd(0x0D);
	v|=0x80;
	WriteCmd(v);// V op
	I2C_Stop();
}
Esempio n. 8
0
void DisplaySetMirror(int mirrorX, int mirrorY)
{
    I2C_SetSlaveAddr(DISPLAY_ADDRESS);
	WriteCmd(0x1);// jump to page 111
	WriteCmd(0x0E);// jump to page 110
	mirrorX &= 1;
	mirrorY &= 1;
	WriteCmd(0x08 + (mirrorX << 2) + (mirrorY << 1));// mirror X, Y
	I2C_Stop();
}
Esempio n. 9
0
void DisplaySetInversion(int v)
{
    I2C_SetSlaveAddr(DISPLAY_ADDRESS);
	WriteCmd(0x1);// jump to page 111
	WriteCmd(0x0E);// jump to page 110
	if(v!=0)
		WriteCmd(0x07);
	else
		WriteCmd(0x06);
	I2C_Stop();
}
Esempio n. 10
0
void DisplayPut(const void* data, uint16_t size)
{
    I2C_SetSlaveAddr(DISPLAY_ADDRESS);
    if( I2C_Write(&CTRL_BYTE_DATA, 1) != I2C_OK ) {
    	Abort(ERR_DISPLAY);
    }
    if( I2C_ContinueWrite(data, size) != I2C_OK ) {
    	Abort(ERR_DISPLAY);
    }
	I2C_Stop();
	IncrementCurrentPos(size);
}
Esempio n. 11
0
void TwoWire::begin(uint8_t address) {
	IRQn_Type irq=I2C0_IRQn;
	NVIC_DisableIRQ(irq);
	NVIC_ClearPendingIRQ(irq);
	NVIC_SetPriority(irq, 3);
	NVIC_EnableIRQ(irq);

	I2C_Open(i2c,I2C_CLOCK);			
	status = SLAVE_IDLE;
		
	I2C_SetSlaveAddr(i2c, 0, address, 0);   /* Slave Address */	        		
	I2C_EnableInt(i2c);				    
	I2C_SET_CONTROL_REG(i2c, I2C_SI_AA); /* I2C enter no address SLV mode */
}
Esempio n. 12
0
// internal func without stopping i2c
static void DisplaySetPos_(uint8_t X, uint8_t Y)
{
	if( X>=DISPLAY_W_DOTS || Y>=DISPLAY_ROWS )
		return;
    I2C_SetSlaveAddr(DISPLAY_ADDRESS);
    WriteCmd(1);
    WriteCmd(0x40|Y);
    if( X > 127 ) {
    	WriteCmd(0x24); //XM0=1
    	WriteCmd(0x80 | (X-127));
    }
    else {
    	WriteCmd(0x20); //XM0=0
    	WriteCmd(0x80|X);
    }
}
Esempio n. 13
0
void I2C1_Init(void)
{
    /* Open I2C1 and set clock to 100k */
    I2C_Open(I2C1, 400000);

    /* Get I2C1 Bus Clock */
    printf("I2C1 clock %d Hz\n", I2C_GetBusClockFreq(I2C1));

    /* Set I2C1 2 Slave Addresses */
    I2C_SetSlaveAddr(I2C1, 0, SLAVE_ADDRESS, I2C_GCMODE_DISABLE);   /* Set Slave Address */

    I2C_EnableInt(I2C1);
    NVIC_EnableIRQ(I2C1_IRQn);

    /* I2C enter no address SLV mode */
    I2C_SET_CONTROL_REG(I2C1, I2C_SI | I2C_AA);
}
Esempio n. 14
0
void DisplayClear(void)
{
    uint16_t i = 0;
    static const uint16_t CLR[64] = {0x0};
    I2C_SetSlaveAddr(DISPLAY_ADDRESS);

    if( I2C_Write(&CTRL_BYTE_DATA, 1) != I2C_OK ) {
		Abort(ERR_DISPLAY);
	}
    while(i<DISPLAY_W_DOTS*DISPLAY_H_DOTS/8) {
    	if( I2C_ContinueWrite(CLR, sizeof CLR) != I2C_OK ) {
    		Abort(ERR_DISPLAY);
    	}
    	i+=sizeof(CLR);
    }
	I2C_Stop();
	DisplaySetPos(0,0);
}
Esempio n. 15
0
// **********************************************************************
//               I2C Slave Initialize called by I2CWakeUpInit
// **********************************************************************
void I2C_MS_Slave_Init()
{
	// =============PIN SETTNG==================
#ifdef I2C_MS_PORT0
	CLK_EnableModuleClock(I2C0_MODULE);
	/* Set I2C PA multi-function pins */
	SYS->GPE_MFPH &= ~(SYS_GPE_MFPH_PE12MFP_Msk | SYS_GPE_MFPH_PE13MFP_Msk);
	SYS->GPE_MFPH |= ( SYS_GPE_MFPH_PE12MFP_I2C0_SCL | SYS_GPE_MFPH_PE13MFP_I2C0_SDA);
#else
	CLK_EnableModuleClock(I2C1_MODULE);
	/* Set I2C PA multi-function pins */
	SYS->GPC_MFPL &= ~SYS_GPC_MFPL_PC4MFP_Msk;
	SYS->GPC_MFPL |= SYS_GPC_MFPL_PC4MFP_I2C1_SCL;
	SYS->GPE_MFPL &= ~SYS_GPE_MFPL_PE0MFP_Msk;
	SYS->GPE_MFPL |= SYS_GPE_MFPL_PE0MFP_I2C1_SDA;
#endif

	/* Open I2C module and set bus clock */
	I2C_Open(I2C_MS_PORT, 100000);

	/* Get I2C0 Bus Clock */
	printf("I2C MS Slave clock %d Hz\n", I2C_GetBusClockFreq(I2C_MS_PORT));

	/* Set I2C 4 Slave Addresses */
#if 1
	I2C_SetSlaveAddr(I2C_MS_PORT, 0, devNum+0x14, 0);
#else
	if(devNum == 1)
		I2C_SetSlaveAddr(I2C_MS_PORT, 0, 0x15, 0);	/* Slave Address : 21,Buzzer */
	else if(devNum == 2)
		I2C_SetSlaveAddr(I2C_MS_PORT, 0, 0x16, 0);   /* Slave Address : 22,Led */
	else if(devNum == 3)
		I2C_SetSlaveAddr(I2C_MS_PORT, 0, 0x17, 0);   /* Slave Address : 23,AHRS */
	else if(devNum == 4)
		I2C_SetSlaveAddr(I2C_MS_PORT, 0, 0x18, 0);   /* Slave Address : 24,SONAR */
	else if(devNum == 5)
		I2C_SetSlaveAddr(I2C_MS_PORT, 0, 0x19, 0);   /* Slave Address : 25,TEMPERATURE */
	else if(devNum == 6)
		I2C_SetSlaveAddr(I2C_MS_PORT, 0, 0x1a, 0);   /* Slave Address : 26,Gas */
	else if(devNum == 7)
		I2C_SetSlaveAddr(I2C_MS_PORT, 0, 0x1b, 0);   /* Slave Address : 27,IR */
	else if(devNum == 8)
		I2C_SetSlaveAddr(I2C_MS_PORT, 0, 0x1c, 0);   /* Slave Address : 28,KEY */
	else if(devNum == 9)
		I2C_SetSlaveAddr(I2C_MS_PORT, 0, 0x1d, 0);   /* Slave Address : 29, Reserved device 9 */
	else if(devNum == 10)
		I2C_SetSlaveAddr(I2C_MS_PORT, 0, 0x1e, 0);   /* Slave Address : 30, Reserved device 10 */
	else if(devNum == 11)
		I2C_SetSlaveAddr(I2C_MS_PORT, 0, 0x1f, 0);   /* Slave Address : 31, Reserved device 11 */
	else if(devNum == 12)
		I2C_SetSlaveAddr(I2C_MS_PORT, 0, 0x20, 0);   /* Slave Address : 32, Reserved device 12 */
	else if(devNum == 13)
		I2C_SetSlaveAddr(I2C_MS_PORT, 0, 0x21, 0);   /* Slave Address : 33, Reserved device 13 */
	else if(devNum == 14)
		I2C_SetSlaveAddr(I2C_MS_PORT, 0, 0x22, 0);   /* Slave Address : 34, Reserved device 14 */
#endif	

	I2C_SetSlaveAddr(I2C_MS_PORT, 1, 0x35, 0);   	/* Slave Address : 0x35 */
	I2C_SetSlaveAddr(I2C_MS_PORT, 2, 0x55, 0);   	/* Slave Address : 0x55 */
	I2C_SetSlaveAddr(I2C_MS_PORT, 3, 0x75, 0);   	/* Slave Address : 0x75 */

	/* Enable I2C interrupt */
	I2C_EnableInt(I2C_MS_PORT);
#ifdef I2C_MS_PORT0
	NVIC_EnableIRQ(I2C0_IRQn);
#else
	NVIC_EnableIRQ(I2C1_IRQn);
#endif

#ifdef I2C_MS_PORT0
	s_I2C0HandlerFn = (I2C_FUNC)I2C_MS_Slave;
#else
	s_I2C1HandlerFn = (I2C_FUNC)I2C_MS_Slave;
#endif

	/* Enable I2C wake-up */
	I2C_EnableWakeup(I2C_MS_PORT);

	/* Set I2C0 enter Not Address SLAVE mode */
	I2C_SET_CONTROL_REG(I2C_MS_PORT, I2C_CTL_SI_AA);

}