The next example shows, how a frame is transmitted.
/* $Id: pgXmplTrxTx.html,v 1.1.1.4 2013/04/09 21:11:49 awachtler Exp $ */ /* Example for transmitting frames */ #include "board.h" #include "transceiver.h" #include "ioutil.h" #include "xmpl.h" static volatile bool tx_in_progress; static volatile uint8_t tx_cnt; int main(void) { trx_regval_t rval; uint8_t txfrm[] = {1,0, /* faked ieee 802.15.4 data frame control field * this is just needed, that a sniffer has to display something.*/ 42, /* sequence counter, updated by software */ 'h','e','l','l','o',' ','µ','r','a','c','o','l','i','!', /* data */ 'X','X' /* these bytes are overwritten from transceivers CRC generator just before sent. */ }; /* This will stop the application before initializing the radio transceiver * (ISP issue with MISO pin, see FAQ) */ trap_if_key_pressed(); /* Step 0: init MCU peripherals */ LED_INIT(); trx_io_init(SPI_RATE_1_2); LED_SET_VALUE(LED_MAX_VALUE); LED_SET_VALUE(0); /* Step 1: initialize the transceiver */ DELAY_US(TRX_INIT_TIME_US); TRX_RESET_LOW(); TRX_SLPTR_LOW(); DELAY_US(TRX_RESET_TIME_US); TRX_RESET_HIGH(); trx_reg_write(RG_TRX_STATE,CMD_TRX_OFF); DELAY_US(TRX_INIT_TIME_US); rval = trx_bit_read(SR_TRX_STATUS); ERR_CHECK_DIAG(TRX_OFF!=rval,1); LED_SET_VALUE(1); /* Step 2: setup transmitter * - configure radio channel * - enable transmitters automatic crc16 generation * - go into TX state, * - enable "transmit end" IRQ */ trx_bit_write(SR_CHANNEL,CHANNEL); trx_bit_write(SR_TX_AUTO_CRC_ON,1); trx_reg_write(RG_TRX_STATE,CMD_PLL_ON); #if defined(TRX_IRQ_TRX_END) trx_reg_write(RG_IRQ_MASK,TRX_IRQ_TRX_END); #elif defined(TRX_IRQ_TX_END) trx_reg_write(RG_IRQ_MASK,TRX_IRQ_TX_END); #else # error "Unknown IRQ bits" #endif sei(); LED_SET_VALUE(2); /* Step 3: send a frame each 500ms */ tx_cnt = 0; tx_in_progress = false; LED_SET_VALUE(0); while(1) { WAIT500MS(); if (tx_in_progress == false) { txfrm[2] = tx_cnt; trx_frame_write (sizeof(txfrm), txfrm); tx_in_progress = true; TRX_SLPTR_HIGH(); TRX_SLPTR_LOW(); LED_SET(1); LED_TOGGLE(0); } } } #if defined(TRX_IF_RFA1) ISR(TRX24_TX_END_vect) { /* transmission completed */ tx_in_progress = false; tx_cnt ++; LED_CLR(1); } #else /* !RFA1 */ ISR(TRX_IRQ_vect) { static volatile trx_regval_t irq_cause; irq_cause = trx_reg_read(RG_IRQ_STATUS); if (irq_cause & TRX_IRQ_TRX_END) { /* transmission completed */ tx_in_progress = false; tx_cnt ++; LED_CLR(1); } } #endif /* EOF */