/* * Routines to access hardware * * Copyright (c) 2014 Realtek Semiconductor Corp. * * This module is a confidential and proprietary property of RealTek and * possession or use of this module requires written permission of RealTek. */ #include "device.h" #include "diag.h" #include "main.h" #include "spi_api.h" #define FakeMbedAPI 1 // SPI0 (S0) #define SPI0_MOSI PC_2 #define SPI0_MISO PC_3 #define SPI0_SCLK PC_1 #define SPI0_CS PC_0 // SPI1 (S1) #define SPI1_MOSI PB_6 #define SPI1_MISO PB_7 #define SPI1_SCLK PB_5 #define SPI1_CS PB_4 #if 1 // SPI2 (S2) for DEV 3V0 // Please note that PA_7 need pull high before using GPIOA group #define SPI2_MOSI PA_1 #define SPI2_MISO PA_0 #define SPI2_SCLK PA_2 #define SPI2_CS PA_4 #else // SPI2 (S2) #define SPI2_MOSI PD_2 #define SPI2_MISO PD_3 #define SPI2_SCLK PD_1 #define SPI2_CS PD_0 #endif /** * @brief Main program. * @param None * @retval None */ spi_t spi_master; spi_t spi_slave; void main(void) { #if FakeMbedAPI /* SPI0 is as Slave */ //SPI0_IS_AS_SLAVE = 1; spi_init(&spi_master, SPI2_MOSI, SPI2_MISO, SPI2_SCLK, SPI2_CS); spi_format(&spi_master, 8, 0, 0); spi_frequency(&spi_master, 200000); spi_init(&spi_slave, SPI0_MOSI, SPI0_MISO, SPI0_SCLK, SPI0_CS); spi_format(&spi_slave, 8, 0, 1); int TestingTimes = 10; int Counter = 0; int TestData = 0; int ReadData = 0; int result = 1; /** * Master read/write, Slave read/write */ DBG_SSI_INFO("--------------------------------------------------------\n"); for(Counter = 0, TestData=0x01; Counter < TestingTimes; Counter++) { ReadData = spi_master_write(&spi_master, TestData); DBG_SSI_INFO("Master write: %02X, read: %02X\n", TestData, ReadData); if (TestData - 1 != ReadData) { result = 0; } TestData++; spi_slave_write(&spi_slave, TestData); ReadData = spi_slave_read(&spi_slave); DBG_SSI_INFO(ANSI_COLOR_CYAN"Slave write: %02X, read: %02X\n"ANSI_COLOR_RESET, TestData, ReadData); if (TestData - 1 != ReadData) { result = 0; } TestData++; } /** * Master write, Slave read */ DBG_SSI_INFO("--------------------------------------------------------\n"); for(Counter = 0, TestData=0xFF; Counter < TestingTimes; Counter++) { spi_master_write(&spi_master, TestData); ReadData = spi_slave_read(&spi_slave); DBG_SSI_INFO("Master write: %02X\n", TestData); DBG_SSI_INFO(ANSI_COLOR_CYAN"Slave read : %02X\n"ANSI_COLOR_RESET, ReadData); if (TestData != ReadData) { result = 0; } TestData--; } spi_free(&spi_master); spi_free(&spi_slave); DBG_SSI_INFO("SPI Demo finished.\n"); printf("\r\nResult is %s\r\n", (result) ? "success" : "fail"); for(;;); #else // mbed SPI API emulation #endif }