MC9S12XEP100引脚的复用方式 您所在的位置:网站首页 飞思卡尔芯片解密 MC9S12XEP100引脚的复用方式

MC9S12XEP100引脚的复用方式

2023-11-30 05:02| 来源: 网络整理| 查看: 265

嵌入式码农小明最近在研发一个嵌入式产品,用的MC9S12XEP100芯片。其中三个需求需要通过几个使用SPI通讯的芯片实现。

硬件开发人员小红照着芯片原理图布好了线,不知是否是没考虑到SPI通讯可以通过CS line来控制要通讯的从机从而实现总线,也许就是为了省事吧。最终的测试板子是三个芯片分别对应了MC9S12XEP100的SPI0、SPI1、SPI2。

这个需求难不倒小明,SPI早都写好驱动模块了https://blog.csdn.net/lin_strong/article/details/79361503,剩下的就是看着每个芯片的手册实现对应的协议就完事了。

好多天时间,小明对着一个个芯片的芯片手册写好了对应的驱动,(没有硬件前也可以用TDD的方式先写驱动哦)。

不久板子做好了,小明照着小红给的引脚对应关系配置SPI,测试驱动代码和实际芯片。第一个成功。第二个成功。第三个…

明显是失败了呀!不然哪来这篇博文呀。

一番焦头烂额的排插问题,各种万用表示波器齐上阵,最终发现:

woc,SPI2怎么不工作? 照理来说,只要SPI0没问题,其他两个口也不应该有问题的。因为这个的驱动写法是根据相对偏移量操作对应寄存器组的(使用了C结构体内存分布的相关知识,详情就不谈了),只要每个SPI寄存器组的起始地址设对了,就不应该错。或者要对一起对,要错一起错。检查了下,并没有发现哪里有错。改不同的SPI口,初始化后的结果也完全一致。实属见鬼了。

看SPI对应的引脚,小红给的是PH4 - PH7(这里是112封装的图,还有144和80引脚的封装就不放了):

唔,也没错呀。但它咋么就不干活呢?

绝望中翻起了数据手册:

PH7同时可以做SCI5的TX引脚,也可以做SPI2的片选引脚。小明并没用SCI5,而且上面也说了,如果同时都使用了的话,SPI2优先,怎么着都没问题呀。。

再度陷入绝望。鬼使神差下小明专门搜了SPI2这关键字,搞不好这个模块有什么特殊之处呢? 然后,惊奇的发现:

emmm,怎么又有一个SPI2的引脚。 测测PP的波形。还真是! 果然驱动没写错!

仔细回去瞧一瞧引脚图。诶。还真PP4-7上也写着SPI2的相关功能。

那这到底什么鬼,是怎么决定实际用的是哪个引脚的?

(下面是正篇)

MC9S12XEP100的大部分引脚都有复用功能,即可以实现多个功能,当然,一次最多只能选择一种功能来用。在datasheet的第二章:端口集成模块中有详细的介绍。主要是几张表, 在这里插入图片描述

一个端口上可能有多种功能,当同时使能多个功能时,越上面的功能优先级越高。可以看到,通用IO功能永远是最垫底的hh。

那剩下的问题就是多个引脚都有同一个功能时怎么办。具有这个问题的功能包括CAN0, CAN4, SPI2-0, SCI7-3, IIC0, TIM 和CS[3:0]。可以看到前面的端口P和H的详细介绍中,SPI前加了一个route修饰词,路由。

所以可以通过设置某个寄存器将这个功能路由到不同的端口。这几个寄存器分别是MODRR、PTRRR、PTLRR和PTFRR。

在表2-40中我们找到了SPI的路由,我们可以看到,通过设置MODRR的bit 6我们可以决定SPI2的引脚要路由到PH还是PP上去,默认的0的时候是对应着PP4-PP7。

这不就和我们的开头小故事对上了么!于是乎,小明在程序中加入了一句。

MODRR_MODRR6 = 1;

果真SPI2在PH口上起作用了!

注:以上故事根据今天发生的真实故事改编。



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有