Hallo Leute,
ich verwende auf meinen PIC24 das SPI1-Modul und brauche davon nur SDI,
SDO und SCK. Auf den Pin !SSI möchte ich das CS für mein SPI-Slave
legen. Leider habe ich das Problem, dass trotz Initialisierung als
Output des !SSI-Pins, dieser keinen Output gibt. Im Datenblatt habe ich
gelesen, dass höher priorisierte Funktionen immer Vorang haben. Sprich
mein SPI1 Modul verwendet den CS Pin eigentlich als !SSI. Ich habe in
der Konfig die Verwendung des !SSI ausgeschaltet aber erhalte dennoch
keine ordentliche Output-Funktion. Könnt ihr mir sagen, wo eventuell das
Problem liegt? Auf dem Oszi sehe ich den Output und den Clock vom SPI
einwandfrei. Mein Chip-Select fehlt mir leider.
1 | //CS
|
2 | __builtin_write_OSCCONL(OSCCON & 0xbf);
|
3 | LATCbits.LATC6 = 0;
|
4 | ODCCbits.ODCC6 = 0;
|
5 | TRISCbits.TRISC6 = 0;
|
6 | __builtin_write_OSCCONL(OSCCON | 0x40);
|
7 |
|
8 | IFS0bits.SPI1IF = 0;
|
9 | IEC0bits.SPI1IE = 0;
|
10 | SPI1CON1bits.DISSCK = 0;
|
11 | SPI1CON1bits.DISSDO = 0;
|
12 | SPI1CON1bits.MODE16 = 1;
|
13 | SPI1CON1bits.MSTEN = 1;
|
14 | SPI1CON1bits.SSEN = 0;
|
15 | SPI1CON1bits.SMP = 0;
|
16 | SPI1CON1bits.CKE = 0;
|
17 | SPI1CON1bits.CKP = 0;
|
18 | SPI1STATbits.SPIEN = 1;
|
19 | IFS0bits.SPI1IF = 0;
|
20 | IEC0bits.SPI1IE = 1;
|
21 |
|
22 | PORTCbits.RC6 = 1; //Slave Select
|
23 |
|
24 | int main(void) {
|
25 |
|
26 | PORTCbits.RC6 = 0; //Slave Select
|
27 | DELAY_105uS;
|
28 |
|
29 | WRSPI1(befehl); //SPI Transmit
|
30 |
|
31 | DELAY_105uS;
|
32 |
|
33 | PORTCbits.RC6 = 1;
|
34 | }
|
Viele Grüße und Danke!