MC9S12XEP100引脚的复用方式

2023-11-05

嵌入式码农小明最近在研发一个嵌入式产品,用的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口上起作用了!


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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

MC9S12XEP100引脚的复用方式 的相关文章

随机推荐

  • 基于WSAAsyncSelect模型的服务端和客户端设计(MFC)

    目录 1 效果展示 1 1 服务器和客户端界面展示 1 2 一对一之间通信的功能展示 1 3 一对多之间通信的功能展示 2 知识预备 2 1 WSAAsyncSelect模型介绍 2 2 WSAAsyncSelect模型的过程图 2 3 与
  • 深入浅出AXI协议(3)——握手过程

    一 前言 在之前的文章中我们快速地浏览了一下AXI4协议中的接口信号 对此我们建议先有一个简单的认知 接下来在使用到的时候我们还会对各种信号进行一个详细的讲解 在这篇文章中我们将讲述AXI协议的握手协议 二 握手协议概述 在前面的文章中我们
  • vue-amap infowindow基础用法

  • ChatGPT中的Token:了解聊天模型的基本单位

    文章目录 ChatGPT中的Token是什么 ChatGPT中有三种类型的Token 如何获取ChatGPT的Token Token在ChatGPT平台中有什么作用 Token是否会过期 如果过期了怎么办 创作者 全栈弄潮儿 个人主页 全栈
  • 面试官:ThreadLocal 搭配线程池时为什么会造成内存泄漏?

    您好 我是路人 更多优质文章见个人博客 http itsoku com ThreadLocal是什么 ThreadLocal是一个本地线程副本变量工具类 主要用于将私有线程和该线程存放的副本对象做一个映射 各个线程之间的变量互不干扰 在高并
  • 基础篇--Web容器学习路径

    在开篇词里我提到要成长为一名高级程序员或者架构师 我们需要提高自己知识的广度和深度 你可以先突破深度 再以点带面拓展广度 因此我建议通过深入学习一些优秀的开源系统来达到突破深度的目的 我会跟你一起在这个专栏里深入学习 Web 容器 Tomc
  • Linux 管道命令系列 一 熟悉PIPE

    什么是管道命令 但就名称来看应该分为 管道 和 命令 管道 先来看管道 我是这样理解管道的 管道就是在两个命令之间建立连接 也就是前一个的命令的标准输出结果是后一个命令的标准输入 这个过程就是通过管道来实现的 管道命令执行流程 管道使用的是
  • Linux Ubuntu20.04 版本下安装 GAMMA 2020版 安装步骤 安装教程

    GAMMA 2020版 安装步骤 安装教程 1 解压GAMMA文件 设置环境变量 1 1 解压压缩包 选择解压压缩包的路径 建议的文件路径为 usr local 从terminal进入该路径 cd usr local GAMMA安装包一般是
  • GitHub 标星 2.5K+,U^2-Net 跨界肖像画,完美复刻人物细节!

    来源 Jack Cui 头图 CSDN下载自视觉中国 今年提出的 U 2 Net 显著性检测算法 刷爆了 reddit 和 twitter 号称是 2020 年 地表最强 的静态背景分割算法 可以看下效果 你以为今天要讲分割 错 U 2 N
  • java 子类实例化过程_Java子类实例化的过程

    继承 class Work public Work System out println 父类中的方法 class Worker extends Work public Worker System out println 子类中的方法 cl
  • 【Go mod操作命令大全】

    Go mod操作命令大全 一 基础理论 Go mod其实就是一个Modules 关于Modules的官方定义为 Modules是相关Go包的集合 是源代码交换和版本控制的单元 go命令直接支持使用Modules 包括记录和解析对其他模块的依
  • C++类和对象(三):构造函数初始化、友元、匿名对象、内部类

    前言 这些知识点属于C 较为前期的内容 博主在今年刷笔试题的时候遇到多次 所以特地这这篇博客再复习了一下 文章目录 1 构造函数的初始化 2 友元 3 匿名对象 4 内部类 5 类的static成员 静态数据成员 静态成员函数 1 构造函数
  • 【好书推荐】《Web全栈工程师的自我修养》

    作者简介 余果 腾讯社交用户体验设计部高级UI工程师 前端开发组负责人 熟悉前端开发 iOS开发 PHP开发和Ruby开发等 曾独立开发iOS APP 撸大师 和CMS 33PU 翻译有 众妙之门 网站重新设计之道 和 响应式Web设计全流
  • 详解python列表等对象的赋值和复制(浅拷贝copy()及深拷贝deepcopy()的使用区别与示例)

    python虽然没有指针的概念 但是对象 引用 地址这些内容还是存在的 尤其是像列表对象 某类型对象的引用上 搞清楚对象变量的复制和赋值很有必要 不然容易出现 莫名其妙 的错误 目录 认清对象 引用 地址 直接以 赋值变量 以列表为例 以自
  • TC(Linux下流量控制工具)详细说明及应用

    TC的安装 TC是Linux自带的模块 一般情况下不需要另行安装 可以用 man tc 查看tc 相关命令细节 tc 要求内核 2 4 18 以上 注意 64位机器上 先执行下面命令 ln s usr lib64 tc usr lib tc
  • plsql 存储过程控制台打印不显示的问题

    在存储过程中使用下面语句 dbms output put line 输出内容 在命令窗口 可以使用 exec 存储过程名 调用存储过程 将输出结果打印到命令窗口 有时 存储过程执行成功后 未看到输出的结果 原因可能是没有打开输出开关 执行一
  • mac安全性与隐私 不允许_隐私不仅仅是安全

    mac安全性与隐私 不允许 Information security began as more of a concern for businesses and governments These organizations used co
  • 层次分析方法

    文章目录 1 层次分析法简介 2 层次分析法原理 3 层次分析法步骤 1 建立层次结构模型 2 成对比较矩阵 3 一致性检验 4 模型求解范例 5 Matlab描述 1 层次分析法简介 层次分析法 AHP 美国运筹学家匹茨堡大学教授萨蒂于上
  • Nginx: [emerg] bind() to 0.0.0.0:8088 failed (13: Permission denied)

    系统启动Nginx后 报 emerg bind to 0 0 0 0 XXXX failed 13 Permission denied 错误的处理方式 分为两种 第一种 端口小于1024的情况 emerg bind to 0 0 0 0 8
  • MC9S12XEP100引脚的复用方式

    嵌入式码农小明最近在研发一个嵌入式产品 用的MC9S12XEP100芯片 其中三个需求需要通过几个使用SPI通讯的芯片实现 硬件开发人员小红照着芯片原理图布好了线 不知是否是没考虑到SPI通讯可以通过CS line来控制要通讯的从机从而实现