NXP 飞思卡尔 S12Z 系列单片机 SCI 设置(解决SCI已经设置完成,但却无法通信的问题)

  近日在使用了飞思卡尔S12Z设置SCI后总是不出数据,明明按照前代单片机S12Z的方法设置好了,为什么又不能用了呢?

下面是我简单对SCI1的设置,仅仅这样设置是出不来数据的:

1 SCI1BD = GLOBAL_BUS_CLOCK / SCI1_BAUD_RATE;
2 SCI1CR2 = SCI1CR2_RE_MASK + SCI1CR2_TE_MASK + SCI1CR2_RIE_MASK;

在上面的设置中我仅仅设置了SCI1的设置,假设了S12Z与S12一样,不存在同一口多个功能复用的情况。可实际上确实,在S12Z系列单片机中大量存在复用引脚的情况,也就是说一个引脚除了原本基本的功能外,还复用了SCI,SPI等通讯口(这里要吐槽这个垃圾文档了,明明是可以在SCI的这一章里面提一下可能存在多功能复用同一个口的情况的)。不管怎么说后来还是在Port章中见到了这个S12Z引脚设置,先看看引脚复用功能的情况:

自文档中我们可以看到PS0 - PS3 都复用了其他的功能, 观察一下可以发现SCI1可以既在PS0, PS1 又可以在PS2和PS3口输出,如果要只在PS2, PS3使用SCI1功能怎么办呢?在PIM这节中对寄存器的解释中就找到了我们需要的寄存器:

MODRR0这个寄存器有详细的解释,但是需要注意的是,在Normal Mode情况下(也就是我们没有设置过运行模式的情况下),这个寄存器只能有一次写操作,这就意味着对它当中的多个功能模式进行修改时需要一次写入。由于某个引脚可能会复用多个功能,我们在设置完成后一定要保证只有一个功能可以独占此引脚,否则设置的结果同样可能出错。下面是上述MODRR0寄存器各bit的定义:

  可以看到,如果我需要让PS2, PS3只使用SCI1功能。对SPI0RR,以及SCI1RR位均需要设置,而且只能一次性设置,那么在导入库函数的情况下可以这样:

1 MODRR0 |= MODRR0_SCI1RR_MASK +  MODRR0_SPI0RR_MASK;
2 SCI1BD = GLOBAL_BUS_CLOCK / SCI1_BAUD_RATE;
3 SCI1CR2 = SCI1CR2_RE_MASK + SCI1CR2_TE_MASK + SCI1CR2_RIE_MASK;

  若直接设置可以这样:

1 MODRR0 |= 0x18;
2 SCI1BD = GLOBAL_BUS_CLOCK / SCI1_BAUD_RATE;
3 SCI1CR2 = 0x2c;

应当注意的是,S12Z开始类似于STM32在同一引脚上实现了多种功能的复用,在SCI0, LIN, CAN通讯的引脚设置中一定要多考虑到引脚复用功能的设置。

注: 本系列文章均为原创,如有转载引用请标明来源

原文地址:https://www.cnblogs.com/15821216114sw/p/9645895.html

时间: 2024-08-29 12:59:31

NXP 飞思卡尔 S12Z 系列单片机 SCI 设置(解决SCI已经设置完成,但却无法通信的问题)的相关文章

freescale飞思卡尔 HC9S12 系列单片机 Flash擦写详解(一)之时钟设置

Flash擦写的内容,个人做HC9S12系列单片机时觉得应该是各模块内容中最难而且是最麻烦的一步了.只有能够对Flash进行擦写以后,所做的Bootloader才有真正手段将串口或者其他通讯手段接收到的数据或者程序写入Flash中进行程序或者数据的更新.当初做Flash的擦写也遇到了很多问题,网上搜罗下来也没有合适的帖子能够详细的将整个过程或者学习的思路以及最后实现的程序详细的加以解析,而本博文就是基于这个出发点来写的.技术本身应当是共享的才能真正让社会进步,不是么? 关于单片机Flash的基本

freescale飞思卡尔 HCS12 系列单片机bootloader详解(三)

在完成内存映射的内容后,接下来我们将进入一个简单Bootloader的实际设计中来.在第一节内容中,我们已经简单介绍了bootlaoder的作用,它实际上就是在单片机重启过程中的一个步骤:如果有bootloader的启动信号,则进入bootloader模式开始新程序的接收与flash的擦写,若没有bootloader的启动信号,则直接进入用户程序执行用户程序内容. bootloader的启动信号一般有如下两种: 1)外部引脚接地或者拉高电平:每次启动时先监测某一已经设定的引脚是否已经被操作到了b

