
UM10800
All information provided in this document is subject to legal disclaimers.
© NXP Semiconductors N.V. 2016. All rights reserved.
User manual
Rev. 1.2 — 5 October 2016
410 of 487
NXP Semiconductors
UM10800
Chapter 28: LPC82x SPI API ROM driver routines
#define RAMBLOCK_H 60
uint32_t start_of_ram_block0[ RAMBLOCK_H ] ;
#define BUFFER_SIZE 100
uint32_t spi_buffer[BUFFER_SIZE];
3. Define configuration structure and initialize pointer to the API:
SPI_CONFIG_T spi_set;
pSpiApi = (SPID_API_T *) (rom_drivers_ptr->pSPID);
4. Initialize SPI:
size_in_bytes = pSpiApi->spi_get_mem_size() ; //size_in_bytes/4 must be
// < RAMBLOCK_H
spi_handle = pSpiApi->spi_setup(LPC_SPI0_BASE, (uint8_ *)start_of_ram_block0);
5. Set up the SPI0 in master mode by defining the SPI_CONFIG_T structure:
spi_set.delay =
DLY_PREDELAY(0x0)|DLY_POSTDELAY(0x0)|DLY_FRAMEDELAY(0x0)|DLY_INTERDELAY(0x0);
spi_set.divider = 0xFFFF; // divide system clock by 0xFFFF for SCK
spi_set.config = CFG_MASTER; //master mode
spi_set.error_en = STAT_RXOVERRUN | STAT_TXUNDERRUN;
6. Initialize SPI transfer:
pSpiApi->spi_init(spi_handle, &spi_set);
7. Enable the SPI interrupt in the NVIC.
8. Set up the SPI parameter structure SPI_PARAM_T:
param.driver_mode = 0x01; //interrupt mode.
param.tx_rx_flag = 0x02; // TX AND RX
param.fsize_sel = TXDATCTL_SSELN(SLAVE0) | TXDATCTL_FSIZE(MASTER_FRAME_SIZE);
param.tx_buffer = (uint16_t *)tx_buffer;
param.rx_buffer = (uint16_t *)rx_buffer;
param.eof_flag = 0; // no framedelay used
param.size = 10; //10 transfers of TXDATCTL_FSIZE size data.
// If receive callback is invoked, transmit follows automatically. Only one
// callback is needed.
param.callback_func_pt = receive_callback;
9. Define the receive callback function invoked when the transmit has finished:
void receive_callback(uint32_t err_code, uint32_t n ) {
error_code = (ErrorCode_t)err_code;
if (err_code != LPC_OK)
while(1);
receive_tag = 1;
}
10. Master transmits data. Slave sends some data back.
receive_tag = 0;
pSpiApi->spi_master_transfer(spi_handle, ¶m);
while(!receivetag); //wait until receivetag is set