Example #1
0
static void *thread_start(void *arg)
{
        struct thread *t = arg;
        reset_port(t->ai, atoi(t->opts->port), t->cb);
        if (t->opts->client)
                run_client(t);
        else
                run_server(t);
        return NULL;
}
Example #2
0
 void main() {

     ANSEL  = 0;
     ANSELH = 0;
     TRISA = 0b11111111;
     TRISB = 0b00111111;
     TRISC = 0b10000000;
     TRISD = 0b00000000;
     INTCON.GIE = 1;
     INTCON.PEIE = 1;
     PIE1.RCIE = 1;
     UART1_Init(9600);
     reset_port();
     reset_value();
      
      while(1){

                if(flag == 1){
                      open_led();
                      reset_value();
                }
                 delay_ms(500);
       }
}
Example #3
0
File: i2c.c Project: thehobn/ec
int i2c_xfer(int port, int slave_addr, const uint8_t *out, int out_size,
	     uint8_t *in, int in_size, int flags)
{
	int i;
	int started = (flags & I2C_XFER_START) ? 0 : 1;
	uint8_t reg_sts;

	if (out_size == 0 && in_size == 0)
		return EC_SUCCESS;

	wait_idle(port);

	reg_sts = MEC1322_I2C_STATUS(port);
	if (!started &&
	    (((reg_sts & (STS_BER | STS_LAB)) || !(reg_sts & STS_NBB)) ||
			    (i2c_get_line_levels(port) != I2C_LINE_IDLE))) {
		CPRINTS("I2C%d bad status 0x%02x, SCL=%d, SDA=%d", port,
			reg_sts,
			i2c_get_line_levels(port) & I2C_LINE_SCL_HIGH,
			i2c_get_line_levels(port) & I2C_LINE_SDA_HIGH);

		/* Attempt to unwedge the port. */
		i2c_unwedge(port);

		/* Bus error, bus busy, or arbitration lost. Reset port. */
		reset_port(port);

		/*
		 * We don't know what edges the slave saw, so sleep long enough
		 * that the slave will see the new start condition below.
		 */
		usleep(1000);
	}

	if (out) {
		MEC1322_I2C_DATA(port) = (uint8_t)slave_addr;

		/*
		 * Clock out the slave address. Send START bit if start flag is
		 * set.
		 */
		MEC1322_I2C_CTRL(port) = CTRL_PIN | CTRL_ESO | CTRL_ENI |
					 CTRL_ACK | (started ? 0 : CTRL_STA);
		if (!started)
			started = 1;

		for (i = 0; i < out_size; ++i) {
			if (wait_byte_done(port))
				goto err_i2c_xfer;
			MEC1322_I2C_DATA(port) = out[i];
		}
		if (wait_byte_done(port))
			goto err_i2c_xfer;

		/*
		 * Send STOP bit if the stop flag is on, and caller
		 * doesn't expect to receive data.
		 */
		if ((flags & I2C_XFER_STOP) && in_size == 0) {
			MEC1322_I2C_CTRL(port) = CTRL_PIN | CTRL_ESO |
						 CTRL_STO | CTRL_ACK;
		}
	}

	if (in_size) {
		if (out_size) {
			/* resend start bit when change direction */
			MEC1322_I2C_CTRL(port) = CTRL_ESO | CTRL_STA |
						 CTRL_ACK | CTRL_ENI;
		}

		MEC1322_I2C_DATA(port) = (uint8_t)slave_addr | 0x01;

		if (!started) {
			started = 1;
			/* Clock out slave address with START bit */
			MEC1322_I2C_CTRL(port) = CTRL_PIN | CTRL_ESO |
						 CTRL_STA | CTRL_ACK | CTRL_ENI;
		}

		/* On MEC1322, first byte read is dummy read (slave addr) */
		in_size++;

		for (i = 0; i < in_size - 2; ++i) {
			if (wait_byte_done(port))
				goto err_i2c_xfer;
			fill_in_buf(in, i, MEC1322_I2C_DATA(port));
		}
		if (wait_byte_done(port))
			goto err_i2c_xfer;

		/*
		 * De-assert ACK bit before reading the next to last byte,
		 * so that the last byte is NACK'ed.
		 */
		MEC1322_I2C_CTRL(port) = CTRL_ESO | CTRL_ENI;
		fill_in_buf(in, in_size - 2, MEC1322_I2C_DATA(port));
		if (wait_byte_done(port))
			goto err_i2c_xfer;

		/* Send STOP if stop flag is set */
		MEC1322_I2C_CTRL(port) =
			CTRL_PIN | CTRL_ESO | CTRL_ACK |
			((flags & I2C_XFER_STOP) ? CTRL_STO : 0);

		/* Now read the last byte */
		fill_in_buf(in, in_size - 1, MEC1322_I2C_DATA(port));
	}

	/* Check for error conditions */
	if (MEC1322_I2C_STATUS(port) & (STS_LAB | STS_BER))
		return EC_ERROR_UNKNOWN;

	return EC_SUCCESS;
err_i2c_xfer:
	/* Send STOP and return error */
	MEC1322_I2C_CTRL(port) = CTRL_PIN | CTRL_ESO | CTRL_STO | CTRL_ACK;
	return EC_ERROR_UNKNOWN;
}
Example #4
0
int main3(void)
{
	//test_lcd();
	//return 0;
	//test_adc();

	/* Initialize system */
	//SystemInit();

	//TM_RCC_InitSystem();
	//HAL_Init();
	TM_DELAY_Init();

	//GPIO_setup();

	int i = 0;

#ifdef DISCOVERY
//    GPIO_SetBits(GPIOD, GPIO_Pin_12); //Подаем «1» на PD12
	//main2();	//return 0;
    //GPIO_SetBits(GPIOD, GPIO_Pin_13); //Подаем «1» на PD12

	while(1)
	{
	//Если кнопка нажата, то…
	    if (GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_0)==1)
	    {
	    	char sz[32];
	    	sprintf(sz, "%d", i);
	    	lcd_print(sz, 0);
	    	//delay(1000);

	    	int tm = 500;
	        GPIO_SetBits(GPIOD, GPIO_Pin_12); //Подаем «1» на PD12
	        delay(tm); //Функция задержки
	        GPIO_SetBits(GPIOD, GPIO_Pin_13); //Подаем «1» на PD13
	        delay(tm);
	        GPIO_SetBits(GPIOD, GPIO_Pin_14); //Подаем «1» на PD14
	        delay(tm);
	        //GPIO_SetBits(GPIOD, GPIO_Pin_15); //Подаем «1» на PD15
	        delay(tm);
	        GPIO_ResetBits(GPIOD, GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_14/*|GPIO_Pin_15*/); //Сбрасываем все пины в «0»
	        delay(tm);
	    }
        //delay(1000); // ~3sec
        delay(100); // ~.3sec

        if(i % 2 == 0)
        	GPIO_SetBits(GPIOD, GPIO_Pin_15); //Подаем «1» на PD15
        else
        	GPIO_ResetBits(GPIOD, GPIO_Pin_15); //Подаем «1» на PD15

        i++;

	}

	return 0;

