mirror of
https://gitlab.rtems.org/rtems/rtos/rtems.git
synced 2026-09-21 13:46:26 +08:00
bsp/atsam: Add SPI bus driver
This commit is contained in:
@@ -53,6 +53,8 @@ include_bsp_HEADERS += include/irq.h
|
||||
include_bsp_HEADERS += include/pin-config.h
|
||||
include_bsp_HEADERS += include/atsam-i2c.h
|
||||
include_bsp_HEADERS += include/i2c.h
|
||||
include_bsp_HEADERS += include/atsam-spi.h
|
||||
include_bsp_HEADERS += include/spi.h
|
||||
include_bsp_HEADERS += include/power.h
|
||||
|
||||
include_libchipdir = $(includedir)/libchip
|
||||
@@ -437,6 +439,10 @@ endif
|
||||
libbsp_a_SOURCES += i2c/atsam_i2c_bus.c
|
||||
libbsp_a_SOURCES += i2c/atsam_i2c_init.c
|
||||
|
||||
# SPI
|
||||
libbsp_a_SOURCES += spi/atsam_spi_bus.c
|
||||
libbsp_a_SOURCES += spi/atsam_spi_init.c
|
||||
|
||||
# RTC
|
||||
libbsp_a_SOURCES += ../../shared/tod.c
|
||||
libbsp_a_SOURCES += rtc/rtc-config.c
|
||||
|
||||
@@ -0,0 +1,61 @@
|
||||
/*
|
||||
* Copyright (c) 2016 embedded brains GmbH. All rights reserved.
|
||||
*
|
||||
* embedded brains GmbH
|
||||
* Dornierstr. 4
|
||||
* 82178 Puchheim
|
||||
* Germany
|
||||
* <info@embedded-brains.de>
|
||||
*
|
||||
* The license and distribution terms for this file may be
|
||||
* found in the file LICENSE in this distribution or at
|
||||
* http://www.rtems.org/license/LICENSE.
|
||||
*/
|
||||
|
||||
#ifndef LIBBSP_ARM_ATSAM_ATSAM_SPI_H
|
||||
#define LIBBSP_ARM_ATSAM_ATSAM_SPI_H
|
||||
|
||||
#include <libchip/chip.h>
|
||||
#include <libchip/include/pio.h>
|
||||
|
||||
#include <bsp.h>
|
||||
#include <dev/spi/spi.h>
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif /* __cplusplus */
|
||||
|
||||
#define DEFAULT_SPI0_CS 0
|
||||
#define DEFAULT_SPI_CLOCK 500000
|
||||
|
||||
#define REGISTER_COMMAND_LENGTH 2
|
||||
|
||||
typedef struct {
|
||||
spi_bus base;
|
||||
Spi *regs;
|
||||
rtems_vector_number irq;
|
||||
uint32_t board_id;
|
||||
uint32_t msg_todo;
|
||||
const spi_ioc_transfer *msgs;
|
||||
rtems_id task_id;
|
||||
sXdmad Dma;
|
||||
Spid SpiDma;
|
||||
uint32_t dma_tx_channel;
|
||||
uint32_t dma_rx_channel;
|
||||
bool rx_transfer_done;
|
||||
bool tx_transfer_done;
|
||||
} atsam_spi_bus;
|
||||
|
||||
int spi_bus_register_atsam(
|
||||
const char *bus_path,
|
||||
Spi *register_base,
|
||||
rtems_vector_number irq,
|
||||
size_t pin_amount,
|
||||
const Pin *pins
|
||||
);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif /* __cplusplus */
|
||||
|
||||
#endif /* LIBBSP_ARM_ATSAM_ATSAM_SPI_H */
|
||||
@@ -0,0 +1,36 @@
|
||||
/*
|
||||
* Copyright (c) 2016 embedded brains GmbH. All rights reserved.
|
||||
*
|
||||
* embedded brains GmbH
|
||||
* Dornierstr. 4
|
||||
* 82178 Puchheim
|
||||
* Germany
|
||||
* <info@embedded-brains.de>
|
||||
*
|
||||
* The license and distribution terms for this file may be
|
||||
* found in the file LICENSE in this distribution or at
|
||||
* http://www.rtems.org/license/LICENSE.
|
||||
*/
|
||||
|
||||
#ifndef LIBBSP_ARM_ATSAM_SPI_H
|
||||
#define LIBBSP_ARM_ATSAM_SPI_H
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif /* __cplusplus */
|
||||
|
||||
#define ATSAM_SPI_0_BUS_PATH "/dev/spi-0"
|
||||
#define ATSAM_SPI_1_BUS_PATH "/dev/spi-1"
|
||||
#define ATSAM_SPI_2_BUS_PATH "/dev/spi-2"
|
||||
|
||||
int atsam_register_spi_0(void);
|
||||
|
||||
int atsam_register_spi_1(void);
|
||||
|
||||
int atsam_register_spi_2(void);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif /* __cplusplus */
|
||||
|
||||
#endif /* LIBBSP_ARM_ATSAM_SPI_H */
|
||||
@@ -141,6 +141,14 @@ $(PROJECT_INCLUDE)/bsp/i2c.h: include/i2c.h $(PROJECT_INCLUDE)/bsp/$(dirstamp)
|
||||
$(INSTALL_DATA) $< $(PROJECT_INCLUDE)/bsp/i2c.h
|
||||
PREINSTALL_FILES += $(PROJECT_INCLUDE)/bsp/i2c.h
|
||||
|
||||
$(PROJECT_INCLUDE)/bsp/atsam-spi.h: include/atsam-spi.h $(PROJECT_INCLUDE)/bsp/$(dirstamp)
|
||||
$(INSTALL_DATA) $< $(PROJECT_INCLUDE)/bsp/atsam-spi.h
|
||||
PREINSTALL_FILES += $(PROJECT_INCLUDE)/bsp/atsam-spi.h
|
||||
|
||||
$(PROJECT_INCLUDE)/bsp/spi.h: include/spi.h $(PROJECT_INCLUDE)/bsp/$(dirstamp)
|
||||
$(INSTALL_DATA) $< $(PROJECT_INCLUDE)/bsp/spi.h
|
||||
PREINSTALL_FILES += $(PROJECT_INCLUDE)/bsp/spi.h
|
||||
|
||||
$(PROJECT_INCLUDE)/bsp/power.h: include/power.h $(PROJECT_INCLUDE)/bsp/$(dirstamp)
|
||||
$(INSTALL_DATA) $< $(PROJECT_INCLUDE)/bsp/power.h
|
||||
PREINSTALL_FILES += $(PROJECT_INCLUDE)/bsp/power.h
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,83 @@
|
||||
/*
|
||||
* Copyright (c) 2016 embedded brains GmbH. All rights reserved.
|
||||
*
|
||||
* embedded brains GmbH
|
||||
* Dornierstr. 4
|
||||
* 82178 Puchheim
|
||||
* Germany
|
||||
* <info@embedded-brains.de>
|
||||
*
|
||||
* The license and distribution terms for this file may be
|
||||
* found in the file LICENSE in this distribution or at
|
||||
* http://www.rtems.org/license/LICENSE.
|
||||
*/
|
||||
|
||||
#include <bsp/atsam-spi.h>
|
||||
#include <bsp/spi.h>
|
||||
|
||||
/** SPI0 MISO pin */
|
||||
#define PIN_SPI0_MISO {PIO_PD20B_SPI0_MISO, PIOD, ID_PIOD, PIO_PERIPH_B, PIO_DEFAULT}
|
||||
/** SPI0 MOSI pin */
|
||||
#define PIN_SPI0_MOSI {PIO_PD21B_SPI0_MOSI, PIOD, ID_PIOD, PIO_PERIPH_B, PIO_DEFAULT}
|
||||
/** SPI0 CS0 pin */
|
||||
#define PIN_SPI0_NPCS0 {PIO_PB2D_SPI0_NPCS0, PIOB, ID_PIOB, PIO_PERIPH_D, PIO_DEFAULT}
|
||||
/** SPI0 CS1_1 pin */
|
||||
#define PIN_SPI0_NPCS1_1 {PIO_PA31A_SPI0_NPCS1, PIOA, ID_PIOA, PIO_PERIPH_A, PIO_DEFAULT}
|
||||
/** SPI0 CS1_2 pin */
|
||||
#define PIN_SPI0_NPCS1_2 {PIO_PD25B_SPI0_NPCS1, PIOD, ID_PIOD, PIO_PERIPH_B, PIO_DEFAULT}
|
||||
/** SPI0 CS2 pin */
|
||||
#define PIN_SPI0_NPCS2 {PIO_PD12C_SPI0_NPCS2, PIOD, ID_PIOD, PIO_PERIPH_C, PIO_DEFAULT}
|
||||
/** SPI0 CS3 pin */
|
||||
#define PIN_SPI0_NPCS3 {PIO_PD27B_SPI0_NPCS3, PIOD, ID_PIOD, PIO_PERIPH_B, PIO_DEFAULT}
|
||||
/** SPI0 Clock pin */
|
||||
#define PIN_SPI0_CLOCK {PIO_PD22B_SPI0_SPCK, PIOD, ID_PIOD, PIO_PERIPH_B, PIO_DEFAULT}
|
||||
|
||||
/** SPI1 MISO pin */
|
||||
#define PIN_SPI1_MISO {PIO_PC26C_SPI1_MISO, PIOC, ID_PIOC, PIO_PERIPH_C, PIO_DEFAULT}
|
||||
/** SPI1 MOSI pin */
|
||||
#define PIN_SPI1_MOSI {PIO_PC27C_SPI1_MOSI, PIOC, ID_PIOC, PIO_PERIPH_C, PIO_DEFAULT}
|
||||
/** SPI1 CS0 pin */
|
||||
#define PIN_SPI1_NPCS0 {PIO_PC25C_SPI1_NPCS0, PIOC, ID_PIOC, PIO_PERIPH_C, PIO_DEFAULT}
|
||||
/** SPI1 CS1_1 pin */
|
||||
#define PIN_SPI1_NPCS1_1 {PIO_PC28C_SPI1_NPCS1, PIOC, ID_PIOC, PIO_PERIPH_C, PIO_DEFAULT}
|
||||
/** SPI1 CS1_2 pin */
|
||||
#define PIN_SPI1_NPCS1_2 {PIO_PD0C_SPI1_NPCS1, PIOD, ID_PIOD, PIO_PERIPH_C, PIO_DEFAULT}
|
||||
/** SPI1 CS2_1 pin */
|
||||
#define PIN_SPI1_NPCS2_1 {PIO_PC29C_SPI1_NPCS2, PIOC, ID_PIOC, PIO_PERIPH_C, PIO_DEFAULT}
|
||||
/** SPI1 CS2_2 pin */
|
||||
#define PIN_SPI1_NPCS2_2 {PIO_PD1C_SPI1_NPCS2, PIOD, ID_PIOD, PIO_PERIPH_C, PIO_DEFAULT}
|
||||
/** SPI1 CS3_1 pin */
|
||||
#define PIN_SPI1_NPCS3_1 {PIO_PC30C_SPI1_NPCS3, PIOC, ID_PIOC, PIO_PERIPH_C, PIO_DEFAULT}
|
||||
/** SPI1 CS3_2 pin */
|
||||
#define PIN_SPI1_NPCS3_2 {PIO_PD2C_SPI1_NPCS3, PIOD, ID_PIOD, PIO_PERIPH_C, PIO_DEFAULT}
|
||||
/** SPI1 Clock pin */
|
||||
#define PIN_SPI1_CLOCK {PIO_PC24C_SPI1_SPCK, PIOC, ID_PIOC, PIO_PERIPH_C, PIO_DEFAULT}
|
||||
|
||||
int atsam_register_spi_0(void)
|
||||
{
|
||||
static const Pin pins[] = {PIN_SPI0_MISO, PIN_SPI0_MOSI, PIN_SPI0_NPCS0,
|
||||
PIN_SPI0_NPCS1_1, PIN_SPI0_NPCS1_2, PIN_SPI0_NPCS2, PIN_SPI0_NPCS3,
|
||||
PIN_SPI0_CLOCK};
|
||||
|
||||
return spi_bus_register_atsam(
|
||||
ATSAM_SPI_0_BUS_PATH,
|
||||
SPI0,
|
||||
ID_SPI0,
|
||||
8,
|
||||
pins);
|
||||
}
|
||||
|
||||
int atsam_register_spi_1(void)
|
||||
{
|
||||
static const Pin pins[] = {PIN_SPI1_MISO, PIN_SPI1_MOSI, PIN_SPI1_NPCS0,
|
||||
PIN_SPI1_NPCS1_1, PIN_SPI1_NPCS1_2, PIN_SPI1_NPCS2_1,
|
||||
PIN_SPI1_NPCS2_2, PIN_SPI1_NPCS3_1, PIN_SPI1_NPCS3_2,
|
||||
PIN_SPI1_CLOCK};
|
||||
|
||||
return spi_bus_register_atsam(
|
||||
ATSAM_SPI_1_BUS_PATH,
|
||||
SPI1,
|
||||
ID_SPI1,
|
||||
10,
|
||||
pins);
|
||||
}
|
||||
Reference in New Issue
Block a user