通过底层AVR方法实现SPI数据传输
主机端:
/********************************* 代码功能:通过底层AVR方法实现SPI数据传输(主机端) 创作时间:2016*10*17 使用资源: 更低阶的 aTmega(AVR) 库 SPI三个寄存器SPCR(控制寄存器),SPCR(状态寄存器),SPDR(数据的暂存器) SPCR(SPI Control Register暂存寄存器) 7bit SPIE 片选使能,SPIE = 1;片选无效,SPIE = 0片选有效(主机无需片选)(单机通信也无需片选) 6bit SPE 5bit DORD 4bit MSTR 3bit CPOL 时钟极性,CPOL = 0(时钟空闲为低电平);CPOL = 1(时钟空闲为高电平) 2bit CPHA 相位极性,CPHA = 0(表示第一个边沿);CPHA = 1(表示第二个边沿);都是表示数据采样,数据有效的时刻。 1bit SPR1 0bit SPR0 SPCR(SPI Status Register 暂存寄存器) SPDR(SPI Control Register数据的暂存器) 作者邮箱:jikexianfeng@outlook.com ********************************/ #define SCK_PIN 13 //宏定义时钟端口 #define MISO_PIN 12 //宏定义主机输出线 #define MOSI_PIN 11 //宏定义从机输出线 #define SS_PIN 10 //片选 boolean SlaveDataFlag; //数据标志位 void MasterInit(void) //初始化SPI引脚设置 { pinMode(SCK_PIN,OUTPUT); //SCK_PIN为输出模式,(主机模式) pinMode(MOSI_PIN,OUTPUT); //初始化主机输出总线 pinMode(MISO_PIN,INPUT); //初始化从机输出总线 pinMode(SS_PIN,OUTPUT); //初始化片选引脚(主机高电平,从机低电平) //启动SPI SPCR = B00000000; SPCR = (<<SPE)|(<<MSTR); } byte ReadByte(void) { <<SPIF))); return SPDR; } void WriteByte(byte value) { SPDR = value; <<SPIF))); return ; } void setup() { Serial.begin(); MasterInit(); Serial.println("jikexianfeng@outlook.com"); digitalWrite(SS_PIN,HIGH); SlaveDataFlag = true; } void loop() { byte rxData; while(true) { if(SlaveDataFlag) { digitalWrite(SS_PIN,LOW); WriteByte(); Serial.println("Done writing data..."); Serial.println("Reading data from slave ..."); rxData = ReadByte(); digitalWrite(SS_PIN,HIGH); Serial.println("Dome Reading data ..."); Serial.print("From Slave :"); Serial.println(rxData,DEC); SlaveDataFlag = false; } } }
从机端:
/********************************* 代码功能:通过底层AVR方法实现SPI数据传输(主机端) 创作时间:2016*10*17 使用资源: 更低阶的 aTmega(AVR) 库 作者邮箱:jikexianfeng@outlook.com ********************************/ #define SCK_PIN 13 #define MISO_PIN 12 #define MOSI_PIN 11 #define SS_PIN 10 void SlaveInit(void) { pinMode(SCK_PIN,INPUT); pinMode(MISO_PIN,INPUT); pinMode(MISO_PIN,OUTPUT); pinMode(SS_PIN,INPUT); SPCR = B00000000; SPCR = (<<SPE); } byte ReadByte(void) { <<SPIF))); return SPDR; } void writeByte(byte value) { SPDR = value; <<SPIF))); return ; } void setup() { Serial.begin(); SlaveInit(); } void loop() { if(digitalRead(SS_PIN) == LOW) { writeByte(); byte rxData; rxData = ReadByte(); Serial.print("Command :"); Serial.println(rxData); } }
通过底层AVR方法实现SPI数据传输的更多相关文章
- 进阶之路(基础篇) - 009 通过底层AVR方法实现SPI数据传输
主机端: /********************************* 代码功能:通过底层AVR方法实现SPI数据传输(主机端) 创作时间:2016*10*17 使用资源: 更低阶的 aTme ...
- SPI数据传输(库函数方法)
主机端: /********************************* 代码功能:SPI数据传输(主机端) 引脚说明: SS/CS:片选(高电平屏蔽,低电平启用) MOSI :主机送出信号 M ...
- 进阶之路(基础篇) - 008 SPI数据传输(库函数方法)
主机端: /********************************* 代码功能:SPI数据传输(主机端) 引脚说明: SS/CS:片选(高电平屏蔽,低电平启用) MOSI :主机送出信号 M ...
- 选择排序法、冒泡排序法、插入排序法、系统提供的底层sort方法排序之毫秒级比较
我的代码: package PlaneGame;/** * 选择排序法.冒泡排序法.插入排序法.系统提供的底层sort方法排序之毫秒级比较 * @author Administrator */impo ...
- Linux SPI总线和设备驱动架构之四:SPI数据传输的队列化
我们知道,SPI数据传输可以有两种方式:同步方式和异步方式.所谓同步方式是指数据传输的发起者必须等待本次传输的结束,期间不能做其它事情,用代码来解释就是,调用传输的函数后,直到数据传输完成,函数才会返 ...
- Linux驱动 - SPI驱动 之四 SPI数据传输的队列化
我们知道,SPI数据传输可以有两种方式:同步方式和异步方式.所谓同步方式是指数据传输的发起者必须等待本次传输的结束,期间不能做其它事情,用代码来解释就是,调用传输的函数后,直到数据传输完成,函数才会返 ...
- 2019-5-29-Roslyn-让-VisualStudio-急速调试底层库方法
title author date CreateTime categories Roslyn 让 VisualStudio 急速调试底层库方法 lindexi 2019-5-29 20:2:9 +08 ...
- EF 底层封装方法(供参考)
闲暇之余,整理了一下EF底层的一些基础方法,供查看,只有接口,具体实现需要你们自己写了. 建议:接口的实现定义为虚方法,当父类的方法不满住子类需求时,可以重写此方法 此接口都为公用方法,基本上满足小系 ...
- jQuery晦涩的底层工具方法们
这里整理的是jQuery源码中一些比较晦涩难懂的.内部的.最底层的工具方法,它们多为jQuery的上层api方法服务,目前包括: jQuery.access jQuery.access: functi ...
随机推荐
- Chrome渲染Transition时页面闪动Bug
前段时间,有同事和会员反馈使用Chrome访问淘宝首页会出现画面闪动的现象,但是我在Mac和Win下面的Chrome都无法重现这个问题,后来重装了一遍Win7下的Chrome Beta版本,终于重现了 ...
- Mysql 数据库单机多实例部署手记
最近的研发机器需要部署多个环境,包括数据库.为了管理方便考虑将mysql数据库进行隔离,即采用单机多实例部署的方式.找了会资料发现用的人也不是太多,一般的生产环境为了充分发挥机器性能都是单机单 ...
- CSS之圣杯布局与双飞翼布局
圣杯布局 三行等高 HTML: <!DOCTYPE html><html><head> <meta charset="utf-8"& ...
- win7下IIS错误:"无法访问请求的页面,因为该页的相关配置数据无效"的解决方法(转)
今天新装win7,然后在IIS下布署了一个网站,布署完成后运行,提示如下错误:HTTP 错误 500.19 - Internal Server Error无法访问请求的页面,因为该页的相关配置数据无效 ...
- SSIS 基础知识
微软 BI 系列随笔 - SSIS 2012 基础 - SSIS 基础知识 SSIS 介绍 SSIS - SQL Server Integration Services 是用于实现企业级数据集成和数据 ...
- ROC曲线
1.混淆矩阵(confusion matrix) 针对预测值和真实值之间的关系,我们可以将样本分为四个部分,分别是: 真正例(True Positive,TP):预测值和真实值都为1 ...
- Python入门1
简介 Python的创始人为Guido van Rossum.1989年圣诞节期间,在阿姆斯特丹,Guido为了打发圣诞节的无趣,决心开发一个新的脚本解释程序,做为ABC 语言的一种继承.Python ...
- smarty中如何统计数组的个数?
在做web前端中,很多人会遇到在smarty中如何统计数组的个数,其实很简单 比如数组$array 你只需要用{$array|@count}就可以获取.
- [Tex学习笔记]一个数学公式
\begin{equation*} \begin{aligned} &\quad\int |\nabla(T_1-\overline{T})^+|^2 \rm dx-\int \frac{3m ...
- maven-bundle-plugin 2.4.0以下版本导出META-INF中的内容到MANIFEST.MF中
今天终于把maven-bundle-plugin不能导出META-INF中的内容到Export-Package中的问题解决了,因为用到的第三方JAR包需要加载META-INF/XX/XX.xml这个内 ...