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; }
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); } }
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; }
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; }