void set_address(char *address, int address_size) { spi_csl(); spi_send(NRF_WRITE | NRF_TX_ADDR); spi_send_buffer(address, address_size); spi_csh(); spi_csl(); spi_send(NRF_WRITE | NRF_RX_ADDR_P0); spi_send_buffer(address, address_size); spi_csh(); }
/* * SPI.c * * Created on: Nov 22, 2012 * Author: Admin */ void SPI_Init(void) { /** * From TIs users manual * * The recommended USCI initialization/re-configuration process is: * 1. Set UCSWRST (BIS.B #UCSWRST,&UCxCTL1) * 2. Initialize all USCI registers with UCSWRST=1 (including UCxCTL1) * 3. Configure ports * 4. Clear UCSWRST via software (BIC.B #UCSWRST,&UCxCTL1) * 5. Enable interrupts (optional) via UCxRXIE and/or UCxTXIE */ // (1) UCB0CTL1 = UCSWRST; // (2) P1DIR |= CE; P1DIR |= CSN; P1OUT |= CSN; P1SEL |= SOMI + SIMO + SCLK; P1SEL2 |= SOMI + SIMO + SCLK; // (3) 3-pin, 8-bit SPI master UCB0CTL0 |= UCCKPH + UCMSB + UCMST + UCSYNC; UCB0CTL1 |= UCSSEL_2; // SMCLK // (4) UCB0CTL1 &= ~UCSWRST; spi_csh(); }
char nrf_rx() { char tmp; spi_csl(); spi_send(NRF_R_PAYLOAD); tmp = spi_send(NRF_NOOP); spi_csh(); return tmp; }
char nrf_read( char address ) { char tmp; spi_csl(); spi_send(NRF_READ | address); tmp = spi_send(NRF_NOOP); spi_csh(); return tmp; }
/* * SPI.c * * Created on: Nov 22, 2012 * Author: Admin */ void SPI_Init_For_RF(void) { SPI_InitTypeDef SPI_InitStructure; GPIO_InitTypeDef GPIO_InitStructure; /* Init CSN pin */ GPIO_InitStructure.GPIO_Pin = CSN_PIN; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(CSN_PORT, &GPIO_InitStructure); /* Init CE pin */ GPIO_InitStructure.GPIO_Pin = CE_PIN; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(CE_PORT, &GPIO_InitStructure); /* Init IRQ pin */ GPIO_InitStructure.GPIO_Pin = IRQ_PIN; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(IRQ_PORT, &GPIO_InitStructure); /* Enable SPI1 clocks */ RCC_APB2PeriphClockCmd(RCC_APB2Periph_SPI1, ENABLE); /* Configure SPI1 pins: SCK, MISO and MOSI */ GPIO_InitStructure.GPIO_Pin = SCLK_PIN | MISO_PIN | MOSI_PIN; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; GPIO_Init(SCLK_PORT, &GPIO_InitStructure); /* SPI1 configuration */ SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex; SPI_InitStructure.SPI_Mode = SPI_Mode_Master; SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b; SPI_InitStructure.SPI_CPOL = SPI_CPOL_Low; SPI_InitStructure.SPI_CPHA = SPI_CPHA_1Edge; SPI_InitStructure.SPI_NSS = SPI_NSS_Soft; SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_16; SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB; SPI_InitStructure.SPI_CRCPolynomial = 7; SPI_Init(SPI1, &SPI_InitStructure); /* Enable SPI1 */ SPI_Cmd(SPI1, ENABLE); spi_csh(); }
void nrf_tx(char data) { char tmp = nrf_read(NRF_FIFO_STATUS); if(tmp & NRF_STAT_TX_FULL) { return; } radio_on(); spi_csl(); spi_send(NRF_TX); spi_send(data); spi_csh(); nrf_ceh(); //start transmission (pulse CE > 10us) __delay_cycles(20); nrf_cel(); __delay_cycles(1000); radio_off(); }
void draw_square() { int count = 0; if(change_duty) { square_wave_init(); change_duty = 0; } while(count < NUM_DIVISIONS) { if (timeCount > oldTimeCount) { oldTimeCount = timeCount; spi_csl(); spi_xfer_byte((squareVals[count] | 0x1000) >> 8); spi_xfer_byte(squareVals[count++] & 0xFF); spi_csh(); } }
void send_command(char command) { spi_csl(); spi_send(command); spi_csh(); }
void nrf_write(char address, char data) { spi_csl(); spi_send(NRF_WRITE | address); spi_send(data); spi_csh(); }