I have problem with SPI slave...and i think it is GCC interrupt problem
because it works in Keil. :(
SPI ISR fires only once (on first SSEL0 toggle to low) and then
stops...main loop is running ok.
Is something wrong with interrupts or ISR routine?
this is my SPI init...
unsigned long spi0Init(void)
{
S0SPCR = 0x00;
PINSEL0 &= 0xFFFF00FF;
PINSEL0 |= 0x00005500;
S0SPCR = SPI0_SPIE;
VICIntSelect &= ~VIC_BIT(VIC_SPI0); // UART0 selected as IRQ
VICIntEnable = VIC_BIT(VIC_SPI0); // UART0 interrupt enabled
VICVectCntl8 = VIC_ENABLE | VIC_SPI0;
VICVectAddr8 = (uint32_t)spi0ISR; // address of the ISR
return (S0SPSR & 0x08);
}
..and ISR
void _attribute_ ((interrupt("IRQ"))) spi0ISR(void);
void spi0ISR(void)
{
DWORD regValue;
static unsigned char cnt=0;
S0SPINT = 0x0000001; /* clear interrupt flag */
ISR_ENTRY();
regValue = S0SPSR;
spi_tmpcnt++;
spi_in[cnt] = S0SPDR;
S0SPDR = spi_out[cnt];
if (++cnt>SPI_BUFFER-1) cnt=0;
ISR_EXIT(); // recover registers and return
VICVectAddr = 0x00000000; // clear this interrupt from the
VIC
}
Please log in before posting. Registration is free and takes only a minute.
Existing account
Do you have a Google/GoogleMail account? No registration required!
Log in with Google account
Log in with Google account
No account? Register here.