Witam,
do działającego projektu chce dodać obsługę pamięci data flash przez SPI. Znalazłem gotową bibliotekę Atmela. Używam jej tak jak w przykładzie:
Jak widać SPI używa przerwań. Wykonanie programu niestety zawiesza się na undef_handler. Co może być tego przyczyną? Zauważyłem, że we FreeRTOS obudowują przerwanie tak:
ale gdy tak zrobie to przerwanie nie jest nigdy wykonywane.
Zaczynam dopiero przygodę z ARM i byłbym bardzo wdzięczny za pomoc.
do działającego projektu chce dodać obsługę pamięci data flash przez SPI. Znalazłem gotową bibliotekę Atmela. Używam jej tak jak w przykładzie:
PIO_Configure(pins, PIO_LISTSIZE(pins));
// AIC_ConfigureIT(BOARD_AT45_A_SPI_ID, 0, vSPI_ISR_Wrapper);
AIC_ConfigureIT(BOARD_AT45_A_SPI_ID, 0, ISR_Spi);
SPID_Configure(&spid, BOARD_AT45_A_SPI_BASE, BOARD_AT45_A_SPI_ID);
SPID_ConfigureCS(&spid, BOARD_AT45_A_NPCS, AT45_CSR(BOARD_MCK, SPCK));
AT45_Configure(&at45, &spid, BOARD_AT45_A_NPCS);
AIC_EnableIT(BOARD_AT45_A_SPI_ID);
addDebug("Detecting flash...");
pDesc = 0;
while (!pDesc) {
pDesc = AT45_FindDevice(&at45, AT45_GetStatus(&at45));
}
addDebug("Flash found!");
Jak widać SPI używa przerwań. Wykonanie programu niestety zawiesza się na undef_handler. Co może być tego przyczyną? Zauważyłem, że we FreeRTOS obudowują przerwanie tak:
void vSPI_ISR_Wrapper(void)
{
portSAVE_CONTEXT();
SPID_Handler(&spid);
portRESTORE_CONTEXT();
}
ale gdy tak zrobie to przerwanie nie jest nigdy wykonywane.
Zaczynam dopiero przygodę z ARM i byłbym bardzo wdzięczny za pomoc.