最近调试 NXP JN5189 SPI 底层驱动的时候,学到了一种处理机制。故记录下来,以便大家相互学习。
一、SPI 内存映射、管脚分配及硬件结构
JN5189 有两组 SPI,分别为 SPI0 基地址 0x4008_D000、SPI1 基地址 0x4008_E000.对应管脚分配如下图。二、软件实现机制
以 SDK_2.x_JN5189 2.6.0 Driver 中的 jn5189dk6_spi_polling_transfer 为例:
1、进行 Master SPI1 的初始化,注意片选的选择和设置,不同 EXAMPLE_SPI_SSEL 设置对应不同 GPIO 。
2、进行 Slave SPI0 的初始化,初始化完成后并创建了与 SPI0 关联的句柄和回调函数,详见如下:
3、函数 SPI_SlaveTransferCreateHandle 调用了 SPI_MasterTransferCreateHandle 。SPI_MasterTransferCreateHandle 又调用了 FLEXCOMM_SetIRQHandler,
FLEXCOMM_SetIRQHandler 中设置 SPI_SlaveTransferHandleIRQ 回调函数,该回调函数将 SPI0 的基地址和设置的句柄关联起来并处理接收的数据。 同时 SPI_Master
TransferCreateHandle 将用户设备的 slaveCallback 和创建的句柄关联起来并使能接收中断,如下图:
4、以上设置好后,Master SPI1 调用 SPI_MasterTransferBlocking 函数进行数据发送,Slave SPI0 一旦有接收到 Master SPI1 数据,将会进入相应的 FLEXCOMMX_DriverIRQHandler 处理函数,如下:
以上实现了 SPI 的回调机制,整个设计思路十分清晰,而且实用,非常值得认真学习。
三、ESP-12S 参考资料
UM11138.pdf JN5189(T)/JN5188(T) User Manual
评论