- SPI接口
- 写时序
- 读时序
- 驱动程序
LMX2595.c
#include "stm32f10x.h"
#include "lmx2495.h"
#include "delay.h"
#define LMX2495_CONIG_REG_CNT 113
u32 config_arr[LMX2495_CONIG_REG_CNT]={0x700000,0x6F0000,0x6E0000,0x6D0000,0x6C0000,0x6B0000,0x6A0000,0x690021,0x680000,0x670000,0x663F80,0x650011,0x640000,0x630000,0x620200,\
0x610888,0x600000,0x5F0000,0x5E0000,0x5D0000,0x5C0000,0x5B0000,0x5A0000,0x590000,0x580000,0x570000,0x560000,0x55D300,0x540001,0x530000,\
0x521E00,0x510000,0x506666,0x4F0026,0x4E0203,0x4D0000,0x4C000C,0x4B0C80,0x4A0000,0x49003F,0x480000,0x470021,0x46C350,0x450000,0x4403E8,\
0x430000,0x4201F4,0x410000,0x401388,0x3F0000,0x3E0322,0x3D00A8,0x3C0000,0x3B0001,0x3A8001,0x390020,0x380000,0x370000,0x360000,0x350000,\
0x340820,0x330080,0x320000,0x314180,0x300300,0x2F0300,0x2E07FC,0x2DC8DE,0x2C1EA3,0x2B0000,0x2A0000,0x290000,0x280000,0x2703E8,0x260000,\
0x250404,0x24006E,0x230004,0x220000,0x211E21,0x200393,0x1F43EC,0x1E318C,0x1D318C,0x1C0488,0x1B0002,0x1A0DB0,0x190624,0x18071A,0x17007C,\
0x160001,0x150401,0x14E048,0x1327B7,0x120064,0x11012C,0x100080,0x0F064F,0x0E1E70,0x0D4000,0x0C5001,0x0B0018,0x0A10D8,0x090604,0x082000,\
0x0740B2,0x06C802,0x0500C8,0x040A43,0x030642,0x020500,0x010808,0x00251C};
/*
* LMX2495_SCK -- PA0
* LMX2495_SDI -- PA1
* LMX2495_CSB -- PB12
*/
void LMX2495_SPI_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOB, ENABLE);
//SCK SDI
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP ; //推挽输出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure);
//CSB
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12;
GPIO_Init(GPIOB, &GPIO_InitStructure);
LMX2495_SPI_SCK_0;
LMX2495_SPI_CSB_1;
}
void LMX2495_config_reg(u32 data)
{
u8 i;
u32 txData = 0;
LMX2495_SDI_OUT();
LMX2495_SPI_SCK_0;
LMX2495_SPI_CSB_0;
txData = data;
for(i = 0; i < 24; i++)
{
//数据发送
if(txData & 0x800000)
{
LMX2495_SPI_SDI_1;
}
else
{
LMX2495_SPI_SDI_0;
}
txData <<= 1;
delay_us(3);
LMX2495_SPI_SCK_1;
delay_us(3);
LMX2495_SPI_SCK_0;
delay_us(3);
}
delay_us(3);
LMX2495_SPI_CSB_1;
delay_us(3);
}
void LMX2495_config_all(void)
{
u8 i;
u32* txData = config_arr;
for(i=0;i<LMX2495_CONIG_REG_CNT;i++)
{
LMX2495_config_reg(*txData);
txData++;
}
}
LMX2595.h
#ifndef __LMX2495_H
#define __LMX2495_H
#include "bitband.h"
#include "stm32f10x.h"
/*
* LMX2595_SCK -- PA0
* LMX2595_SDI -- PA1
* LMX2595_CSB -- PB12
*/
#define LMX2495_SPI_SCK_1 GPIO_SetBits(GPIOA, GPIO_Pin_0)
#define LMX2495_SPI_SCK_0 GPIO_ResetBits(GPIOA, GPIO_Pin_0)
#define LMX2495_SPI_SDI_1 GPIO_SetBits(GPIOA, GPIO_Pin_1)
#define LMX2495_SPI_SDI_0 GPIO_ResetBits(GPIOA, GPIO_Pin_1)
#define LMX2495_SPI_CSB_1 GPIO_SetBits(GPIOB, GPIO_Pin_12)
#define LMX2495_SPI_CSB_0 GPIO_ResetBits(GPIOB, GPIO_Pin_12)
#define LMX2495_SDI_IN() {GPIOA->CRL&=0XFFFFFF0F;GPIOA->CRL|=(u32)8<<4;}
#define LMX2495_SDI_OUT() {GPIOA->CRL&=0XFFFFFF0F;GPIOA->CRL|=(u32)3<<4;}
//#define LMX2495_SDI_DATA PAin(1)
void LMX2495_SPI_Init(void);
void LMX2495_config_all(void);
#endif