hallo
Ik probeer SPI aan de gang te krijgen op een Pic32MX220f023b aan de hand van een code example van microchip. Maar hij wil niet werken.
De spi klok werkt wel, en hij probeert wel wat op de datalijn, maar het lijkt nergens op. Die krijg ik te zien op de usb logic analyzer (samplerate 200MHz):
ik ben uitgegaan van de spi code example op deze pagina. Die is gemaakt voor op de -d variant van mijn controller.
Na wat snoeien heb ik de code teruggebracht tot dit:
c code:
#include <plib.h>
#include <p32xxxx.h>
#include <proc/p32mx220f032b.h>
#include <peripheral/pps.h>
#include <peripheral/ports.h>
#include <p32xxxx.h>
#include <peripheral/spi.h>
#if defined (__32MX220F032D__) || defined (__32MX220F032B__) || (__32MX250F128D__)
// Configuration Bit settings
// SYSCLK = 48 MHz (8MHz Crystal / FPLLIDIV * FPLLMUL / FPLLODIV)
// PBCLK = 48 MHz (SYSCLK / FPBDIV)
// Primary Osc w/PLL (XT+,HS+,EC+PLL)
// WDT OFF
// Other options are don't care
#pragma config FPLLMUL = MUL_24, FPLLIDIV = DIV_2, FPLLODIV = DIV_2, FWDTEN = OFF
#pragma config POSCMOD = HS, FNOSC = PRIPLL, FPBDIV = DIV_1
#define SYS_FREQ (48000000L)
#endif
int main(void)
{
int n;
PPSInput(2,SDI1, RPA1); //Assign SDI1 to pin RA1
PPSOutput(3,RPA2,SDO1); // Set RA2 pin as output for SDO1
SpiChannel spiChn=SPI_CHANNEL1;
SYSTEMConfig(SYS_FREQ, SYS_CFG_WAIT_STATES | SYS_CFG_PCACHE);
SpiOpenFlags oFlags=SPI_OPEN_MODE8|SPI_OPEN_SMP_END;
oFlags|=SPI_OPEN_MSTEN; // Set as Master mode in this example
SpiChnOpen(spiChn, oFlags, 4);
while(1)
{
SpiChnPutC(spiChn, 0xAA);
for(n=0; n<100; n++)
{
n++;
n--;
}
}
return 1;
}
Het enige dat dit zou moeten doen is de SPI bus openen in master mode en aan een stuk door 0xAA gaan sturen met wat delay ertussen.
Waar gaat dit fout?
alvast bedankt
timberleek
edit:
De pic is een DIP28 versie op een breadboard met alle VCC en GND lijnen aangesloten, een 100nF cap tussen VCap en gnd en een 100nF cap tussen de vcc en ground. De MCLR heeft een 10k pullup
[Bericht gewijzigd door Henry S. op woensdag 4 maart 2015 19:32:01 (0%)