BGT24LTR22是英飞凌推出的一款雷达射频芯片,用它可以产生24Ghz的雷达信号。
这是BGT24LTR22的评估版,本篇文章旨在使用XMS2Go与BGT24LTR22芯片进行SPI通信,以达到控制射频板的目的。
首先使用Dave软件进行编程
#define TICKS_PER_SECOND 1000
#define TICKS_WAIT 1000
uint8_t i=0;
const uint8_t data[9] = {0x01,0x00,0x63,0x03,0x03,0xFD,0x02,0x00,0x00};
XMC_GPIO_CONFIG_t rx_pin_config;
XMC_GPIO_CONFIG_t tx_pin_config;
XMC_GPIO_CONFIG_t selo_pin_config;
XMC_GPIO_CONFIG_t clk_pin_config;
void loop_delay(uint32_t time)
{
while(time--);
}
XMC_SPI_CH_CONFIG_t spi_config =
{
.baudrate = 10000,
.bus_mode = XMC_SPI_CH_BUS_MODE_MASTER,
.selo_inversion = XMC_SPI_CH_SLAVE_SEL_INV_TO_MSLS,
.parity_mode = XMC_USIC_CH_PARITY_MODE_NONE
};
void SysTick_Handler(void)
{
static uint32_t ticks = 0;
ticks++;
if (ticks == TICKS_WAIT)
{
while(i<9)
{
i =0;
XMC_SPI_CH_EnableSlaveSelect(XMC_SPI0_CH0, XMC_SPI_CH_SLAVE_SELECT_0);
XMC_SPI_CH_Transmit(XMC_SPI0_CH0,data[i++],XMC_SPI_CH_MODE_STANDARD);
while((XMC_SPI_CH_GetStatusFlag(XMC_SPI0_CH0) & XMC_SPI_CH_STATUS_FLAG_TRANSMIT_SHIFT_INDICATION) == 0U);
XMC_SPI_CH_ClearStatusFlag(XMC_SPI0_CH0, XMC_SPI_CH_STATUS_FLAG_TRANSMIT_SHIFT_INDICATION);
XMC_SPI_CH_Transmit(XMC_SPI0_CH0,data[i++],XMC_SPI_CH_MODE_STANDARD);
while((XMC_SPI_CH_GetStatusFlag(XMC_SPI0_CH0) & XMC_SPI_CH_STATUS_FLAG_TRANSMIT_SHIFT_INDICATION) == 0U);
XMC_SPI_CH_ClearStatusFlag(XMC_SPI0_CH0, XMC_SPI_CH_STATUS_FLAG_TRANSMIT_SHIFT_INDICATION);
XMC_SPI_CH_Transmit(XMC_SPI0_CH0,data[i++],XMC_SPI_CH_MODE_STANDARD);
while((XMC_SPI_CH_GetStatusFlag(XMC_SPI0_CH0) & XMC_SPI_CH_STATUS_FLAG_TRANSMIT_SHIFT_INDICATION) == 0U);
XMC_SPI_CH_ClearStatusFlag(XMC_SPI0_CH0, XMC_SPI_CH_STATUS_FLAG_TRANSMIT_SHIFT_INDICATION);
XMC_SPI_CH_DisableSlaveSelect(XMC_SPI0_CH0);
}
ticks = 0;
}
}
int main(void)
{
XMC_SPI_CH_Init(XMC_SPI0_CH0, &spi_config);
XMC_SPI_CH_SetInputSource(XMC_SPI0_CH0, XMC_SPI_CH_INPUT_DIN0, USIC0_C0_DX0_P2_0);
XMC_SPI_CH_SetBitOrderMsbFirst(XMC_SPI0_CH0);
XMC_SPI_CH_ConfigureShiftClockOutput(XMC_SPI0_CH0,XMC_SPI_CH_BRG_SHIFT_CLOCK_PASSIVE_LEVEL_0_DELAY_ENABLED,XMC_SPI_CH_BRG_SHIFT_CLOCK_OUTPUT_SCLK);
XMC_SPI_CH_Start(XMC_SPI0_CH0);
rx_pin_config.mode = XMC_GPIO_MODE_INPUT_TRISTATE;
XMC_GPIO_Init(XMC_GPIO_PORT2,0, &rx_pin_config);
tx_pin_config.mode = XMC_GPIO_MODE_OUTPUT_PUSH_PULL_ALT6;
XMC_GPIO_Init(XMC_GPIO_PORT0,14, &tx_pin_config);
selo_pin_config.mode = XMC_GPIO_MODE_OUTPUT_PUSH_PULL_ALT6;
XMC_GPIO_Init(XMC_GPIO_PORT0,9, &selo_pin_config);
clk_pin_config.mode = XMC_GPIO_MODE_OUTPUT_PUSH_PULL_ALT6;
XMC_GPIO_Init(XMC_GPIO_PORT0,8, &clk_pin_config);
P0_0_set_mode(OUTPUT_PP_GP);
P0_5_set_mode(OUTPUT_PP_GP);
P0_0_reset();
loop_delay(50000);
P0_0_set();
P0_5_set();
SysTick_Config(SystemCoreClock / TICKS_PER_SECOND);
while(1)
{
}
}
代码对定义了四个SPI管脚,发射拐角0.14,时钟拐角0.8,片选拐角0.9。
这是BGT24LTR22芯片的时序图,已将spi程序设置为以上时序(片选信号低电平有效,SPI_DI信号在时钟上升沿采样,下降沿跳变)。
连接XMS2Go与BGT24LTR22射频板,将程序下载到XMS2Go中。示波器探头连接时钟拐角,另一探头连接BGT24LTR22芯片Do输出,实验结果如下:
黄色线是时钟线,蓝色线是芯片输出的数据,一个“黄色块”中有24个时钟脉冲,发送24位数据,7位地址+1位读写标识符+16位数据,如图所示,程序写了2个寄存器,第三个黄色块中的命令读取第二个寄存器的,波形与第二个寄存器相同。实验结束。