教你LPC54102双核套件固件库SPI的用法.doc

教你LPC54102双核套件固件库SPI的用法.doc

ID:27891462

大小:2.65 MB

页数:13页

时间:2018-12-06

教你LPC54102双核套件固件库SPI的用法.doc_第1页
教你LPC54102双核套件固件库SPI的用法.doc_第2页
教你LPC54102双核套件固件库SPI的用法.doc_第3页
教你LPC54102双核套件固件库SPI的用法.doc_第4页
教你LPC54102双核套件固件库SPI的用法.doc_第5页
资源描述:

《教你LPC54102双核套件固件库SPI的用法.doc》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库

1、教你LPC54102双核套件固件库SPI的用法  最近进度有点慢。现在把我SPI这部分分享下吧。这次我使用SPI0和I2C2这两个模块,I2C2负责采集MPU6050的数据,然后用OLED刷新数据。  SPI是串行外设接口(SerialPeripheralInterface)的缩写。SPI,是一种高速的,全双工,同步的通信总线,并且在芯片的管脚上只占用四根线,节约了芯片的管脚,同时为PCB的布局上节省空间,提供方便,正是出于这种简单易用的特性,如今越来越多的芯片集成了这种通信协议,在LPC5410中有两个SPI的模块,分别是SPI0和

2、SPI1。  SPI根据SPI时钟极性的极性和SPI时钟相位,SPI时钟极性CPOL,=0表示在没有数据传输时为低电平,=1表示没有数据传输时为高电平。SPI时钟相位CPHA,=0表示时钟的第一个沿更新数据、第二个沿锁存数据,=1表示时钟的第一个沿锁存数据、第二个沿更新数据。如下面的几个时序图:            我这次用了LPC54102的SPI0刷了小OLED。首先LPC54102套件上有个SPI/I2Cbrdgeheader,如下套件的原理图:    具体位置如下图:    板子的背面有对应的丝印文字,很容易找到。  这次没

3、用到中断和DMA。首先我们要配置好管脚。  voidInit_SPI_PinMux(void)  {  /*1.3=SPI0_SCK,0.14=SPI0_SSELN0,0.12=SPI0_MOSI,1.4=SPI0_MISO*/  Chip_IOCON_PinMuxSet(LPC_IOCON,1,3,(IOCON_FUNC5

4、IOCON_DIGITAL_EN

5、IOCON_MODE_PULLUP));  Chip_IOCON_PinMuxSet(LPC_IOCON,0,14,(IOCON_FUNC1

6、IOCON_DIGITAL_EN

7、I

8、OCON_MODE_PULLUP));  Chip_IOCON_PinMuxSet(LPC_IOCON,0,12,(IOCON_FUNC1

9、IOCON_DIGITAL_EN

10、IOCON_MODE_PULLUP));  Chip_IOCON_PinMuxSet(LPC_IOCON,1,4,(IOCON_FUNC5

11、IOCON_DIGITAL_EN

12、IOCON_MODE_PULLUP));  }  然后进行SPI的初始化。如下函数:  根据OLED上的SSD1306提供的手册和别人的写的模拟SPI驱动,我们要选用CPOL=0,和CPA=0

13、这种模式。  SSD1306的4线SPI的时序图:    voidSPI_Init()  {  uint32_tmemSize,*devMem;  ROM_SPIM_INIT_TspimInit;  ROM_SPIM_XFER_CONFIG_TspimConfig;  inti;  Init_SPI_PinMux();  Chip_Clock_EnablePeriphClock(LPC_SPIM_CLOCK);  Chip_SYSCON_PeriphReset(LPC_SPIM_RESET);  /*Getneededsizeford

14、rivercontextmemory*/  memSize=ROM_SPIM_GetMemSize();  if(memSize》sizeof(drvData)){  DEBUGOUT(“Can‘tallocatememoryfordrivercontextr”);  }  devMem=drvData;/*Orjustusemalloc(memSize)*/  /*IniTIalizedriver*/  spimInit.pUserData=NULL;  spimInit.base=(uint32_t)LPC_SPIM_POR

15、T;  spimInit.baseClockRate=Chip_Clock_GetAsyncSyscon_ClockRate();  spimInit.spiPol[0]=0;/*AcTIvelowselectforSSEL0*/  spimInit.spiPol[1]=1;  spimInit.spiPol[2]=1;  spimInit.spiPol[3]=1;  spimHandle=ROM_SPIM_Init(devMem,&spimInit);  if(spimHandle==NULL){  /*ErroriniTIaliz

16、ingSPI*/  DEBUGOUT(“ErroriniTIalizingROMr”);  }  /*SetSPItransferconfiguration*/  spimConfig.dXferBitRate=S

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。