0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

用于8051兼容微控制器的高效位敲击SPI端口

星星科技指导员 来源:ADI 作者:ADI 2023-01-12 16:18 次阅读

快速 SPI 端口可通过 GPIO 引脚进行位冲击,并作为具有 SPI 端口的 8051 兼容微控制器的低成本替代方案。本应用笔记所示的代码利用8051特有的特性,使用最少的额外代码创建快速SPI端口。

虽然可以使用带有SPI端口的8051兼容微控制器,但具有SPI端口通过GPIO引脚位敲击的低成本器件通常足以满足许多应用的需求。此处显示的代码利用特定于 8051 内核的功能,以最小的工作量创建快速 SPI 端口。#define语句中的 CPHA、CPOL 和CS_TOGGLE_BETWEEN_BYTES常量初始化宏,这些宏根据正在实现的 SPI 端口类型定制代码。 预处理器在编译时而不是运行时执行此代码定制,从而节省了宝贵的时钟周期,如果使用决策结构(即常规的 if-else 语句),这些周期将被浪费。

下面的代码包括利用 8051 内核功能所需的特定于 8051 的 C 命令。尽管这些命令是特定于编译器的(在本例中为 8051 的 Keil μVision v2 开发工具),但所有适用于 8051 兼容设备的“好”C 编译器都包含类似的命令。

检查代码,PORT_0定义为 sfr 类型,它提醒编译器此标签是 8051 特殊功能寄存器 (SFR)。由于此 SFR 是位可寻址的,因此 sbit 类型定义引用特定 SFR 位以充当 SPI 端口引脚的标识符。spiTmp 声明中使用的 bdata 类型允许将此变量放置在 8051 内核的直接可寻址 RAM 内的特殊位可寻址内存中。同样,sbit 类型定义了将引用 spiTmp 变量中特定位的标识符。

要通过 SPI 端口发送的字节将加载到全局字节数组 spiData 中。将此变量声明为全局变量允许 SPI 发送/接收函数访问 spiData,而无需将其作为参数传递。使用数据标识符声明它强制编译器将数组存储在 8051 内核内最快的可访问内存(直接可寻址内存)中。

spiReadWriteBlock 函数包含位撞击 SPI 端口的代码。它使用此 SPI 端口有效地传输 spiData 数组中的每个字节,从数组中的最后一个元素到第一个元素。使用此反向顺序访问数组允许与零进行比较(请参阅代码),由于 8051 指令集,这意味着更快的组装。当 spiReadWriteBlock 函数完成时,使用 SPI 端口读取的字节将替换 spiData 数组中的原始数据,再次从数组中的最后一个元素开始到第一个元素。

