#include "lt8900.h"
//参数定义
unsigned char regH = 0, regL = 0; //用于读取spi数据寄存器
unsigned char RBUF[BUFLEN]; //用于存储接受数据包
unsigned char TBUF[BUFLEN]; //用于存储发送数据包
unsigned char tlen = 0; //同步码长度
unsigned char channel=0x20; //设置频道
unsigned char dlen = 0;
//延时函数(用示波器测试调整)
void delay_10us(void)
{
unsigned char us = 10;
for(; us>0; us--);
}
void delay_nms(unsigned int ms)
{
unsigned char i;
unsigned int j;
for(j=ms; j>0; j--)
for(i=100; i>0; i--);
}
//spi读写一个字节
unsigned char spiReadWrite(unsigned byte)
{
unsigned char i;
for(i=0;i<8;i++)
{
SPI_MOSI = ((byte & 0x80)>>7);
SPI_CLK = 1;
//delay_10us();
byte <<= 1;
byte |= SPI_MISO;
SPI_CLK = 0;
//delay_10us();
}
return(byte);
}
//LT读寄存器
void LT_ReadReg(unsigned char reg)
{
SPI_SS = 0;
spiReadWrite(READ | reg);
regH = spiReadWrite(0x00);
regL = spiReadWrite(0x00);
SPI_SS = 1;
}
//LT写寄存器
void LT_WriteReg(unsigned char reg, unsigned char byteH, unsigned char byteL)
{
SPI_SS = 0;
spiReadWrite(WRITE & reg);
spiReadWrite(byteH);
spiReadWrite(byteL);
SPI_SS = 1;
}
//SPI IO初始化
void spi_io_Init(void)
{
//SPI_RST,SPI_SS,SPI_CLK,SPI_MOSI设置为推挽输出模式
//SPI_MISO,SPI_PKT设置为上拉输入模式
//MISO上拉输入
PC_DDR_DDR7 = 0;
PC_CR1_C17 = 1;
PC_CR2_C27 = 0;
PC_ODR_ODR7 = 1;
//MOSI推完输出
PC_DDR_DDR6 = 1;
PC_CR1_C16 = 1;
PC_CR2_C26 = 0;
PC_ODR_ODR6 = 0;
//CLK推完输出
PC_DDR_DDR5 = 1;
PC_CR1_C15 = 1;
PC_CR2_C25 = 0;
PC_ODR_ODR5 = 0;
//SS推完输出
PC_DDR_DDR4 = 1;
PC_CR1_C14 = 1;
PC_CR2_C24 = 0;
PC_ODR_ODR4 = 0;
//RST推完输出
PC_DDR_DDR3 = 1;
PC_CR1_C13 = 1;
PC_CR2_C23 = 0;
PC_ODR_ODR3 = 0;
//PKT上拉输入
PC_DDR_DDR2 = 0;
PC_CR1_C12 = 1;
PC_CR2_C22 = 0;
PC_ODR_ODR2 = 1;
}
void LT8900_Init(void)
{
SPI_RST = 0;
delay_nms(1);
SPI_RST = 1; //Enable 8900
delay_nms(5);//delay 5ms to let LT8900 stable
SPI_CLK = 0; //set SPI clock to low
LT_WriteReg(0, 0x6F, 0xE0);
LT_WriteReg(1, 0x56, 0x81);
LT_WriteReg(2, 0x66, 0x17);
LT_WriteReg(4, 0x9C, 0xC9);
LT_WriteReg(5, 0x66, 0x37);
LT_WriteReg(7, 0x00, 0x00);
LT_WriteReg(8, 0x6C, 0x90);
LT_WriteReg(9, 0x1f, 0xc0);
LT_WriteReg(10, 0x7F, 0xFD);
LT_WriteReg(11, 0x00, 0x08);
LT_WriteReg(12, 0x00, 0x00);
LT_WriteReg(13, 0x48, 0xBD);
LT_WriteReg(22, 0x00, 0xff);
LT_WriteReg(23, 0x80, 0x05);
LT_WriteReg(24, 0x00, 0x67);
LT_WriteReg(25, 0x16, 0x59);
LT_WriteReg(26, 0x19, 0xE0);
LT_WriteReg(27, 0x12, 0x00);
LT_WriteReg(28, 0x18, 0x00);
LT_WriteReg(32, 0x50, 0x04);
LT_WriteReg(33, 0x3f, 0xC7);
LT_WriteReg(34, 0x20, 0x00);
LT_WriteReg(35, 0x03, 0x20);
LT_WriteReg(36, 0x03, 0x80);
LT_WriteReg(37, 0x03, 0x80);
LT_WriteReg(38, 0x5A, 0x5A);
LT_WriteReg(39, 0x03, 0x80);
LT_WriteReg(40, 0x44, 0x01);
LT_WriteReg(41, 0xe4, 0x00); //PKT设置为低有效
LT_WriteReg(42, 0xFD, 0xB0);
LT_WriteReg(43, 0x00, 0x0F);
LT_WriteReg(50, 0x00, 0x00);
delay_nms(10); //delay 10ms to let LT8900 for operation
}
void SPI_SendFrame (void) //是否是发送地址的意思?
{
unsigned char i;
SPI_SS = 0;
for (i=0; i<tlen; i++)
RBUF[i] = spiReadWrite(TBUF[i]); //spi是全双工的,写的时候也需要读出来
SPI_SS = 1;
}
void LT_SetSyncWord (void) //设置同步码
{
TBUF[0] = 0x24; //reg36 to reg39
TBUF[1] = SYNCWORD_0;
TBUF[2] = SYNCWORD_1;
TBUF[3] = SYNCWORD_2;
TBUF[4] = SYNCWORD_3;
TBUF[5] = SYNCWORD_4;
TBUF[6] = SYNCWORD_5;
TBUF[7] = SYNCWORD_6;
TBUF[8] = SYNCWORD_7;
tlen = 9;
SPI_SendFrame();
}
void LT_StartTX(void) //将LT设置为发送模式
{
LT_ReadReg(0x07);
LT_WriteReg(0x07, 0x01, channel); //D8置位,TX模式
tlen = 0;
}
void LT_StartRX(void) //将LT设置为接受模式
{
LT_ReadReg(0x07);
LT_WriteReg(0x07, 0x00, channel+0x80); //D7置位,RX模式
}
void LT_StopRTX(void) //停止收发
{
LT_ReadReg(0x07);
LT_WriteReg(0x07, 0x00, 0x00);
}
void LT_CleanWFIFO(void)
{
LT_ReadReg(0x34);
LT_WriteReg(0x34, 0x80, 0x00);
}
void LT_SendPacket(void)
{
unsigned char i = 0;
LT_CleanWFIFO(); //Reset writing FIFO point to 0;
if (dlen < 1) return;
LT_WriteReg(50, dlen, TBUF[i]);
dlen--;
i++;
while (dlen > 0)
{
LT_WriteReg(50, TBUF[i], TBUF[i+1]);
dlen -= 2;
i += 2;
}
LT_StartTX();
while (SPI_PKT == 0);
}
void LT_SendByte_test(void)
{
LT_CleanWFIFO();
LT_WriteReg(50, 11, 0);
LT_WriteReg(50, 0x1e, 0x1e);
LT_WriteReg(50, 0x1e, 0x1e);
LT_WriteReg(50, 0x1e, 0x1e);
LT_WriteReg(50, 0x1e, 0x1e);
LT_WriteReg(50, 0x1e, 0x1e);
//LT_StartTX
LT_WriteReg(7, 0x01, 0x20);
while (SPI_PKT);
delay_nms(10);
}
没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
收起资源包目录
stm8S103 2.4GHZ.rar (36个子文件)
WLC-24LT-模拟SPI
TX
stm8s103S_TX
lt8900.h 1KB
Debug
Obj
main.o 13KB
stm8_lt8900.pbd 240B
main.pbi 545B
lt8900.pbi 549B
lt8900.o 38KB
List
Exe
stm8_lt8900.out 32KB
stm8_lt8900.dep 3KB
stm8_lt8900.ewp 41KB
stm8_lt8900.ewd 11KB
spi.h 624B
stm8_lt8900.eww 165B
settings
stm8_lt8900.cspy.bat 1KB
stm8_lt8900.dbgdt 4KB
stm8_lt8900.dni 841B
stm8_lt8900.wsdt 3KB
lt8900.c 5KB
spi.c 1KB
main.c 1KB
RX
stm8s103k_RX
lt8900.h 2KB
Debug
Obj
main.o 13KB
stm8_lt8900.pbd 248B
lt8900.o 35KB
List
Exe
stm8_lt8900.out 31KB
stm8_lt8900.dep 3KB
stm8_lt8900.ewp 41KB
stm8_lt8900.ewd 11KB
spi.h 624B
stm8_lt8900.eww 165B
settings
stm8_lt8900.cspy.bat 1KB
stm8_lt8900.dbgdt 5KB
stm8_lt8900.dni 684B
stm8_lt8900.wsdt 4KB
lt8900.c 5KB
spi.c 1KB
main.c 1KB
共 36 条
- 1
资源评论
- crosrol182020-05-03有点小贵,没用上!
焊板工程师
- 粉丝: 8
- 资源: 4
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功