lijiajialjj 发表于 2014-8-28 10:25
好吧 我接受还没调通 发送有信号出来 接受不到 能把代码给我看看么
这个是单向的,测试一切OK
/*******************************************************************************
* Copyright (C), 2000-2014, Avisar Electronic Technology Co., Ltd.
* Filename: TIP_Si4432.c
* Author: Anson Chan
* Version:
* Date: 2014-8-3
* Description:
*
*
* Revision history:
*
* 1. Date: 2014-8-3
* Author: Anson Chan
* Change: Build
* 2.
* Attention:
*******************************************************************************/
/* Includes ------------------------------------------------------------------*/
#include "TIP_Si4432.h"
#include "delay.h"
#include "led.h"
u8 SI4432_RxBUFF[100];
u8 rx_count =0 ;
u8 tx_ok =1 ;
/* Private constants -----------------------------------------------------------*/
/* Private typedef -------------------------------------------------------------*/
/* Private macro --------------------------------------------------------------*/
#if 0
#define NRF_SPI SPI1
#define TIP_NRF_SPI_GRP GPIOA
#define TIP_NRF_NSS_PIN GPIO_Pin_3
#define TIP_NRF_SCK_PIN GPIO_Pin_5
#define TIP_NRF_MISO_PIN GPIO_Pin_6
#define TIP_NRF_MOSI_PIN GPIO_Pin_7
#define TIP_NRF_CE_GRP GPIOB
#define TIP_NRF_CE_PIN GPIO_Pin_12
#define TIP_NRF_IRQ_GRP GPIOB
#define TIP_NRF_IRQ_PIN GPIO_Pin_3
#define TIP_NRF_IRQ_PORT_SRC GPIO_PortSourceGPIOB
#define TIP_NRF_IRQ_PIN_SRC GPIO_PinSource3
#define TIP_NRF_IRQ_EXTI_LINE EXTI_Line3
#define Select_NRF() GPIO_ResetBits(TIP_NRF_SPI_GRP, TIP_NRF_NSS_PIN)
#define NotSelect_NRF() GPIO_SetBits(TIP_NRF_SPI_GRP, TIP_NRF_NSS_PIN)
#endif /* 0 */
/* Private variable -------------------------------------------------------------*/
/* Private functions prototype ----------------------------------------------------*/
/* Private functions ------------------------------------------------------------*/
void JrGpioInit(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
/* ENABLE GPIO clock*/
TIP_JR_SPI_GPIO_CLK_INIT(TIP_JR_SPI_GPIO_CLK, ENABLE);
TIP_JR_IRQ_GPIO_CLK_INIT(TIP_JR_IRQ_GPIO_CLK, ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);
GPIO_PinRemapConfig(GPIO_Remap_SWJ_NoJTRST,ENABLE);
/* SPI configuration: SCK, MISO and MOSI */
GPIO_InitStructure.GPIO_Pin = TIP_JR_SCK_PIN| TIP_JR_MISO_PIN | TIP_JR_MOSI_PIN;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_Init(TIP_JR_SPI_PORT, &GPIO_InitStructure);
/*NSS configuration*/
GPIO_InitStructure.GPIO_Pin = TIP_JR_NSS_PIN;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_Init(TIP_JR_SPI_PORT, &GPIO_InitStructure);
GPIO_SetBits(TIP_JR_SPI_PORT, TIP_JR_NSS_PIN);
/* IRQ configuration*/
GPIO_InitStructure.GPIO_Pin = TIP_JR_IRQ_PIN;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
GPIO_Init(TIP_JR_IRQ_PORT, &GPIO_InitStructure);
GPIO_EXTILineConfig(TIP_JR_IRQ_PORT_SRC/*GPIO_PortSourceGPIOB*/, TIP_JR_IRQ_PIN_SRC);
}
void JrNvicInit(void)
{
NVIC_InitTypeDef NVIC_InitStructure;
EXTI_InitTypeDef JR_EXTI_InitStructure;
/* NVIC channel & piority configuration*/
//NVIC_SetVectorTable(NVIC_VectTab_FLASH,0x0);
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_4);
#if 1
NVIC_InitStructure.NVIC_IRQChannel = TIP_JR_IRQ_CHN;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
// GPIO_EXTILineConfig(GPIO_PortSourceGPIOB, GPIO_PinSource4);
JR_EXTI_InitStructure.EXTI_Line = TIP_JR_IRQ_EXTI_LINE;
JR_EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
JR_EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;
JR_EXTI_InitStructure.EXTI_LineCmd = ENABLE;
EXTI_Init(&JR_EXTI_InitStructure);
#else
NVIC_InitStructure.NVIC_IRQChannel = EXTI4_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
GPIO_EXTILineConfig(GPIO_PortSourceGPIOB, GPIO_PinSource4);//NRF24L01 IRQ PB4
JR_EXTI_InitStructure.EXTI_Line = EXTI_Line4;
JR_EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
JR_EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;
JR_EXTI_InitStructure.EXTI_LineCmd = ENABLE;
EXTI_Init(&JR_EXTI_InitStructure);
#endif /* 0 */
}
#if 0
void NRF_SPI_Init(void)
{
SPI_InitTypeDef SPI_InitStructure;
GPIO_InitTypeDef GPIO_InitStructure;
NVIC_InitTypeDef NVIC_InitStructure;
EXTI_InitTypeDef EXTI_InitStructure;
// RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB | RCC_APB2Periph_GPIOC, ENABLE);
// RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO , ENABLE);
// RCC_APB2PeriphClockCmd(RCC_APB2Periph_SPI1 , ENABLE);
TIP_JR_SPI_GPIO_CLK_INIT(TIP_JR_SPI_GPIO_CLK, ENABLE);
TIP_JR_IRQ_GPIO_CLK_INIT(TIP_JR_IRQ_GPIO_CLK, ENABLE);
RCC_APB2PeriphResetCmd(RCC_APB2Periph_AFIO, ENABLE);
TIP_JR_SPI_CLK_INIT(TIP_JR_SPI_CLK, ENABLE);
#ifdef 0
/********************************NRF24L01 ¹Ü½Å²¿·Ö********************************/
/* ÅäÖà SPI2 Òý½Å: SCK, MISO and MOSI */
GPIO_InitStructure.GPIO_Pin = TIP_NRF_SCK_PIN| TIP_NRF_MISO_PIN | TIP_NRF_MOSI_PIN;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //¸´Óù¦ÄÜ£¨ÍÆÍ죩Êä³ö SPI1
GPIO_Init(TIP_NRF_SPI_GRP, &GPIO_InitStructure);
//NSS,PA4
GPIO_InitStructure.GPIO_Pin = TIP_NRF_NSS_PIN;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_Init(TIP_NRF_SPI_GRP, &GPIO_InitStructure);
/* ÅäÖÃSPI NRF24L01+Ƭѡ CE PB12 */
GPIO_InitStructure.GPIO_Pin = TIP_NRF_CE_PIN;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_Init(TIP_NRF_CE_GRP, &GPIO_InitStructure);
/********************************NRF24L01 external interrupt********************************/
/* ÅäÖÃNRF24L01+ ÖжÏÐźŲúÉúIRQÁ¬½Óµ½ PB4 */
GPIO_InitStructure.GPIO_Pin = TIP_NRF_IRQ_PIN; //NRF24L01 IRQ
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; //ÉÏÀÊäÈëģʽ
GPIO_Init(TIP_NRF_IRQ_GRP, &GPIO_InitStructure);
#endif /* 0 */
JrGpioInit();
#if 1
// //ÉèÖÃÖжÏÏòÁ¿±íµÄ´æ·ÅλÖú͵ØÖ·
// //NVIC_SetVectorTable(NVIC_VectTab_FLASH,0x0);
NVIC_InitStructure.NVIC_IRQChannel = EXTI3_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
GPIO_EXTILineConfig(GPIO_PortSourceGPIOB, GPIO_PinSource3);//NRF24L01 IRQ PB4
EXTI_InitStructure.EXTI_Line = EXTI_Line3;
EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;
EXTI_InitStructure.EXTI_LineCmd = ENABLE;
EXTI_Init(&EXTI_InitStructure);
#else
JrNvicInit();
#endif /* 0 */
NotSelect_NRF();
SPI_Cmd(NRF_SPI, DISABLE);
/* SPI1 ÅäÖÃ */
SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex; //È«Ë«¹¤
SPI_InitStructure.SPI_Mode = SPI_Mode_Master; //Ö÷ģʽ
SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b; //8λ
SPI_InitStructure.SPI_CPOL = SPI_CPOL_Low; //ʱÖÓ¼«ÐÔ ¿ÕÏÐ״̬ʱ£¬SCK±£³ÖµÍµçƽ
SPI_InitStructure.SPI_CPHA = SPI_CPHA_1Edge; //ʱÖÓÏàλ Êý¾Ý²ÉÑù´ÓµÚÒ»¸öʱÖÓ±ßÑØ¿ªÊ¼
SPI_InitStructure.SPI_NSS = SPI_NSS_Soft; //Èí¼þ²úÉúNSS
SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_16; //²¨ÌØÂÊ¿ØÖÆ SYSCLK/16
SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB; //Êý¾Ý¸ßλÔÚÇ°
SPI_InitStructure.SPI_CRCPolynomial = 7; //CRC¶àÏîʽ¼Ä´æÆ÷³õʼֵΪ7
SPI_Init(NRF_SPI, &SPI_InitStructure);
SPI_SSOutputCmd(NRF_SPI, ENABLE);
SPI_Cmd(NRF_SPI, ENABLE);
}
#endif /* 0 */
void JrSpiInit(void)
{
SPI_InitTypeDef SPI_InitStructure;
/* ENABLE SPI clock*/
TIP_JR_SPI_CLK_INIT(TIP_JR_SPI_CLK, ENABLE);
/* SPI configuration*/
// NotSelect_NRF();
SPI_Cmd(TIP_JR_SPI, DISABLE);
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(TIP_JR_SPI, &SPI_InitStructure);
SPI_Cmd(TIP_JR_SPI, ENABLE);
}
void JrInit(void)
{
JrGpioInit();
JrSpiInit();
}
/****************************************************************************
* Ãû ³Æ£ºunsigned char SPI_NRF_SendByte(unsigned char byte)
* ¹¦ ÄÜ£ºÍ¨¹ýSPI2 ·¢ËÍÒ»¸ö×Ö½ÚµÄÊý¾Ý¡£
* Èë¿Ú²ÎÊý£ºbyte£º ·¢Ë͵ÄÊý¾Ý
* ³ö¿Ú²ÎÊý£º½ÓÊÕµ½µÄ×Ö½Ú
* ˵ Ã÷£º
* µ÷Ó÷½·¨£ºSPI_NRF_SendByte(data1);
****************************************************************************/
unsigned char SPI_NRF_SendByte(unsigned char byte)
{
/* Ñ»·¼ì²â·¢ËÍ»º³åÇøÊÇ·ñÊÇ¿Õ */
while(SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_TXE) == RESET);
/* ͨ¹ýSPI1ÍâÉè·¢³öÊý¾Ý */
SPI_I2S_SendData(SPI1, byte);
/* µÈ´ý½ÓÊÕÊý¾Ý£¬Ñ»·¼ì²é½ÓÊÕÊý¾Ý»º³åÇø */
while(SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_RXNE) == RESET);
/* ·µ»Ø¶Á³öµÄÊý¾Ý */
return SPI_I2S_ReceiveData(SPI1);
}
/****************************************************************************
* Ãû ³Æ£ºunsigned char SPI_RW_Reg(unsigned char data1,unsigned char data2)
* ¹¦ ÄÜ£ºÍ¨¹ýSPI2 ½«µ¥×Ö½ÚдÈëµ½NRF24L01+Ö¸¶¨µÄ¼Ä´æÆ÷Àï¡£
* Èë¿Ú²ÎÊý£ºdata1£º NRF24L01¼Ä´æÆ÷
data2: µ¥×Ö½ÚÊý¾Ý
* ³ö¿Ú²ÎÊý£º½ÓÊÕµ½µÄ×Ö½Ú
* ˵ Ã÷£º
* µ÷Ó÷½·¨£ºSPI_RW_Reg(WRITE_REG1 + EN_AA, 0x3f);
****************************************************************************/
unsigned char SPI_RW_Reg(unsigned char data1,unsigned char data2)
{
unsigned int Data = 0;
Select_NRF(); //Ñ¡ÔñNRF24L01Ƭѡ
#ifdef _TIP_NRF_H_
data1 |= 0x20;
#else
#ifdef _TIP_SI4432_H_
data1 |= 0x80;
#endif
#endif
Data=SPI_NRF_SendByte(data1); //Ö¸¶¨NRF24L01¼Ä´æÆ÷
SPI_NRF_SendByte(data2); //дÈëÊý¾Ý
NotSelect_NRF(); //½ûÖ¹NRF24L01Ƭѡ
return(Data); //·µ»ØNRF24L01 д¼Ä´æÆ÷µÄ״̬ÐÅÏ¢
}
/****************************************************************************
* Ãû ³Æ£ºunsigned char SPI_Write_Buf(BYTE reg, BYTE *pBuf, BYTE bytes)
* ¹¦ ÄÜ£ºÍ¨¹ýSPI1 ½«Êý×éÀïµÄÊý¾ÝдÈëµ½NRF24L01+Ö¸¶¨µÄ¼Ä´æÆ÷Àï¡£
* Èë¿Ú²ÎÊý£ºreg£º NRF24L01¼Ä´æÆ÷
pBuf: Êý×é
bytes£º дÈëµÄ×Ö½ÚÊý
* ³ö¿Ú²ÎÊý£º½ÓÊÕµ½µÄ×Ö½Ú
* ˵ Ã÷£º
* µ÷Ó÷½·¨£ºSPI_Write_Buf(WRITE_REG1 + RX_ADDR_P0, TX_ADDRESS0, TX_ADR_WIDTH);
****************************************************************************/
unsigned char SPI_Write_Buf(BYTE reg, BYTE *pBuf, BYTE bytes)
{
unsigned char status,byte_ctr;
#ifdef _TIP_NRF_H_
reg |= 0x20;
#else
#ifdef _TIP_SI4432_H_
reg |= 0x80;
#endif
#endif
Select_NRF(); //Ñ¡ÔñNRF24L01Ƭѡ
status=SPI_NRF_SendByte(reg); //Ö¸¶¨NRF24L01¼Ä´æÆ÷
for(byte_ctr=0; byte_ctr<bytes; byte_ctr++) //дÈëÖ¸¶¨³¤¶ÈµÄÊý¾Ý
{
SPI_NRF_SendByte(*pBuf++);
}
NotSelect_NRF(); //½ûÖ¹NRF24L01Ƭѡ
return(status); //·µ»ØNRF24L01 д¼Ä´æÆ÷µÄ״̬ÐÅÏ¢
}
/****************************************************************************
* Ãû ³Æ£ºunsigned char SPI_Read(BYTE reg)
* ¹¦ ÄÜ£ºÍ¨¹ýSPI1 ½«NRF24L01+Ö¸¶¨µÄ¼Ä´æÆ÷Àï¶Á³öÒ»¸ö×Ö½Ú¡£
* Èë¿Ú²ÎÊý£ºreg£º NRF24L01¼Ä´æÆ÷
* ³ö¿Ú²ÎÊý£ºÖ¸¶¨NRF24L01¼Ä´æÆ÷µÄ״̬ÐÅÏ¢
* ˵ Ã÷£º
* µ÷Ó÷½·¨£ºstatus=SPI_Read(READ_REG1+STATUS);
****************************************************************************/
unsigned char SPI_Read(BYTE reg)
{
unsigned char Data;
Select_NRF(); //Ñ¡ÔñNRF24L01Ƭѡ
delay_ms(100);
SPI_NRF_SendByte(reg); //Ö¸¶¨NRF24L01¼Ä´æÆ÷
Data=SPI_NRF_SendByte(0); //¶Á³öÊý¾Ý Data=SPI_NRF_SendByte(0);
NotSelect_NRF(); //½ûÖ¹NRF24L01Ƭѡ
return (Data);
}
u16 GetFrequency(void)
{
return 0;
}
u32 GetAddress(void)
{
return 0;
}
void Si4432Init(u16 frequency,u32 address)
{
u8 Fr0 =0;
u8 Fr1 =0;
u8 addr3 =0,addr2 =0,addr1 =0;
JrInit();
LED_GPIO_Config();
LED1( ON );
Select_NRF();
delay_ms(100);
NotSelect_NRF();
delay_ms(100);
/*software reset*/
SPI_RW_Reg(0x07, 0x80);
delay_ms(100); //at least 15ms
SPI_Read(0x3);
SPI_Read(0x4); //clear receive and send interrupt
delay_ms(100);
JrNvicInit();
addr3 = address >>16;
addr2 =(address >>8)&0xFF;
addr1 = address &0xFF;
if((frequency >0)&&(frequency <=930))
{
if(frequency <480)
{
Fr0 =frequency/10-24+64;
Fr1 =((frequency%10)*6400)>>8;
}
else
{
Fr0 =(frequency-480)/20+64;
Fr1 =((frequency%20)*6400)>>8;
}
}
else
return;
SPI_RW_Reg(0x75, Fr0);
SPI_RW_Reg(0x76, Fr1);
SPI_RW_Reg(0x77, 0x00); //init 433MHz
SPI_Read(0x75);
SPI_Read(0x76);
SPI_Read(0x77);
SPI_RW_Reg(0x2a, 0x14);
SPI_RW_Reg(0x6e, 0x4e);
SPI_RW_Reg(0x6f, 0xa5);
SPI_RW_Reg(0x70, 0x2c); //9.6kbps
//SpiWriteRegister(0x72, 0x38); //(1.2kbps)
SPI_RW_Reg(0x72, 0x48); // frequency bias (9.6kbps)
//(9.6 kbps, deviation: 45 kHz, channel filter BW: 102.2 kHz
SPI_RW_Reg(0x1C, 0x1e); //write 0x1E to the IF Filter Bandwidth register
SPI_RW_Reg(0x20, 0xd0); //write 0xD0 to the Clock Recovery Oversampling Ratio register
SPI_RW_Reg(0x21, 0x00); //write 0x00 to the Clock Recovery Offset 2 register
SPI_RW_Reg(0x22, 0x9d); //write 0x9D to the Clock Recovery Offset 1 register
SPI_RW_Reg(0x23, 0x49); //write 0x49 to the Clock Recovery Offset 0 register
SPI_RW_Reg(0x24, 0x00); //write 0x00 to the Clock Recovery Timing Loop Gain 1 register
SPI_RW_Reg(0x25, 0x24); //write 0x24 to the Clock Recovery Timing Loop Gain 0 register
SPI_RW_Reg(0x1D, 0x40); //write 0x40 to the AFC Loop Gearshift Override register
SPI_RW_Reg(0x1E, 0x0A); //write 0x0A to the AFC Timing Control register
SPI_RW_Reg(0x2A, 0x20); //write 0x20 to the AFC Limiter register
/* preamble & synchronous words configuration*/
SPI_RW_Reg(0x34, 0X0A); // 5 bytes of preamble
SPI_RW_Reg(0x35, 0x2A); // preamble check enable
SPI_RW_Reg(0x33, 0x04); // Transmitted Synchronization Word 3 first, followed by sync word 2,end by sync word 1
SPI_RW_Reg(0x36, addr3); //Synchronization Word 0x2dd401
SPI_RW_Reg(0x37, addr2);
SPI_RW_Reg(0x38, addr1); //this word can change for address
SPI_RW_Reg(0x30, 0x8D); //enalbe PH+FIFO MODE, MSB, CCITT CRC
SPI_RW_Reg(0x32, 0x00 ); // disable frame header
SPI_RW_Reg(0x71, 0x63); // tranismit without CLK, FIFO, FSK MODE
/*GPIO configuration*/
SPI_RW_Reg(0x0b, 0x12); //
SPI_RW_Reg(0x0c, 0x15); //
/* others configuration */
SPI_RW_Reg(0x09, 0xD7); // loading capacity
SPI_RW_Reg(0x69, 0x60); //AGC overload
/* tx power*/
SPI_RW_Reg(0x6d, 0x1e);
/* enable rx manually*/
SPI_RW_Reg(0x07, 0x05);
/* enable rx interrupt*/
SPI_RW_Reg(0x05, 0x03);
SPI_RW_Reg(0x06, 0x00);
/* clear interrupt*/
SPI_Read(0x03);
SPI_Read(0x04);
}
void Si4432Send(uint8_t* buf, uint8_t len)
{
if(tx_ok)
{
SI4432_RxBUFF[rx_count++] = SPI_Read(0x5);
SI4432_RxBUFF[rx_count++] = SPI_Read(0x6);
SI4432_RxBUFF[rx_count++] = SPI_Read(0x7);
SI4432_RxBUFF[rx_count++] = SPI_Read(0x8);
SPI_RW_Reg(0x07, 0x01); //ready mode
delay_ms(1); // delay for stable
SPI_RW_Reg(0x3e, len); // SET transimit length
while(len--)
SPI_RW_Reg(0x7F, *buf++);
SPI_RW_Reg(0x05, 0x04); //enable trasimition complete interrupt
SPI_RW_Reg(0x06, 0x00);
SPI_Read(0x03); //clear interrupt flags
SPI_Read(0x04);
SPI_RW_Reg(0x07, 0x09); // transmition enable
tx_ok = 0;
}
}
void Si4432Suspend(void)
{
SPI_RW_Reg(0x07, 0x00); //wait mode
}
void Si4432ErrHandle(void)
{
SPI_RW_Reg(0x08, 0x03); //clear rx/tx fifo
SPI_Read(0x03); //clear interrupt flags
SPI_Read(0x04);
}
void Si4432_ISR(void)
{
uint8_t status1 = 0;
uint8_t status2 = 0;
uint8_t SI4432_RxLenth = 0;
uint8_t SI4432_RxCount = 0;
delay_ms(1);
status1 = SPI_Read(0x03); //read the Interrupt Status1 register
status2 = SPI_Read(0x04); //read the Interrupt Status2 register, just for clear the pending bits?
if ( (status1 & 0x02) == 0x02 ) /*Valid Packet Received*/
{
SI4432_RxLenth = SPI_Read(0x4B);
for (SI4432_RxCount=0;SI4432_RxCount < SI4432_RxLenth;SI4432_RxCount++)
{
SI4432_RxBUFF[SI4432_RxCount] = SPI_Read(0x7F);
}
SI4432_RxCount=0;
SPI_RW_Reg(0x08, 0x02);
SPI_RW_Reg(0x08, 0x00);
SPI_RW_Reg(0x07, 0x05); //enble rx
GPIO_WriteBit(GPIOC, GPIO_Pin_13,
(BitAction)((1-GPIO_ReadOutputDataBit(GPIOC, GPIO_Pin_13))));
}
if( (status1 & 0x04) == 0x04 ) /* packet sent interrupt*/
{
tx_ok = 1;
GPIO_WriteBit(GPIOC, GPIO_Pin_13,
(BitAction)((1-GPIO_ReadOutputDataBit(GPIOC, GPIO_Pin_13))));
}
status1 = SPI_Read(0x03); //read the Interrupt Status1 register
status2 = SPI_Read(0x04); //read the Interrupt Status2 register, just for clear the pending bits?
}
extern void Si4432_ISR();
void TIP_JR_IRQHANDLER(void)
{
if(EXTI_GetITStatus(TIP_JR_IRQ_EXTI_LINE) != RESET )
{
if( GPIO_ReadInputDataBit( TIP_JR_IRQ_PORT, TIP_JR_IRQ_PIN) == RESET)
{
Si4432_ISR();
}
EXTI_ClearITPendingBit(TIP_JR_IRQ_EXTI_LINE);
}
}
|