From 5e5f1df1fad4674a87019fa6c72a2f2d2e0d8db0 Mon Sep 17 00:00:00 2001 From: Michal Sojka Date: Fri, 28 Aug 2015 14:20:13 +0200 Subject: [PATCH] Make configuration of SPI devices target dependent i.e. move it from driver to a separate, target-specific file. --- Makefile.var | 3 +- rpp/include/drv/_tms570_rpp/spi_def.h | 42 +++++++++ rpp/include/drv/spi_def.h | 33 +++++++ rpp/include/drv/spi_tms570.h | 9 +- rpp/src/drv/_tms570_rpp/spi_def.c | 111 ++++++++++++++++++++++ rpp/src/drv/spi_tms570.c | 128 +++----------------------- rpp/src/rpp/dac.c | 4 +- rpp/src/rpp/din.c | 4 +- rpp/src/rpp/fr.c | 4 +- rpp/src/rpp/hbr.c | 4 +- rpp/src/rpp/lout.c | 4 +- 11 files changed, 216 insertions(+), 130 deletions(-) create mode 100644 rpp/include/drv/_tms570_rpp/spi_def.h create mode 100644 rpp/include/drv/spi_def.h create mode 100644 rpp/src/drv/_tms570_rpp/spi_def.c diff --git a/Makefile.var b/Makefile.var index bf3e103..30da060 100644 --- a/Makefile.var +++ b/Makefile.var @@ -141,7 +141,8 @@ rpp_lib_SOURCES_$(TARGET_HAS_DMM) += rpp/src/sys/ti_drv_dmm.c rpp_lib_SOURCES_$(TARGET_HAS_SPI) += \ rpp/src/drv/spi.c \ - rpp/src/drv/spi_tms570.c + rpp/src/drv/spi_tms570.c \ + rpp/src/drv/_$(TARGET)/spi_def.c \ rpp_lib_SOURCES_posix = \ os/$(rpp_lib_OS)/src/rpp/sci_posix.c diff --git a/rpp/include/drv/_tms570_rpp/spi_def.h b/rpp/include/drv/_tms570_rpp/spi_def.h new file mode 100644 index 0000000..77c8641 --- /dev/null +++ b/rpp/include/drv/_tms570_rpp/spi_def.h @@ -0,0 +1,42 @@ +/* + * Copyright (C) 2015 Czech Technical University in Prague + * + * Authors: + * - Michal Sojka + * + * This document contains proprietary information belonging to Czech + * Technical University in Prague. Passing on and copying of this + * document, and communication of its contents is not permitted + * without prior written authorization. + * + */ + +#ifndef _TMS570_RPP_SPI_DEF_H +#define _TMS570_RPP_SPI_DEF_H + +#include "drv/spi_tms570.h" + +/* Identifiers of SPI devices (=chips) bound to particular + * interfaces */ + +enum spi_ifc1_devices { + SPIDEV_MC33972 = 0, + SPIDEV_NCV7608_2x, +}; +enum spi_ifc2_devices { + SPIDEV_SDCARD = 0 +}; +enum spi_ifc3_devices { + SPIDEV_MCP4922_1 = 0, + SPIDEV_MCP4922_2, + SPIDEV_MCP4922_3 +}; +enum spi_ifc4_devices { + SPIDEV_L99H01 = 0, + SPIDEV_TJA1082_1, + SPIDEV_TJA1082_2 +}; + +extern spi_tms570_drv_t spi_ifcs[4]; + +#endif diff --git a/rpp/include/drv/spi_def.h b/rpp/include/drv/spi_def.h new file mode 100644 index 0000000..102d548 --- /dev/null +++ b/rpp/include/drv/spi_def.h @@ -0,0 +1,33 @@ +/* + * Copyright (C) 2015 Czech Technical University in Prague + * + * Authors: + * - Michal Sojka + * + * This document contains proprietary information belonging to Czech + * Technical University in Prague. Passing on and copying of this + * document, and communication of its contents is not permitted + * without prior written authorization. + * + */ + +#ifndef DRV_SPI_DEF_H +#define DRV_SPI_DEF_H + +/* Definition of spi names (enum spi_id) */ + +#if defined(TARGET_POSIX) +//#include "drv/_rm48_hdk/spi_def.h" +#elif defined(TARGET_RM48_HDK) +//#include "drv/_rm48_hdk/spi_def.h" +#elif defined(TARGET_TMS570_HDK) +//#include "drv/_tms570_hdk/spi_def.h" +#elif defined(TARGET_TMS570_HYDCTR) +//#include "drv/_tms570_hydctr/spi_def.h" +#elif defined(TARGET_TMS570_RPP) +#include "drv/_tms570_rpp/spi_def.h" +#else +#error No supported target specified! +#endif + +#endif diff --git a/rpp/include/drv/spi_tms570.h b/rpp/include/drv/spi_tms570.h index cde2f33..4919452 100644 --- a/rpp/include/drv/spi_tms570.h +++ b/rpp/include/drv/spi_tms570.h @@ -2,9 +2,14 @@ * * @file spi_resp_transl.h * - * @copyright Copyright (C) 2012-2013 Czech Technical University in Prague + * @copyright Copyright (C) 2012-2013, 2015 Czech Technical University in Prague * * @author Michal Horn + * + * This document contains proprietary information belonging to Czech + * Technical University in Prague. Passing on and copying of this + * document, and communication of its contents is not permitted + * without prior written authorization. */ #ifndef _MYSPI_H_ @@ -199,7 +204,7 @@ typedef struct spi_tms570_drv { //extern spi_tms570_drv_t spi_tms570_ifcs[4]; //extern spi_dev_t spi_devs[]; -int spi_tms570_init(void); +int spi_tms570_init(spi_tms570_drv_t *ifcs, int count); spi_drv_t *spi_find_drv(char *name, int number); diff --git a/rpp/src/drv/_tms570_rpp/spi_def.c b/rpp/src/drv/_tms570_rpp/spi_def.c new file mode 100644 index 0000000..0aef333 --- /dev/null +++ b/rpp/src/drv/_tms570_rpp/spi_def.c @@ -0,0 +1,111 @@ +/* + * Copyright (C) 2015 Czech Technical University in Prague + * + * Authors: + * - Michal Sojka + * + * This document contains proprietary information belonging to Czech + * Technical University in Prague. Passing on and copying of this + * document, and communication of its contents is not permitted + * without prior written authorization. + * + */ + +#include "drv/spi_def.h" +#include "drv/spi_tms570.h" + +static spi_dev_t spi_ifc1_devs[] = { + [SPIDEV_MC33972] = { + .cs = SPI_CS_3, + .dfsel = 0, + .wdel = 0, + .cshold = 1, + .dlen = 0 + }, + [SPIDEV_NCV7608_2x] = { + .cs = SPI_CS_4, + .dfsel = 0, + .wdel = 0, + .cshold = 1, + .dlen = 0 + } +}; + +static spi_dev_t spi_ifc2_devs[] = { + [SPIDEV_SDCARD] = { + .cs = SPI_CS_0, + .dfsel = 0, + .wdel = 0, + .cshold = 1, + .dlen = 0 + } +}; + +static spi_dev_t spi_ifc3_devs[] = { + [SPIDEV_MCP4922_1] = { + .cs = SPI_CS_0, + .dfsel = 1, + .wdel = 0, + .cshold = 1, + .dlen = 0 + }, + [SPIDEV_MCP4922_2] = { + .cs = SPI_CS_4, + .dfsel = 1, + .wdel = 0, + .cshold = 1, + .dlen = 0 + }, + [SPIDEV_MCP4922_3] = { + .cs = SPI_CS_5, + .dfsel = 1, + .wdel = 0, + .cshold = 1, + .dlen = 0 + } +}; + +static spi_dev_t spi_ifc4_devs[] = { + [SPIDEV_L99H01] = { + .cs = SPI_CS_0 | SPI_CS_DMM0, + .dfsel = 1, + .wdel = 0, + .cshold = 1, + .dlen = 0 + }, + [SPIDEV_TJA1082_1] = { + .cs = SPI_CS_0 | SPI_CS_DMM1, + .dfsel = 0, + .wdel = 0, + .cshold = 1, + .dlen = 0 + }, + [SPIDEV_TJA1082_2] = { + .cs = SPI_CS_0 | SPI_CS_DMM2, + .dfsel = 0, + .wdel = 0, + .cshold = 1, + .dlen = 0 + } +}; + +/* Each SPI interface has its own static spi_tms570_drv_t struct + Index to this array is "SPI Interface ID -1" */ +spi_tms570_drv_t spi_ifcs[4] = { + [0] = { + .spi = mibspi_compat_REG1, + .spi_devs = spi_ifc1_devs, + }, + [1] = { + .spi = spi_compat_REG2, + .spi_devs = spi_ifc2_devs, + }, + [2] = { + .spi = mibspi_compat_REG3, + .spi_devs = spi_ifc3_devs, + }, + [3] = { + .spi = spi_compat_REG4, + .spi_devs = spi_ifc4_devs, + }, +}; diff --git a/rpp/src/drv/spi_tms570.c b/rpp/src/drv/spi_tms570.c index 64f94a1..f2565b0 100644 --- a/rpp/src/drv/spi_tms570.c +++ b/rpp/src/drv/spi_tms570.c @@ -16,103 +16,10 @@ //#include "sys_common.h" //#include "ti_drv_dmm.h" #include "sys/ti_drv_dmm.h" +#include "drv/spi_def.h" static int spi_tms570_ctrl_fnc(spi_drv_t *ifc, int ctrl, void *p); - -/* Each SPI interface has its own static spi_tms570_drv_t struct - Index to this array is "SPI Interface ID -1" */ -spi_tms570_drv_t spi_tms570_ifcs[4]; - -/* Addresses of SPI devices (=chips) bound to particular interfaces */ -enum spi_ifc1_devices { - SPIDEV_MC33972 = 0, SPIDEV_NCV7608_2x -}; -enum spi_ifc2_devices { - SPIDEV_SDCARD = 0 -}; -enum spi_ifc3_devices { - SPIDEV_MCP4922_1 = 0, SPIDEV_MCP4922_2, SPIDEV_MCP4922_3 -}; -enum spi_ifc4_devices { - SPIDEV_L99H01 = 0, SPIDEV_TJA1082_1, SPIDEV_TJA1082_2 -}; - -spi_dev_t spi_ifc1_devs[] = { - [SPIDEV_MC33972] = { - .cs = SPI_CS_3, - .dfsel = 0, - .wdel = 0, - .cshold = 1, - .dlen = 0 - }, - [SPIDEV_NCV7608_2x] = { - .cs = SPI_CS_4, - .dfsel = 0, - .wdel = 0, - .cshold = 1, - .dlen = 0 - } -}; - -spi_dev_t spi_ifc2_devs[] = { - [SPIDEV_SDCARD] = { - .cs = SPI_CS_0, - .dfsel = 0, - .wdel = 0, - .cshold = 1, - .dlen = 0 - } -}; - -spi_dev_t spi_ifc3_devs[] = { - [SPIDEV_MCP4922_1] = { - .cs = SPI_CS_0, - .dfsel = 1, - .wdel = 0, - .cshold = 1, - .dlen = 0 - }, - [SPIDEV_MCP4922_2] = { - .cs = SPI_CS_4, - .dfsel = 1, - .wdel = 0, - .cshold = 1, - .dlen = 0 - }, - [SPIDEV_MCP4922_3] = { - .cs = SPI_CS_5, - .dfsel = 1, - .wdel = 0, - .cshold = 1, - .dlen = 0 - } -}; - -spi_dev_t spi_ifc4_devs[] = { - [SPIDEV_L99H01] = { - .cs = SPI_CS_0 | SPI_CS_DMM0, - .dfsel = 1, - .wdel = 0, - .cshold = 1, - .dlen = 0 - }, - [SPIDEV_TJA1082_1] = { - .cs = SPI_CS_0 | SPI_CS_DMM1, - .dfsel = 0, - .wdel = 0, - .cshold = 1, - .dlen = 0 - }, - [SPIDEV_TJA1082_2] = { - .cs = SPI_CS_0 | SPI_CS_DMM2, - .dfsel = 0, - .wdel = 0, - .cshold = 1, - .dlen = 0 - } -}; - /* Universal piece of code initializing SPI or MibSPI devices in "compatibility" mode. @@ -305,30 +212,19 @@ void spiInit(spiBASE_compat_t *spiREG) static boolean_t spi_initialized = FALSE; -int spi_tms570_init(void) +int spi_tms570_init(spi_tms570_drv_t *ifcs, int count) { if (spi_initialized == TRUE) return FAILURE; spi_initialized = TRUE; int i; - spi_tms570_ifcs[0].spi = mibspi_compat_REG1; - spi_tms570_ifcs[1].spi = spi_compat_REG2; - spi_tms570_ifcs[2].spi = mibspi_compat_REG3; - spi_tms570_ifcs[3].spi = spi_compat_REG4; - - spi_tms570_ifcs[0].spi_devs = spi_ifc1_devs; - spi_tms570_ifcs[1].spi_devs = spi_ifc2_devs; - spi_tms570_ifcs[2].spi_devs = spi_ifc3_devs; - spi_tms570_ifcs[3].spi_devs = spi_ifc4_devs; - - - for (i = 0; i <= 3; i++) { - spiInit(spi_tms570_ifcs[i].spi); - spi_tms570_ifcs[i].spi_drv.ctrl_fnc = spi_tms570_ctrl_fnc; - spi_rq_queue_init_head(&(spi_tms570_ifcs[i].spi_drv)); - spi_tms570_ifcs[i].spi_drv.msg_act = NULL; - spi_tms570_ifcs[i].spi_drv.flags = SPI_IFC_ON; + for (i = 0; i < count; i++) { + spiInit(ifcs[i].spi); + ifcs[i].spi_drv.ctrl_fnc = spi_tms570_ctrl_fnc; + spi_rq_queue_init_head(&(ifcs[i].spi_drv)); + ifcs[i].spi_drv.msg_act = NULL; + ifcs[i].spi_drv.flags = SPI_IFC_ON; } //dmmREG->PC5 = (1 << DMM_DATA5); /* Set to L */ @@ -375,9 +271,7 @@ static int spi_tms570_ctrl_fnc(spi_drv_t *ifc, int ctrl, void *p) void spi_tms570_isr(int spi_ifc, uint32_t flags) { spi_msg_head_t *msg; - spi_tms570_drv_t *spi_tms570_drv; - - spi_tms570_drv = &spi_tms570_ifcs[spi_ifc]; + spi_tms570_drv_t *spi_tms570_drv = &spi_ifcs[spi_ifc]; spi_isr_lock_level_t saveif; uint8_t val_to_wr; uint32_t cs; @@ -509,10 +403,10 @@ void spi_tms570_isr(int spi_ifc, uint32_t flags) spi_drv_t *spi_find_drv(char *name, int number) { - if (number < 1 || number > (sizeof(spi_tms570_ifcs)/sizeof(spi_tms570_ifcs[0]))) + if (number < 1 || number > ARRAY_SIZE(spi_ifcs)) return NULL; - return &spi_tms570_ifcs[number - 1].spi_drv; + return &spi_ifcs[number - 1].spi_drv; } #pragma INTERRUPT(spi2LowLevelInterrupt, IRQ) diff --git a/rpp/src/rpp/dac.c b/rpp/src/rpp/dac.c index f2bdbe0..e5dfc83 100644 --- a/rpp/src/rpp/dac.c +++ b/rpp/src/rpp/dac.c @@ -23,7 +23,7 @@ #ifndef FREERTOS_POSIX #include "drv/dac.h" -#include "drv/spi_tms570.h" +#include "drv/spi_def.h" #endif RPP_MUTEX_DEFINE(mutex_dac); @@ -38,7 +38,7 @@ int8_t rpp_dac_init() return FAILURE; initialized = TRUE; #ifndef FREERTOS_POSIX - spi_tms570_init(); + spi_tms570_init(spi_ifcs, ARRAY_SIZE(spi_ifcs)); #endif // Configure board // FIXME find out why board has default output of ~3.8V diff --git a/rpp/src/rpp/din.c b/rpp/src/rpp/din.c index e65380a..0405645 100644 --- a/rpp/src/rpp/din.c +++ b/rpp/src/rpp/din.c @@ -23,7 +23,7 @@ #ifndef FREERTOS_POSIX #include "drv/din.h" -#include "drv/spi_tms570.h" +#include "drv/spi_def.h" #endif RPP_MUTEX_DEFINE(mutex_din); @@ -41,7 +41,7 @@ int8_t rpp_din_init() dmmInit(); gioInit(); hetInit(); - spi_tms570_init(); + spi_tms570_init(spi_ifcs, ARRAY_SIZE(spi_ifcs)); #endif return SUCCESS; diff --git a/rpp/src/rpp/fr.c b/rpp/src/rpp/fr.c index 728ee80..3b37bef 100644 --- a/rpp/src/rpp/fr.c +++ b/rpp/src/rpp/fr.c @@ -26,7 +26,7 @@ #include "stdio.h" #include "string.h" #include "drv/drv.h" -#include "drv/spi_tms570.h" +#include "drv/spi_def.h" #include "rpp/mutex.h" RPP_MUTEX_DEFINE(mutex_fr); @@ -40,7 +40,7 @@ int8_t rpp_fr_init_driver(const Fr_ConfigType *config_ptr, uint32_t *error) if (rpp_fr_state >= RPP_FR_DRV_INITIALIZED) return FAILURE; #ifndef FREERTOS_POSIX - spi_tms570_init(); + spi_tms570_init(spi_ifcs, ARRAY_SIZE(spi_ifcs)); #endif if (!RPP_MUTEX_INIT(mutex_fr)) return FAILURE; diff --git a/rpp/src/rpp/hbr.c b/rpp/src/rpp/hbr.c index eb41119..d628092 100644 --- a/rpp/src/rpp/hbr.c +++ b/rpp/src/rpp/hbr.c @@ -23,7 +23,7 @@ #ifndef FREERTOS_POSIX #include "drv/hbridge.h" -#include "drv/spi_tms570.h" +#include "drv/spi_def.h" #endif RPP_MUTEX_DEFINE(mutex_hbr); @@ -40,7 +40,7 @@ int8_t rpp_hbr_init() #ifndef FREERTOS_POSIX dmmInit(); hetInit(); - spi_tms570_init(); + spi_tms570_init(spi_ifcs, ARRAY_SIZE(spi_ifcs)); #endif return SUCCESS; } diff --git a/rpp/src/rpp/lout.c b/rpp/src/rpp/lout.c index ca23665..798a2c6 100644 --- a/rpp/src/rpp/lout.c +++ b/rpp/src/rpp/lout.c @@ -25,7 +25,7 @@ RPP_MUTEX_DEFINE(mutex_lout); #ifndef FREERTOS_POSIX #include "drv/lout.h" -#include "drv/spi_tms570.h" +#include "drv/spi_def.h" #endif static boolean_t initialized = FALSE; @@ -38,7 +38,7 @@ int8_t rpp_lout_init() return FAILURE; initialized = TRUE; #ifndef FREERTOS_POSIX - spi_tms570_init(); + spi_tms570_init(spi_ifcs, ARRAY_SIZE(spi_ifcs)); #endif // FIXME: Implement. -- 2.39.2