SPI PIC PPS 映射
SPI PIC PPS mapping
您好,我需要使用 SPI 与双 DAC 进行通信。解码器:DAC
我用的是PIC 18F26K83。我只会将数据传输到 DAC,我不会收到任何东西。这就是我在 PIC 和 DAC 之间建立连接的方式(见附图)。所以我的问题与 PPS 映射和引脚配置有关:RC7 连接到 DAC 的 DIN 引脚,RC6 连接到
我是否也需要将引脚映射为输入?这就是我做 PPS 映射的方式,但我不太确定:
我使用 RxyPPS 寄存器(页:267)通过使用 table17-2(页:268)
将我的引脚设置为输出源
RC7PPS= 0b00011111 ; //DIN, RC7 = SDIPPS
RC6PPS= 0b00100000; //CS, RC6= SSPPS
RC5PPS= 0b00011110; //SCLK, RC5=SCKPPS
所以我相信这足以将它们设置为输出。我还需要将它们设置为输入吗?
我知道这没有意义,但我对使用 RxxxPPS 寄存器感到困惑。
如果您要将数据传输到 DAC,我会假设 PIC 应设置为 SPI 主模式 - 即 PIC 上未使用 SS 引脚 - 因此您不应该为 RC6 设置 PPS,因为它是DAC的CS脚,应该设置成简单的GPIO输出
LATCbits.LATC6 = 1; // initialise high
TRISCbits.TRISC6 = 0; // output
您还应该添加 PPS locking/unlocking 序列,并且可能需要将 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 设置为主模式和 "Transmit only" 模式。
SPI1CON0bits.MST = 1; // bus master
SPI1CON2bits.RXR = 0; // transmit only
SPI1CON2bits.TXR = 1; // transmit only
您好,我需要使用 SPI 与双 DAC 进行通信。解码器:DAC
我用的是PIC 18F26K83。我只会将数据传输到 DAC,我不会收到任何东西。这就是我在 PIC 和 DAC 之间建立连接的方式(见附图)。所以我的问题与 PPS 映射和引脚配置有关:RC7 连接到 DAC 的 DIN 引脚,RC6 连接到
我是否也需要将引脚映射为输入?这就是我做 PPS 映射的方式,但我不太确定:
我使用 RxyPPS 寄存器(页:267)通过使用 table17-2(页:268)
将我的引脚设置为输出源RC7PPS= 0b00011111 ; //DIN, RC7 = SDIPPS
RC6PPS= 0b00100000; //CS, RC6= SSPPS
RC5PPS= 0b00011110; //SCLK, RC5=SCKPPS
所以我相信这足以将它们设置为输出。我还需要将它们设置为输入吗?
我知道这没有意义,但我对使用 RxxxPPS 寄存器感到困惑。
如果您要将数据传输到 DAC,我会假设 PIC 应设置为 SPI 主模式 - 即 PIC 上未使用 SS 引脚 - 因此您不应该为 RC6 设置 PPS,因为它是DAC的CS脚,应该设置成简单的GPIO输出
LATCbits.LATC6 = 1; // initialise high
TRISCbits.TRISC6 = 0; // output
您还应该添加 PPS locking/unlocking 序列,并且可能需要将 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 设置为主模式和 "Transmit only" 模式。
SPI1CON0bits.MST = 1; // bus master
SPI1CON2bits.RXR = 0; // transmit only
SPI1CON2bits.TXR = 1; // transmit only