Есть два МК PIC24HJ128GP204. Пытаюсь заставить их общаться по SPI
Код ведущего :
Код: Выделить всё
#include <p24hj128gp204.h>
#include <spi.h>
void main() {
unsigned int X = 3;
Init_conf();
PORTB = 0;
PORTCbits.RC4 = 0;
WriteSPI1 (0x0005);
PORTCbits.RC4 = 1;
X = ReadSPI1();
PORTB = X;
while (1);
}
void Init_conf () {
unsigned int SPICON1Value;
unsigned int SPICON2Value;
unsigned int SPISTATValue;
//PORTB
AD1PCFGL = 0xffff; //Analog module off
TRISB = 0x0000;
//PORTC
TRISC = 0x0000;
PORTCbits.RC4 = 1;
RPINR20 = 0x1F11; // SDI - RC1
RPOR9 = 0x0807; // SCK - RC3 SDO - RC2
//SPI
CloseSPI1(); // SPI off, for setting
SPICON1Value = ENABLE_SCK_PIN & ENABLE_SDO_PIN & SPI_MODE16_ON &
SPI_SMP_ON & SPI_CKE_OFF & SLAVE_ENABLE_OFF &
CLK_POL_ACTIVE_HIGH & MASTER_ENABLE_ON &
SEC_PRESCAL_1_1 & PRI_PRESCAL_1_1;
SPICON2Value = FRAME_ENABLE_OFF & FRAME_SYNC_OUTPUT;
SPISTATValue = SPI_ENABLE;
OpenSPI1 (SPICON1Value, SPICON2Value, SPISTATValue);// setting end, SPI on
//Oscillator
}Код ведомого:
Код: Выделить всё
#include <p24hj128gp204.h>
#include <spi.h>
void main() {
int X = 0;
Init_conf();
X = ReadSPI1();
if (X == 0x0005) {
WriteSPI1 (0xf1f1);
}
PORTB = X;
while (1);
}
void Init_conf () {
unsigned int SPICON1Value;
unsigned int SPICON2Value;
unsigned int SPISTATValue;
//PORTB
AD1PCFGL = 0xffff; //Analog module off
TRISB = 0x0000;
//PORTC
TRISC = 0x0000;
RPINR20 = 0x1311; // SCK -RC3 SDI - RC1
RPOR9 = 0x0007; // SDO - RC2
RPINR21 = 0x1F14; // SS - RC4
//SPI
CloseSPI1(); // SPI off, for setting
SPICON1Value = ENABLE_SCK_PIN & ENABLE_SDO_PIN & SPI_MODE16_ON &
SPI_SMP_ON & SPI_CKE_OFF & SLAVE_ENABLE_ON &
CLK_POL_ACTIVE_HIGH & MASTER_ENABLE_OFF &
SEC_PRESCAL_1_1 & PRI_PRESCAL_1_1;
SPICON2Value = FRAME_ENABLE_OFF & FRAME_SYNC_OUTPUT;
SPISTATValue = SPI_ENABLE;
OpenSPI1 (SPICON1Value, SPICON2Value, SPISTATValue);// setting end, SPI on
//Oscillator
}Принцип работы:
Ведущий передает 2 байта ведомому. Ведомый получает эти байты и сравнивает их, если они совпадает по условию он посылает ответ. В противном случае ответ не посылается. Полученные 2 байта записываются в порт В. Ведущий получает ответ и записывает в порт В.
Проблема заключается в том что они получая пакет при любых значениях записывают в потр 0xFFFF, если связь разорвать они также записывают в порт 0хFFFF.