#endif

	//Если кнопка нажата, то…

	/*
	GPIO_setup();
	button_setup();
	GPIO_ResetBits(GPIOD, GPIO_Pin_12 | GPIO_Pin_13 |GPIO_Pin_14 |GPIO_Pin_15 );

	initTimer();

	startTimer(1000);

	while(1)
	{

	}
	*/
	set_port(GPIOA,GPIO_Pin_5); // shotin
	set_port(GPIOC, GPIO_Pin_5); // shotout
	set_port(GPIOA, GPIO_Pin_3); // switch 1

	reset_port(GPIOC, GPIO_Pin_13); // left
	reset_port(GPIOC, GPIO_Pin_14); // right
	reset_port(GPIOA, GPIO_Pin_4); // switch 2

	while(1)
	{
	    if (get_port(GPIOC,GPIO_Pin_13)==1) // left
	    {
	    	lcd_print("left", 0);
	    	set_port(GPIOA,GPIO_Pin_3); // sw1
	    }
	    else
	    	reset_port(GPIOA,GPIO_Pin_3);

	    if (get_port(GPIOC,GPIO_Pin_14)==1) // right
	    {
	    	set_port(GPIOA, GPIO_Pin_4); // switch 2
	    	lcd_print("right", 0);

	    }
	    else
	    	reset_port(GPIOA, GPIO_Pin_4);

        if(i % 2 == 0)
        	set_port(GPIOC, GPIO_Pin_5); // shotout
        else
        	reset_port(GPIOC, GPIO_Pin_5);

	    Delayms(3);
        i++;

	}
	return 0;
}