Пример #1
0
void SI4432_WriteReg(char addr,char val)
{
	RF4432_SEL_0;                  
	SPI_ReadWriteByte(addr|WR);      
	SPI_ReadWriteByte(val);          
	RF4432_SEL_1;      
}
Пример #2
0
static rt_uint32_t xfer(struct rt_spi_device* device, struct rt_spi_message* message)
{
    struct rt_spi_configuration * config = &device->config;
    rt_uint32_t size = message->length;
    const rt_uint8_t * send_ptr = message->send_buf;
    rt_uint8_t * recv_ptr = message->recv_buf;
    struct kinetis_spi_cs * kinetis_spi_cs = device->parent.user_data;
    //rt_kprintf("spi size:%d\r\n", size);
    while(size--)
    {
        rt_uint16_t data = 0xFF;
        if(send_ptr != RT_NULL)
        {
            data = *send_ptr++;
        }
        /* 最后一个 并且是需要释放CS */
        if((size == 0) && (message->cs_release))
        {  
            data = SPI_ReadWriteByte(HW_SPI2, HW_CTAR0, data, kinetis_spi_cs->ch, kSPI_PCS_ReturnInactive);
        }
        else
        {
            data = SPI_ReadWriteByte(HW_SPI2, HW_CTAR0, data, kinetis_spi_cs->ch, kSPI_PCS_KeepAsserted);
        }
        if(recv_ptr != RT_NULL)
        {
            *recv_ptr++ = data;
        }
    }
    return message->length;
}
Пример #3
0
uint8_t Si_t::ReadRegister (const uint8_t Addr) {
    uint8_t Rpl;
    NSEL_Lo();
    SPI_ReadWriteByte (FSPI, Addr);
    Rpl =  SPI_ReadWriteByte (FSPI, 0);
    NSEL_Hi();
    return Rpl;
}
Пример #4
0
u8 NRF24L01_Write_Byte(u8 reg, u8 pBuf)
{
	u8 status;    
	NRF24L01_CSN_L();                        //使能SPI传输
	status = SPI_ReadWriteByte(reg);//发送寄存器值(位置),并读取状态值
	SPI_ReadWriteByte(pBuf);        //写入数据  
	NRF24L01_CSN_H();                        //关闭SPI传输
	return status;                  //返回读到的状态值
}
Пример #5
0
u8 NRF24L01_Read_Reg(u8 reg)
{
	u8 reg_val;    
	NRF24L01_CSN_L();                        //使能SPI传输
	SPI_ReadWriteByte(reg);         //发送寄存器号
	reg_val=SPI_ReadWriteByte(0XFF);//读取寄存器内容
	NRF24L01_CSN_H();                        //禁止SPI传输    
	return(reg_val);                //返回状态值
}
Пример #6
0
//在指定位置读出指定长度的数据
//*pBuf:数据指针
//返回值,此次读到的状态寄存器值 
u8 NRF24L01_Read_Buf(u8 regaddr,u8 *pBuf,u8 datalen)
{
	u8 status,u8_ctr;	       
  	Clr_NRF24L01_CSN;                     //使能SPI传输
  	status=SPI_ReadWriteByte(regaddr);   //发送寄存器值(位置),并读取状态值   	   
	for(u8_ctr=0;u8_ctr<datalen;u8_ctr++)pBuf[u8_ctr]=SPI_ReadWriteByte(0XFF);//读出数据
  	Set_NRF24L01_CSN;                     //关闭SPI传输
  	return status;                        //返回读到的状态值
}
Пример #7
0
u8 NRF_Write_Reg(u8 reg,u8 value)
{
	u8 status;
	NRF_CSN=0; //使能 SPI 传输
	status =SPI_ReadWriteByte(NRF_SPI,reg); //发送寄存器号
	SPI_ReadWriteByte(NRF_SPI,value); //写入寄存器的值
	NRF_CSN=1; //禁止 SPI 传输
	return(status); //返回状态值
}
Пример #8
0
//读取SPI寄存器值 ,regaddr:要读的寄存器
u8 NRF24L01_Read_Reg(u8 regaddr)
{
	u8 reg_val;	    
	Clr_NRF24L01_CSN;                //使能SPI传输		
  	SPI_ReadWriteByte(regaddr);     //发送寄存器号
  	reg_val=SPI_ReadWriteByte(0XFF);//读取寄存器内容
  	Set_NRF24L01_CSN;                //禁止SPI传输		    
  	return(reg_val);                 //返回状态值
}	
Пример #9
0
//读取 SPI 寄存器值
//reg:要读的寄存器
u8 NRF_Read_Reg(u8 reg)
{
	u8 reg_val; 
	NRF_CSN = 0; //使能 SPI 传输 
	SPI_ReadWriteByte(NRF_SPI,reg); //发送寄存器号
	reg_val=SPI_ReadWriteByte(NRF_SPI,0XFF); //读取寄存器内容
	NRF_CSN = 1; //禁止 SPI 传输 
	return(reg_val); //返回状态值
} 
Пример #10
0
//通过SPI写寄存器
u8 NRF24L01_Write_Reg(u8 regaddr,u8 data)
{
	u8 status;	
    Clr_NRF24L01_CSN;                    //使能SPI传输
  	status =SPI_ReadWriteByte(regaddr); //发送寄存器号 
  	SPI_ReadWriteByte(data);            //写入寄存器的值
  	Set_NRF24L01_CSN;                    //禁止SPI传输	   
  	return(status);       		         //返回状态值
}
Пример #11
0
char SI4432_ReadReg(char addr)
{
	char retval;
	RF4432_SEL_0;                  
	SPI_ReadWriteByte(addr|RR);      
	retval = SPI_ReadWriteByte(0xff);          
	RF4432_SEL_1;    
	return retval;	
}
Пример #12
0
u8 NRF24L01_Write_Reg(u8 reg,u8 value)
{
	u8 status;
	CSN_L();                          //使能SPI传输
	status=SPI_ReadWriteByte(reg);    //发送寄存器号 
	SPI_ReadWriteByte(value);         //写入寄存器的值
	CSN_H();                          //禁止SPI传输
	return(status);    //返回状态值
}
Пример #13
0
u8 NRF24L01_Read_Buf(u8 reg,u8 *pBuf,u8 len)
{
	u8 status,u8_ctr;       
	CSN_L();                             //使能SPI传输
	status=SPI_ReadWriteByte(reg);       //发送寄存器值(位置),并读取状态值 
	for(u8_ctr=0;u8_ctr<len;u8_ctr++)
		pBuf[u8_ctr]=SPI_ReadWriteByte(0XFF);//读出数据
	CSN_H();                             //禁止SPI传输
	return status;                       //返回读到的状态值
}
Пример #14
0
u8 NRF24L01_Write_Buf(u8 reg, u8 *pBuf, u8 len)
{
	u8 status,u8_ctr;    
	NRF24L01_CSN_L();                        //使能SPI传输
	status = SPI_ReadWriteByte(reg);//发送寄存器值(位置),并读取状态值
	for(u8_ctr=0; u8_ctr<len; u8_ctr++)
		SPI_ReadWriteByte(*pBuf++);     //写入数据  
	NRF24L01_CSN_H();                        //关闭SPI传输
	return status;                  //返回读到的状态值
}
Пример #15
0
u8 NRF_Write_Buf(u8 reg, u8 *pBuf, u8 len)
{
	u8 status,u8_ctr; 
	NRF_CSN = 0; //使能 SPI 传输
	status = SPI_ReadWriteByte(NRF_SPI,reg); //发送寄存器值(位置),并读取状态值
	for(u8_ctr=0; u8_ctr<len; u8_ctr++)
		SPI_ReadWriteByte(NRF_SPI,*pBuf++); //写入数据
	NRF_CSN = 1; //关闭 SPI 传输
	return status; //返回读到的状态值
} 
Пример #16
0
void SPI_ISR(void)
{
    static uint8_t i = 1;
    static uint16_t temp = 0;
    if(i == 7)
    {
        SPI_ITDMAConfig(BOARD_SPI_INSTANCE, kSPI_IT_TCF, false);
        shell_printf("ID:0x%X\r\n", temp);
        return ;
    }
    if(i == 6)
    {
        temp <<= 8;
    }
    temp |= SPI_ReadWriteByte(BOARD_SPI_INSTANCE,HW_CTAR0, W25QXX_READ_ID_TABLE[i], 1, kSPI_PCS_KeepAsserted);
    i++;
}
Пример #17
0
static uint32_t xfer(uint8_t *buf_in, uint8_t *buf_out, uint32_t len, uint8_t cs_state)
{
    uint8_t dummy_in;
    
    if(!buf_in)
        buf_in = &dummy_in;
    GPIO_WriteBit(HW_GPIOA, 5, 0);  //cs
    while(len--)
    {
        *buf_in = SPI_ReadWriteByte(HW_SPI0, *buf_out); 
        if(buf_out)
            buf_out++;
        if(buf_in != &dummy_in)
            buf_in++;
    }
    GPIO_WriteBit(HW_GPIOA, 5, cs_state);  //cs
    return len;
}
Пример #18
0
void SPI2_Init()
{
	SPI_InitTypeDef  SPI_InitStructure;
	GPIO_InitTypeDef GPIO_InitStructure;
	
	//开启SPI所用引脚的时钟,开启复用时钟,开启CE 、CSN 引脚对应的时钟
	RCC_APB1PeriphClockCmd(RCC_APB1Periph_SPI2,ENABLE);
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB|RCC_APB2Periph_AFIO,ENABLE);
	
	//配置 CE 和 CSN 引脚 
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12|GPIO_Pin_10;
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;//PA9时钟速度50MHz
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //
	GPIO_Init(GPIOB, &GPIO_InitStructure);
	
	//配置SCK MISO MOSI引脚 ,复用输出
	/*!< Configure SPI_FLASH_SPI pins: SCK MISO MOSI*/
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15;
//	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
	GPIO_Init(GPIOB, &GPIO_InitStructure);

	//配置IRQ引脚, 配置为上拉输入
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11;
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
	GPIO_Init(GPIOB, &GPIO_InitStructure);
	
	
	SPI_I2S_DeInit(SPI2);                          
	SPI_Cmd(SPI2, DISABLE); //必须先禁用,才能改变MODE
	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;        //CPOL=0 时钟悬空低
	SPI_InitStructure.SPI_CPHA = SPI_CPHA_1Edge;       //CPHA=0 数据捕获第1个
	SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;        //软件NSS
	SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_8 ; //8分频 9MHz
	SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB;      //高位在前
	SPI_InitStructure.SPI_CRCPolynomial = 7;        //CRC7

	SPI_Init(SPI2, &SPI_InitStructure);
	SPI_Cmd(SPI2, ENABLE);
	SPI_ReadWriteByte(0xff);   //启动传输
}
Пример #19
0
int CMD_SPI(int argc, char *const argv[])
{
    uint8_t data[6];
    uint32_t instance;
    printf("SPI TEST CMD\r\n");
    GPIO_QuickInit(HW_GPIOE, 6, kGPIO_Mode_OPP);
    instance = SPI_QuickInit(SPI2_SCK_PD12_SOUT_PD13_SIN_PD14, kSPI_CPOL0_CPHA0, 20*1000*1000);
    PORT_PinMuxConfig(HW_GPIOD, 12, kPinAlt2); //
    PORT_PinMuxConfig(HW_GPIOD, 13, kPinAlt2); //
    PORT_PinMuxConfig(HW_GPIOD, 14, kPinAlt2); //    

    PORT_PinMuxConfig(HW_GPIOD, 11, kPinAlt2); //SPI2_PCS0
    PORT_PinMuxConfig(HW_GPIOD, 15, kPinAlt2); //SPI2_PCS1
    
    SPI_EnableTxFIFO(HW_SPI2, true);
    SPI_EnableRxFIFO(HW_SPI2, true);
    
    
   // SPI_ReadWriteByte(instance, HW_CTAR0, 0x90, HW_SPI_CS1, kSPI_PCS_KeepAsserted);
   // DelayMs(20);
    if((argc == 2) && (!strcmp(argv[1], "FLASH")))
    {
        return DO_SPI_FLASH(argc, argv);
    }
    if((argc == 2) && (!strcmp(argv[1], "DMA")))
    {
        return DO_SPI_DMA(argc, argv);
    }

    printf("param error\r\n");
    PEout(6) = !PEout(6);
    SPI_ReadWriteByte(instance, HW_CTAR0, 0x90, HW_SPI_CS1, kSPI_PCS_KeepAsserted);
    SPI_ReadWriteByte(instance, HW_CTAR0, 0x00, HW_SPI_CS1, kSPI_PCS_KeepAsserted);
    SPI_ReadWriteByte(instance, HW_CTAR0, 0x00, HW_SPI_CS1, kSPI_PCS_KeepAsserted);
    SPI_ReadWriteByte(instance, HW_CTAR0, 0x00, HW_SPI_CS1, kSPI_PCS_KeepAsserted);
   // SPI_WaitSync(instance);
    data[0] = SPI_ReadWriteByte(instance, HW_CTAR0, 0xFF, HW_SPI_CS1, kSPI_PCS_KeepAsserted);
    data[1] = SPI_ReadWriteByte(instance, HW_CTAR0, 0xFF, HW_SPI_CS1, kSPI_PCS_ReturnInactive);
    PEout(6) = !PEout(6);
    printf("data:0x%02X 0x%02X\r\n", data[0], data[1]);
    //初始化SPI
   // SPI_QuickInit(BOARD_SPI_MAP, kSPI_CPOL0_CPHA1, 1*1000);
    //安装回调函数
   // SPI_CallbackInstall(BOARD_SPI_INSTANCE, SPI_ISR);
    //开启SPI中断 
   // SPI_ITDMAConfig(BOARD_SPI_INSTANCE, kSPI_IT_TCF);
    return CMD_RET_USAGE;
}
Пример #20
0
// ============================== Inner use ====================================
void Si_t::WriteRegister (const uint8_t Addr, const uint8_t AData) {
    NSEL_Lo();
    SPI_ReadWriteByte (FSPI, Addr | 0x80);  // Send Addr with Write flag
    SPI_ReadWriteByte (FSPI, AData);        // Send data
    NSEL_Hi();
}
Пример #21
0
void Si_t::FIFORead (void) {
    NSEL_Lo();
    SPI_ReadWriteByte(FSPI, 0x7F);  // Write FIFO address
    for (uint8_t i=0; i<PktLength; i++) RX_PktArray [i] = SPI_ReadWriteByte(FSPI, 0);
    NSEL_Hi();
}
Пример #22
0
void AD7687_SendWord (uint16_t data)
{
	SPI_ReadWriteByte(SPI0_PCS0_PA14,data,SPI_PCS_Inactive);
}
Пример #23
0
uint16_t AD7687_ReceiveWord(void)
{
    uint16_t data;
    data = SPI_ReadWriteByte(SPI0_PCS0_PA14,0,SPI_PCS_Inactive);
    return data;
}