mirror of
https://github.com/Kugelschieber/arduino-c.git
synced 2026-01-18 11:00:26 +00:00
Started working on RF24.
This commit is contained in:
93
rf24/register.h
Normal file
93
rf24/register.h
Normal 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
89
rf24/rf24.c
Normal 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®));
|
||||
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
12
rf24/rf24.h
Normal 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
|
||||
Reference in New Issue
Block a user