Microchip® Advanced Software Framework

spi_pdc_example.c File Reference

Serial Peripheral Interface (SPI) PDC example for SAM.

Copyright (c) 2013-2018 Microchip Technology Inc. and its subsidiaries.

#include "asf.h"
#include "conf_board.h"
#include "conf_spi_pdc_example.h"
#include "delay.h"

Macros

#define COMM_BUFFER_SIZE   64
 
#define NUM_SPCK_CONFIGURATIONS   4
 
#define SPI_CHIP_SEL   0
 
#define SPI_CLK_PHASE   0
 
#define SPI_CLK_POLARITY   0
 
#define SPI_DLYBCT   0x10
 
#define SPI_DLYBS   0x40
 
#define STRING_EOL   "\r"
 
#define STRING_HEADER
 
#define UART_BAUDRATE   115200
 

Functions

static void configure_console (void)
 Configure the Console UART. More...
 
static void display_menu (void)
 Display the user menu on the terminal. More...
 
int main (void)
 Application entry point for SPI PDC example. More...
 
void SPI_Handler (void)
 Interrupt handler for the SPI slave. More...
 
static void spi_master_go (void)
 Start SPI transfer test. More...
 
static void spi_master_initialize (void)
 Initialize SPI as master. More...
 
static void spi_master_transfer (void *p_tbuf, uint32_t tsize, void *p_rbuf, uint32_t rsize)
 Perform SPI master transfer. More...
 
static void spi_set_clock_configuration (uint8_t configuration)
 Set the specified SPI clock configuration. More...
 
static void spi_slave_initialize (void)
 Initialize SPI as slave. More...
 
static void spi_slave_transfer (void *p_tbuf, uint32_t tsize, void *p_rbuf, uint32_t rsize)
 Set SPI slave transfer. More...
 

Variables

Pdc * g_p_spim_pdc
 
Pdc * g_p_spis_pdc
 
static uint8_t gs_uc_spi_m_rbuffer [COMM_BUFFER_SIZE]
 
static uint8_t gs_uc_spi_m_tbuffer [COMM_BUFFER_SIZE]
 
static uint8_t gs_uc_spi_s_rbuffer [COMM_BUFFER_SIZE]
 
static uint8_t gs_uc_spi_s_tbuffer [COMM_BUFFER_SIZE]
 
static const uint32_t gs_ul_clock_configurations []
 
static uint32_t gs_ul_spi_clock = 500000
 

#define COMM_BUFFER_SIZE   64
#define NUM_SPCK_CONFIGURATIONS   4

Referenced by display_menu(), and main().

#define SPI_CHIP_SEL   0
#define SPI_CLK_PHASE   0
#define SPI_CLK_POLARITY   0
#define SPI_DLYBCT   0x10

Referenced by spi_master_initialize().

#define SPI_DLYBS   0x40

Referenced by spi_master_initialize().

#define STRING_EOL   "\r"
#define STRING_HEADER
Value:
"-- Spi Pdc Example --\r\n" \
"-- "BOARD_NAME" --\r\n" \
"-- Compiled: "__DATE__" "__TIME__" --"STRING_EOL
#define BOARD_NAME
Definition: inc/app_init.h:140
#define STRING_EOL
Definition: spi_pdc_example.c:140

Referenced by main().

#define UART_BAUDRATE   115200

static void configure_console ( void  )
static
static void display_menu ( void  )
static

Display the user menu on the terminal.

References NUM_SPCK_CONFIGURATIONS.

Referenced by main().

int main ( void  )

Application entry point for SPI PDC example.

Returns
Unused (ANSI-C compatibility).

References board_init(), configure_console(), display_menu(), NUM_SPCK_CONFIGURATIONS, spi_master_go(), spi_set_clock_configuration(), spi_slave_initialize(), STRING_HEADER, and sysclk_init().

void SPI_Handler ( void  )

Interrupt handler for the SPI slave.

References COMM_BUFFER_SIZE, spi_read_status(), spi_slave_transfer(), and status.

static void spi_master_go ( void  )
static

Start SPI transfer test.

References COMM_BUFFER_SIZE, spi_master_initialize(), and spi_master_transfer().

Referenced by main().

static void spi_master_transfer ( void *  p_tbuf,
uint32_t  tsize,
void *  p_rbuf,
uint32_t  rsize 
)
static

Perform SPI master transfer.

Parameters
pbufPointer to buffer to transfer.
sizeSize of the buffer.

References NULL, pdc_disable_transfer(), pdc_enable_transfer(), pdc_rx_init(), pdc_tx_init(), spi_read_status(), pdc_packet::ul_addr, and pdc_packet::ul_size.

Referenced by spi_master_go().

static void spi_set_clock_configuration ( uint8_t  configuration)
static

Set the specified SPI clock configuration.

Parameters
configurationIndex of the configuration to set.

References SPI_CHIP_SEL, spi_set_baudrate_div(), and sysclk_get_peripheral_hz().

Referenced by main().

static void spi_slave_transfer ( void *  p_tbuf,
uint32_t  tsize,
void *  p_rbuf,
uint32_t  rsize 
)
static

Set SPI slave transfer.

Parameters
p_bufPointer to buffer to transfer.
sizeSize of the buffer.

References NULL, pdc_enable_transfer(), pdc_rx_init(), pdc_tx_init(), spi_enable_interrupt(), pdc_packet::ul_addr, and pdc_packet::ul_size.

Referenced by SPI_Handler(), and spi_slave_initialize().

Pdc* g_p_spim_pdc

Referenced by nm_bus_init().

Pdc * g_p_spis_pdc
uint8_t gs_uc_spi_m_rbuffer[COMM_BUFFER_SIZE]
static
uint8_t gs_uc_spi_m_tbuffer[COMM_BUFFER_SIZE]
static
uint8_t gs_uc_spi_s_rbuffer[COMM_BUFFER_SIZE]
static
uint8_t gs_uc_spi_s_tbuffer[COMM_BUFFER_SIZE]
static
const uint32_t gs_ul_clock_configurations[]
static
Initial value:
=
{ 500000, 1000000, 2000000, 5000000 }
uint32_t gs_ul_spi_clock = 500000
static