int main( void ) { halInit(); //Initialize hardware printf("\r\nResetting ZNP\r\n"); while (1) { unsigned char* v = znpInit(); if (znpResult == ZNP_SUCCESS) printf("ZNP %s Reset (%u), TransportRev=%u, ProductId=%u, FW Rev=%u.%u, HW Rev=%u\r\n", getResetReason(v[0]), v[0], v[1], v[2], v[3], v[4], v[5]); else printf("ERROR %i\r\n", znpResult); delayMs(1000); } }
/**************************************************************************** * * NAME: AppColdStart * * DESCRIPTION: * Entry point for application from boot loader. Initialises system and runs * main loop. * * RETURNS: * Never returns. * ****************************************************************************/ PUBLIC void AppColdStart(void) { #if (defined JN5148 || defined JN5168 ) // TODO - use watch dog and probably disable brownout reset vAHI_WatchdogStop(); #endif #ifdef JN5139 vAppApiSetBoostMode(TRUE); #endif // Initialise the hopping mode status // TODO - move to settings? setHopMode(hoppingRxStartup); connectObjects(); RX.ro.version=2; // Initialise the system vInitSystem(); // set up the exception handlers setExceptionHandlers(); if(!radioDebug)debugRoute=&pcViaComPort; else debugRoute=&pcViaTx; if (debugRoute->routeNodes[0] == CONPC) { // Don't use uart pins for servo op initPcComs(&pccoms, CONPC, 0, rxHandleRoutedMessage); rxHardware.uart0InUse=TRUE; } // Initialise the clock // TODO - fix this /* the jn5148 defaults to 16MHz for the processor, it can be switched to 32Mhz however the servo driving code would need tweaking */ //bAHI_SetClockRate(3); resetType rt=getResetReason(); if(rt!=NOEXCEPTION) { dbgPrintf("EXCEPTION %d \r\n",rt); } // Set handler for incoming data setRadioDataCallback(rxHandleRoutedMessage, CONTX); // Retrieve the MAC address and log it to the PC module_MAC_ExtAddr_s* macptr = (module_MAC_ExtAddr_s*)pvAppApiGetMacAddrLocation(); // Send init string to PC log rx mac and bound tx mac to pc dbgPrintf("rx24 2.10 rx %x %x tx %x %x",macptr->u32H, macptr->u32L,txMACh ,txMACl ); // Use dio 16 for test sync pulse vAHI_DioSetDirection(0, 1 << 16); // Set demands to impossible values // TODO - fix magic numbers grrr int i; for (i = 0; i < 20; i++) { RX.rxDemands[i] = 4096; RX.rxMixedDemands[i] = 4096; } rxHardware.i2cInUse=imu.enabled; startIMU(&imu); // Set up digital inputs and outputs initInputs(&rxHardware); initOutputs(&rxHardware); if(rxHardware.oneWireEnabled==TRUE) { // enable onewire sensor bus initOneWireBus(&sensorBus1,CONONEWIRE,rxHardware.oneWirePort,rxHandleRoutedMessage); } if(rxHardware.gpsEnabled==TRUE) { initNmeaGps(rxHardware.gpsPort, E_AHI_UART_RATE_38400); } // Setup DIO for the LED vAHI_DioSetDirection(0, rxHardware.ledBit); // Initialise Analogue peripherals vAHI_ApConfigure(E_AHI_AP_REGULATOR_ENABLE, E_AHI_AP_INT_DISABLE, E_AHI_AP_SAMPLE_8, E_AHI_AP_CLOCKDIV_500KHZ, E_AHI_AP_INTREF); while (bAHI_APRegulatorEnabled() == 0) ; // Start the servo pwm generator setFrameCallback(frameStartEvent); setMixCallback(mixEvent); startServoPwm(RX.servoUpdateRate); // Enter the never ending main handler while (1) { // Process any events vProcessEventQueues(); } }