2015-07-05 11 views
1
  • Я просто хочу протестировать spi-связь между arduino uno и dspic33ep512mc502, я использую последовательный порт для получения данных от микроконтроллера; -arduino уно является мастером -dspic33ep512mc502 является рабом

вот мой код для Arduino Uno:как сделать spi соединение между arduino uno и dspic33ep512mc502?

#include<SPI.h> 

byte y=1; 
void setup() { 

Serial.begin(9600); 
SPI.begin(); 
SPI.setDataMode(SPI_MODE1);  
digitalWrite(SS,HIGH); 
// SPI.setBitOrder(LSBFIRST); 
SPI.setBitOrder(MSBFIRST); 
} 

int trnasfer_spi(int d) 
{ 
digitalWrite(SS,LOW); 
byte r=SPI.transfer(7); 
digitalWrite(SS,HIGH); 
return r; 
} 

void loop() { 

if (Serial.available() > 0) { 
    // read the incoming byte: 
     int incomingByte = Serial.read(); 
     y=trnasfer_spi(incomingByte); 
     }  

Serial.print(y, DEC); 
delay(1000); 


} 

здесь dspic33ep512mc502 код (только для Spic коммуникации):

инициализации:

ANSELBbits.ANSB0 = 0; 
TRISBbits.TRISB0 = 1; 
TRISBbits.TRISB7 = 1; 
TRISBbits.TRISB8 = 0; 
TRISBbits.TRISB9 = 1; 
SPI1CON1bits.DISSCK = 0; 
SPI1CON1bits.DISSDO = 0; 
SPI1CON1bits.MODE16 = 0; 
SPI1CON1bits.SMP = 0;  
SPI1CON1bits.CKP = 0;  
SPI1CON1bits.CKE = 1;  
SPI1CON1bits.MSTEN = 0; 
SPI1CON1bits.SSEN = 1; 

//Setari registru SPI1STAT 
SPI1STATbits.SPIROV = 0; 
SPI1STATbits.SPIEN = 1; 

IFS0bits.SPI1IF = 0; 
IEC0bits.SPI1IE = 1; 
IPC2bits.SPI1IP = 6; 
SPI1BUF =3; 

SPI1Interrupt:

void __attribute__((__interrupt__)) _SPI1Interrupt(void) 
{ 

    IFS0bits.SPI1IF = 0;   
    SPI1STATbits.SPIROV = 0;  
    SPI1BUF=3; 


    }; 

я ожидал увидеть значение 3 на мониторе последовательного, но я видеть только значение 7 или 255.

+0

Я понятия не имею, но не нужно ли настраивать вывод SS в качестве вывода с помощью pinMode()? – Palo

+0

библиотека spi уже настроила все необходимые контакты (включая SS) –

+0

https://www.arduino.cc/ru/Reference/SPI –

ответ

0

SPI считывает и записывает в то же время, так что запись в регистр должен следовать чтения , в противном случае следующее чтение не будет работать.

Так что попробуйте прочитать spi1buf после его написания.