S32K3 MCAL配置 【LPSPI】

1、需求分析

目标在s32k344板子上实现spi异步收发,不使用DMA

2、SPI功能介绍

2.1 硬件介绍

在这里插入图片描述
K3系列MCU具有6个独立的SPI模块,序号为SPI0-5,其特征为:
高性能的SPI0在回环模式下支持20M速率,普通模式15M;其他SPI模块在选择增强型引脚的条件下,支持最大15M速率。

2.2 时钟配置

在这里插入图片描述
高型能的SPI0以外设桥平台时钟
AIPS_PLAT_CLK为总线时钟源,其他SPI以AIPS_SLOW_CLK作为总线时钟源;

2.3 SPI通信模式与时序

在这里插入图片描述
根据时钟极性CPOL与时钟相位CPHA的组合,SPI总共有4种不同的通信模式。其中,时钟极性规定空闲时SPI同步时钟线的电平,时钟相位决定数据从移位寄存器移出到总线的边沿与采样边沿。
左图显示了当时钟相位CPHA为0时,采样边沿为奇数边沿,如SCK时钟第1,3边沿;当CPHA为1时,采样边沿为偶数边沿,如第2,4边沿;

2.4 TODO

连续传输,半双工,FIFO等模式暂未使用,后续再添加

3、MCAL配置

3.1 时钟配置

在这里插入图片描述

在这里插入图片描述
LPSPI外设时钟使能,重要!!!

3.2 Port配置

在这里插入图片描述
1、CS引脚
在这里插入图片描述
1、SCK引脚
在这里插入图片描述
1、MISO引脚
在这里插入图片描述
1、MOSI引脚

3.3 SPI配置

spi的几种特性
在这里插入图片描述在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
1、使能EB和IB
2、使能异步和同步
在这里插入图片描述
1、SPI0
2、选择主机模式
3、选择时钟源
在这里插入图片描述
1、EB
2、数据宽度
在这里插入图片描述
1、波特率
2、片选序号
3、片选传输时的极性
4、数据传输时的极性
在这里插入图片描述
1、Job优先级
在这里插入图片描述

4、代码调试

int main(void)
{
    boolean Result = TRUE;
    Spi_SequenceType SeqStatus;
    uint32 Count = 0xFFFFFF;
    uint8 Index;

    /* Initialize the Mcu driver */
    Mcu_Init(NULL_PTR);
    Mcu_InitClock(McuClockSettingConfig_0);
#if (MCU_NO_PLL == STD_OFF)
    while ( MCU_PLL_LOCKED != Mcu_GetPllStatus() )
    {
        /* Busy wait until the System PLL is locked */
    }

    Mcu_DistributePllClock();
#endif
    Mcu_SetMode(McuModeSettingConf_0);

    /* Install interrupt handlers using the Platform driver */
    Platform_Init(NULL_PTR);

    /* Initialize all pins using the Port driver */
    Port_Init(NULL_PTR);

    Spi_Init(NULL_PTR);

    Spi_SetAsyncMode(SPI_INTERRUPT_MODE);

    /* Set up external buffer to transmission and reception */
    Spi_SetupEB(SpiConf_SpiChannel_SpiChannel_0, TxMasterBuffer, RxMasterBuffer, 10u);
    Spi_SetupEB(SpiConf_SpiChannel_SpiChannel_1, TxSlaveBuffer, RxSlaveBuffer, 10u);

    /* setup SLAVE sequence */
    Spi_AsyncTransmit(SpiConf_SpiSequence_SpiSequence_Slave);
    /* setup MASTER sequence */
    Spi_AsyncTransmit(SpiConf_SpiSequence_SpiSequence_Master);

    do
    {
        SeqStatus = Spi_GetSequenceResult(SpiConf_SpiSequence_SpiSequence_Master);
        Count--;
    }
    while ((Count > 0u) && (SeqStatus != SPI_SEQ_OK));

    if (0u == Count)
    {
        Result = FALSE;
    }
    Count = 0xFFFFFF;
    do
    {
        SeqStatus = Spi_GetSequenceResult(SpiConf_SpiSequence_SpiSequence_Slave);
        Count--;
    }
    while ((Count > 0u) && (SeqStatus != SPI_SEQ_OK));
    
    if (0u == Count)
    {
        Result = FALSE;
    }

    /* Verify data after transfer from MASTER to SLAVE */
    for (Index = 0; Index < 10; Index++)
    {
        if (TxMasterBuffer[Index] != RxSlaveBuffer[Index])
        {
            Result = FALSE;
            break;
        }
    }
    Exit_Example(Result);
}

异步中断主从通信,完成

  • 4
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值