Started working on RF24.

This commit is contained in:
Marvin Blum
2017-04-03 23:49:52 +02:00
parent fbcd0ee317
commit d37ce320cd
5 changed files with 208 additions and 17 deletions

93
rf24/register.h Normal file
View File

@@ -0,0 +1,93 @@
// DO NOT INCLUDE THIS!
// INCLUDE rf24.h INSTEAD!
#define CONFIG 0x00
#define EN_AA 0x01
#define EN_RXADDR 0x02
#define SETUP_AW 0x03
#define SETUP_RETR 0x04
#define RF_CH 0x05
#define RF_SETUP 0x06
#define STATUS 0x07
#define OBSERVE_TX 0x08
#define CD 0x09
#define RX_ADDR_P0 0x0A
#define RX_ADDR_P1 0x0B
#define RX_ADDR_P2 0x0C
#define RX_ADDR_P3 0x0D
#define RX_ADDR_P4 0x0E
#define RX_ADDR_P5 0x0F
#define TX_ADDR 0x10
#define RX_PW_P0 0x11
#define RX_PW_P1 0x12
#define RX_PW_P2 0x13
#define RX_PW_P3 0x14
#define RX_PW_P4 0x15
#define RX_PW_P5 0x16
#define FIFO_STATUS 0x17
#define DYNPD 0x1C
#define MASK_RX_DR 6
#define MASK_TX_DS 5
#define MASK_MAX_RT 4
#define EN_CRC 3
#define CRCO 2
#define PWR_UP 1
#define PRIM_RX 0
#define ENAA_P5 5
#define ENAA_P4 4
#define ENAA_P3 3
#define ENAA_P2 2
#define ENAA_P1 1
#define ENAA_P0 0
#define ERX_P5 5
#define ERX_P4 4
#define ERX_P3 3
#define ERX_P2 2
#define ERX_P1 1
#define ERX_P0 0
#define AW 0 // 2 bits
#define ARD 4 // 4 bits
#define ARC 0 // 4 bits
#define PLL_LOCK 4
#define RF_DR 3
#define RF_PWR 1 // 2 bits
#define RX_DR 6
#define TX_DS 5
#define MAX_RT 4
#define RX_P_NO 1 // 3 bits
#define TX_FULL 0
#define PLOS_CNT 4 // 4 bits
#define ARC_CNT 0 // 4 bits
#define TX_REUSE 6
#define FIFO_FULL 5
#define TX_EMPTY 4
#define RX_FULL 1
#define RX_EMPTY 0
#define DPL_P0 0
#define DPL_P1 1
#define DPL_P2 2
#define DPL_P3 3
#define DPL_P4 4
#define DPL_P5 5
#define R_REGISTER 0x00 // last 4 bits will indicate reg. address
#define W_REGISTER 0x20 // last 4 bits will indicate reg. address
#define REGISTER_MASK 0x1F
#define R_RX_PAYLOAD 0x61
#define W_TX_PAYLOAD 0xA0
#define FLUSH_TX 0xE1
#define FLUSH_RX 0xE2
#define REUSE_TX_PL 0xE3
#define ACTIVATE 0x50
#define R_RX_PL_WID 0x60
#define NOP 0xFF

89
rf24/rf24.c Normal file
View File

@@ -0,0 +1,89 @@
#include "rf24.h"
#include "../ard/pins.h"
// CE = standby mode, CSN = SPI chip select
char payload_len, spi_ce, spi_csn, spi_sck, spi_mosi, spi_miso;
void reg_write(unsigned char, unsigned char);
void spi_transfer(unsigned char);
void rf24_init(unsigned char payload_length,
unsigned char channel,
unsigned char ce,
unsigned char csn,
unsigned char sck,
unsigned char mosi,
unsigned char miso){
if(payload_length > 32){
payload_length = 32;
}
payload_len = payload_length;
spi_ce = ce;
spi_csn = csn;
spi_sck = sck;
spi_mosi = mosi;
spi_miso = miso;
pin_mode(spi_ce, OUTPUT);
pin_mode(spi_csn, OUTPUT);
pin_mode(spi_sck, OUTPUT);
pin_mode(spi_mosi, OUTPUT);
pin_mode(spi_miso, INPUT);
digital_write(spi_ce, LOW);
digital_write(spi_csn, HIGH);
reg_write(RF_CH, channel);
}
void rf24_tx_addr(unsigned char* addr){
}
void rf24_rx_addr(unsigned char* addr){
}
void rf24_send(char* data){
}
void rf24_receive(char* data){
}
void reg_write(unsigned char reg, unsigned char value){
digital_write(spi_csn, LOW);
spi_transfer(W_REGISTER|(REGISTER_MASK&reg));
spi_transfer(value);
digital_write(spi_csn, HIGH);
}
void spi_transfer(unsigned char data){
unsigned char i = 0;
unsigned char rx = 0;
digital_write(spi_sck, LOW); // clock
for(i = 0; i < 8; i++){
// tx
if(data&(1<<(7-i))){
digital_write(spi_mosi, HIGH);
}
else{
digital_write(spi_mosi, LOW);
}
digital_write(spi_sck, HIGH); // clock
// rx
rx <<= 1;
if(digital_read(spi_miso) == HIGH){
rx |= 0x01;
}
digital_write(spi_sck, LOW); // clock
}
}

12
rf24/rf24.h Normal file
View File

@@ -0,0 +1,12 @@
#ifndef RF24_H_
#define RF24_H_
#include "register.h"
void rf24_init(unsigned char, unsigned char, unsigned char, unsigned char, unsigned char, unsigned char, unsigned char);
void rf24_tx_addr(unsigned char*);
void rf24_rx_addr(unsigned char*);
void rf24_send(char*); // length is fixed and set on initialization
void rf24_receive(char*); // length is fixed and set on initialization
#endif