Попробуй так (код на асме, перевести сам сможешь):

SPI_Setup:
.....
/* Настройка модуля SPI */
/* Установка выводов SCK, MISO, MOSI, SSEL */
/* Подключение выводов к блоку SPI */
ldr r0,=PINSEL_Base
ldr r1,[r0,#PINSEL0_Ofs]
orr r1,r1,#((0x01 << 14)|(0x01 << 12)|(0x01 << 10)|(0x01 << 8))
str r1,[r0,#PINSEL0_Ofs]

/* Хотя вроде-бы этот кусок смысла не имеет,
но так как писал я давно и не помню зачем он нужен, поэтому
оставляю так как есть */
ldr r0,=IO_Base
ldr r1,[r0,#IODIR_Ofs]
bic r1,r1,#((0x01 << 5)|(0x01 << 7)) /* MISO, SSEL - Input */
orr r1,r1,#((0x01 << 4)|(0x01 << 6)) /* SCK, MOSI - Output */
str r1,[r0,#IODIR_Ofs]
ldr r1,[r0,#IOSET_Ofs]
orr r1,r1,#((0x01 << 4)|(0x01 << 6)|(0x01 << 5)|(0x01 << 7))
str r1,[r0,#IOSET_Ofs]

/* Настройка регистров SPI*/
ldr r0,=SPI_Base
/* Set SPI Control Regisrer */
mov r1,#0xA0
str r1,[r0,#SPCR_Ofs]
/* Clear SPI Status Register */
ldr r1,[r0,#SPSR_Ofs]
/* Set SPI Speed = 2 MHz */
mov r1,#0x1E
str r1,[r0,#SPCCR_Ofs]

SPISetup_Exit:
.......



Установка прерываний:
/* Настройка VIC */
ldr r0,=VIC_Base
/* Выбор FIQ и IRQ прерываний */
mov r1,#(T0IS_Mask)
str r1,[r0,#VICIntSelect_Ofs]
/* Настройка векторов */
/* SPI в слот 0 */
mov r1,#0x2A
str r1,[r0,#VICVectCntl0_Ofs]
ldr r1,=SPI_Intrpt
str r1,[r0,#VICVectAddr0_Ofs]

/* Включение прерываний */
ldr r0,=VIC_Base
ldr r1,[r0,#VICIntEnable_Ofs]
orr r1,r1,#SPIS_Mask
str r1,[r0,#VICIntEnable_Ofs] /* Timer1, SPI */



Обработчик прерывания:

SPI_Intrpt:
/* Сохраняем в стеке регистры */
stmfd sp!,{r0-r3}
mrs r0,cpsr
stmfd sp!,{r0}

/* Сброс запроса на прерывание */
ldr r0,=SPI_Base
mov r1,#0x01
str r1,[r0,#SPINT_Ofs]

/* Считываем источник прерывания */
ldr r0,=SPI_Base
ldr r1,[r0,#SPSR_Ofs]
ldr r3,[r0,#SPDR_Ofs] /* r3 := принятое значение */
ands r1,r1,#(01 << 7)
beq SPInt_Exit /* Если данных нет то выход */

/* Тело обработчика */
...........

SPInt_Exit:
/* Выход */
ldmfd sp!,{r0}
msr cpsr,r0
/* Обновление регистра VICVectAddr */
ldr r0,=VIC_Base
mov r1,#0x00
str r1,[r0,#VICVectAddr_Ofs]
/* */
ldmfd sp!,{r0-r3}
subs pc,lr,#0x04


Запуск где-нибудь в прграмме SPI:
/* Запускаем SPI */
ldr r0,=SPI_Base
mov r1, Байт данных для передачи.
str r1,[r0,#SPDR_Ofs]