Skip to content

Commit

Permalink
Expand MAX32650 SPI example to select SPI instance
Browse files Browse the repository at this point in the history
Updated the MAX32650 SPI example project to allow the user to select the SPI instance to test.
All of the driver logic remained the same, the additions updated the instance and IRQ constants
and loopback instructions during startup, as well as documentation.
  • Loading branch information
BrentK-ADI committed Jan 21, 2025
1 parent 4f0d3d3 commit 342d736
Show file tree
Hide file tree
Showing 3 changed files with 59 additions and 17 deletions.
23 changes: 19 additions & 4 deletions Examples/MAX32650/SPI/README.md
Original file line number Diff line number Diff line change
@@ -1,10 +1,22 @@
## Description

This example configures the SPI to send data between the MISO (1.28) and MOSI (P1.29) pins. Connect these two pins together.
This example configures the SPI to send data between the MISO and MOSI pins of
the specified SPI instance. If no SPI instance is specified, the default instance
is SPI1. Connect the MISO and MOSI lines together per the table below:

| SPI Inst | MISO | MOSI |
| -------- | ---- | ---- |
| SPI0 | 3.1 | 3.2 |
| SPI1 | 1.28 | 1.29 |
| SPI2 | 2.3 | 2.4 |
| SPI3 | 0.20 | 0.21 |

Multiple word sizes (2 through 16 bits) are demonstrated.

By default, the example performs blocking SPI transactions. To switch to non-blocking (asynchronous) transactions, reset the MASTERSYNC macro to 0 and set the MASTERASYNC macro to 1. To use DMA transactions, set the MASTERDMA macro to 1 instead.
By default, the example performs blocking SPI transactions. To switch to
non-blocking (asynchronous) transactions, reset the MASTERSYNC macro to 0 and set
the MASTERASYNC macro to 1. To use DMA transactions, set the MASTERDMA macro to
1 instead.


## Software
Expand All @@ -15,13 +27,16 @@ Universal instructions on building, flashing, and debugging this project can be

### Project-Specific Build Notes

(None - this project builds as a standard example)
Update the project.mk file to specify the desired SPI instance via the TEST_SPI_NUM
definition. Valid values for TEST_SPI_NUM are 0-3:

`PROJ_CFLAGS += -DTEST_SPI_NUM=1`

## Required Connections

- Connect a USB cable between the PC and the CN2 (USB/PWR) connector.
- Open an terminal application on the PC and connect to the EV kit's console UART at 115200, 8-N-1.
- You must connect P1.29 (MOSI) to P1.28 (MISO).
- You must connect MOSI to MISO per the desired SPI instance.

## Expected Output

Expand Down
46 changes: 36 additions & 10 deletions Examples/MAX32650/SPI/main.c
Original file line number Diff line number Diff line change
@@ -1,15 +1,15 @@
/**
* @file main.c
* @brief SPI Master Demo
* @details Shows Master loopback demo for QSPI1
* @details Shows Master loopback demo for MAX32650
* Read the printf() for instructions
*/

/******************************************************************************
*
* Copyright (C) 2022-2023 Maxim Integrated Products, Inc. (now owned by
* Copyright (C) 2022-2023 Maxim Integrated Products, Inc. (now owned by
* Analog Devices, Inc.),
* Copyright (C) 2023-2024 Analog Devices, Inc.
* Copyright (C) 2023-2025 Analog Devices, Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
Expand Down Expand Up @@ -56,8 +56,34 @@
#define VALUE 0xFFFF
#define SPI_SPEED 100000 // Bit Rate

/* Default to SPI1 if not specified */
#ifndef TEST_SPI_NUM
#define TEST_SPI_NUM 1
#endif

#if TEST_SPI_NUM == 0
#define SPI MXC_SPI0
#define SPI_IRQ SPI0_IRQn
#define SPI_MISO_STR "P3.1"
#define SPI_MOSI_STR "P3.2"
#elif TEST_SPI_NUM == 1
#define SPI MXC_SPI1
#define SPI_IRQ SPI1_IRQn
#define SPI_MISO_STR "P1.28"
#define SPI_MOSI_STR "P1.29"
#elif TEST_SPI_NUM == 2
#define SPI MXC_SPI2
#define SPI_IRQ SPI2_IRQn
#define SPI_MISO_STR "P2.3"
#define SPI_MOSI_STR "P2.4"
#elif TEST_SPI_NUM == 3
#define SPI MXC_SPI3
#define SPI_IRQ SPI3_IRQn
#define SPI_MISO_STR "P0.20"
#define SPI_MOSI_STR "P0.21"
#else
#error "Invalid SPI Instance specified!"
#endif

/***** Globals *****/
uint16_t rx_data[DATA_LEN];
Expand All @@ -66,7 +92,7 @@ volatile int SPI_FLAG;
volatile uint8_t DMA_FLAG = 0;

/***** Functions *****/
void SPI0_IRQHandler(void)
void SPI_IRQHandler(void)
{
MXC_SPI_AsyncHandler(SPI);
}
Expand Down Expand Up @@ -94,11 +120,11 @@ int main(void)
mxc_spi_req_t req;

printf("\n************** SPI Loopback Demo ****************\n");
printf("This example configures the SPI to send data between the MISO (P1.28) and\n");
printf("MOSI (P1.29) pins. Connect these two pins together. This demo shows SPI\n");
printf("sending different bit sizes each run through. If successful, the green LED will\n");
printf("illuminate.\n");

printf("This example configures the SPI to send data between the MISO (" SPI_MISO_STR
") and\n");
printf("MOSI (" SPI_MOSI_STR ") pins. Connect these two pins together.\n");
printf("This demo shows SPI sending different bit sizes each run through.\n"
"If successful, the green LED will illuminate.\n");
printf("\nThis demo shows Asynchronous, Synchronous and DMA transaction for SPI1\n");

for (i = 1; i < 17; i++) {
Expand Down Expand Up @@ -149,7 +175,7 @@ int main(void)
#endif

#if MASTERASYNC
MXC_NVIC_SetVector(SPI_IRQ, SPI0_IRQHandler);
MXC_NVIC_SetVector(SPI_IRQ, SPI_IRQHandler);
NVIC_EnableIRQ(SPI_IRQ);
MXC_SPI_MasterTransactionAsync(&req);

Expand Down
7 changes: 4 additions & 3 deletions Examples/MAX32650/SPI/project.mk
Original file line number Diff line number Diff line change
Expand Up @@ -16,19 +16,20 @@
#
##############################################################################
# This file can be used to set build configuration
# variables. These variables are defined in a file called
# variables. These variables are defined in a file called
# "Makefile" that is located next to this one.

# For instructions on how to use this system, see
# https://analogdevicesinc.github.io/msdk/USERGUIDE/#build-system

#BOARD=FTHR_RevA
# ^ For example, you can uncomment this line to make the
# ^ For example, you can uncomment this line to make the
# project build for the "FTHR_RevA" board.

# **********************************************************

# Add your config here!
# Set the TEST_SPI_NUM here [0-3] to specify the SPI instance to test
PROJ_CFLAGS += -DTEST_SPI_NUM=1

# If you have secure version of MCU (MAX32651), set SBT=1 to generate signed binary
# For more information on how sing process works, see
Expand Down

0 comments on commit 342d736

Please sign in to comment.