用于MAX7456随屏显示器SPI

来源:本站
导读:目前正在解读《用于MAX7456随屏显示器SPI》的相关信息,《用于MAX7456随屏显示器SPI》是由用户自行发布的知识型内容!下面请观看由(电工技术网 - www.9ddd.net)用户发布《用于MAX7456随屏显示器SPI》的详细说明。
简介:MAX7456随屏显示(OSD)发生器具有SPI™兼容接口,本应用笔记介绍了SPI接口的工作原理,文中还包含在微控制器内逐位模拟SPI接口的控制器C程序。

MAX7456串行接口

MAX7456单通道单色随屏显示(OSD)发生器预装了256个字符和图形,并可通过SPI接口在线编程。通过SPI兼容串行接口可以设置工作模式、显示存储器以及字符存储器。状态(STAT)寄存器、显示存储器数据输出(DMDO)寄存器和字符存储器数据输出(CMDO)寄存器都可读,可以对其进行写操作和读操作。关于MAX7456寄存器及存储器结构的详细信息请参考数据资料和应用笔记4117,"使用MAX7456存储器和评估板文件生成定制字符和图形"。

MAX7456支持高达10MHz接口时钟(SCLK)。图1为写数据时序,图2是从器件读数据的序。

写寄存器时,拉低/CS可使能串行接口。在SCLK的上升沿从SDIN读取数据。当/CS变为高电平时,数据锁存到输入寄存器。如果传输过程中/CS变高,程序终止(即数据不写入寄存器)。/CS变低之后,器件等待从SDIN读入第一个字节,以确定正在执行的数据传输类型。

读寄存器时,如上文所述,拉低/CS。地址在SCLK的上升沿锁入SDIN。然后数据在SCLK的下降沿从SDOUT输出。

SPI命令长度为16位:最高8位(MSB)代表寄存器地址,最低8位(LSB)代表数据(图1和2)。这种格式有两个例外:

自动递增写模式,用于访问显示存储器,是一个8位操作(图3)。写数据前必须写入起始地址。对显示存储器执行自动递增写命令时,8位地址由内部产生,串口只需8位数据,如图3所示。从显示存储器读字符数据时,若处于16位工作模式,应该是24位(8位地址+16位数据)。

执行读操作时,只需要8位地址,如图2所示。

用于MAX7456随屏显示器SPI

图1. 写操作

用于MAX7456随屏显示器SPI

图2. 读操作

用于MAX7456随屏显示器SPI

图3. 自动递增写操作

C程序

下文给出的C程序已针对MAXQ2000微控制器进行了编译,用于MAX7456评估(EV)板。本文给出了完整的程序例程。程序是自述文档,几乎没有附加说明。C程序可从以下文件获得:spi.c和MAX7456.h。

以下程序使用了SPI协议的标准定义,MAXQ2000处理器为SPI主机,MAX7456是SPI从器件。

CS与MAX7456数据资料中的定义相同。

SDIN对应于MOSI (主机出从器件入)。

SDOUT对应于MOSI (主机入从器件出)。

SCLK对应于CK。

前缀SPI_用于全部程序。

数据结构

下文所示数据结构可直接或逐位读写数据,用于独立访问SPI端口。C++和一些较新的C编译器支持位字段联合/结构语句)。

用于MAX7456随屏显示器SPI

上述代码将一个单字节赋值给PO5,这是微控制器输出端口的地址。然后将另一个字节赋值给相同的可以逐位访问的存储器地址。

因此,可用以下命令直接对该端口进行寻址:

PO5 = 0x10;

或用以下命令逐位读写:

PO5_bit.bit4 = 1;

如果该程序用于其它处理器,该结构需要重新编写。

如果采用不支持位字段宽度的老式C编译器,可用位布尔运算设置及清除位:

用于MAX7456随屏显示器SPI

以下是一个简单的编程技巧,使程序更容易移植:用宏定义控制器引脚排列,如下所示。

用于MAX7456随屏显示器SPI

用以上宏和数据结构可以单独置位及复位每个IO口,命令如下:

SPI_CS = 1;

