【简介】
本地在查看S32K3 的QSPI 示例代码时发现对应的spi的引脚初始化如下:
void Mem_ExFls_PinSetup(void)
{
/* QuadSPI_PCSFA - PTC3 */
IP_SIUL2->MSCR[67] = SIUL2_MSCR_OBE(1U) | SIUL2_MSCR_IBE(0U) | SIUL2_MSCR_SSS(6U) | SIUL2_MSCR_DSE(1U);
/* QuadSPI_SCKFA - PTD10 */
IP_SIUL2->MSCR[106] = SIUL2_MSCR_OBE(1U) | SIUL2_MSCR_IBE(1U) | SIUL2_MSCR_SSS(7U) | SIUL2_MSCR_DSE(1U);
IP_SIUL2->IMCR[821 - 512] = SIUL2_IMCR_SSS(1U);
/* QuadSPI_IOFA0 - PTD11 */
IP_SIUL2->MSCR[107] = SIUL2_MSCR_OBE(1U) | SIUL2_MSCR_IBE(1U) | SIUL2_MSCR_SSS(7U) | SIUL2_MSCR_DSE(1U);
IP_SIUL2->IMCR[817 - 512] = SIUL2_IMCR_SSS(1U);
/* QuadSPI_IOFA1 - PTD7 */
IP_SIUL2->MSCR[103] = SIUL2_MSCR_OBE(1U) | SIUL2_MSCR_IBE(1U) | SIUL2_MSCR_SSS(7U) | SIUL2_MSCR_DSE(1U);
IP_SIUL2->IMCR[818 - 512] = SIUL2_IMCR_SSS(1U);
/* QuadSPI_IOFA2 - PTD12 */
IP_SIUL2->MSCR[108] = SIUL2_MSCR_OBE(1U) | SIUL2_MSCR_IBE(1U) | SIUL2_MSCR_SSS(7U) | SIUL2_MSCR_DSE(1U);
IP_SIUL2->IMCR[819 - 512] = SIUL2_IMCR_SSS(1U);
/* QuadSPI_IOFA3 - PTC2 */
IP_SIUL2->MSCR[66] = SIUL2_MSCR_OBE(1U) | SIUL2_MSCR_IBE(1U) | SIUL2_MSCR_SSS(7U) | SIUL2_MSCR_DSE(1U);
IP_SIUL2->IMCR[820 - 512] = SIUL2_IMCR_SSS(1U);
}上述代码直接使用了访问寄存器的方式进行配置,我们通常是直接使用S32DS的配置工具来初始化pin脚,上述的配置和我们通过工具来配置的代码本质是没有区别的实际上都是通过MSCR和IMCR来进行配置,每个PIN的配置都会通过这两个寄存器来进行管理我们先看下芯片手册中对这两个寄存器的信号描述。
MSCR 寄存器信号定义如下:

对应的信号说明如下:

上述代码的OBE 对应 "GPIO Output Buffer Enable" 配置,IBE 对应 "Input Buffer Enable" 配置, SSS 用于配置PIN 路由到哪个功能模块,DSE 对应"Drive strength enable" 驱动能力配置。
介绍完MSCR 的寄存器我们在看下IMCR 的寄存器定义如下:

对应的IMCR 只有一个SSS功能信号,我们会发现MSCR寄存器中也有一个SSS的信号配置,这个信号的配置要如何配置可以查看开发手册的“IO Signal Table' tab of the IOMUX ” 文档,我们结合上述代码的PTC2的代码配置来说明,对应代码的信号配置如下。

上述代码中PTC2配置为qspi功能时 MSCR 的SSS信号配置为7,IMCR 的SSS信号配置为1,对应 IO Signal Table' tab of the IOMUX 中PTC2的说明如下:

上述的代码配置和表格的说明也是一致的,使用S32DS配置工具生成的配置内容也是一致的。

我要赚赏金
