Thank you for your reply.
The SPI clock modes seem to work as expected. My posted pictures of the signals are correct.
Misleading was, that in clock mode 0 the clock stays high before the next byte starts. This happens due to "data stalls". The clock goes only low, if the next byte is ready to be transmitted.
I coded a minimal example without the use of the high-level callbacks for SPI data transfer.
Description of the SPI module of this microcontroller:
If the SSEL Assert is enabled, the SSEL is pulled active (low) if a data byte is written out on SPI. Additional bytes can be written the same way.
- If you know the when the last byte is sent, you can set the "end of transfer" bit (EOT in the TXCTL register). Then the SSEL is deactivated (high) after the transmission of the last byte.
-If you don't know when the last byte is sent, you can later force the SSEL to be pulled low by setting the "END TRANSFER" bit (END TRANSFER in STAT register).
If you force the "END TRANSFER" you have to wait until the SSEL is deassert (watch on "slave select deassert" bit in STAT register).
Result of the example:

The example project (LPCXpresso) is attached at the end of this post.
Source Code:
#include "board.h"
#define LOW 0
#define HIGH 1
#define OUTPUT 1
#define INPUT 0
#define LPC_SPIMASTERPORT LPC_SPI1
#define LPCMASTERCLOCKRATE 10000
static void Init_SPI_PinMux(void)
{
#if defined(BOARD_NXP_LPCXPRESSO_54102)
Chip_IOCON_PinMuxSet(LPC_IOCON, 1, 6, (IOCON_FUNC2 | IOCON_MODE_PULLUP | IOCON_DIGITAL_EN));
Chip_IOCON_PinMuxSet(LPC_IOCON, 1, 7, (IOCON_FUNC2 | IOCON_MODE_PULLUP | IOCON_DIGITAL_EN));
Chip_IOCON_PinMuxSet(LPC_IOCON, 1, 14, (IOCON_FUNC4 | IOCON_MODE_PULLUP | IOCON_DIGITAL_EN));
Chip_IOCON_PinMuxSet(LPC_IOCON, 1, 15, (IOCON_FUNC4 | IOCON_MODE_PULLUP | IOCON_DIGITAL_EN));
#else
#warning "Board pin muxing not available!"
#endif
}
static void setupSPIMaster(void)
{
SPI_CFGSETUP_T spiSetup;
Chip_SPI_Init(LPC_SPIMASTERPORT);
Chip_SPI_Enable(LPC_SPIMASTERPORT);
spiSetup.master = 1;
spiSetup.lsbFirst = 0;
spiSetup.mode = SPI_CLOCK_MODE0;
Chip_SPI_ConfigureSPI(LPC_SPIMASTERPORT, &spiSetup);
Chip_SPI_SetCSPolLow(LPC_SPIMASTERPORT, 0);
Chip_SPIM_SetClockRate(LPC_SPIMASTERPORT, LPCMASTERCLOCKRATE);
Chip_SPI_SetXferSize(LPC_SPIMASTERPORT, 8);
Chip_SPIM_AssertSSEL(LPC_SPIMASTERPORT, 0);
}
uint8_t SPI_write(uint8_t spi_tx){
while(!(Chip_SPI_GetStatus(LPC_SPI1) & (SPI_STAT_TXRDY) ) );
Chip_SPI_WriteTXData(LPC_SPI1, spi_tx);
while(!(Chip_SPI_GetStatus(LPC_SPI1) & (SPI_STAT_RXRDY) ) );
return Chip_SPI_ReadRXData(LPC_SPI1);
}
int main(void)
{
uint32_t Cnt;
int loop = 1;
SystemCoreClockUpdate();
Board_Init();
Init_SPI_PinMux();
setupSPIMaster();
SPI_write(0x02);
SPI_write(0x03);
SPI_write(0x04);
Chip_SPIM_ForceEndOfTransfer(LPC_SPIMASTERPORT);
while((Chip_SPI_GetStatus(LPC_SPIMASTERPORT) & SPI_STAT_SSD) == 0);
Chip_SPI_ClearStatus(LPC_SPIMASTERPORT, SPI_STAT_SSD | SPI_STAT_SSA);
SPI_write(0x05);
SPI_write(0x06);
SPI_write(0x07);
Chip_SPIM_ForceEndOfTransfer(LPC_SPIMASTERPORT);
while((Chip_SPI_GetStatus(LPC_SPIMASTERPORT) & SPI_STAT_SSD) == 0);
Chip_SPI_ClearStatus(LPC_SPIMASTERPORT, SPI_STAT_SSD | SPI_STAT_SSA);
SPI_write(0x08);
SPI_write(0x09);
Chip_SPIM_ForceEndOfTransfer(LPC_SPIMASTERPORT);
while((Chip_SPI_GetStatus(LPC_SPIMASTERPORT) & SPI_STAT_SSD) == 0);
Chip_SPI_ClearStatus(LPC_SPIMASTERPORT, SPI_STAT_SSD | SPI_STAT_SSA);
while (loop) {
Board_LED_Toggle(0);
for (Cnt = 0; Cnt < (BOARD_MAINCLOCKRATE / 50); Cnt++) __NOP();
SPI_write(0x0A);
SPI_write(0x0B);
Chip_SPIM_ForceEndOfTransfer(LPC_SPIMASTERPORT);
while((Chip_SPI_GetStatus(LPC_SPIMASTERPORT) & SPI_STAT_SSD) == 0);
Chip_SPI_ClearStatus(LPC_SPIMASTERPORT, SPI_STAT_SSD | SPI_STAT_SSA);
}
return 0;
}