i.e. move it from driver to a separate, target-specific file.
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
--- /dev/null
+/*
+ * Copyright (C) 2015 Czech Technical University in Prague
+ *
+ * Authors:
+ * - Michal Sojka <sojkam1@fel.cvut.cz>
+ *
+ * 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
--- /dev/null
+/*
+ * Copyright (C) 2015 Czech Technical University in Prague
+ *
+ * Authors:
+ * - Michal Sojka <sojkam1@fel.cvut.cz>
+ *
+ * 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
*
* @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 <hornmich@fel.cvut.cz>
+ *
+ * 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_
//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);
--- /dev/null
+/*
+ * Copyright (C) 2015 Czech Technical University in Prague
+ *
+ * Authors:
+ * - Michal Sojka <sojkam1@fel.cvut.cz>
+ *
+ * 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,
+ },
+};
//#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.
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 */
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;
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)
#ifndef FREERTOS_POSIX
#include "drv/dac.h"
-#include "drv/spi_tms570.h"
+#include "drv/spi_def.h"
#endif
RPP_MUTEX_DEFINE(mutex_dac);
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
#ifndef FREERTOS_POSIX
#include "drv/din.h"
-#include "drv/spi_tms570.h"
+#include "drv/spi_def.h"
#endif
RPP_MUTEX_DEFINE(mutex_din);
dmmInit();
gioInit();
hetInit();
- spi_tms570_init();
+ spi_tms570_init(spi_ifcs, ARRAY_SIZE(spi_ifcs));
#endif
return SUCCESS;
#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);
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;
#ifndef FREERTOS_POSIX
#include "drv/hbridge.h"
-#include "drv/spi_tms570.h"
+#include "drv/spi_def.h"
#endif
RPP_MUTEX_DEFINE(mutex_hbr);
#ifndef FREERTOS_POSIX
dmmInit();
hetInit();
- spi_tms570_init();
+ spi_tms570_init(spi_ifcs, ARRAY_SIZE(spi_ifcs));
#endif
return SUCCESS;
}
#ifndef FREERTOS_POSIX
#include "drv/lout.h"
-#include "drv/spi_tms570.h"
+#include "drv/spi_def.h"
#endif
static boolean_t initialized = FALSE;
return FAILURE;
initialized = TRUE;
#ifndef FREERTOS_POSIX
- spi_tms570_init();
+ spi_tms570_init(spi_ifcs, ARRAY_SIZE(spi_ifcs));
#endif
// FIXME: Implement.