请注意,代码经过优化,可以发送和接收大于一个字节的数据块。对于单字节传输,应删除 spiReadWriteBlock 中的循环结构和局部变量。(这可以使用预处理器完成。

当针对Maxim DS89C430/450系列8051兼容微控制器进行编译时,该位撞击式SPI端口的运行速度略高于2Mbps,如图1所示。此外,该代码只需要两个字节的可直接寻址RAM和139字节的闪存用于代码空间(包括SPI端口初始化和主程序循环)。

poYBAGO_wmKAXZ4SAAAamY0V4W4014.gif?imgver=1

图1.这些波形表示当CPHA、CPOL和CS_TOGGLE_BETWEEN_BYTES常数设置为1时,位撞击SPI端口的输出。此固件使用 8051 内核中的位可寻址存储器来提高 SPI 端口的速度。

审核编辑:郭婷

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 微控制器
    +关注

    关注

    48

    文章

    6811

    浏览量

    147646
  • 寄存器
    +关注

    关注

    30

    文章

    5031

    浏览量

    117741
  • GPIO
    +关注

    关注

    16

    文章

    1135

    浏览量

    50578
收藏 人收藏

    评论

    相关推荐

    SPI接口如何实现微控制器之间的通信

    微控制器的接口侧配有一个通用同步和异步收发器 (USART)、一个 I2C 兼容型双线接口 (TWI) 和 SPI。USART 可配置为第二个 SPI
    发表于 08-02 11:24 2045次阅读
    <b class='flag-5'>SPI</b>接口如何实现<b class='flag-5'>微控制器</b>之间的通信

    8051微控制器架构的简要说明

    此前已经介绍了关于8051微控制器基础知识和引脚图说明等相关知识,而在本文中,将重点介绍8051微控制器的硬件方面内容,如 I/O 端口、R
    发表于 08-23 14:45 1984次阅读
    <b class='flag-5'>8051</b><b class='flag-5'>微控制器</b>架构的简要说明

    #硬声创作季 微控制器原理:8051微控制器的技术发展

    微控制器mcu8051
    Mr_haohao
    发布于 :2022年11月02日 14:47:16

    [分享]C8051F410属于Silicon Labs的小外型微控制器系列

      C8051F410属于Silicon Labs的小外型微控制器系列。C8051F410在极小的封装中集成了高速8051 CPU、Flash存储
    发表于 04-21 11:17

    8051,PIC,AVR和ARM有什么区别?

    读取传感的状态或控制电机。8051微控制器8051微控制器是一个8
    发表于 11-30 10:08

    用于外部微控制器SPI连接

    BlueNRG-MS设备,用于天线或测量仪器的SMA连接以及用于外部微控制器SPI连接。该
    发表于 06-01 17:03

    为什么不将外部SPI FLASH用于“普通”微控制器呢?

    Quad-SPI(QSPI) )闪存来代替。华邦w25q128串行闪存分线板为什么不将外部SPI FLASH用于“普通”微控制器呢?外部SPI
    发表于 07-22 08:31

    STM32:32微控制器功能

    STM32:32微控制器功能:1、串口USART:接外设2、内部集成电路I2C:用于与I2C接口设备通信3、串行通讯接口SPI用于
    发表于 08-11 08:02

    讨论AVR,ARM,8051和PIC微控制器之间的区别

    8051和PIC微控制器之间的区别。**AVR,ARM,8051和PIC微控制器之间的区别**微控制器之间的差异主要包括什么是
    发表于 11-23 07:24

    XM003FLASH的增强型88051内核微控制器(1T工作模式),与8051内核完全兼容并具备更高效

    XM003为带有FLASH的增强型88051内核微控制器(1T工作模式),指令集与标准的80C51完全兼容并具备更高效能。产品规格书:XM
    发表于 05-23 11:26

    用AD7549双D A转换器和8051微控制器设计12位模拟

    用AD7549双D A转换器和8051微控制器设计12位模拟I O端口:
    发表于 06-12 15:32 67次下载
    用AD7549双D A转换器和<b class='flag-5'>8051</b><b class='flag-5'>微控制器</b>设计12位模拟

    基于微控制器的串行端口接口(SPI)启动电路

    本应用笔记描述基于微控制器的通用串行端口接口(SPI)启动电路的工作原理。对于需要在上电时修改某些器件参数的用户而言,这是一种低成本解决方案。本电路实现了一种用于对转换
    发表于 09-15 11:17 39次下载
    基于<b class='flag-5'>微控制器</b>的串行<b class='flag-5'>端口</b>接口(<b class='flag-5'>SPI</b>)启动电路

    AN-812: 基于微控制器的串行端口接口(SPI®)启动电路

    AN-812: 基于微控制器的串行端口接口(SPI®)启动电路
    发表于 03-21 08:35 14次下载
    AN-812: 基于<b class='flag-5'>微控制器</b>的串行<b class='flag-5'>端口</b>接口(<b class='flag-5'>SPI</b>®)启动电路

    8051微控制器引脚说明与基本电路

    此前已经介绍过8051微控制器的基础知识,包括它的历史、特性、封装和一些实际应用。在本文中,小编将将继续介绍关于8051微控制器引脚图、引脚说明以及其他一些细节内容,包括
    发表于 08-23 15:53 5603次阅读
    <b class='flag-5'>8051</b><b class='flag-5'>微控制器</b>引脚说明与基本电路

    DS1307与兼容8051微控制器接口

    DS1307串行实时时钟集成了2线串行接口,可使用兼容8051微控制器进行控制。本例中的DS1307直接连接到DS5000微控制器上的两个
    的头像 发表于 03-01 13:52 866次阅读
    DS1307与<b class='flag-5'>兼容</b><b class='flag-5'>8051</b>的<b class='flag-5'>微控制器</b>接口