Changeset 7aca0fe in rtems


Ignore:
Timestamp:
Sep 5, 2015, 8:53:16 PM (5 years ago)
Author:
Andre Marques <andre.lousa.marques@…>
Branches:
5, master
Children:
5458bff
Parents:
f7ea9579
git-author:
Andre Marques <andre.lousa.marques@…> (09/05/15 20:53:16)
git-committer:
Gedare Bloom <gedare@…> (09/25/15 20:36:52)
Message:

RaspberryPi?: Added I2C and SPI bus support.

Further documentation can be found in

https://devel.rtems.org/wiki/GSoC/2015/RaspberryPi_peripherals_and_SD_card

and test data (including sample user applications, device drivers and wiring schemes) can be found in

https://github.com/asuol/RTEMS_rpi_testing

Location:
c/src/lib/libbsp/arm/raspberrypi
Files:
4 added
4 edited

Legend:

Unmodified
Added
Removed
  • c/src/lib/libbsp/arm/raspberrypi/Makefile.am

    rf7ea9579 r7aca0fe  
    4747include_bsp_HEADERS += include/raspberrypi.h
    4848include_bsp_HEADERS += include/rpi-gpio.h
     49include_bsp_HEADERS += include/i2c.h
     50include_bsp_HEADERS += include/spi.h
    4951
    5052include_libcpu_HEADERS = ../../../libcpu/arm/shared/include/cache_.h \
     
    129131
    130132# I2C
     133libbsp_a_SOURCES += i2c/i2c.c
     134
     135# SPI
     136libbsp_a_SOURCES += spi/spi.c
    131137
    132138# Cache
  • c/src/lib/libbsp/arm/raspberrypi/configure.ac

    rf7ea9579 r7aca0fe  
    2525RTEMS_BSPOPTS_HELP([BSP_START_RESET_VECTOR],[reset vector address for BSP start])
    2626
     27RTEMS_BSPOPTS_SET([I2C_IO_MODE],[*],[1])
     28RTEMS_BSPOPTS_HELP([I2C_IO_MODE],[Define to 1 to use interrupt-driven I/O with the Raspberry Pi I2C bus. If defined to other value the access will be polled-driven.])
     29
     30RTEMS_BSPOPTS_SET([SPI_IO_MODE],[*],[1])
     31RTEMS_BSPOPTS_HELP([SPI_IO_MODE],[Define to 1 to use interrupt-driven I/O with the Raspberry Pi SPI bus. If defined to other value the access will be polled-driven.])
     32
    2733# Is this a Raspberry Pi 2?
    2834RTEMS_BSPOPTS_SET([BSP_IS_RPI2],[raspberrypi2],[1])
     
    3137AM_CONDITIONAL(RTEMS_RPI2,[test "$BSP_IS_RPI2" = "1"])
    3238
    33 
    34 
    3539RTEMS_BSP_CLEANUP_OPTIONS(0, 0)
    3640RTEMS_BSP_LINKCMDS
  • c/src/lib/libbsp/arm/raspberrypi/include/raspberrypi.h

    rf7ea9579 r7aca0fe  
    88
    99/*
    10  *  Copyright (c) 2014 Andre Marques <andre.lousa.marques at gmail.com>
     10 *  Copyright (c) 2014-2015 Andre Marques <andre.lousa.marques at gmail.com>
    1111 *  Copyright (c) 2013 Alan Cudmore.
    1212 *
     
    6969#define BCM2835_TIMER_BASE       (RPI_PERIPHERAL_BASE + 0xB400)
    7070
    71 #define BCM2835_TIMER_LOD        (BCM2835_TIMER_BASE+0x00)
    72 #define BCM2835_TIMER_VAL        (BCM2835_TIMER_BASE+0x04)
    73 #define BCM2835_TIMER_CTL        (BCM2835_TIMER_BASE+0x08)
    74 #define BCM2835_TIMER_CLI        (BCM2835_TIMER_BASE+0x0C)
    75 #define BCM2835_TIMER_RIS        (BCM2835_TIMER_BASE+0x10)
    76 #define BCM2835_TIMER_MIS        (BCM2835_TIMER_BASE+0x14)
    77 #define BCM2835_TIMER_RLD        (BCM2835_TIMER_BASE+0x18)
    78 #define BCM2835_TIMER_DIV        (BCM2835_TIMER_BASE+0x1C)
    79 #define BCM2835_TIMER_CNT        (BCM2835_TIMER_BASE+0x20)
     71#define BCM2835_TIMER_LOD        (BCM2835_TIMER_BASE + 0x00)
     72#define BCM2835_TIMER_VAL        (BCM2835_TIMER_BASE + 0x04)
     73#define BCM2835_TIMER_CTL        (BCM2835_TIMER_BASE + 0x08)
     74#define BCM2835_TIMER_CLI        (BCM2835_TIMER_BASE + 0x0C)
     75#define BCM2835_TIMER_RIS        (BCM2835_TIMER_BASE + 0x10)
     76#define BCM2835_TIMER_MIS        (BCM2835_TIMER_BASE + 0x14)
     77#define BCM2835_TIMER_RLD        (BCM2835_TIMER_BASE + 0x18)
     78#define BCM2835_TIMER_DIV        (BCM2835_TIMER_BASE + 0x1C)
     79#define BCM2835_TIMER_CNT        (BCM2835_TIMER_BASE + 0x20)
    8080
    8181#define BCM2835_TIMER_PRESCALE    0xF9
     
    9191#define BCM2835_GPIO_REGS_BASE   (RPI_PERIPHERAL_BASE + 0x200000)
    9292
    93 #define BCM2835_GPIO_GPFSEL1     (BCM2835_GPIO_REGS_BASE+0x04)
    94 #define BCM2835_GPIO_GPSET0      (BCM2835_GPIO_REGS_BASE+0x1C)
    95 #define BCM2835_GPIO_GPCLR0      (BCM2835_GPIO_REGS_BASE+0x28)
    96 #define BCM2835_GPIO_GPLEV0      (BCM2835_GPIO_REGS_BASE+0x34)
    97 #define BCM2835_GPIO_GPEDS0      (BCM2835_GPIO_REGS_BASE+0x40)
    98 #define BCM2835_GPIO_GPREN0      (BCM2835_GPIO_REGS_BASE+0x4C)
    99 #define BCM2835_GPIO_GPFEN0      (BCM2835_GPIO_REGS_BASE+0x58)
    100 #define BCM2835_GPIO_GPHEN0      (BCM2835_GPIO_REGS_BASE+0x64)
    101 #define BCM2835_GPIO_GPLEN0      (BCM2835_GPIO_REGS_BASE+0x70)
    102 #define BCM2835_GPIO_GPAREN0     (BCM2835_GPIO_REGS_BASE+0x7C)
    103 #define BCM2835_GPIO_GPAFEN0     (BCM2835_GPIO_REGS_BASE+0x88)
    104 #define BCM2835_GPIO_GPPUD       (BCM2835_GPIO_REGS_BASE+0x94)
    105 #define BCM2835_GPIO_GPPUDCLK0   (BCM2835_GPIO_REGS_BASE+0x98) 
     93#define BCM2835_GPIO_GPFSEL1     (BCM2835_GPIO_REGS_BASE + 0x04)
     94#define BCM2835_GPIO_GPSET0      (BCM2835_GPIO_REGS_BASE + 0x1C)
     95#define BCM2835_GPIO_GPCLR0      (BCM2835_GPIO_REGS_BASE + 0x28)
     96#define BCM2835_GPIO_GPLEV0      (BCM2835_GPIO_REGS_BASE + 0x34)
     97#define BCM2835_GPIO_GPEDS0      (BCM2835_GPIO_REGS_BASE + 0x40)
     98#define BCM2835_GPIO_GPREN0      (BCM2835_GPIO_REGS_BASE + 0x4C)
     99#define BCM2835_GPIO_GPFEN0      (BCM2835_GPIO_REGS_BASE + 0x58)
     100#define BCM2835_GPIO_GPHEN0      (BCM2835_GPIO_REGS_BASE + 0x64)
     101#define BCM2835_GPIO_GPLEN0      (BCM2835_GPIO_REGS_BASE + 0x70)
     102#define BCM2835_GPIO_GPAREN0     (BCM2835_GPIO_REGS_BASE + 0x7C)
     103#define BCM2835_GPIO_GPAFEN0     (BCM2835_GPIO_REGS_BASE + 0x88)
     104#define BCM2835_GPIO_GPPUD       (BCM2835_GPIO_REGS_BASE + 0x94)
     105#define BCM2835_GPIO_GPPUDCLK0   (BCM2835_GPIO_REGS_BASE + 0x98)
    106106
    107107/** @} */
     
    115115#define BCM2835_AUX_BASE         (RPI_PERIPHERAL_BASE + 0x215000)
    116116
    117 #define AUX_ENABLES              (BCM2835_AUX_BASE+0x04)
    118 #define AUX_MU_IO_REG            (BCM2835_AUX_BASE+0x40)
    119 #define AUX_MU_IER_REG           (BCM2835_AUX_BASE+0x44)
    120 #define AUX_MU_IIR_REG           (BCM2835_AUX_BASE+0x48)
    121 #define AUX_MU_LCR_REG           (BCM2835_AUX_BASE+0x4C)
    122 #define AUX_MU_MCR_REG           (BCM2835_AUX_BASE+0x50)
    123 #define AUX_MU_LSR_REG           (BCM2835_AUX_BASE+0x54)
    124 #define AUX_MU_MSR_REG           (BCM2835_AUX_BASE+0x58)
    125 #define AUX_MU_SCRATCH           (BCM2835_AUX_BASE+0x5C)
    126 #define AUX_MU_CNTL_REG          (BCM2835_AUX_BASE+0x60)
    127 #define AUX_MU_STAT_REG          (BCM2835_AUX_BASE+0x64)
    128 #define AUX_MU_BAUD_REG          (BCM2835_AUX_BASE+0x68)
     117#define AUX_ENABLES              (BCM2835_AUX_BASE + 0x04)
     118#define AUX_MU_IO_REG            (BCM2835_AUX_BASE + 0x40)
     119#define AUX_MU_IER_REG           (BCM2835_AUX_BASE + 0x44)
     120#define AUX_MU_IIR_REG           (BCM2835_AUX_BASE + 0x48)
     121#define AUX_MU_LCR_REG           (BCM2835_AUX_BASE + 0x4C)
     122#define AUX_MU_MCR_REG           (BCM2835_AUX_BASE + 0x50)
     123#define AUX_MU_LSR_REG           (BCM2835_AUX_BASE + 0x54)
     124#define AUX_MU_MSR_REG           (BCM2835_AUX_BASE + 0x58)
     125#define AUX_MU_SCRATCH           (BCM2835_AUX_BASE + 0x5C)
     126#define AUX_MU_CNTL_REG          (BCM2835_AUX_BASE + 0x60)
     127#define AUX_MU_STAT_REG          (BCM2835_AUX_BASE + 0x64)
     128#define AUX_MU_BAUD_REG          (BCM2835_AUX_BASE + 0x68)
    129129
    130130/** @} */
     
    138138#define BCM2835_UART0_BASE       (RPI_PERIPHERAL_BASE + 0x201000)
    139139
    140 #define BCM2835_UART0_DR         (BCM2835_UART0_BASE+0x00)
    141 #define BCM2835_UART0_RSRECR     (BCM2835_UART0_BASE+0x04)
    142 #define BCM2835_UART0_FR         (BCM2835_UART0_BASE+0x18)
    143 #define BCM2835_UART0_ILPR       (BCM2835_UART0_BASE+0x20)
    144 #define BCM2835_UART0_IBRD       (BCM2835_UART0_BASE+0x24)
    145 #define BCM2835_UART0_FBRD       (BCM2835_UART0_BASE+0x28)
    146 #define BCM2835_UART0_LCRH       (BCM2835_UART0_BASE+0x2C)
    147 #define BCM2835_UART0_CR         (BCM2835_UART0_BASE+0x30)
    148 #define BCM2835_UART0_IFLS       (BCM2835_UART0_BASE+0x34)
    149 #define BCM2835_UART0_IMSC       (BCM2835_UART0_BASE+0x38)
    150 #define BCM2835_UART0_RIS        (BCM2835_UART0_BASE+0x3C)
    151 #define BCM2835_UART0_MIS        (BCM2835_UART0_BASE+0x40)
    152 #define BCM2835_UART0_ICR        (BCM2835_UART0_BASE+0x44)
    153 #define BCM2835_UART0_DMACR      (BCM2835_UART0_BASE+0x48)
    154 #define BCM2835_UART0_ITCR       (BCM2835_UART0_BASE+0x80)
    155 #define BCM2835_UART0_ITIP       (BCM2835_UART0_BASE+0x84)
    156 #define BCM2835_UART0_ITOP       (BCM2835_UART0_BASE+0x88)
    157 #define BCM2835_UART0_TDR        (BCM2835_UART0_BASE+0x8C)
     140#define BCM2835_UART0_DR         (BCM2835_UART0_BASE + 0x00)
     141#define BCM2835_UART0_RSRECR     (BCM2835_UART0_BASE + 0x04)
     142#define BCM2835_UART0_FR         (BCM2835_UART0_BASE + 0x18)
     143#define BCM2835_UART0_ILPR       (BCM2835_UART0_BASE + 0x20)
     144#define BCM2835_UART0_IBRD       (BCM2835_UART0_BASE + 0x24)
     145#define BCM2835_UART0_FBRD       (BCM2835_UART0_BASE + 0x28)
     146#define BCM2835_UART0_LCRH       (BCM2835_UART0_BASE + 0x2C)
     147#define BCM2835_UART0_CR         (BCM2835_UART0_BASE + 0x30)
     148#define BCM2835_UART0_IFLS       (BCM2835_UART0_BASE + 0x34)
     149#define BCM2835_UART0_IMSC       (BCM2835_UART0_BASE + 0x38)
     150#define BCM2835_UART0_RIS        (BCM2835_UART0_BASE + 0x3C)
     151#define BCM2835_UART0_MIS        (BCM2835_UART0_BASE + 0x40)
     152#define BCM2835_UART0_ICR        (BCM2835_UART0_BASE + 0x44)
     153#define BCM2835_UART0_DMACR      (BCM2835_UART0_BASE + 0x48)
     154#define BCM2835_UART0_ITCR       (BCM2835_UART0_BASE + 0x80)
     155#define BCM2835_UART0_ITIP       (BCM2835_UART0_BASE + 0x84)
     156#define BCM2835_UART0_ITOP       (BCM2835_UART0_BASE + 0x88)
     157#define BCM2835_UART0_TDR        (BCM2835_UART0_BASE + 0x8C)
    158158
    159159#define BCM2835_UART0_MIS_RX    0x10
     
    174174 */
    175175
    176 #define BCM2835_I2C_BASE           (0x20804000)
    177 
    178 #define BCM2835_I2C_C              (BCM2835_I2C_BASE+0x00)
    179 #define BCM2835_I2C_S              (BCM2835_I2C_BASE+0x04)
    180 #define BCM2835_I2C_DLEN           (BCM2835_I2C_BASE+0x08)
    181 #define BCM2835_I2C_A              (BCM2835_I2C_BASE+0x0C)
    182 #define BCM2835_I2C_FIFO           (BCM2835_I2C_BASE+0x10)
    183 #define BCM2835_I2C_DIV            (BCM2835_I2C_BASE+0x14)
    184 #define BCM2835_I2C_DEL            (BCM2835_I2C_BASE+0x18)
    185 #define BCM2835_I2C_CLKT           (BCM2835_I2C_BASE+0x1C)
     176#define BCM2835_I2C_BASE           (RPI_PERIPHERAL_BASE + 0x804000)
     177
     178#define BCM2835_I2C_C              (BCM2835_I2C_BASE + 0x00)
     179#define BCM2835_I2C_S              (BCM2835_I2C_BASE + 0x04)
     180#define BCM2835_I2C_DLEN           (BCM2835_I2C_BASE + 0x08)
     181#define BCM2835_I2C_A              (BCM2835_I2C_BASE + 0x0C)
     182#define BCM2835_I2C_FIFO           (BCM2835_I2C_BASE + 0x10)
     183#define BCM2835_I2C_DIV            (BCM2835_I2C_BASE + 0x14)
     184#define BCM2835_I2C_DEL            (BCM2835_I2C_BASE + 0x18)
     185#define BCM2835_I2C_CLKT           (BCM2835_I2C_BASE + 0x1C)
    186186
    187187/** @} */
     
    193193 */
    194194
    195 #define BCM2835_SPI_BASE           (0x20204000)
    196 
    197 #define BCM2835_SPI_CS             (BCM2835_SPI_BASE+0x00)
    198 #define BCM2835_SPI_FIFO           (BCM2835_SPI_BASE+0x04)
    199 #define BCM2835_SPI_CLK            (BCM2835_SPI_BASE+0x08)
    200 #define BCM2835_SPI_DLEN           (BCM2835_SPI_BASE+0x0C)
    201 #define BCM2835_SPI_LTOH           (BCM2835_SPI_BASE+0x10)
    202 #define BCM2835_SPI_DC             (BCM2835_SPI_BASE+0x14)
     195#define BCM2835_SPI_BASE           (RPI_PERIPHERAL_BASE + 0x204000)
     196
     197#define BCM2835_SPI_CS             (BCM2835_SPI_BASE + 0x00)
     198#define BCM2835_SPI_FIFO           (BCM2835_SPI_BASE + 0x04)
     199#define BCM2835_SPI_CLK            (BCM2835_SPI_BASE + 0x08)
     200#define BCM2835_SPI_DLEN           (BCM2835_SPI_BASE + 0x0C)
     201#define BCM2835_SPI_LTOH           (BCM2835_SPI_BASE + 0x10)
     202#define BCM2835_SPI_DC             (BCM2835_SPI_BASE + 0x14)
    203203
    204204/** @} */
     
    210210 */
    211211
    212 #define BCM2835_I2C_SPI_BASE       (0x20214000)
    213 
    214 #define BCM2835_I2C_SPI_DR         (BCM2835_I2C_SPI_BASE+0x00)
    215 #define BCM2835_I2C_SPI_RSR        (BCM2835_I2C_SPI_BASE+0x04)
    216 #define BCM2835_I2C_SPI_SLV        (BCM2835_I2C_SPI_BASE+0x08)
    217 #define BCM2835_I2C_SPI_CR         (BCM2835_I2C_SPI_BASE+0x0C)
    218 #define BCM2835_I2C_SPI_FR         (BCM2835_I2C_SPI_BASE+0x10)
    219 #define BCM2835_I2C_SPI_IFLS       (BCM2835_I2C_SPI_BASE+0x14)
    220 #define BCM2835_I2C_SPI_IMSC       (BCM2835_I2C_SPI_BASE+0x18)
    221 #define BCM2835_I2C_SPI_RIS        (BCM2835_I2C_SPI_BASE+0x1C)
    222 #define BCM2835_I2C_SPI_MIS        (BCM2835_I2C_SPI_BASE+0x20)
    223 #define BCM2835_I2C_SPI_ICR        (BCM2835_I2C_SPI_BASE+0x24)
    224 #define BCM2835_I2C_SPI_DMACR      (BCM2835_I2C_SPI_BASE+0x28)
    225 #define BCM2835_I2C_SPI_TDR        (BCM2835_I2C_SPI_BASE+0x2C)
    226 #define BCM2835_I2C_SPI_GPUSTAT    (BCM2835_I2C_SPI_BASE+0x30)
    227 #define BCM2835_I2C_SPI_HCTRL      (BCM2835_I2C_SPI_BASE+0x34)
     212#define BCM2835_I2C_SPI_BASE       (RPI_PERIPHERAL_BASE + 0x214000)
     213
     214#define BCM2835_I2C_SPI_DR         (BCM2835_I2C_SPI_BASE + 0x00)
     215#define BCM2835_I2C_SPI_RSR        (BCM2835_I2C_SPI_BASE + 0x04)
     216#define BCM2835_I2C_SPI_SLV        (BCM2835_I2C_SPI_BASE + 0x08)
     217#define BCM2835_I2C_SPI_CR         (BCM2835_I2C_SPI_BASE + 0x0C)
     218#define BCM2835_I2C_SPI_FR         (BCM2835_I2C_SPI_BASE + 0x10)
     219#define BCM2835_I2C_SPI_IFLS       (BCM2835_I2C_SPI_BASE + 0x14)
     220#define BCM2835_I2C_SPI_IMSC       (BCM2835_I2C_SPI_BASE + 0x18)
     221#define BCM2835_I2C_SPI_RIS        (BCM2835_I2C_SPI_BASE + 0x1C)
     222#define BCM2835_I2C_SPI_MIS        (BCM2835_I2C_SPI_BASE + 0x20)
     223#define BCM2835_I2C_SPI_ICR        (BCM2835_I2C_SPI_BASE + 0x24)
     224#define BCM2835_I2C_SPI_DMACR      (BCM2835_I2C_SPI_BASE + 0x28)
     225#define BCM2835_I2C_SPI_TDR        (BCM2835_I2C_SPI_BASE + 0x2C)
     226#define BCM2835_I2C_SPI_GPUSTAT    (BCM2835_I2C_SPI_BASE + 0x30)
     227#define BCM2835_I2C_SPI_HCTRL      (BCM2835_I2C_SPI_BASE + 0x34)
    228228
    229229/** @} */
     
    263263#define BCM2835_GPU_TIMER_BASE    (RPI_PERIPHERAL_BASE + 0x3000)
    264264
    265 #define BCM2835_GPU_TIMER_CS      (BCM2835_TIMER_BASE+0x00)
    266 #define BCM2835_GPU_TIMER_CLO     (BCM2835_TIMER_BASE+0x04)
    267 #define BCM2835_GPU_TIMER_CHI     (BCM2835_TIMER_BASE+0x08)
    268 #define BCM2835_GPU_TIMER_C0      (BCM2835_TIMER_BASE+0x0C)
    269 #define BCM2835_GPU_TIMER_C1      (BCM2835_TIMER_BASE+0x10)
    270 #define BCM2835_GPU_TIMER_C2      (BCM2835_TIMER_BASE+0x14)
    271 #define BCM2835_GPU_TIMER_C3      (BCM2835_TIMER_BASE+0x18)
     265#define BCM2835_GPU_TIMER_CS      (BCM2835_TIMER_BASE + 0x00)
     266#define BCM2835_GPU_TIMER_CLO     (BCM2835_TIMER_BASE + 0x04)
     267#define BCM2835_GPU_TIMER_CHI     (BCM2835_TIMER_BASE + 0x08)
     268#define BCM2835_GPU_TIMER_C0      (BCM2835_TIMER_BASE + 0x0C)
     269#define BCM2835_GPU_TIMER_C1      (BCM2835_TIMER_BASE + 0x10)
     270#define BCM2835_GPU_TIMER_C2      (BCM2835_TIMER_BASE + 0x14)
     271#define BCM2835_GPU_TIMER_C3      (BCM2835_TIMER_BASE + 0x18)
     272
     273/** @} */
     274
     275/**
     276 * @name EMMC Registers
     277 *
     278 * @{
     279 */
     280
     281/**
     282 * NOTE: Since the SD controller follows the SDHCI standard,
     283 *       the rtems-libbsd tree already provides the remaining registers.
     284 */
     285
     286#define BCM2835_EMMC_BASE              (RPI_PERIPHERAL_BASE + 0x300000)
    272287
    273288/** @} */
  • c/src/lib/libbsp/arm/raspberrypi/preinstall.am

    rf7ea9579 r7aca0fe  
    139139PREINSTALL_FILES += $(PROJECT_INCLUDE)/bsp/rpi-gpio.h
    140140
     141$(PROJECT_INCLUDE)/bsp/i2c.h: include/i2c.h $(PROJECT_INCLUDE)/bsp/$(dirstamp)
     142        $(INSTALL_DATA) $< $(PROJECT_INCLUDE)/bsp/i2c.h
     143PREINSTALL_FILES += $(PROJECT_INCLUDE)/bsp/i2c.h
     144
     145$(PROJECT_INCLUDE)/bsp/spi.h: include/spi.h $(PROJECT_INCLUDE)/bsp/$(dirstamp)
     146        $(INSTALL_DATA) $< $(PROJECT_INCLUDE)/bsp/spi.h
     147PREINSTALL_FILES += $(PROJECT_INCLUDE)/bsp/spi.h
     148
    141149$(PROJECT_INCLUDE)/libcpu/cache_.h: ../../../libcpu/arm/shared/include/cache_.h $(PROJECT_INCLUDE)/libcpu/$(dirstamp)
    142150        $(INSTALL_DATA) $< $(PROJECT_INCLUDE)/libcpu/cache_.h
Note: See TracChangeset for help on using the changeset viewer.