摘要: 本应用笔记介绍了一个用于超高速闪存微控制器(如DS89C430和DS89C450)的软件(位bang) SPI库。解释了库的应用程序接口及其特性描述。该应用程序接受串行输入,并在Crystalfontz LCD上显示文本。
这个应用笔记使用了一个全功能的软件SPI master超高速微控制器和一个简单的应用程序,利用它来控制Crystalfontz LCD (www.crystalfontz.com)。
应用程序接受ASCII数据在57,600波特(当使用33MHz晶体)串行端口0从标准串行终端程序。所述数据回显至所述终端并存储在数据存储器中,直到检测到回车;然后在LCD上显示累积的文本。本应用中使用的LCD是Crystalfontz SKD204-634 V2.0串行LCD,具有低速SPI接口。它连接到DS89C430,如图1所示。复位后,将“DS89C430软件SPI应用说明”横幅打印到终端。当应用程序监听输入数据时,它打印一个“=>”提示符。
图1所示、连接图
此应用程序使用的软件SPI库是一个高度可配置的SPI主,具有以下功能:
四种SPI时钟模式
8位和16位字传输
SPI时钟拉伸
可选的原子传输
该库支持的四种SPI时钟(SPI_CLK)模式由CKPHA和CKPOL定义。CKPOL位定义SPI时钟的空闲状态,CKPOL = 0强制SPI_CLK为低空闲状态,而CKPOL = 1强制SPI_CLK为高空闲状态。CKPHA改变用于数据信号传输的边缘。当CKPHA = 0时,SPI_CLK的第一条边指定从服务器和主服务器应该何时采样它们的输入。当CKPHA = 1时,SPI_CLK的第二条边指定何时进行采样。当CKPHA = 1时,主服务器和从服务器应该在第一个SPI_CLK边的输出中显示它们的数据。这允许数据有足够的保持时间。当CKPHA = 0时,当Slave Select (SS)线激活时,数据应该变得有效。请注意,大多数设备要求在CKPHA = 0时使用SS线,以允许适当的定时,而当CKPHA = 1时,SS可能是可选的。图2说明了这种行为。
图2、SPI时序图
数据作为数据存储器中的字节数组发送到SPI库。当处于8位字模式时,这些字节一次传输一个。在16位字模式下,传输两个字节,但此操作只消耗请求数的一次传输。请注意,在本文档中,“word”的长度可能是8位或16位,具体取决于所选择的模式。
为了与较慢的SPI从机接口,可以使用SPI_CLK拉伸将SPI_CLK周期增加1µs。
SS信号是可选的,因为它可能不是所有SPI设置都需要。大多数SPI设备期望SS的活动状态为低,但其他SPI设备要求活动状态为高。一些SPI设备期望在每个字传输同步后SS信号变为非活动状态。
为了方便原子传输,可以在传输时禁用中断。
与SPI库的接口如下所示。要传输的数据必须以数组的形式位于数据存储器的连续部分中。标准库要求数据指针0 (dptr0)指向要传输的数据的开头。要传输的字数应该放在R3、R2、R1和R0中,R3是MSB。所需的拉伸值应该放在R4中。SPI库的选项应该放在R5中,其位值定义为:
R5.0 - ckpol | 设置为1 - SPI_CLK空闲高 |
R5.1 - ckpha | 设置为1 -在第二个SPI_CLK边缘传输 |
R5.2 - wordMode | 设置为1 -使用16位字传输 |
R5.3 - noSkew | 设置为1 -在传输过程中关闭中断 |
R5.4 -实用性 | 设置为1 -在传输过程中使用SS线 |
R5.5 - synchSS | 设置为1 -让SS在每个单词后不活动 |
R5.6 - invertSS | 设置为1 - SS线是有效的高 |
R5.7 -未定义 |
设置好所有寄存器后,通过调用xmitSPI函数。传输完成后,每次字传输期间所读取的数据将被定位到为传输而传递的数据数组中相应的字位置。注意,在调用xmitSPI之后,dptr0将指向传输数组的开头,但是所指向的数据将被更改。
该应用程序是使用KeilµVision2构建的,但经过一些修改,任何8051汇编器都可以使用。应用程序和SPI库的源代码和二进制文件可以下载。如果需要技术支持,请联系技术支持。
社群二维码
关注“华强商城“微信公众号
Copyright 2010-2023 hqbuy.com,Inc.All right reserved. 服务热线:400-830-6691 粤ICP备05106676号 经营许可证:粤B2-20210308