私は 18f26j13 のプロジェクトに取り組んでおり、MSSP1 に I2C が必要で、MSSP2 に SPI が必要です。I2C は完全に動作しますが、SPI をポート B で動作させることはできません。それらをポート c にマップすると、完全に動作するため、ポート b で無効にしないものがあると考えています。
ピンをポート B に再マップし、ピンを ANCON でデジタル I/O として設定し、ofc で RB4 の tris ビットを設定します。
私はすべてを試したような気がしますが、明らかな何かが欠けていると感じています。誰かが助けてくれることを本当に望んでいます:)
編集:ああ、忘れていました... SCK2 / RB3でクロックを測定し、SDO2 / RB5でパルスを測定できるので、問題はRB4にあるようです...
EDIT2:まあ、私は間違っていました、問題はRB5にあります.SDO2をRB2にマップすると動作しますが、RB5に接続する必要があるため、まだ問題があります...
void peripheral_init(void)
{
//disabler alle ADC
ADCON0 = 0b00000000; //adc disabled, ref = Vss,Vdd
ANCON0 = 0b11111111; //alle adc kanaler disabled
ANCON1 = 0b00011111; //alle adc kanaler disabled
ADCON1 = 0b10111110; //
//disabling comperator
CM1CON = 0b00000000;
CM2CON = 0b00000000;
CM3CON = 0b00000000;
//mapping SPI2 to portb
PPSUnLock()
iPPSInput(IN_FN_PPS_SDI2,IN_PIN_PPS_RP7); //RB4
iPPSInput(IN_FN_PPS_SCK2IN,IN_PIN_PPS_RP6); //RB3
iPPSOutput(OUT_PIN_PPS_RP6,OUT_FN_PPS_SCK2); //RB3
iPPSOutput(OUT_PIN_PPS_RP8,OUT_FN_PPS_SDO2); //RB5
PPSLock();
//port setup
TRISA = 0b00000011;
LATA = 0b00000000;
TRISB = 0b00010010;
LATB = 0b00010000;
TRISC = 0b10010000; //bit 3+4 = i2c bit 7 = uart1 rx
LATC = 0b00000000;
}
void interupt_init(void)
{
INTCON = 0b00000000;
INTCON2 = 0b10000000; //disabling the weak pullup on portb
INTCON3 = 0b00000000;
}
void SpiInit(void)
{
nCS = 1;
SSP2STAT = 0xC0;
SSP2CON1 = 0b00110000; // Timer2 output 400KHz
}