freescale飞思卡尔 HCS12 系列单片机bootloader详解(二)

在上一篇文章中我们做了对HC9S12系列单片机存储空间的划分,但是相比于整个bootloader的工作而言,这只是非常基础的一步,有很多基础的概念在上一篇的操作中我们并没有涉及到.比如较复杂单片机中单片机的存储空间到底是什么样的,具体怎么用C语言对它进行寻址.因为我们单片机的存储空间一般由如下的构成,RAM,ROM以及EEPROM等等.比如在我在本篇中举例介绍的9S12G128单片机,它的RAM空间有8KB,EEPROM有4KB,FLASH有128KB.如何将这几个存储空间合理的组织起来想必单片

飞思卡尔MC9S12系列单片机地址影射以及分页问题

对于用MCU的人来说,不一定要明白HCS12(x) memory map的机制和联系.因为如果没有系统地学习操作系统和编译原理之类的课程,确实有些难度.并且,对于DG128 XS128这样的MCU,默认的emory分配方式已经够用了.从这个意义上讲,搞清楚memory map似乎不必要. 但是,你有没有RAM不够用的情况?有没有想定义变量到FLASH ROM的情况?有没有因为欲提高寻址效率而定义变量到非分页区的情况?有没有写EEPROM但没写成功的情况? 飞思的memory非常灵活,通过地址映射

飞思卡尔单片机P&E开发工具硬件及软件

原文链接: http://blog.sina.com.cn/s/blog_8ebff8d7010121tm.html 1.HC(S)08系列 开发机硬件:USB-ML-12 CYCLONE PRO USB-ML-UNIVERSAL USB-ML-UNIVERSAL FX 支持发软件:烧录软件 PROGHCS08 调试软件 ICDHCS08 软件包   PKGHCS08 2.HC(S)12(X)系列 开发机硬件:USB-ML-12 CYCLONE PRO USB-ML-UNIVERSAL USB-

飞思卡尔单片机PIT汇编编程(一)

飞思卡尔单片机(XS128系列)单片机汇编编程(一) 本人就是一个菜鸟,从菜鸟学习汇编编程:汇编也没想象中的复杂和难懂,细细品味还是挺有意思的.就当刷着玩吧,就学起了汇编(这一直是我的一大心病),慢慢学吧,就当了却了我的一个愿望.作为我的第一个汇编程序,仔细缕缕编写的过程.好了,废话不说了,开始正题. 手头上的资料:飞思卡尔单片机,调试器以及手册(欧了,就这三样),对了,下一个飞思卡尔单片机的汇编指令集哦. 开始如下工作: 首先熟悉中断机制,确定我们要在哪部分编程,以及编程之后起到的效果,然后才

痞子衡嵌入式:飞思卡尔i.MX RT系列微控制器启动篇(3)- Serial Downloader模式(sdphost/mfgtool)

大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是飞思卡尔i.MX RT系列MCU的Serial Downloader模式. 在上一篇文章 飞思卡尔i.MX RT系列微控制器启动篇(2)- Boot配置(BOOT Pin, eFUSE) 里痞子衡为大家介绍了i.MXRT Boot的行为配置,其中第一节里讲了Boot有三种行为模式:Serial Downloader.Boot From Fuses.Internal Boot,后两种是核心的加载启动行为模式,而Serial Downl

痞子衡嵌入式:飞思卡尔i.MX RT系列微控制器启动篇(4)- Flashloader初体验(blhost)

大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是飞思卡尔i.MX RT系列MCU的Flashloader. 在上一篇文章 飞思卡尔i.MX RT系列微控制器启动篇(3)- Serial Downloader模式(sdphost, mfgtool) 里痞子衡为大家介绍了i.MXRT Boot的Serial Downloader模式,这种模式主要是用来引导启动Flashloader,那么Flashloader到底具有哪些功能?这是本篇文章痞子衡要为大家解惑的主题. 痞子衡在前面提过F

痞子衡嵌入式:飞思卡尔i.MX RT系列微控制器启动篇(9)- 从Parallel NOR启动

大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是飞思卡尔i.MX RT系列MCU的Parallel NOR启动. 上一篇讲i.MXRT从Raw NAND启动的文章 飞思卡尔i.MX RT系列微控制器启动篇(8)- 从Raw NAND启动 一经放出,深入广大网友喜爱,短时间内阅读量飙升,这让痞子衡深入鼓舞,所以趁热打铁继续把从Parallel NOR启动也顺便一起讲了,为什么说是顺便呢?因为Parallel NOR与Raw NAND都是并行接口,属于同一门派,且这两种外存设备在i.