Browse Source

tests: added periph_spi test

dev/timer
Hauke Petersen 9 years ago
parent
commit
969b8401d8
  1. 11
      tests/periph_spi/Makefile
  2. 8
      tests/periph_spi/README.md
  3. 125
      tests/periph_spi/main.c

11
tests/periph_spi/Makefile

@ -0,0 +1,11 @@
export APPLICATION = periph_spi
include ../Makefile.tests_common
BOARD_BLACKLIST := chronos mbed_lpc1768 msb-430 msb-430h native qemu-i386 redbee-econotag telosb \
wsn430-v1_3b wsn430-v1_4 z1
# all listed boards: no periph_conf.h defined,
USEMODULE += shell
USEMODULE += shell_commands
include $(RIOTBASE)/Makefile.include

8
tests/periph_spi/README.md

@ -0,0 +1,8 @@
Expected result
===============
You should be presented with the RIOT shell, providing you with commands to initialize a board
as master or slave, and to send and receive data via SPI.
Background
==========
Test for the low-level SPI driver.

125
tests/periph_spi/main.c

@ -0,0 +1,125 @@
/*
* Copyright (C) 2014 Freie Universität Berlin
*
* This file is subject to the terms and conditions of the GNU Lesser General
* Public License v2.1. See the file LICENSE in the top level directory for more
* details.
*/
/**
* @ingroup tests
* @{
*
* @file
* @brief Low-level SPI driver test application
*
* @author Hauke Petersen <hauke.petersen@fu-berlin.de>
*
* @}
*/
#include <stdio.h>
#include "shell.h"
#include "periph/spi.h"
#include "periph/gpio.h"
#define SHELL_BUFSIZE (128U)
#define SHELL_BUF (128U)
#define DEV SPI_0
#define MODE SPI_CONF_FIRST_RISING
#define CS GPIO_3
enum {
READ = 0,
WRITE,
INIT
} rw;
static volatile int state;
static char* mem = "Hello Master! abcdefghijklmnopqrstuvwxyz 0123456789 ABCDEFGHIJKLMNOPQRSTUVWXYZ";
static const shell_command_t shell_commands[] = {
{ NULL, NULL, NULL }
};
void on_cs(void)
{
spi_transmission_begin(DEV, '3');
state = 0;
rw = INIT;
}
char on_data(char data)
{
puts ("char");
switch (rw) {
case READ:
return mem[state++];
case WRITE:
mem[state++] = data;
return 'o';
case INIT:
if (data == ' ') {
rw = READ;
return mem[state++];
} else if (data & 0x80) {
rw = WRITE;
state = (data & 0x7f);
return 'W';
} else {
rw = READ;
state = data;
return mem[state++];
}
}
return 'e';
}
int shell_getchar(void)
{
return (int)getchar();
}
void shell_putchar(int c)
{
putchar((char)c);
}
int main(void)
{
int res;
shell_t shell;
puts("\nRIOT SPI Slave test");
puts("desc...\n");
/* initialize the CS line */
printf("Initializing the CS line");
res = gpio_init_int(CS, GPIO_PULLUP, GPIO_FALLING, on_cs);
if (res >= 0) {
puts(" ...[ok]");
}
else {
puts(" ...[failed]");
return -1;
}
/* initialize the SPI master */
printf("Initializing the SPI device");
res = spi_init_slave(DEV, MODE, on_data);
if (res >= 0) {
puts(" ...[ok]");
}
else {
puts(" ...[failed]");
}
/* run the shell */
puts("Starting the shell ...[ok]\n"); /* we trust it... */
shell_init(&shell, shell_commands, SHELL_BUFSIZE, shell_getchar, shell_putchar);
shell_run(&shell);
return 0;
}
Loading…
Cancel
Save