void manual_test() { updateMotorDutyCycle(0, 1); test_sd_card(); Chip_SCU_PinMuxSet(LED0_PORT, LED0_PIN, MD_PLN_FAST | FUNC0); // set P0.0 as output Chip_GPIO_SetPinDIROutput(LPC_GPIO_PORT, LED0_PORT_GPIO, LED0_PIN_GPIO); Chip_GPIO_SetPinOutLow(LPC_GPIO_PORT, LED0_PORT_GPIO, LED0_PIN_GPIO); for (;;) { timerDelayMs(1000); xprintf("Alive\n"); Chip_GPIO_SetPinToggle(LPC_GPIO_PORT, LED0_PORT_GPIO, LED0_PIN_GPIO); } }
//* void usartPrintOnewire(){ for (unsigned char i=0; i<nDevices; i++) // теперь сотируем устройства и запрашиваем данные { // узнать устройство можно по его груповому коду, который расположен в первом байте адресса switch (owDevicesIDs[i][0]) { case OW_DS18B20_FAMILY_CODE: { // если найден термодатчик DS18B20 printf("\r"); print_address(owDevicesIDs[i]); // печатаем знак переноса строки, затем - адрес printf(" - Thermometer DS18B20"); // печатаем тип устройства DS18x20_StartMeasureAddressed(owDevicesIDs[i]); // запускаем измерение timerDelayMs(800); // ждем минимум 750 мс, пока конвентируется температура unsigned char data[2]; // переменная для хранения старшего и младшего байта данных DS18x20_ReadData(owDevicesIDs[i], data); // считываем данные unsigned char themperature[3]; // в этот массив будет записана температура DS18x20_ConvertToThemperature(data, themperature); // преобразовываем температуру в человекопонятный вид printf(": %d.%d C", themperature[1],themperature[2]); current_temp=themperature[1]; } break; case OW_DS18S20_FAMILY_CODE: { // если найден термодатчик DS18B20 printf("\r"); print_address(owDevicesIDs[i]); // печатаем знак переноса строки, затем - адрес printf(" - Thermometer DS18S20"); // печатаем тип устройства } break; case OW_DS1990_FAMILY_CODE: { // если найден электронный ключ DS1990 printf("\r"); print_address(owDevicesIDs[i]); // печатаем знак переноса строки, затем - адрес printf(" - Serial button DS1990"); // печатаем тип устройства } break; case OW_DS2430_FAMILY_CODE: { // если найдена EEPROM printf("\r"); print_address(owDevicesIDs[i]); // печатаем знак переноса строки, затем - адрес printf(" - EEPROM DS2430"); // печатаем тип устройства } break; case OW_DS2413_FAMILY_CODE: { // если найден ключ printf("\r"); print_address(owDevicesIDs[i]); // печатаем знак переноса строки, затем - адрес printf(" - Switch 2413"); // печатаем тип устройства } break; } } }
int main(void) { #ifdef NEED_EVENT uint32_t DVSEventPointer; uint32_t DVSEventTimeLow; uint16_t DVSEvent; uint32_t timeStampMemory = 0, timeStampDelta = 0; #endif int16_t angle = 0; uint32_t cnt =0; ExtraPinsInit(); disablePeripherals(); Chip_RIT_Init(LPC_RITIMER); RTC_TIME_T build = { .time = { BUILD_SEC_INT, BUILD_MIN_INT, BUILD_HOUR_INT, BUILD_DAY_INT, 0, 1, BUILD_MONTH_INT, BUILD_YEAR_INT } }; buildTime = build; //This should be one of the first initializations routines to run. sensorsInit(); #ifdef NEED_EVENT DVS128ChipInit(); #endif DacInit(); UARTInit(LPC_UART, BAUD_RATE_DEFAULT); /* baud rate setting */ initMotors(); PWMInit(); #if USE_IMU_DATA timerDelayMs(100); MPU9105Init(); #endif #if USE_SDCARD SDCardInit(); #endif #if USE_PUSHBOT MiniRobInit(); #endif #ifdef TEST_RUN test(); //This will not return #endif LED1SetOn(); // Start M0APP slave processor cr_start_m0(&__core_m0app_START__); LED1SetOff(); LED0SetOn(); LED0SetBlinking(ENABLE); UARTShowVersion(); for (;;) { if (ledBlinking && toggleLed0) { LED0Toggle(); toggleLed0 = 0; } // ***************************************************************************** // UARTIterate(); // ***************************************************************************** while (bytesReceived(&uart)) { // incoming char available? UART0ParseNewChar(popByteFromReceptionBuffer(&uart)); } // ***************************************************************************** // Deal with audio data // ***************************************************************************** /* * do the fft cross correlation and figure out the angle * manipulate the proceeding direction of the pushbot */ // if buffer reaches a length of 1024 /* if(process_flag != -1){ // -1 for not ready, 0 for buffer0, 1 for buffer1 // SysTick->CTRL &= ~0x1; //xprintf("%d\n", process_flag); angle = itd(); //SysTick->CTRL |= 0x1; if(++cnt>150){ xprintf("angle = %d\n", angle); cnt = 0; } }*/ // start doing math #if USE_IMU_DATA updateIMUData(); #endif #if USE_PUSHBOT refreshMiniRobSensors(); if (motor0.updateRequired) { motor0.updateRequired = 0; updateMotorController(MOTOR0); } if (motor1.updateRequired) { motor1.updateRequired = 0; updateMotorController(MOTOR1); } #endif /* // disable the data streaming through serial if (sensorRefreshRequested) { sensorRefreshRequested = 0; for (int i = 0; i < sensorsEnabledCounter; ++i) { if (enabledSensors[i]->triggered) { enabledSensors[i]->refresh(); enabledSensors[i]->triggered = 0; } } } */ #ifdef NEED_EVENT // ***************************************************************************** // processEventsIterate(); // ***************************************************************************** if (events.eventBufferWritePointer == events.eventBufferReadPointer) { // more events in buffer to process? continue; } if (eDVSProcessingMode < EDVS_PROCESS_EVENTS) { //Not processing events if (freeSpaceForTranmission(&uart) < (TX_BUFFER_SIZE - 32) || !(eDVSProcessingMode & EDVS_STREAM_EVENTS)) { #if LOW_POWER_MODE uart.txSleepingFlag = 1; __WFE(); #endif continue; //Wait until the buffer is empty. } } /*We are either processing events or streaming them. * If streaming the buffer must be empty at this point */ events.ringBufferLock = true; events.eventBufferReadPointer = ((events.eventBufferReadPointer + 1) & DVS_EVENTBUFFER_MASK); // increase read pointer DVSEventPointer = events.eventBufferReadPointer; // cache the value to be faster DVSEvent = events.eventBufferA[DVSEventPointer]; // fetch event from buffer DVSEventTimeLow = events.eventBufferTimeLow[DVSEventPointer]; // fetch event from buffer events.ringBufferLock = false; if (eDVSProcessingMode & EDVS_STREAM_EVENTS) { if (freeSpaceForTranmission(&uart) > 6) { // wait for TX to finish sending! pushByteToTransmission(&uart, (DVSEvent >> 8) | 0x80); // 1st byte to send (Y-address) pushByteToTransmission(&uart, DVSEvent & 0xFF); // 2nd byte to send (X-address) if (eDVSDataFormat == EDVS_DATA_FORMAT_BIN_TSVB) { // Calculate delta... timeStampDelta = DVSEventTimeLow - timeStampMemory; timeStampMemory = DVSEventTimeLow; // Save the current TS in delta // check how many bytes we need to send if (timeStampDelta < 0x7F) { // Only 7 TS bits need to be sent pushByteToTransmission(&uart, (timeStampDelta & 0x7F) | 0x80); // 3rd byte to send (7bit Delta TS, MSBit set to 1) } else if (timeStampDelta < 0x3FFF) { // Only 14 TS bits need to be sent pushByteToTransmission(&uart, (timeStampDelta >> 7) & 0x7F); // 3rd byte to send (upper 7bit Delta TS, MSBit set to 0) pushByteToTransmission(&uart, (timeStampDelta & 0x7F) | 0x80); // 4th byte to send (lower 7bit Delta TS, MSBit set to 1) } else if (timeStampDelta < 0x1FFFFF) { // Only 21 TS bits need to be sent pushByteToTransmission(&uart, (timeStampDelta >> 14) & 0x7F); // 3rd byte to send (upper 7bit Delta TS, MSBit set to 0) pushByteToTransmission(&uart, (timeStampDelta >> 7) & 0x7F); // 4th byte to send (middle 7bit Delta TS, MSBit set to 0) pushByteToTransmission(&uart, (timeStampDelta & 0x7F) | 0x80); // 5th byte to send (lower 7bit Delta TS, MSBit set to 1) } else {
int main(void) { stdout = &usart_str; // указываем, куда будет выводить printf ports_Init(); MT8870_Init(); USART_init(); // включаем uart INT0_Init(); timerDelayInit(); nDevices = search_ow_devices(); // ищем все устройства printf("---------- Found %d devices ----------", nDevices); for (unsigned char i=0; i<nDevices; i++) // теперь сотируем устройства и запрашиваем данные { // узнать устройство можно по его груповому коду, который расположен в первом байте адресса switch (owDevicesIDs[i][0]) { case OW_DS18B20_FAMILY_CODE: { // если найден термодатчик DS18B20 printf("\r"); print_address(owDevicesIDs[i]); // печатаем знак переноса строки, затем - адрес printf(" - Thermometer DS18B20"); // печатаем тип устройства DS18x20_StartMeasureAddressed(owDevicesIDs[i]); // запускаем измерение timerDelayMs(800); // ждем минимум 750 мс, пока конвентируется температура unsigned char data[2]; // переменная для хранения старшего и младшего байта данных DS18x20_ReadData(owDevicesIDs[i], data); // считываем данные unsigned char themperature[3]; // в этот массив будет записана температура DS18x20_ConvertToThemperature(data, themperature); // преобразовываем температуру в человекопонятный вид printf(": %d.%d C", themperature[1],themperature[2]); } break; case OW_DS18S20_FAMILY_CODE: { // если найден термодатчик DS18B20 printf("\r"); print_address(owDevicesIDs[i]); // печатаем знак переноса строки, затем - адрес printf(" - Thermometer DS18S20"); // печатаем тип устройства } break; case OW_DS1990_FAMILY_CODE: { // если найден электронный ключ DS1990 printf("\r"); print_address(owDevicesIDs[i]); // печатаем знак переноса строки, затем - адрес printf(" - Serial button DS1990"); // печатаем тип устройства } break; case OW_DS2430_FAMILY_CODE: { // если найдена EEPROM printf("\r"); print_address(owDevicesIDs[i]); // печатаем знак переноса строки, затем - адрес printf(" - EEPROM DS2430"); // печатаем тип устройства } break; case OW_DS2413_FAMILY_CODE: { // если найден ключ printf("\r"); print_address(owDevicesIDs[i]); // печатаем знак переноса строки, затем - адрес printf(" - Switch 2413"); // печатаем тип устройства } break; case OW_DS2405_FAMILY_CODE: { // если найден ключ printf("\r"); print_address(owDevicesIDs[i]); // печатаем знак переноса строки, затем - адрес printf(" - Switch 2405"); // печатаем тип устройства addSwitchIndex(i); DS24x05_Add(owDevicesIDs[i]); } break; } } commands_Reset(); sei(); for(;;) { toggleSwitches(); } }