我正在开发一个 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
}