YTM32的同步串行通信外设SPI外设详解(Master Part)

本文详细介绍了YTM32的同步串行通信外设SPI外设(Master Part)。先阐述其特性、引脚信号、时钟源等,接着说明基于FIFO的命令和数据管理机制、接收数据匹配功能,还给出应用信息,最后对移位器、从机使用及多PCS引脚打开方式进行思考。

YTM32的同步串行通信外设SPI外设详解(Master Part)

Introduction

Features

  • 支持配置SCLK的极性和相位
  • 动态可配置的通信帧尺寸。SPI定义片选信号硬件保持生效期间的数据位流被称为SPI的通信帧。
  • 使用FIFO管理发送和接收的数据,分别对应发送FIFO和接收FIFO。
  • 支持单线模式,即仅发送和仅接收。实际上,SPI的发送数据信号线和接收数据信号线是相互独立的,对软件使用来说这个功能同正常使用交换数据模式(同步数据模式)没啥区别。
  • 支持主机模式和从机模式。
  • 可以产生触发信号送至DMA控制器,以支持DMA传输。
  • 支持多路片选。这个SPI模块引出了四根片选线,PCS[3..0],但在一个时刻做多仅能选中一路片选信号。但实际应用场景非常受限。

SPI外设的电路系统有框图,如图x所示。

在这里插入图片描述

图x SPI外设模块的电路系统框图

引脚信号

SPI通信外设同外界交互的信号线包括:

  • 时钟线SCK
  • 输出串行数据线SOUT
  • 输入串行数据线SIN
  • 每个SPI外设实例都有自己的四根片选信号线PCS[3..0]

这四根片选信号线将由软件配置SPI外设模块的寄存器SPI_TXCFG[PCS],选择其中一个作为本数据帧的片选信号。

片选信号线PCS在Master和Slave模式下的数据数据方向是不同的:

  • 若为Master模式,PCS为输出信号。可配置使用SPI外设自动控制。
  • 若为Slave模式,PCS为输入信号,仅当被选中后才能从接收来自总线上的数据。

时钟源

YTM32B1LE05微控制器芯片为例,SPI外设的时钟源来来自于IPC,访问SPI外设寄存器的时钟信号来自于SLOW_BUS_CLK,如图x所示。

在这里插入图片描述

图x SPI外设模块的总线访问时钟

图中说明,SPI模块的外设功能时钟是可选的。如图x所示。SPI模块的外设功能时钟,将用于驱动SPI外设工作,产生通信波特率等。

在这里插入图片描述

图x SPI的功能时钟源

其它不常用功能

  • 支持SOUT和SIN引脚信号交换,为电路设计提供更宽的容错性,SPI_CTRL[PINCFG]
  • SPI在正常情况下使用SCLK信号对串行数据流进行采样(获得数字信息),也可以使用SCLK再延后一点的时间点进行采样,SPI_CTRL[SPDEN]

Pricinple & Mechinism

在SPI传输的过程中,Master模式是提供通信时钟的一方,先发数据再收数据;Slave使用SPI总线上的时钟信号同步数据,先收数据再发数据。SPI的Master模式和Slave模式,相当于是SPI模块的两个影子分身,使用同一个SPI外设时,二者只能选其一。虽然大部分的电路功能都是复用的,但在具体的使用场景中,针对不同的工作模式,表现出来的行为模式也各自不同。

基于FIFO的命令和数据管理机制

YTM的SPI外设的设计中,将SPI通信属性分类为收发器外设相关和通信帧相关两类:

  • 收发器外设相关的属性,例如波特率、中断模式等等,配置好之后,在整个通信过程中基本就不再改动了。这类配置大多被安置在SPI_CTRL以及专门的配置时钟波形参数的SPI_CLK寄存器中。
  • 通信帧相关的属性,例如帧数据长度,本帧结束后是否放开片选线等,是可能随着每一帧发生发生变化的。这类配置大多被安置在SPI_TXCFG寄存器中。SPI_TXCFG寄存器可以以常规访问寄存器的方式读写(必须是32位写操作),但实际上,SPI外设会自动将用户写入SPI_TXCFG寄存器的命令字送入发送FIFO中,或者更确切地说,向SPI_TXCFG寄存器写数,将会立即作用于发送FIFO的工作方式。

YTM的SPI外设将SPI的通信过程看做是通信帧的过程:

  • 每次要发送数据流时,首先需要先向发送FIFO写入命令字(写SPI_TXCFG寄存器),SPI外设会识别本次写入的命令字,自动配置好发送FIFO的工作模式。然后用户需要向发送FIFO写即将要发送的数据字(写SPI_DATA
<think>好的,我需要帮助用户了解如何在YTM32B1MD1单片机中通过寄存器配置外设时钟。首先,我应该查阅YTM32B1MD1的数据手册或参考手册,找到关于时钟系统的部分。通常,时钟配置涉及系统时钟源选择、分频器设置以及外设时钟使能这几个主要步骤。 用户可能对寄存器配置不太熟悉,所以需要分步骤讲解。首先,确定时钟源,比如内部RC振荡器或外部晶振。然后配置分频器,确定外设时钟频率。接下来,找到对应外设的时钟使能寄存器,开启特定外设的时钟。 需要注意的是,直接操作寄存器时,必须确保地址正确,并且按位操作来设置或清除相应的位,避免影响其他配置。可能还需要考虑时钟门控和低功耗模式的相关设置。此外,不同外设可能有不同的时钟要求,例如USART需要精确的波特率时钟,而定时器可能需要更高的频率。 用户可能遇到的问题包括寄存器地址错误、未正确使能时钟导致外设无法工作,或者时钟频率配置不当导致外设功能异常。因此,在教程中应强调仔细检查寄存器地址,使用位掩码操作,并通过调试工具验证时钟配置是否生效。 最后,生成相关问题时,要考虑用户可能进一步想知道如何验证时钟配置、不同外设的具体配置方法,以及常见错误排查步骤。这有助于用户全面理解和应用所学内容。</think>### YTM32B1MD1单片机外设时钟配置教程 在YTM32B1MD1单片机中,外设时钟的配置主要通过对时钟控制寄存器(如`RCU_APB1EN`、`RCU_APB2EN`等)的操作实现。以下是具体步骤: #### 1. **查看时钟树结构** 首先需在数据手册中确认目标外设挂载的总线类型(APB1/APB2/AHB)。例如: - USART1属于APB2总线 - SPI1属于APB1总线[^1] #### 2. **使能外设时钟** 通过设置对应总线使能寄存器的位域,例如开启GPIOA时钟: ```c // APB2外设时钟使能寄存器地址:0x40021018 *(volatile uint32_t*)0x40021018 |= (1 << 2); // 开启GPIOA时钟 ``` #### 3. **配置时钟分频(可选)** 若需调整总线频率,需设置分频寄存器: ```c // APB1分频寄存器地址:0x4002101C *(volatile uint32_t*)0x4002101C &= ~(0x07 << 8); // 清除原有分频 *(volatile uint32_t*)0x4002101C |= (0x03 << 8); // 设置4分频 ``` #### 4. **验证配置** 可通过读取寄存器值或测量实际时钟信号验证配置是否生效。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值