interrupt(PORT1_VECTOR) PORT1_ISR(void) { P1IFG &= ~BIT0; // Clear interrupt flag #else void exti2_isr(void) { exti_reset_request(EXTI2); // Clear interrupt flag #endif int s; // set ACK payload to next squence number ptx.data[0]++; s = nrf_write_ack_pl(&ptx, 0); if(s == NRF_ERR_TX_FULL) { cio_printf("Unable to send back ACK payload (TX_FULL)\n\r"); } // receive non-blocking since IRQ already indicates that payload arived s = nrf_receive(&prx); if(s == NRF_ERR_RX_FULL) { cio_printf("Unable to receive any more (RX_FULL)\n\r"); } else { cio_printf("Received payload: %c; sending back %u\n\r", prx.data[0], ptx.data[0]); } }
void receiverMain() { int i; char offset; char status; //doCycle(); //doOscillate(); nrf_init(); delay(); nrf_rxmode(); delay(); Delay10KTCYx(100); offset = 0; STATUS_LED = 0; while(1) { //STATUS_LED = nrf_receive(&rx_buf); updateBuffer(); updateLEDs(); } }
int main(void) { int i; clock_init(); gpio_init(); serial_init(9600); serirq_init(); nrf_init(); nrf_configure_sb(); prx.size = PL_SIZE; ptx.size = PL_SIZE; while (1) { ptx.data[0] = 0; while(!serial_rb_empty(&srx) && ptx.data[0] < (PL_SIZE - 1)) { ptx.data[ptx.data[0] + 1] = serial_rb_read(&srx); ptx.data[0]++; } if(ptx.data[0] > 0) { #ifdef MSP430 P1OUT |= RXTX_LED; #else gpio_set(GPIOC, TX_LED); #endif // switch to PTX for sending out data ... nrf_set_mode_ptx(); nrf_send_blocking(&ptx); nrf_set_mode_prx(); } if(nrf_receive(&prx) != 0 && prx.data[0] > 0) { if(!serial_rb_full(&stx)) { for(i = 0; i < prx.data[0]; i++) serial_rb_write(&stx, prx.data[i + 1]); #ifdef MSP430 P1OUT |= RXTX_LED; IE2 |= UCA0TXIE; #else gpio_set(GPIOC, RX_LED); USART_CR1(USART1) |= USART_CR1_TXEIE; #endif } } } return 0; }
// // Main program loop. // int main(void) { unsigned char memflags; unsigned char action; unsigned char stage; unsigned char timeidx; unsigned char i; time = 0; __disable_interrupt(); InitialiseSystemClock(); InitialiseUSART(); InitialiseTIM2(); spi_init(); nrf_init(); network_init(RF_ROLE_TX); __enable_interrupt(); delay_ms(1000); #ifdef DUMP nrf_setrx(); #endif #ifdef CITY cities_init(); timeidx = 0; memflags = 0; my_info.type = TYPE_CITY; my_info.team = NO_TEAM; my_info.id = MY_ID; my_info.units = CITY_UNITS; my_info.mode = MODE_DEFENSE; my_info.level = 0; pk_out.node_from = my_info.id; pk_out.type = my_info.type; for (i = 0;i<10;i++){ pk_out.teams[i] = 0xFF; pk_out.times[i] = 0xFF; } #endif #ifdef SOURCE my_info.type = TYPE_SOURCE; my_info.team = NO_TEAM; my_info.id = MY_ID; pk_out.node_from = my_info.id; pk_out.type = my_info.type; #endif // Configure pins PB_DDR = (1<<5); PB_CR1 = (1<<5); // PB_ODR ^= (1<<5); // Loop do { // PB_ODR ^= (1<<5); #ifdef DUMP nrf_listen(); delay_ms(10); nrf_nolisten(); if (nrf_receive(data,32)){ nrf_listen(); puts("Data:"); for (i=0;i<32;i++){ putchex(data[i]); putc(' '); } puts("\n"); } #endif #ifdef SOURCE pk_out.team = my_info.team; pk_out.units = SOURCE_UNITS; pk_out.action = ACTION_SOURCE; pk_out.node_to = 0; if (memflags & FL_SEC){ PB_ODR ^= (1<<5); network_send(&pk_out,0); } delay_ms(100); #endif #ifdef CITY pk_out.team = my_info.team; if (memflags & FL_SEC){ puts("Team: "); putchex(my_info.team); puts(" level: "); putchex(my_info.level); puts(" units: "); putchex(my_info.units); puts(" uplevel: "); putchex(my_info.uplevel); putchex(timeidx); putc('\n'); cities_broadcast(); if (time%(10-CITY_MAXLEVEL) == 0){ if (my_info.units < CITY_MAXUNITS){ my_info.units++; } else if (my_info.uplevel < CITY_LEVEL_UP){ my_info.uplevel++; } else { my_info.uplevel = 0; if (my_info.level < CITY_MAXLEVEL){ my_info.level++; } } } if (time%60 == 0){ pk_out.teams[timeidx]=my_info.team; pk_out.times[timeidx]=time/60; timeidx++; timeidx %= 10; } } network_arcv_stop(); delay_us(100); while (network_arcv(&pk_in)){ if (my_info.units==0){ break; } PB_ODR ^= (1<<5); if (pk_in.action == ACTION_BROADCAST){ if ((pk_in.team == my_info.team)&&(my_info.units >=1)){ transfer_start(pk_in.node_from); } } else { if (pk_in.node_to == my_info.id){ cities_city_process_action(); puts("Processing\n"); } } } delay_us(100); network_arcv_start(); delay_ms(100); #endif memflags = flags; flags = 0; } while(1); }