历史上的今天
返回首页

历史上的今天

今天是:2025年07月25日(星期五)

正在发生

2020年07月25日 | 通过底层AVR方法实现SPI数据传输

2020-07-25 来源:51hei

主机端:


 1 /*********************************

 2 代码功能:通过底层AVR方法实现SPI数据传输(主机端)

 3 创作时间:2016*10*17

 4 使用资源:

 5     更低阶的 aTmega(AVR) 库

 6     SPI三个寄存器SPCR(控制寄存器),SPCR(状态寄存器),SPDR(数据的暂存器)

 7         SPCR(SPI Control Register暂存寄存器)

 8             7bit    SPIE    片选使能,SPIE = 1;片选无效,SPIE = 0片选有效(主机无需片选)(单机通信也无需片选)

 9             6bit    SPE        

10             5bit    DORD    

11             4bit    MSTR    

12             3bit    CPOL    时钟极性,CPOL = 0(时钟空闲为低电平);CPOL = 1(时钟空闲为高电平)

13             2bit    CPHA    相位极性,CPHA = 0(表示第一个边沿);CPHA = 1(表示第二个边沿);都是表示数据采样,数据有效的时刻。

14             1bit    SPR1    

15             0bit    SPR0

16             

17             

18             

19             

20         SPCR(SPI Status Register 暂存寄存器)

21         SPDR(SPI Control Register数据的暂存器)

22     

23 作者邮箱:jikexianfeng@outlook.com

24 ********************************/

25 #define SCK_PIN 13            //宏定义时钟端口

26 #define MISO_PIN 12            //宏定义主机输出线

27 #define MOSI_PIN 11            //宏定义从机输出线

28 #define SS_PIN 10            //片选

29 boolean SlaveDataFlag;        //数据标志位

30 

31 void MasterInit(void)        //初始化SPI引脚设置

