Yahoo Groups archive

Lpc2000

Index last updated: 2026-04-28 23:31 UTC

Message

Re: SPI Interrupt problem

2005-03-15 by mobilsiten

Sorry, I forgot to include the write_byte function.

unsigned write_byte (unsigned Data)
{
	 S0SPDR = Data;
	 while(S0SPSR == 0)
	 {
	 ;
	 }	 	
	return S0SPSR;
}

--- In lpc2000@yahoogroups.com, "mobilsiten" <petertholander@h...> wrote:
> 
> Hi,
> 
> I´m trying to setup an interrupt for SPI, but without success.
> 
> This is my code:
> 
> void SPI_IRQ (void) __attribute__ ((interrupt("IRQ")));
> 
> int main (void) 
> {
>   unsigned n,i,reply;
> 	IODIR1 	= 0x00FF0000;           /* P1.16..23 defined as Outputs  */
> 
> 	// setup SCK pin P04
> 	PINSEL0 &= ~(3<<8);
> 	PINSEL0 |= 1<<8;
> 	// setup MISO pin P05
> 	PINSEL0 &= ~(3<<10);
> 	PINSEL0 |= 1<<10;
> 	// setup MOSI pin P06
> 	PINSEL0 &= ~(3<<12);
> 	PINSEL0 |= 1<<12;
> 	// setup SSEL pin P07
> 	PINSEL0 &= ~(3<<14);
> 	PINSEL0 |= 1<<14;
> 
> 	VPBDIV 	= 0x02;					//Set the Clock VBP clock to 30 Mhz
>  
> 	VICVectAddr0 = (unsigned long)SPI_IRQ;
> 	VICVectCntl0 = 0x20 | VIC_SPI0; // SPI Interrupt 
> 	VICIntEnable = 1 << VIC_SPI0;   // Enable SPI Interrupt 
> 	
> 	
> 	S0SPCCR 	= 0x00000064;			//Set SPI bit rate at 300Khz
> 	S0SPCR  	= 0x000000A0;			//set control register Master Mode and
> Interrupt enable
> 	
>   	result = write_byte(0x06);
> 
>   while (1)/* Loop forever */ 
>   {	
>   ;		
>   }
> }
> 
> void SPI_IRQ(void)
> {
> 	IOSET1 		= 0x000F0000;           // Turn on LEDs
> 	S0SPINT		= 1;
> 	VICVectAddr	= 0x00000000;	
> }
> 
> If I just dissable the interrupt I can se that the byte is sent.
> But if I enable the interrupt nothing happens when I try to send
> something. The application just halt. No interrupt is generated...
> 
> Can someone please help me?
> 
> Thanks 
> 
> Peter

Attachments

Move to quarantaine

This moves the raw source file on disk only. The archive index is not changed automatically, so you still need to run a manual refresh afterward.