单片机SPI作为从设备通信总结.doc

  1. 1、本文档共4页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
单片机SPI作为从设备通信总结

单片机的SPI作为从设备进行通信 这里运行的实例是单片机作为从设备,采用ARM9作为主设备进行SPI通信。ARM9作为主设备,SPI的通信速率最低为500K,单片机采用NEC 的78F1166,晶振采用11.0592MHz时SPI通信速率可以达到500K。速率匹配上没有问题。 主从设备之间采用的通信协议为DL/645.这里有一个问题,协议的收发数据帧的长度是不确定的。这就涉及到主设备需要读多少个字节的数据。根据实际应用。645规约实际通信时数据帧不会超过100个字节。所以这里解决的方案是,主设备发送命令后,等待200ms后主设备开始抄读数据。这里之所以等待200MS,是因为从设备需要准备数据。 以下是从设备的应用程序: Unsigned char* gpCsi01RxAddress; /* csi01 receive buffer address */ Unsigned short gCsi01RxLen; /* csi01 receive data length */ Unsigned short gCsi01RxCnt; /* csi01 receive data count */ Unsigned char* gpCsi01TxAddress; /* csi01 send buffer address */ Unsigned short gCsi01TxLen; /* csi01 send data length */ Unsigned short gCsi01TxCnt; /* csi01 send data count */ #define BUFFERLEN 200 unsigned char SPI_RX_Buffer[BUFFERLEN]; unsigned char TxFlag,RxFlag; unsigned char Data; unsigned long count = 0; void CSI01_Init( void ) { /* CSI01 initial setting */ ST0 |= SAU_CH1_STOP_TRG_ON; /* CSI01 disable */ CSIMK01 = 1; /* INTCSI01 disable */ CSIIF01 = 0; /* INTCSI01 IF clear */ SIR01 = SAU_SIRMN_FECTMN | SAU_SIRMN_PECTMN | SAU_SIRMN_OVCTMN; /* error flag clear */ SMR01 = SAU_SMRMN_INITIALVALUE | SAU_CLOCK_MODE_TI0N | SAU_TRIGGER_SOFTWARE | SAU_CSI | SAU_BUFFER_EMPTY;//SAU_TRANSFER_END; SCR01 = SAU_RECEPTION_TRANSMISSION | SAU_TIMING_4 | SAU_MSB | SAU_LENGTH_8; SDR01 = 0; SO0 = ~SAU_CH1_DATA_OUTPUT_1; /* CSI01 SO initial level */ SOE0 |= SAU_CH1_OUTPUT_ENABLE; /* CSI01 output enable */ /* INTCSI01 priority low */ CSIPR101 = 0; CSIPR001 = 0; /* SI01 pin setting */ PM4 |= 0x10; /* SO01 pin setting */ P4 |= 0x20; PM4 = ~0x20; /* SCK01 pin setting */ PM4 |= 0x08; } //================================================================= void CSI01_Start( void ) { CSIMK01 = 0; /* INTCSI01 enable */ SS0 |= SAU_CH1_START_TRG_ON; /* CSI01 enable */ //gpCsi01RxAddress = SPI_RX_Buffer;//接收数据指针指向SPI_RX_Buffer第一个字节 //gCsi01RxCnt = 0;//接收数据个数清零 //gCsi01TxCnt = 0;//发送数据个数清零 //SetSendFlag(SENDEND);//启动时

文档评论(0)

xcs88858 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

版权声明书
用户编号:8130065136000003

1亿VIP精品文档

相关文档