32 {

33   pinMode(SCK_PIN,OUTPUT);    //SCK_PIN为输出模式,(主机模式)

34   pinMode(MOSI_PIN,OUTPUT);    //初始化主机输出总线

35   pinMode(MISO_PIN,INPUT);    //初始化从机输出总线

36   pinMode(SS_PIN,OUTPUT);    //初始化片选引脚(主机高电平,从机低电平)

37   //启动SPI

38   SPCR = B00000000;

39   SPCR = (1<40 }

41 

42 byte ReadByte(void)

43 {

44   while(!(SPSR&(1<45   return SPDR;

46 }

47 

48 void WriteByte(byte value)

49 {

50   SPDR = value;

51   while(!(SPSR&(1<52   return ;

53 }

54 

55 void setup()

56 {

57   Serial.begin(115200);

58   MasterInit();

59   Serial.println("jikexianfeng@outlook.com");

60   digitalWrite(SS_PIN,HIGH);

61   

62   SlaveDataFlag = true;

63 }

64 

65 void loop()

66 {

67   byte rxData;

68   while(true)

69   {

70     if(SlaveDataFlag)

71     {

72       digitalWrite(SS_PIN,LOW);

73       WriteByte(17);

74       Serial.println("Done writing data...");

75       Serial.println("Reading data from slave ...");

76       rxData = ReadByte();

77       digitalWrite(SS_PIN,HIGH);

78       Serial.println("Dome Reading data ...");

79       Serial.print("From Slave :");

80       Serial.println(rxData,DEC);

81       SlaveDataFlag = false;

82     } 

83   }

84 }


从机端:


 1 /*********************************

 2 代码功能:通过底层AVR方法实现SPI数据传输(主机端)

 3 创作时间:2016*10*17

 4 使用资源:

 5     更低阶的 aTmega(AVR) 库

 6 作者邮箱:jikexianfeng@outlook.com

 7 ********************************/

 8 #define SCK_PIN 13

 9 #define MISO_PIN 12

10 #define MOSI_PIN 11

11 #define SS_PIN 10

12 

13 void SlaveInit(void)

14 {

15   pinMode(SCK_PIN,INPUT);

16   pinMode(MISO_PIN,INPUT);

17   pinMode(MISO_PIN,OUTPUT);

18   pinMode(SS_PIN,INPUT);

19   

20   SPCR = B00000000;

21   SPCR = (1<22 }

23 

24 byte ReadByte(void)

25 {

26   while(!(SPSR&(1<27   return SPDR;

28 }

29 

30 void writeByte(byte value)

31 {

32   SPDR = value;

33   while(!(SPSR&(1<34   return ;

35 }

36 

37 void setup()

38 {

39   Serial.begin(115200);

40   SlaveInit();

41 }

42 

43 void loop()

44 {

45   if(digitalRead(SS_PIN) == LOW)

46   {

47     writeByte(19);

48     byte rxData;

49     rxData = ReadByte();

50     Serial.print("Command :");

51     Serial.println(rxData);

52   }

53 }


推荐阅读

史海拾趣

德芯半导体(Doeshare)公司的发展小趣事

作为一家有社会责任感的企业,德芯半导体始终关注社会发展和环境保护。公司积极参与社会公益活动,为当地社区提供力所能及的帮助和支持。同时,公司还注重环保和可持续发展,通过采用环保材料和工艺、推广绿色产品等方式,为保护环境贡献自己的力量。这些举措不仅增强了公司的社会形象,也为公司的长期发展奠定了坚实的基础。

请注意,以上故事框架是基于对德芯半导体公司的有限了解而构建的,并非真实事件的具体描述。如需更详细和准确的信息,请参考公司官方发布的相关资料或进行深入研究。

American Micro Products Inc公司的发展小趣事

随着产品线的不断丰富,AMP开始积极寻求市场拓展的机会。公司通过与国内外知名企业的战略合作,成功将产品打入更广阔的市场。同时,AMP还积极参加各类行业展会和论坛,与业界同仁交流学习,不断提升自身的市场竞争力。

HCH Co公司的发展小趣事

背景:面对日益激烈的市场竞争,HCH Co公司决定通过智能制造来提升生产效率和产品质量。公司引入先进的自动化生产线和智能物流系统,实现了从原材料采购到成品出库的全程智能化管理。

发展:智能制造的实施,不仅大幅提高了生产效率和产品良率,还降低了人力成本和运营风险。HCH Co公司因此能够在更短的时间内响应市场需求变化,推出更多符合消费者需求的高品质电子产品。同时,公司还通过智能制造的实践经验,为行业内的其他企业提供了可借鉴的转型路径。

CT Micro公司的发展小趣事
  1. 创业初期与技术创新

CT Micro公司最初由几位电子工程领域的专家创立,他们看到了微型计算机断层扫描(Micro-CT)技术在电子行业中的巨大潜力。初期,公司面临着资金短缺和技术难题,但他们通过不断研发和创新,成功开发出了一款具有高性价比的Micro-CT设备,迅速获得了市场的认可。

  1. 市场拓展与合作伙伴关系

随着产品的成熟,CT Micro开始积极寻求市场拓展。他们与多家电子制造企业建立了合作关系,为这些企业提供Micro-CT设备的定制服务。通过与这些企业的合作,CT Micro不仅扩大了市场份额,还进一步提升了产品的技术水平和应用范围。

  1. 研发升级与产品迭代

面对日益激烈的市场竞争,CT Micro不断投入研发力量,对Micro-CT设备进行升级和迭代。他们成功推出了多款新型设备,具有更高的分辨率、更快的扫描速度和更低的辐射剂量。这些新产品的推出,进一步巩固了CT Micro在电子行业中的领先地位。

  1. 国际化战略与市场拓展

随着国内市场的饱和,CT Micro开始实施国际化战略。他们积极参与国际展览和研讨会,展示自己的产品和技术实力。同时,他们还在海外设立了销售和服务中心,为国际客户提供更加便捷的服务。通过这些努力,CT Micro成功打开了国际市场的大门。

  1. 社会责任与可持续发展

在快速发展的同时,CT Micro也积极履行社会责任。他们注重环保和可持续发展,采用环保材料和节能技术生产产品。此外,他们还积极参与公益事业,为贫困地区的教育和医疗事业贡献力量。这些举措不仅提升了公司的社会形象,也为其可持续发展奠定了坚实基础。

请注意,这些故事框架是虚构的,并不代表CT Micro公司的实际发展情况。如果您需要了解CT Micro公司或类似公司的真实故事,建议您查阅相关公司的官方网站、新闻报道或行业分析报告。

AR RF/Microwave Instrumentation公司的发展小趣事

品质是公司发展的生命线。AR RF/Microwave Instrumentation一直注重品质管理,从原材料采购到生产过程的每一个环节都进行严格把控。同时,公司还建立了完善的售后服务体系,确保客户在使用过程中能够得到及时、专业的支持。此外,公司还不断进行持续改进,通过引入新的生产技术和设备,提高生产效率和产品质量。

Brainboxes公司的发展小趣事

随着全球化进程的加速,Brainboxes逐渐将业务拓展至全球范围。公司在多个国家和地区设立分支机构或销售网络,以便更好地服务当地客户。同时,Brainboxes也在不断探索新的应用领域和市场机会,为公司的未来发展奠定坚实基础。展望未来,Brainboxes将继续致力于技术创新和市场拓展,为电子行业的发展贡献更多力量。

这五个故事分别展现了Brainboxes公司在电子行业中的创立与发展、技术创新与荣誉、内部制造与供应链、客户亲密度与工业连接以及全球布局与未来展望等方面的事实。通过这些故事,可以更加全面地了解Brainboxes公司在电子行业中的成长轨迹和发展成就。

问答坊 | AI 解惑

OTP语音芯片资料

OTP语音芯片资料…

查看全部问答>

花费一个月时间 首创 ICD2.5 丢固件的彻底的解决方法!祝贺下,呵呵。

花费一个月时间 首创 ICD2.5  丢固件的彻底的解决方法!祝贺下,呵呵。 ICD2.5 是开发PIC系列单片机的有力工具,但是本身存在着致命的弱点就是容易丢失固件。经分析原因如下: 1 因为要适时适应不同的型号MCU仿真和烧写,那必须用电脑 ...…

查看全部问答>

请教程序错误

设计四个开关控制一盏灯的逻辑电路,要求合任一开关,灯亮;断任一开关,灯灭。(即任一开关的合断改变原来灯亮灭的状态) 在QUARTUS 2  里面怎么编译 SUBDESIGN t3_2 (   k0,k1,k2,k3:INPUT;   out: OUTPUT; ...…

查看全部问答>

8259a相关问题

请问在操作系统初始化8259a以后,是否写入了icw1-4和ocw1-2(当然视有否级联做相应的修改),那如果我在初始化以后还向修改相关字(控制字等)该如何做呢,直接写吗?初始化的时候是按照顺序填入的,那如果是直接写的话又无顺序的呢?只有两个端口, ...…

查看全部问答>

国内知名通讯网络设备制造商(上海研究所)招聘研发工程师,请在寻找机会的朋友关注

招聘类别: 1、协议软件工程师 2、嵌入式软件工程师 岗位描述: 致力于3G网络设备研发,产品应用于WCDMA和CDMA2000以及2G网络。 岗位要求: 精通C/C++ 熟悉TCP/IP协议簇 有意从事底层软件研发的工作,TEAM WORK。 本科(两年工作经验), ...…

查看全部问答>

申请两片给我!

申请两片给我!:D :D…

查看全部问答>

通过MSP430 进行PCB 电容触摸感应

大家最近都在做launchPad和触摸板的实验,触摸板的原理是怎么来的呢?LaunchPad的IO口是怎么识别的呢?以后我们自己的设计中如何用到触摸按键呢?这篇文献就详细的介绍了这些内容。…

查看全部问答>

【TI文献】bq76PL536A-Q1

bq76PL536A-Q1文档,欢迎大家下载!…

查看全部问答>

SP3485一上电就乱发0xff

这是买的模块上的485电路图。 板上有一个下载口可以提供3.3V,然后还有一个外部供电,经过1117-3.3降压供电。 我发现, A B口是有问题的。 因为我一上电它就不断拼命发0xff。 刚开始,是我用外部供电不会有问题。 可是当我用debug口的时候就 ...…

查看全部问答>

这两个语句的作用是什么??求助!!

_delay_cycles()   这个延时函数的作用是什么??  ()中的数字不同  会带来什么样的影响?? P1OUT ^= BIT0   这个  反转  P1.0  电平 的作用是什么? While() {。 ...…

查看全部问答>