改变宏时相应引脚也将改变,将上述代码用于其它设计时,如果SPI口引脚排列不同,或为了实现更理想的PCB布局而对引脚进行重新排列,上述程序非常有用。

单字节写操作程序

单字节写操作(图1)程序如下所示。如果可以保证在程序入口处的/CS和CK线状态正确,可以去掉前两条命令。

程序首先发送地址,然后发送数据。进行两次循环。采用单循环及16位数据存储可以简化程序。在MAXQ2000微控制器中执行16位“int”所占用的时间比执行8位“char”长,因此需进行权衡考虑。

用于MAX7456随屏显示器SPI

用于MAX7456随屏显示器SPI

读字节操作程序

读字节操作(图2)程序如下所示,与上述程序类似。首先发送地址,然后发送时钟从MISO读回数据。

用于MAX7456随屏显示器SPI

自动递增模式下的写字节操作程序

自动递增模式下的写字节操作(图3)程序如下所示,与和上述单字节写程序类似。首先发送地址,然后发送时钟从MISO读回数据。

用于MAX7456随屏显示器SPI

自动递增模式下写显示存储器的程序

自动递增模式下写显示存储器的程序如下,程序使用称为 "data"的全局变量数组。定义如下:

用于MAX7456随屏显示器SPI

调用程序时,data[]包含显示存储器内容,格式如下:

用于MAX7456随屏显示器SPI

自动递增模式通过写0xFF结束,所以该模式下不能向显示寄存器写0xFF。如果需要写OxFF,可以采用单字节写指令。

用于MAX7456随屏显示器SPI

用于MAX7456随屏显示器SPI

写字符存储器程序

向字符存储器写一个字符的程序如下,每个字符占用18行,每行12像素,共216像素。由于每个字节定义4个像素,因此定义每一个字符需要54字节。字符数据位于程序入口处的data[] (与上述写显示存储器的程序类似)。

写字符存储器时需要进行一些附加说明,存储器为非易失,因此,写存储器大约需要12ms,由MAX7456执行。只有完整的54字节字符才可以写入字符存储器。

该器件包含一个54字节映射存储器。首先把需要写入的字符数据写入映射存储器,然后器件将该数据装载到NVM字符存储器。

用来写字符存储器的寄存器有以下几种:

字符存储器模式 = 0x08。向寄存器写0xA0,使器件把映射存储器的内容装载到NVM字符存储器。字符存储器地址高位 = 0x09。包括了即将写入字符的地址。字符存储器地址低位 = 0x0A。字符存储器数据输入 = 0x0B。Status = 0xA0,读取该寄存器以决定何时可以写入字符存储器。

在程序入口处,data[1]包括即将写入字符的地址,data[2...54]包括字符数据。

向NVM字符存储器写字符时,首先写字符地址。然后将每个字节写入映射存储器。写映射存储器时没有自动递增模式,所以每次写操作必须写入映射存储器地址。向字符存储器模式寄存器写0xA0,可以把映射存储器的内容装载到NVM字符存储器。然后器件将状态寄存器第5位置高,表明不能写入字符存储器。完成后,器件将该位复位至低。数据从映射存储器移向字符存储器时不能写映射存储器。

为了避免出现显示器闪烁,在写字符存储器之前程序禁止了OSD。

用于MAX7456随屏显示器SPI

MAX7456头文件

下面列出了MAX7456的头文件,以下代码决定了器件的寄存器映射。

用于MAX7456随屏显示器SPI

用于MAX7456随屏显示器SPI

结论和性能

MAX7456评估板采用工作在20MHz时钟的MAXQ2000微控制器,该微控制器包含内部硬件SPI控制器。因此,MAX7456的SPI端口可以全速工作。上述软件SPI程序工作速度低于硬件控制器。不过针对客户缺少硬件SPI端口的工作环境,程序已优化至最简。

提醒:《用于MAX7456随屏显示器SPI》最后刷新时间 2024-03-14 01:06:37,本站为公益型个人网站,仅供个人学习和记录信息,不进行任何商业性质的盈利。如果内容、图片资源失效或内容涉及侵权,请反馈至,我们会及时处理。本站只保证内容的可读性,无法保证真实性,《用于MAX7456随屏显示器SPI》该内容的真实性请自行鉴别。