SPI PIC PPS映射

时间:2019-04-19 06:08:15

标签: pic spi

您好,我需要使用SPI与Dual DAC通信。 DAC:DAC

我使用PIC 18F26K83。我只会将数据传输到DAC,我什么也不会接收。这就是我在PIC和DAC之间建立连接的方式(请参见下图)。所以我的问题与PPS映射和引脚配置有关:RC7连接到DAC的DIN引脚,RC6连接到

我还需要将引脚映射为输入吗?这就是我进行PPS映射的方式,但是我不确定:

我使用RxyPPS寄存器(第267页)以便通过使用表17-2(第268页)将我的引脚设置为输出源

RC7PPS= 0b00011111 ; //DIN, RC7 = SDIPPS
RC6PPS= 0b00100000; //CS, RC6= SSPPS
RC5PPS= 0b00011110; //SCLK, RC5=SCKPPS

所以我相信这足以将它们设置为输出。我还需要将它们设置为输入吗?

我知道这没有意义,但是我对使用RxxxPPS寄存器感到困惑。

1 个答案:

答案 0 :(得分:1)

如果您正在将数据传输到DAC,我会假定PIC应该设置为SPI主模式-即SS引脚将在PIC上不被使用-因此,不应为RC6设置PPS,因为DAC的CS引脚,应设置为简单的GPIO输出

LATCbits.LATC6 = 1; // initialise high
TRISCbits.TRISC6 = 0;  // output

您还应该添加PPS锁定/解锁序列,并且即使它是一种单向通信,也可能需要将SCLK设置为输入。

// disable interrupts (if req)
INTCON0bits.GIE = 0;
// PPS unlock sequence
PPSLOCK = 0x55;
PPSLOCK = 0xAA;
PPSLOCKbits.PPSLOCKED = 0; // PPS is not locked

RC7PPS = 0b00011111; // SDO (DAC DIN) RC7
RC5PPS = 0b00011110; //SCLK OUTPUT RC5=SCKPPS
SPI1SCKPPS = 0b00010101; // SCLK INPUT RC5

// PPS lock sequence
PPSLOCK = 0x55;
PPSLOCK = 0xAA;
PPSLOCKbits.PPSLOCKED = 1; // PPS is locked
// enable interrupts (if req)
INTCON0bits.GIE = 1;

放在一边-确保将SPI设置为主模式和“仅传输”模式。

SPI1CON0bits.MST = 1; // bus master
SPI1CON2bits.RXR = 0; // transmit only
SPI1CON2bits.TXR = 1; // transmit only
相关问题