126 lines
4.9 KiB
C
126 lines
4.9 KiB
C
|
#include <stdlib.h>
|
|||
|
#include <unistd.h>
|
|||
|
#include <stdio.h>
|
|||
|
#include <string.h>
|
|||
|
#include "ql_gpio.h"
|
|||
|
|
|||
|
|
|||
|
#define SPI_CLK_PIN 1
|
|||
|
#define SPI_CLK_IO GPIO_9
|
|||
|
#define SPI_MISO_PIN 2
|
|||
|
#define SPI_MISO_IO GPIO_12
|
|||
|
#define SPI_MOSI_PIN 3
|
|||
|
#define SPI_MOSI_IO GPIO_11
|
|||
|
#define SPI_CS_PIN 4
|
|||
|
#define SPI_CS_IO GPIO_10
|
|||
|
|
|||
|
#define SPI_RST_PIN 59 //spi2-mosi
|
|||
|
#define SPI_RST_IO GPIO_2
|
|||
|
#define SPI_INT_PIN 60 //spi2-miso
|
|||
|
#define SPI_INT_IO GPIO_3
|
|||
|
#define SPI_BUSY_PIN 61 //spi2-clk
|
|||
|
#define SPI_BUSY_IO GPIO_0
|
|||
|
|
|||
|
#define LORA_SYNCWORD_1 0x3444
|
|||
|
#define LORA_SYNCWORD_2 0x1444
|
|||
|
|
|||
|
/*cmd*/
|
|||
|
#define LORA_SET_REGULATORMODE 0x96
|
|||
|
#define LORA_SET_RFSWITCHMODE 0x9D
|
|||
|
#define LORA_SET_CALIBRATE 0x89
|
|||
|
#define LORA_SET_BUFFERBASEADDRESS 0x8F
|
|||
|
#define LORA_SET_PACONFIG 0x95
|
|||
|
#define LORA_SET_TX_PARAMS 0x8E
|
|||
|
#define LORA_SET_CALIBRATEIMAGE 0x98
|
|||
|
#define LORA_SET_RFFREQ 0x86
|
|||
|
#define LORA_SET_STOPRXTIMERONPREAMBLE 0x9F
|
|||
|
#define LORA_SET_SYMBNUMTIMEOUT 0xA0
|
|||
|
#define LORA_SET_PACKETTYPE 0x8A
|
|||
|
#define LORA_SET_MODULATIONPARAMS 0x8B
|
|||
|
#define LORA_SET_PACKETPARAMS 0x8C
|
|||
|
#define LORA_SET_DIO_IRQ_CONFIG 0x08
|
|||
|
#define LORA_SET_RX 0x82 //将芯片设置为接收模式
|
|||
|
#define LORA_GET_STATUS 0xC0 //返回设备当前状态
|
|||
|
#define LORA_GET_IRQSTATUS 0x12 //获取中断状态
|
|||
|
#define LORA_CLEAR_IRQSTATUS 0x02 //清除中断状态
|
|||
|
|
|||
|
/*register addr*/
|
|||
|
#define LORA_SET_OCP 0x08E7
|
|||
|
#define LORA_SYNCWORD 0x0740
|
|||
|
|
|||
|
/*参数宏*/
|
|||
|
//CALIBRATE
|
|||
|
#define CALIBRATE_IMAGE_OFF 0b00000000 // 6 6 image calibration: disabled
|
|||
|
#define CALIBRATE_IMAGE_ON 0b01000000 // 6 6 enabled
|
|||
|
#define CALIBRATE_ADC_BULK_P_OFF 0b00000000 // 5 5 ADC bulk P calibration: disabled
|
|||
|
#define CALIBRATE_ADC_BULK_P_ON 0b00100000 // 5 5 enabled
|
|||
|
#define CALIBRATE_ADC_BULK_N_OFF 0b00000000 // 4 4 ADC bulk N calibration: disabled
|
|||
|
#define CALIBRATE_ADC_BULK_N_ON 0b00010000 // 4 4 enabled
|
|||
|
#define CALIBRATE_ADC_PULSE_OFF 0b00000000 // 3 3 ADC pulse calibration: disabled
|
|||
|
#define CALIBRATE_ADC_PULSE_ON 0b00001000 // 3 3 enabled
|
|||
|
#define CALIBRATE_PLL_OFF 0b00000000 // 2 2 PLL calibration: disabled
|
|||
|
#define CALIBRATE_PLL_ON 0b00000100 // 2 2 enabled
|
|||
|
#define CALIBRATE_RC13M_OFF 0b00000000 // 1 1 13 MHz RC osc. calibration: disabled
|
|||
|
#define CALIBRATE_RC13M_ON 0b00000010 // 1 1 enabled
|
|||
|
#define CALIBRATE_RC64K_OFF 0b00000000 // 0 0 64 kHz RC osc. calibration: disabled
|
|||
|
#define CALIBRATE_RC64K_ON 0b00000001 // 0 0 enabled
|
|||
|
//standby
|
|||
|
#define LORA_STANDBY_RC 0x00
|
|||
|
#define LORA_STANDBY_XOSC 0x01
|
|||
|
//regulator
|
|||
|
#define REGULATOR_DCDC 0x01
|
|||
|
#define REGULATOR_LDO 0x00
|
|||
|
//freq
|
|||
|
#define XTAL_FREQ (double)(32000000)
|
|||
|
#define FREQ_DIV (double)(33554432) //2的25次方
|
|||
|
#define FREQ_STEP (double)(XTAL_FREQ/FREQ_DIV)
|
|||
|
#define RF_FREQ (uint32_t)470000000
|
|||
|
//irq
|
|||
|
typedef enum
|
|||
|
{
|
|||
|
IRQ_RADIO_NONE = 0x0000,
|
|||
|
IRQ_TX_DONE = 0x0001,
|
|||
|
IRQ_RX_DONE = 0x0002,
|
|||
|
IRQ_PREAMBLE_DETECTED = 0x0004,
|
|||
|
IRQ_SYNCWORD_VALID = 0x0008,
|
|||
|
IRQ_HEADER_VALID = 0x0010,
|
|||
|
IRQ_HEADER_ERROR = 0x0020,
|
|||
|
IRQ_CRC_ERROR = 0x0040,
|
|||
|
IRQ_CAD_DONE = 0x0080,
|
|||
|
IRQ_CAD_ACTIVITY_DETECTED = 0x0100,
|
|||
|
IRQ_RX_TX_TIMEOUT = 0x0200,
|
|||
|
IRQ_RADIO_ALL = 0xFFFF,
|
|||
|
}RadioIrqMasks_t;
|
|||
|
|
|||
|
/*初始化spi总线*/
|
|||
|
int lora_spi_init(void);
|
|||
|
|
|||
|
/*初始化lora所需的gpio口*/
|
|||
|
int lora_gpio_init(void);
|
|||
|
|
|||
|
/*初始化收发数组内存,进行32字节对齐*/
|
|||
|
void transfer_buf_init(void);
|
|||
|
|
|||
|
/*复位lora模块*/
|
|||
|
void lora_reset(void);
|
|||
|
|
|||
|
/*等待busy被拉低*/
|
|||
|
int wait_busy_low(void);
|
|||
|
|
|||
|
/*写命令*/
|
|||
|
int lora_write_cmd(uint8_t cmd, uint8_t *data, uint8_t len);
|
|||
|
|
|||
|
/*读命令*/
|
|||
|
int lora_read_cmd(uint8_t cmd, uint8_t len);
|
|||
|
|
|||
|
/*写寄存器*/
|
|||
|
int lora_wrtie_register(uint16_t add,uint8_t *data,uint8_t len);
|
|||
|
|
|||
|
/*读寄存器*/
|
|||
|
int lora_read_register(uint16_t add, uint8_t size);
|
|||
|
|
|||
|
/*写buffer*/
|
|||
|
void lora_write_buffer(uint8_t *data, uint8_t len);
|
|||
|
|
|||
|
/*读buffer*/
|
|||
|
void lora_read_buffer(uint8_t offset, uint8_t len);
|