极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 9431|回复: 2

ARM和MANGO的SPI通信数据错误以及丢失问题

[复制链接]
发表于 2015-3-29 11:07:47 | 显示全部楼层 |阅读模式
问题有两种:
1 ARM这边我一次性发送一串字符串过去的话,MANGO收到的数据有时是正确的,有时是错误的,比如,ARM发送‘abcdefg',
MANGO有时收到'abcdefg',有时会收到奇奇怪怪的值

2 ARM 一次只发一个字节,如果有多个字节,就分多次发送,比如:'abc'的话,就分三次发送,依次是'a','b','c',但是MANGO这边收到的数据很奇怪,大部分可以正常收到'abc‘,有时会只收到’a'和'c',‘b'不见了。

这两个问题是什么情况?干扰了?还是设置 不对?

ARM的代码太多就不上了,上ARDUINO的代码:




  1. #include <SPI.h>

  2. char buf [64];
  3. volatile byte pos;
  4. volatile boolean process_it;

  5. int PIN_NUM = 7;

  6. void setup (void)
  7. {

  8.     pinMode(PIN_NUM, OUTPUT);     

  9.   Serial.begin (9600);   // debugging
  10.   
  11.   // turn on SPI in slave mode
  12.   SPCR |= _BV(SPE);
  13.   
  14.   // get ready for an interrupt
  15.   pos = 0;   // buffer empty
  16.   process_it = false;

  17.   // now turn on interrupts
  18.   SPI.attachInterrupt();

  19. }  // end of setup


  20. void light_on() {
  21.       Serial.println ("going to light on");
  22.   digitalWrite(PIN_NUM, HIGH);   // 使Led亮
  23.   delay(1000);              // 持续1秒钟
  24.   digitalWrite(PIN_NUM, LOW);    // 使Led灭
  25.   delay(2000);              // 持续1秒钟。
  26. }

  27. // SPI interrupt routine
  28. ISR (SPI_STC_vect)
  29. {
  30. char c = SPDR;  // grab byte from SPI Data Register
  31. Serial.println(c);
  32.   
  33.   // add to buffer if room
  34. //  if (pos < sizeof buf)
  35. //    {
  36. //    buf [pos++] = c;
  37. //    if('a' == c)
  38. //    {
  39. //      light_on();
  40. //    }
  41.    
  42.     // example: newline means time to process buffer

  43. // if(7 == pos)
  44. //      process_it = true;
  45. //    }
  46.       

  47. }  // end of interrupt routine SPI_STC_vect

  48. // main loop - wait for flag set in interrupt routine
  49. void loop (void)
  50. {
  51.   

  52.   if (process_it)
  53.     {
  54.     buf [pos] = 0;  
  55.     Serial.println (buf);
  56.     pos = 0;
  57.     process_it = false;
  58.     }  // end of flag set
  59.    
  60. }  // end of loop
复制代码
回复

使用道具 举报

发表于 2015-3-29 14:34:48 | 显示全部楼层
尝试不要用delay
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-3-29 14:43:47 | 显示全部楼层
其实我的那个点亮LED的还没有调用呢,现在收到的数据只是简单通过串口输出而已
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 需要先绑定手机号

Archiver|联系我们|极客工坊

GMT+8, 2024-4-25 09:51 , Processed in 0.043837 second(s), 18 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表