SPI接口的工作原理.docx
《SPI接口的工作原理.docx》由会员分享,可在线阅读,更多相关《SPI接口的工作原理.docx(7页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、SPI接口的工作原理发布:|作者:|来源:mahuaxiao |查看:1979次|用户关注:MAX7456随屏显示(OSD)发生器具有SPP兼容接口,本应用笔记介绍了 SPI接口的工作原理,文中还 包含在微控制器内逐位摹拟SPI接口的控制器C程序。MAX7456串行接口 MAX7456单通道单色随屏显 示(OSD)发生器预装了 256个字符和图形,并可通过SPI接口在线编程。通过SPI兼容串行接口可以 设置工作模式、显示存储器以及字符存储器。状态(STAT)寄存器、显示存储器数据输出(DMDO)寄存器 和字符存储器数据输出(CMDO)寄存器都可读,可以对其进行MAX7456随屏显示(OSD)发
2、生器具有SPF兼容接口,本应用笔记介绍了 SPI接口的工作原理,文中还 包含在微控制器内逐位摹拟SPI接口的控制器C程序。MAX7456串行接口MAX7456单通道单色随屏显示(OSD)发生器预装了 256个字符和图形,并可通过SPI接口在线编程。 通过SPI兼容串行接口可以设置工作模式、显示存储器以及字符存储器。状态(STAT)寄存器、显示存 储器数据输出(DMDO)寄存器和字符存储器数据输出(CMDO)寄存器都可读,可以对其进行写操作和读操 作。关于MAX7456寄存器及存储器结构的详细信息请参考数据资料和应用笔记4117, 使用MAX7456 存储器和评估板文件生成定制字符和图形。MAX
3、7456支持高达10MHz接口时钟(SCLK)。图1为写数据时序,图2是从器件读数据的时序。写寄存器时,拉低/CS可使能串行接口。在SCLK的上升沿从SDIN读取数据。当/CS变为高电平时, 数据锁存到输入寄存器。如果传输过程中/CS变高,程序终止(即数据不写入寄存器)。/CS变低之后, 器件等待从SDIN读入第一个字节,以确定正在执行的数据传输类型。读寄存器时,如上文所述,拉低/CS。地址在SCLK的上升沿锁入SDINo然后数据在SCLK的下降沿从 SD0UT输出。SPI命令长度为16位:最高8位(MSB)代表寄存器地址,最低8位(LSB)代表数据(图1和2)。这种 格式有两个例外:1自动递
4、增写模式,用于访问显示存储器,是一个8位操作(图3)。写数据前必须写入起始地址。 对显示存储器执行自动递增写命令时,8位地址由内部产生,串口只需8位数据,如图3所示。2.从显示存储器读字符数据时,若处于16位工作模式,应该是24位(8位地址+16位数据)。执行读操作时,只需要8位地址,如图2所示。-0A6A5A4A3A2A1A0D7D6D5D4D3D2D1D0 -SDINSCLK图1.写操作cs -nSDOUTD7D6D5D4D3D2D1DOXSCLK图2,读操作CS -ISDIN D7 D6 D5 D4 D3 D2 DI DO1A6A5A4A3A2A1A0SDIN图3.自动递增写操作C程序下
5、文给出的C程序已针对MAXQ2000微控制器进行了编译,用于MAX7456评估(EV)板。本文给出了完 整的程序例程。程序是自述文档,几乎没有附加说明。C程序可从以下文件获得:spi. c和MAX7456. h。以下程序使用了 SPI协议的标准定义,MAXQ2000处理器为SPI主机,MAX7456是SPI从器件。CS与MAX7456数据资料中的定义相同。SDIN对应于MOSI (主机出从器件入)。SDOUT对应于MOSI (主机入从器件出)。SCLK对应于CKo前缀SPI_用于全部程序。数据结构下文所示数据结构可直接或者逐位读写数据,用于独立访问SPI端口。C+和一些较新的C编译器支 持位字
6、段联合/结构语句)。/* Port 5 Output Register */_no_init volatile i o union{ unsigned char P05; struct unsigned char bitO : 1; unsigned char bitl : 1; unsigned char bit2 : 1; unsigned char bit3 : 1; unsigned char bit4 : 1; unsigned char bit5 : 1; unsigned char bit6 : 1; unsigned char bit7 : 1; } ; PO
7、5_bit;)上述代码将一个单字节赋值给P05,这是微控制器输出端口的地址。然后将另一个字节赋值给相同的 可以逐位访问的存储器地址。因此,可用以下命令直接对该端口进行寻址:P05 = 0x10;或者用以下命令逐位读写:PO5_bit. bit4 = 1;如果该程序用于其它处理器,该结构需要重新编写。如果采用不支持位字段宽度的老式C编译器,可用位布尔运算设置及清除位:/* Portable bit-set and bit-clear macros. */#define BIT_SET(sfr, bitmask) sfr = (bitmask)#define BIT_CLR(sfr, bitmas
8、k) sfr &= (bitmask)ttdefine BITO OxOlftdefine BIT1 0x02#define BIT2 0x04#define BIT3 0x08#define BIT4 OxlOttdefine BIT5 0x20#define BIT6 0x40#define BIT7 0x80example: BIT_SET(P05, BITO) ; BIT_CLR (P05, BIT6);宏以下是一个简单的编程技巧,使程序更容易移植:用宏定义控制器引脚罗列,如下所示。#define SPI_CS P05_bit. bit4 / P05_bit. bit4 = a
9、ctive-low CS一chip selectttdefine SPI_MOSI P05_bit. bit5 / P05_bit. bit5 = MOST一master out slave in, / data to MAX7456#define SPI_MISO PI5_bit. bit7 / P05_bit. bit7 = MISO一master in slave out, / data from MAX7456#define SPI_CK P05_bit. bit6 / P05_bit. bit6 = SCK - SPI clock用以上宏和数据结构可以单独置位及复位每一个10 口,命
10、令如下:SPI_CS = 1;改变宏时相应引脚也将改变,将上述代码用于其它设计时,如果SPI 口引脚罗列不同,或者为了实现 更理想的PCB布局而对引脚进行重新罗列,上述程序非常实用。单字节写操作程序单字节写操作(图1)程序如下所示。如果可以保证在程序入口处的/CS和CK线状态正确,可以去掉前 两条命令。程序首先发送地址,然后发送数据。进行两次循环。采用单循环及16位数据存储可以简化程序。在 MAXQ2000微控制器中执行16位“int”所占用的时间比执行8位“char”长,因此需进行权衡考虑。/* * spiWriteReg * * Writes to an 8-bit register wi
11、th the SPI port*/void spiWriteReg(const unsigned char regAddr, const unsigned char regData) unsigned char SPICount; / Counter used to clock out the data unsigned char SPIData; / Define a data structure for the SPI data SPI_CS = 1; / Make sure we start with active-low CS high SPI_CK = 0; / and CK low
12、 SPIData =regAddr; / Preload the data to be sent with Address SPI_CS = 0; / Set active-low CS low to start the SPI cycle / Although SPIData could be implemented as an int, / resulting in one / loop, the routines run faster when two loops / are implemented with / SPIDataimplemented as two /zcharts, f
13、or (SPICount = 0; SPICount 8; SPICount+) / Prepare to clock out the Address byte if (SPIData & 0x80) / Check for a 1 SPI_M0SI = 1; / and set the MOSI line appropriately else SPIMOSI = 0; SPICK = 1; / Toggle the clock line SPICK = 0; SPIData = 1; / Rotate to get the next bit / and loop back to send t
14、he next bit / Repeat for the Data byte SPIData = regData; / Preload the data to be sent with Data for(SPICount = 0; SPICount 8; SPICount+) if (SPIData & 0x80) SPIJ10SI = 1; else SPIJIOSI =0; SPI_CK = 1; SPI_CK = 0; SPIData = 1; SPI_CS = 1; SPIJIOSI = 0;读字节操作程序读字节操作(图2)程序如下所示,与上述程序类似。首先发送地址,然后发送时钟从MI
15、SO读回数据。with the SPI port. * Data is returned.spiReadReg * * Reads an 8-bit register*/unsigned char spiReadReg (const unsigned char regAddr) unsigned char SPICount; / Counter used to clock out the data unsigned char SPIData; SPICS = 1; / Make sure we start with active-low CS high SPICK = 0; / and CK
16、low SPIData = regAddr; / Preload the data to be sent with Address and Data SPI_CS = 0; / Set active-low CS low to start the SPI cycle for (SPICount = 0; SPICount 8; SPICount+) / Prepare to clock out the Address and Data if (SPIData & 0x80) SPI_M0SI = 1; else SPI_M0SI =0; SPI_CK = 1; SPI_CK= 0; SPIDa
17、ta = 1; / and loop back to send the next bit SPI_M0SI =0; / Reset the MOSI data line SPIData = 0; for (SPICount 二 0; SPICount 8; SPICount+) / Prepare to clock in the data to be read SPIData =1; / Rotate the data SPICK = 1; / Raise the clock to clock the data out of the MAX7456 SPIData += SPI_MIS0; /
18、 Read the data bit SPI_CK = 0; / Drop the clock ready for the next bit / and loop back SPICS = 1; / Raise CS return (unsigned char)SPIData); / Finally return the read data)自动递增模式下的写字节操作程序自动递增模式下的写字节操作(图3)程序如下所示,与和上述单字节写程序类似。首先发送地址,然 后发送时钟从MISO读回数据。/* * spiWriteRegAutolncr * * Writes to an 8-bit regi
19、ster with the SPI port using the MAX7456, s autoincrement mode*/void spiWriteRegAutolncr(const unsigned char regData) unsigned char SPICount; / Counter used to clock out the data unsigned char SPIData; / Define a data structure for the SPI data. SPI_CS = 1; / Make sure we start with active-low CS hi
20、gh SPI_CK = 0; / and CK low SPIData = regData; / Preload the data to be sent with Address and Data SPI CS = 0; / Set active-low CS low to start the SPI cycle for (SPICount 二 0; SPICount 8; SPICount+) / Prepare to clock out the Address and Data if (SPIData & 0x80) SPI_M0SI = 1; else SPI_M0SI = 0; SPI
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- SPI 接口 工作 原理
限制150内