Jag har lite problem med SPI porten på min dspic30F6012A.
Det jag vill göra är att skriva till SPI porten och samtidigt ge en read/write signal och en chip-select signal för varje byte som skickas.
Problemet som uppstår är att jag inte vet hur jag ska ta reda på när min byte är färdigskickad.
Microchip har skrivit rutiner för att skriva till SPI porten, men dessa använder sig av en bit som säger till när bufferten är redo att ta emot nästa byte, vilket jag inte är så intresserad av.
Enligt microchips referens-datablad:
http://ww1.microchip.com/downloads/en/ ... 0067c.pdf på sidan 8 står det bla:
When the transfer is complete, the following events will occur:
The interrupt flag bit, SPIxIF, is set. SPI interrupts can be enabled by setting the
interrupt enable bit SPIxIE. The SPIxIF flag is not cleared automatically by the hardware.
jag har testat att skriva funktioner för att titta på just interrupt flaggan, men koden verkar hänga sig där.
Kod: Markera allt
int main(void)
{
timer2_init();
init_io();
spi2_init(SPI_PRI_PRESC_16_1 | SPI_SEC_PRESC_2_1);
while(1)
{
oDISP_RS = !oDISP_RS; // toggle pins
spi2_write(0x81); // write to spi
timer2_delay_ms(2); //wait 2ms
}
return 1;
}
void spi2_init(uint16 u16Baud)
{
IEC1bits.SPI2IE = 0; // turn off interrupt
SPI2CON = 0x0060 | u16Baud;
SPI2STAT = 0x8000; // turn on SPI2 module
}
void spi2_write(uint8 u8Data)
{
IFS1bits.SPI2IF=0; // clear flag from previous write
SPI2BUF = u8Data; // write to spi buff
while(IFS1bits.SPI2IF==0)
{
// wait for transfer to complete
}
return;
}
Denna koden fungerar inte, koden hänger sig i while-satsen i "spi2_write" funktionen så ingen data klockas ut.
Men om denna lilla while-sats kommenteras bort, så ser jag snygga pulståg på klock och data-pinnen. Däremot vet jag inte när datan är färdigskickad..
Jag har ifs inte testat att enabla interruptet (Eftersom jag inte vill använda det), men ska det ha någon betydelse egentligen? Den ska väl sättas iaf??
några förslag på vad som kan vara problemet?? (mer än att jag e lite trött för tillfället??

// Daniel