映射到PORT的PIC18F26J13,SPI2不起作用

时间:2013-12-17 09:10:17

标签: port pic spi pic18

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

0 个答案:

没有答案