From 90bc8e050596ef21ac11540fa19d1697710b2379 Mon Sep 17 00:00:00 2001 From: Hauke Petersen Date: Mon, 13 Feb 2017 14:26:44 +0100 Subject: [PATCH] boards/avsextrem: remove deprectated smb380 driver --- boards/avsextrem/Makefile | 2 +- boards/avsextrem/Makefile.include | 1 - boards/avsextrem/drivers/Makefile | 3 - boards/avsextrem/drivers/avsextrem-smb380.c | 1309 ------------------- boards/avsextrem/drivers/avsextrem-ssp0.c | 425 ------ boards/avsextrem/include/smb380-board.h | 258 ---- boards/avsextrem/include/ssp0-board.h | 125 -- 7 files changed, 1 insertion(+), 2122 deletions(-) delete mode 100644 boards/avsextrem/drivers/Makefile delete mode 100644 boards/avsextrem/drivers/avsextrem-smb380.c delete mode 100644 boards/avsextrem/drivers/avsextrem-ssp0.c delete mode 100644 boards/avsextrem/include/smb380-board.h delete mode 100644 boards/avsextrem/include/ssp0-board.h diff --git a/boards/avsextrem/Makefile b/boards/avsextrem/Makefile index adadebde0d..5f15bf5c40 100644 --- a/boards/avsextrem/Makefile +++ b/boards/avsextrem/Makefile @@ -1,5 +1,5 @@ MODULE = board -DIRS = drivers $(RIOTBOARD)/msba2-common +DIRS = $(RIOTBOARD)/msba2-common include $(RIOTBASE)/Makefile.base diff --git a/boards/avsextrem/Makefile.include b/boards/avsextrem/Makefile.include index 7dc6aaa091..00607d49c0 100644 --- a/boards/avsextrem/Makefile.include +++ b/boards/avsextrem/Makefile.include @@ -1,4 +1,3 @@ USEMODULE += msba2-common -USEMODULE += avsextrem-drivers include $(RIOTBOARD)/msba2-common/Makefile.include diff --git a/boards/avsextrem/drivers/Makefile b/boards/avsextrem/drivers/Makefile deleted file mode 100644 index 1064458838..0000000000 --- a/boards/avsextrem/drivers/Makefile +++ /dev/null @@ -1,3 +0,0 @@ -MODULE = avsextrem-drivers - -include $(RIOTBASE)/Makefile.base diff --git a/boards/avsextrem/drivers/avsextrem-smb380.c b/boards/avsextrem/drivers/avsextrem-smb380.c deleted file mode 100644 index 15d5c60ca5..0000000000 --- a/boards/avsextrem/drivers/avsextrem-smb380.c +++ /dev/null @@ -1,1309 +0,0 @@ -/* - * msba2acc-smb380.c - implementation of the Driver for the SMB380 acceleration - * sensor on the AVSEXTREM board. - * Copyright (C) 2013 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. - * - */ - -/** - * @file - * @internal - * @brief SMB380 acceleration sensor driver for the LPC2387 on the - * AVSEXTREM board. - * - * @author Marco Ziegert - * @author Zakaria Kasmi - * @version $Revision: 3854 $ - * - * @note $Id: msba2acc-smb380.c 3854 2010-01-18 15:27:01Z zkasmi $ - */ - - -#include -#include -#include - -#include "lpc23xx.h" /* LPC23XX/24xx Peripheral Registers */ -#include "cpu.h" -#include "VIC.h" -#include "ssp0-board.h" -#include "smb380-board.h" -#include "xtimer.h" -#include "sched.h" -#include "msg.h" -#include "irq.h" - -#include "gpioint.h" -#include "math.h" -#include "lpc2387.h" - - -kernel_pid_t simple_pid = KERNEL_PID_UNDEF; -int16_t simple_buffer[4]; - -volatile int16_t *ringBuff_X = NULL; -volatile int16_t *ringBuff_Y = NULL; -volatile int16_t *ringBuff_Z = NULL; -volatile int16_t *ringBuff_T = NULL; -uint16_t readPointerPos[SMB380_RING_BUFF_MAX_THREADS]; -kernel_pid_t PointerList[SMB380_RING_BUFF_MAX_THREADS]; -static msg_t wakeupmessage; - -/* - * pointer to a user-defined function which is called during a writepointer - * action - */ -uint8_t (*smb380function)(int16_t *); -uint16_t sampleRateSMB380; // condition if range-check should be done -bool dynRange = false; -uint8_t counter_Decreasing = 0; - -volatile uint16_t interruptTicksSMB380; - -typedef struct { - unsigned writePointerPos; //Writepointer position - /* - * check value for updated range settings (only needed for multiplication - * in Float-mode - */ - uint8_t countRange; - uint8_t range; //current range -} settingsSMB380; - -settingsSMB380 settings; - -// measuring temperature dependent internal sample rate of SMB380 -static volatile uint32_t tickStart = 0; -static volatile uint32_t tickLastSample = 0; -static volatile uint32_t tickCurrentSamples = 0; - -uint8_t initRingReadPointerforCurrentThread(void); -uint8_t getRingReadPointerforCurrentThread(void); -void wakeUpRegisteredProcesses(void); -uint8_t smb380emptyfunction(int16_t *); -static void SMB380_extIntHandler(void); - -extern unsigned long ktimer_now(void); - -float SMB380_getSampleRatio(void) -{ - return ((1.0 / ((float)(tickLastSample - tickStart) / tickCurrentSamples)) * - 100000); -} - -uint8_t SMB380_HystereseFunctionSample(int16_t *value) -{ - static int16_t x = 0, y = 0, z = 0; - static uint8_t counter = 0; - int16_t delta = abs(value[0] - x) + abs(value[1] - y) + abs(value[2] - z); - - if (delta < 40) { //TODO: delta and counter are constant values, change it! - counter++; - } - else { - counter = 0; - } - - x = value[0]; - y = value[1]; - z = value[2]; - - if (smb380_mode == SMB380_THRESHOLD) { - SMB380_disableAnyMotionLimit(); - SMB380_enableNewDataInt(); - smb380_mode = SMB380_CONTINOUS; - printf("Threshold: x=%i, y=%i, z=%i\n\r", value[0], value[1], value[2]); - } - - if ((counter == 100) && (smb380_mode == SMB380_POLL)) { - //MZ SMB380_disableNewDataInt(); - //SMB380_setAnyMotionLimit(100,0); - SMB380_enableAnyMotionLimit(); - smb380_mode = SMB380_THRESHOLD; - counter = 0; - } - else if (counter == 100) { - SMB380_disableNewDataInt(); - //SMB380_setAnyMotionLimit(100,0); - SMB380_enableAnyMotionLimit(); - smb380_mode = SMB380_FALSEALERT; - counter = 0; - return 0; - } - - - return 1; -} - -static void SMB380_simple_interrupthandler(void) -{ - SMB380_getAcceleration(SMB380_X_AXIS, NULL, &simple_buffer[0]); - SMB380_getAcceleration(SMB380_Y_AXIS, NULL, &simple_buffer[1]); - SMB380_getAcceleration(SMB380_Z_AXIS, NULL, &simple_buffer[2]); - simple_buffer[3] = SMB380_getTemperature(); - - if (interruptTicksSMB380 >= sampleRateSMB380 - 1) { - interruptTicksSMB380 = 0; - wakeupmessage.type = MSG_TYPE_SMB380_WAKEUP; - msg_try_send(&wakeupmessage, simple_pid); - } - else { - interruptTicksSMB380++; - } - - return; -} - -// enables simple Interrupt driven Mode -uint8_t SMB380_init_simple(uint16_t samplerate, uint8_t bandwidth, uint8_t - range) -{ - SSP0Init(); - interruptTicksSMB380 = 0; - simple_pid = sched_active_pid; - gpioint_set(0, BIT1, GPIOINT_RISING_EDGE, &SMB380_simple_interrupthandler); - SMB380_softReset(); - xtimer_usleep(100000); - SMB380_disableUpperLimit(); - SMB380_disableLowerLimit(); - SMB380_setSampleRate(samplerate); - SMB380_setBandWidth(bandwidth); - SMB380_setRange(range); - - return 0; -} - -uint8_t SMB380_init(uint8_t (*func)(int16_t *)) -{ - SSP0Init(); - -#if SMB380_EXTINT_MODE - - gpioint_set(0, BIT1, GPIOINT_RISING_EDGE, &SMB380_extIntHandler); - -#endif - - interruptTicksSMB380 = 0; - - if (func != NULL) { - smb380function = func; - } - else { - smb380function = NULL; - } - - SMB380_softReset(); - xtimer_usleep(100000); - SMB380_disableUpperLimit(); - SMB380_disableLowerLimit(); - - smb380_mode = SMB380_POLL; - SMB380_setSampleRate(SMB380_SAMPLE_RATE_MAX); //set output to 3000 Hz - - settings.writePointerPos = 0; - settings.range = 0; - settings.countRange = 0; - - for (int i = 0; i < SMB380_RING_BUFF_MAX_THREADS; i++) { - readPointerPos[i] = 0; - PointerList[i] = 0; - } - - ringBuff_X = (int16_t *)malloc(SMB380_RING_BUFF_SIZE * sizeof(int16_t)); - ringBuff_Y = (int16_t *)malloc(SMB380_RING_BUFF_SIZE * sizeof(int16_t)); - ringBuff_Z = (int16_t *)malloc(SMB380_RING_BUFF_SIZE * sizeof(int16_t)); - ringBuff_T = (int16_t *)malloc(SMB380_RING_BUFF_SIZE * sizeof(int16_t)); - - if ((ringBuff_X == NULL) | (ringBuff_Y == NULL) | (ringBuff_Z == NULL) | - (ringBuff_T == NULL)) { - if (ringBuff_X != NULL) { - free((int16_t *)ringBuff_X); - } - - if (ringBuff_Y != NULL) { - free((int16_t *)ringBuff_Y); - } - - if (ringBuff_Z != NULL) { - free((int16_t *)ringBuff_Z); - } - - if (ringBuff_T != NULL) { - free((int16_t *)ringBuff_T); - } - - return 0; - } - - return 1; -} - -static void SMB380_extIntHandler(void) -{ - int16_t accInt[4]; - - SMB380_getAcceleration(SMB380_X_AXIS, NULL, &accInt[0]); - SMB380_getAcceleration(SMB380_Y_AXIS, NULL, &accInt[1]); - SMB380_getAcceleration(SMB380_Z_AXIS, NULL, &accInt[2]); - accInt[3] = SMB380_getTemperature(); - - - writeRingBuff(accInt); - - // printf("SMB380 acc x,y,z: [%i|%i|%i|%2.3f]\r\n", accInt[0], accInt[1], - // accInt[2], acc[3]); - // printf("SMB380 acc x,y,z: [%2.3f|%2.3f|%2.3f|%2.3f]\r\n\n\n", acc[0], - // acc[1], acc[2], acc[3]); - // printf("Nach Interrupt Reset:\n"); - // SMB380_ShowMemory(); -} - -void SMB380_setSampleRate(uint16_t rate) -{ - if (rate > 0 && rate <= SMB380_SAMPLE_RATE_MAX) { - sampleRateSMB380 = SMB380_SAMPLE_RATE_MAX / rate; - } - else { - sampleRateSMB380 = 1; - } -} - -uint16_t SMB380_getSampleRate(void) -{ - return SMB380_SAMPLE_RATE_MAX / sampleRateSMB380; -} - -uint8_t SMB380_Prepare(void) -{ - return SSP0Prepare(SMB380_ACC, 16, 1, 1, 8000); -} - -uint8_t SMB380_Unprepare(void) -{ - return SSP0Unprepare(SMB380_ACC); -} - -// return the pointerNo related with the current thread -uint8_t getRingReadPointerforCurrentThread(void) -{ - uint8_t pointerNo = 0; - - while ((pointerNo < SMB380_RING_BUFF_MAX_THREADS) && - (PointerList[pointerNo] != sched_active_pid)) { - pointerNo++; - } - - return pointerNo; -} - -uint8_t initRingReadPointerforCurrentThread(void) -{ - //TODO: make it Threadsafe - uint8_t pointerNo = 0; - - while ((pointerNo < SMB380_RING_BUFF_MAX_THREADS) && - (PointerList[pointerNo] > 0)) { - pointerNo++; - } - - if (pointerNo == SMB380_RING_BUFF_MAX_THREADS) { - return 0; - } - else { - PointerList[pointerNo] = sched_active_pid; - readPointerPos[pointerNo] = settings.writePointerPos; - return 1; - } -} - -void freeRingReadPointer(void) -{ - //Should be Threadsafe - uint8_t pointerNo = getRingReadPointerforCurrentThread(); - - if (pointerNo != SMB380_RING_BUFF_MAX_THREADS) { - PointerList[pointerNo] = 0; - } -} - -void actualizeRingReadPointer(void) -{ - uint8_t pointerNo = getRingReadPointerforCurrentThread(); - - if (pointerNo != SMB380_RING_BUFF_MAX_THREADS) { - readPointerPos[pointerNo] = settings.writePointerPos; - } -} - -//TODO: more read-pointer -uint8_t readRingBuff(int16_t *value) -{ - - uint8_t pointerNo = getRingReadPointerforCurrentThread(); - - /* - * If thread is not known to read on the ringbuffer, try adding him to the - * list of known threads, otherwise exit with error - */ - - if (pointerNo == SMB380_RING_BUFF_MAX_THREADS) { - if (!initRingReadPointerforCurrentThread()) { - //printf("%sNo Readpointer left, maximum of %u is reached!\n\r", - // SMB380_DEBUG_MESSAGE, SMB380_RING_BUFF_MAX_THREADS); - return 0; - } - else { - pointerNo = getRingReadPointerforCurrentThread(); - } - } - - if (readPointerPos[pointerNo] == settings.writePointerPos) { - value[0] = 0; - value[1] = 0; - value[2] = 0; - value[3] = 0; - return 0; - } - - value[0] = ringBuff_X[readPointerPos[pointerNo]]; - value[1] = ringBuff_Y[readPointerPos[pointerNo]]; - value[2] = ringBuff_Z[readPointerPos[pointerNo]]; - value[3] = ringBuff_T[readPointerPos[pointerNo]]; - readPointerPos[pointerNo] += 1; - - if (readPointerPos[pointerNo] == SMB380_RING_BUFF_SIZE) { - readPointerPos[pointerNo] = 0; - } - - return 1; -} - -//TODO: more read-pointer -uint8_t writeRingBuff(int16_t *value) -{ - if (smb380_mode == SMB380_FALSEALERT) { - smb380_mode = SMB380_THRESHOLD; - return 0; - } - - if ((interruptTicksSMB380 >= sampleRateSMB380 - 1) || - (smb380_mode == SMB380_THRESHOLD)) { - interruptTicksSMB380 = 0; - - /* measuring temperature dependent internal sample rate of SMB380 */ - if (smb380_mode == SMB380_CONTINOUS) { - tickLastSample = xtimer_now_usec(); - tickCurrentSamples++; - } - - ringBuff_X[settings.writePointerPos] = value[0]; - ringBuff_Y[settings.writePointerPos] = value[1]; - ringBuff_Z[settings.writePointerPos] = value[2]; - ringBuff_T[settings.writePointerPos] = value[3]; - - /* check for increasing range if dynRange is true */ - if (dynRange) { - smb380function = checkRange; - } - else { - smb380function = smb380emptyfunction; - } - - if (smb380function != NULL) { - smb380function(value); - } - - settings.writePointerPos += 1; - - if (settings.writePointerPos == SMB380_RING_BUFF_SIZE) { - settings.writePointerPos = 0; - } - - wakeUpRegisteredProcesses(); - return 1; - } - else { - interruptTicksSMB380++; - return 0; - } -} - -void SMB380_activateDynRangeSet(uint8_t activate) -{ - switch (activate) { - case 0: - dynRange = false ; - break; - - case 1: - dynRange = true ; - break; - } -} - -/* - * checking for in-/decreasing range - */ -uint8_t checkRange(int16_t *value) -{ - bool increased = false; - - // printf("CurrentValues: %i %i %i \r\n", xyzTMP[0], xyzTMP[1], xyzTMP[2]); - - // determination of max and min value - int16_t maxValue = value[0]; // max(xValue, max(yValue, zValue)); - int16_t minValue = value[0]; // min(xValue, min(yValue, zValue)); - - for (int i = 1; i < 3; i++) { - if (value[i] > maxValue) { - maxValue = value[i]; - } - - if (value[i] < minValue) { - minValue = value[i]; - } - } - - int8_t isRange = SMB380_getRange(); - - //increase range immediately - switch (isRange) { - case 2: - if ((maxValue > 1800) || (minValue < -1800)) { - SMB380_setRange(SMB380_RANGE_4G); - increased = true; - printf("=== Set range from 2 g to 4 g ===\r\n"); - } - - break; - - case 4: - if ((maxValue > 3800) || (minValue < -3800)) { - SMB380_setRange(SMB380_RANGE_8G); - increased = true; - printf("=== Set range from 4 g to 8 g ===\r\n"); - } - - break; - - case 8: - break; - } - - /* check for decreasing range */ - if (increased) { - counter_Decreasing = 0; - } - else { - //decrease range after 10 consecutive relevant values - switch (isRange) { - case 2: - break; - - case 4: - if ((maxValue < 2000) && (minValue > -2000)) { - if (counter_Decreasing >= 9) { - SMB380_setRange(SMB380_RANGE_2G); - printf("=== Set range from 4 g to 2 g ===\r\n"); - counter_Decreasing = 0; - } - else { - counter_Decreasing++; - } - } - else { - counter_Decreasing = 0; - } - - break; - - case 8: - if ((maxValue < 4000) && (minValue > -4000)) { - if (counter_Decreasing >= 9) { - SMB380_setRange(SMB380_RANGE_4G); - printf("=== Set range from 8 g to 4 g ===\r\n"); - counter_Decreasing = 0; - } - else { - counter_Decreasing++; - } - } - else { - counter_Decreasing = 0; - } - - break; - } - } - - return 0; -} - - -void wakeUpRegisteredProcesses(void) -{ - uint8_t pointerNo = 0; - //wake up waiting processes - wakeupmessage.type = MSG_TYPE_SMB380_WAKEUP; - - while ((pointerNo < SMB380_RING_BUFF_MAX_THREADS) && - (PointerList[pointerNo] > 0)) { - msg_try_send(&wakeupmessage, PointerList[pointerNo]); - pointerNo++; - } -} - -int16_t SMB380_getTemperature(void) -{ - int16_t t = 0; - - unsigned long cpsr = irq_disable(); - SMB380_Prepare(); - SMB380_ssp_write(SMB380_TEMP, 0, SMB380_READ_REGISTER); - - // t = (SMB380_ssp_read() & 0xFF) / 2.0 + SMB380_TEMP_OFFSET; - t = (SMB380_ssp_read() & 0xFF); - t = (t >> 1) + SMB380_TEMP_OFFSET; - SMB380_Unprepare(); - irq_restore(cpsr); - - return t; -} - -void SMB380_getAcceleration(unsigned char axis, int16_t *pAbs, int16_t *pMg) -{ - unsigned short ur; - - if (!settings.countRange && (pMg != NULL)) { - settings.countRange = 1; - settings.range = SMB380_getRange(); - } - - unsigned long cpsr = irq_disable(); - SMB380_Prepare(); - - switch (axis) { - case SMB380_X_AXIS: - SMB380_ssp_write(SMB380_ACC_X_MSB, 0, SMB380_READ_REGISTER); - SMB380_ssp_write(SMB380_ACC_X_LSB_NEWDATA, 0, SMB380_READ_REGISTER); - break; - - case SMB380_Y_AXIS: - SMB380_ssp_write(SMB380_ACC_Y_MSB, 0, SMB380_READ_REGISTER); - SMB380_ssp_write(SMB380_ACC_Y_LSB_NEWDATA, 0, SMB380_READ_REGISTER); - break; - - default: - SMB380_ssp_write(SMB380_ACC_Z_MSB, 0, SMB380_READ_REGISTER); - SMB380_ssp_write(SMB380_ACC_Z_LSB_NEWDATA, 0, SMB380_READ_REGISTER); - } - - ur = (SMB380_ssp_read() & SMB380_ACC_MSB_MASK) << 2; - ur |= (SMB380_ssp_read() & SMB380_ACC_LSB_MASK) >> 6; - SMB380_Unprepare(); - irq_restore(cpsr); - - if (pAbs != NULL) { - if (ur & BIT9) { //ur<0 - *pAbs = ur | 0xFC00; - } - else { - *pAbs = ur & 0x03FF; - } - } - - if (pMg != NULL) { - if (ur & BIT9) { //ur<0 - *pMg = -(((settings.range * (512 - (ur & 0x1FF))) * 2000) / 1024); - } - else { - *pMg = ((settings.range * ur) * 2000) / 1024; - } - } - -} - -unsigned char SMB380_getChipID(void) -{ - unsigned char ur = 0; - unsigned long cpsr = irq_disable(); - SMB380_Prepare(); - SMB380_ssp_write(SMB380_CHIP_ID, 0, 0); - ur = (unsigned char)(SMB380_ssp_read() & SMB380_CHIP_ID_MASK); - irq_restore(cpsr); - return ur; -} - -void SMB380_setWakeUpPause(unsigned char duration) -{ - unsigned char utemp; - unsigned long cpsr = irq_disable(); - SMB380_Prepare(); - SMB380_ssp_write(SMB380_CONTROL4, 0, SMB380_READ_REGISTER); - utemp = SMB380_ssp_read(); - utemp &= ~SMB380_CONTROL4_WAKEUP_PAUSE_MASK; - utemp |= (duration & (0x3) << 1);//+1; - SMB380_ssp_write(SMB380_CONTROL4, utemp, SMB380_WRITE_REGISTER); - SMB380_ssp_read(); - SMB380_Unprepare(); - irq_restore(cpsr); -} - -unsigned char SMB380_getWakeUpPause(void) -{ - unsigned char up; - - unsigned long cpsr = irq_disable(); - SMB380_Prepare(); - SMB380_ssp_write(SMB380_CONTROL4, 0, SMB380_READ_REGISTER); - up = (unsigned char)SMB380_ssp_read(); - SMB380_Unprepare(); - irq_restore(cpsr); - up &= SMB380_CONTROL4_WAKEUP_PAUSE_MASK; - up = up >> 1; - - return up; -} - -void SMB380_setBandWidth(unsigned char bandWidth) -{ - if ((bandWidth == SMB380_BAND_WIDTH_100HZ) || - (bandWidth == SMB380_BAND_WIDTH_1500HZ) || - (bandWidth == SMB380_BAND_WIDTH_190HZ) || - (bandWidth == SMB380_BAND_WIDTH_25HZ) || - (bandWidth == SMB380_BAND_WIDTH_375HZ) || - (bandWidth == SMB380_BAND_WIDTH_50HZ) || - (bandWidth == SMB380_BAND_WIDTH_750HZ)) { - unsigned long cpsr = irq_disable(); - SMB380_Prepare(); - SMB380_ssp_write(SMB380_CONTROL3, 0, SMB380_READ_REGISTER); - unsigned char utemp = SMB380_ssp_read(); - utemp &= ~SMB380_CONTROL3_BANDWITH_MASK; - utemp |= (bandWidth & 0x7); - SMB380_ssp_write(SMB380_CONTROL3, utemp, SMB380_WRITE_REGISTER); - SMB380_ssp_read(); - SMB380_Unprepare(); - irq_restore(cpsr); - } -} - -void SMB380_setRange(unsigned char range) -{ - if (range != 0x3) { - unsigned long cpsr = irq_disable(); - SMB380_Prepare(); - SMB380_ssp_write(SMB380_CONTROL3, 0, SMB380_READ_REGISTER); - unsigned char utemp = (unsigned char)SMB380_ssp_read(); - utemp &= ~SMB380_CONTROL3_RANGE_MASK; - utemp |= (range & 0x3) << 3; - SMB380_ssp_write(SMB380_CONTROL3, utemp, SMB380_WRITE_REGISTER); - SMB380_ssp_read(); - SMB380_Unprepare(); - irq_restore(cpsr); - settings.countRange = 0; - } - -} - -unsigned char SMB380_getRange(void) -{ - unsigned char ur; - unsigned long cpsr = irq_disable(); - SMB380_Prepare(); - SMB380_ssp_write(SMB380_CONTROL3, 0, SMB380_READ_REGISTER); - ur = (SMB380_ssp_read() & SMB380_CONTROL3_RANGE_MASK) >> 3; - SMB380_Unprepare(); - irq_restore(cpsr); - - switch (ur) { - case SMB380_RANGE_2G: - return 2; - - case SMB380_RANGE_4G: - return 4; - - case SMB380_RANGE_8G: - return 8; - - default: - return 4; - } -} - -unsigned char SMB380_getBandWidth(void) -{ - unsigned char uBand; - unsigned long cpsr = irq_disable(); - SMB380_Prepare(); - SMB380_ssp_write(SMB380_CONTROL3, 0, SMB380_READ_REGISTER); - uBand = SMB380_ssp_read() & SMB380_CONTROL3_BANDWITH_MASK; - SMB380_Unprepare(); - irq_restore(cpsr); - return uBand; -} - -int16_t SMB380_getBandWidthAbs(void) -{ - unsigned char uBand; - uBand = SMB380_getBandWidth(); - - switch (uBand) { - case SMB380_BAND_WIDTH_25HZ: - return 25; - - case SMB380_BAND_WIDTH_50HZ: - return 50; - - case SMB380_BAND_WIDTH_100HZ: - return 100; - - case SMB380_BAND_WIDTH_190HZ: - return 190; - - case SMB380_BAND_WIDTH_375HZ: - return 375; - - case SMB380_BAND_WIDTH_750HZ: - return 750; - - case SMB380_BAND_WIDTH_1500HZ: - return 1500; - - default: - return uBand; - } -} - -void SMB380_softReset(void) -{ - unsigned long cpsr = irq_disable(); - SMB380_Prepare(); - SMB380_ssp_write(SMB380_CONTROL1, SMB380_CONTROL1_SOFT_RESET_MASK, - SMB380_WRITE_REGISTER); - SMB380_ssp_read(); - SMB380_Unprepare(); - irq_restore(cpsr); -} - -void SMB380_setCustomerReg(unsigned char data) -{ - unsigned long cpsr = irq_disable(); - SMB380_Prepare(); - SMB380_ssp_write(SMB380_CUST1, data, SMB380_WRITE_REGISTER); - SMB380_ssp_read(); - SMB380_Unprepare(); - irq_restore(cpsr); -} - -unsigned char SMB380_getCustomerReg(void) -{ - unsigned uReg = 0; - unsigned long cpsr = irq_disable(); - SMB380_Prepare(); - SMB380_ssp_write(SMB380_CUST1, 0, SMB380_READ_REGISTER); - uReg = (unsigned char)SMB380_ssp_read(); - SMB380_Unprepare(); - irq_restore(cpsr); - return uReg; -} - -// Selftest -void SMB380_Selftest_1(void) -{ - unsigned char uReg = 0; - unsigned long cpsr = irq_disable(); - SMB380_Prepare(); - SMB380_ssp_write(SMB380_LG_THRES, 6, SMB380_WRITE_REGISTER); - //SSP0Init(); - SMB380_ssp_read(); - SMB380_ssp_write(SMB380_LG_DUR, 0, SMB380_WRITE_REGISTER); - //SSP0Init(); - SMB380_ssp_read(); - SMB380_ssp_write(SMB380_CONTROL1, 0, SMB380_READ_REGISTER); - - uReg = (unsigned char)SMB380_ssp_read(); - uReg &= ~SMB380_CONTROL1_SELF_TEST_1_MASK; - uReg |= 0x01 << 3; - SMB380_ssp_write(SMB380_CONTROL1, uReg, SMB380_WRITE_REGISTER); - // SSP0Init(); - SMB380_ssp_read(); - SMB380_Unprepare(); - irq_restore(cpsr); -} - -void SMB380_ShowMemory(void) -{ - uint8_t bitMask[16]; - printf("SMB380 Speicher\n\r"); - - for (unsigned char regAd = 0x16; regAd > 0; regAd--) { - unsigned long cpsr = irq_disable(); - SMB380_Prepare(); - SMB380_ssp_write(regAd - 1, 0, SMB380_READ_REGISTER); - uint16_t uReg = SMB380_ssp_read(); - SMB380_Unprepare(); - irq_restore(cpsr); - printf("Register: = %X: 0x%X = ", regAd - 1, uReg); - - for (int pos = 0; pos < 16; pos++) { //uReg != 0) - bitMask[15 - pos] = uReg % 2; - - uReg = uReg / 2; - } - - for (int pos = 8; pos < 16; pos++) { //uReg != 0) - printf("%d", bitMask[pos]); - - if ((pos % 4) == 0) { - printf(" "); - } - } - - printf("\n"); - } -} - -void SMB380_setUpperLimit(void) -{ - unsigned long cpsr = irq_disable(); - SMB380_Prepare(); - SMB380_ssp_write(SMB380_HG_THRES, 128, SMB380_WRITE_REGISTER); //1g - SMB380_ssp_read(); - SMB380_ssp_write(SMB380_HG_DUR, 0, SMB380_WRITE_REGISTER); - SMB380_ssp_read(); - SMB380_Unprepare(); - irq_restore(cpsr); -} - -void SMB380_enableUpperLimit(void) -{ - unsigned short uReg; - unsigned long cpsr = irq_disable(); - SMB380_Prepare(); - SMB380_ssp_write(SMB380_CONTROL2, 0, SMB380_READ_REGISTER); - uReg = SMB380_ssp_read(); - SMB380_ssp_write(SMB380_CONTROL2, uReg | SMB380_CONTROL2_ENABLE_HG_MASK, - SMB380_WRITE_REGISTER); - SMB380_ssp_read(); - SMB380_Unprepare(); - irq_restore(cpsr); -} - -void SMB380_disableUpperLimit(void) -{ - unsigned short uReg; - unsigned long cpsr = irq_disable(); - SMB380_Prepare(); - SMB380_ssp_write(SMB380_CONTROL2, 0, SMB380_READ_REGISTER); - uReg = SMB380_ssp_read(); - SMB380_ssp_write(SMB380_CONTROL2, uReg & ~SMB380_CONTROL2_ENABLE_HG_MASK, - SMB380_WRITE_REGISTER); - SMB380_ssp_read(); - SMB380_Unprepare(); - irq_restore(cpsr); -} - -void SMB380_enableLowerLimit(void) -{ - unsigned short uReg; - unsigned long cpsr = irq_disable(); - SMB380_Prepare(); - SMB380_ssp_write(SMB380_CONTROL2, 0, SMB380_READ_REGISTER); - uReg = SMB380_ssp_read(); - SMB380_ssp_write(SMB380_CONTROL2, uReg | SMB380_CONTROL2_ENABLE_LG_MASK, - SMB380_WRITE_REGISTER); - SMB380_ssp_read(); - SMB380_Unprepare(); - irq_restore(cpsr); -} - -void SMB380_disableLowerLimit(void) -{ - unsigned short uReg; - unsigned long cpsr = irq_disable(); - SMB380_Prepare(); - SMB380_ssp_write(SMB380_CONTROL2, 0, SMB380_READ_REGISTER); - uReg = SMB380_ssp_read(); - SMB380_ssp_write(SMB380_CONTROL2, uReg & ~SMB380_CONTROL2_ENABLE_LG_MASK, - SMB380_WRITE_REGISTER); - SMB380_ssp_read(); - SMB380_Unprepare(); - irq_restore(cpsr); -} - -/* @param gvaluefloat - value is in mg - * @param gvalueint - value in range of 0 to 512 - * Choose one of them, set the other to zero - */ -uint8_t SMB380_setAnyMotionLimit(uint16_t mg, uint16_t gvalueint) -{ - - uint8_t threshold = 0; - - if (mg != 0) { - threshold = mg / (15.6 * (SMB380_getRange() / 2)); - } - else if (gvalueint != 0) { - /* Scaling for different gRanges is not needed */ - threshold = ceil(((gvalueint * 2000) / 512.0) / 15.6); - } - else { - return 0; - } - - unsigned long cpsr = irq_disable(); - SMB380_Prepare(); - /* 0,3g = 300 / 15,6mg = 19 */ - SMB380_ssp_write(SMB380_ANY_MOTION_THRES, threshold, SMB380_WRITE_REGISTER); - SMB380_ssp_read(); - //Set duration at this point - SMB380_ssp_write(SMB380_ANY_MOTION_DUR_HYST, 0, SMB380_READ_REGISTER); - SMB380_ssp_read(); - SMB380_Unprepare(); - irq_restore(cpsr); - return 1; -} - -void SMB380_enableAnyMotionLimit(void) -{ - unsigned short uReg; - unsigned long cpsr = irq_disable(); - SMB380_Prepare(); - SMB380_ssp_write(SMB380_CONTROL4, 0, SMB380_READ_REGISTER); - uReg = SMB380_ssp_read(); - SMB380_ssp_write(SMB380_CONTROL4, uReg | SMB380_CONTROL4_ENABLE_ADV_INT_MASK, - SMB380_WRITE_REGISTER); - SMB380_ssp_read(); - SMB380_ssp_write(SMB380_CONTROL2, 0, SMB380_READ_REGISTER); - uReg = SMB380_ssp_read(); - SMB380_ssp_write(SMB380_CONTROL2, uReg | SMB380_CONTROL2_ANY_MOTION_MASK, - SMB380_WRITE_REGISTER); - SMB380_ssp_read(); - SMB380_Unprepare(); - irq_restore(cpsr); -} - -void SMB380_disableAnyMotionLimit(void) -{ - unsigned short uReg; - unsigned long cpsr = irq_disable(); - SMB380_Prepare(); - SMB380_ssp_write(SMB380_CONTROL2, 0, SMB380_READ_REGISTER); - uReg = SMB380_ssp_read(); - SMB380_ssp_write(SMB380_CONTROL2, - uReg & ~SMB380_CONTROL2_ANY_MOTION_MASK, - SMB380_WRITE_REGISTER); - SMB380_ssp_read(); - SMB380_ssp_write(SMB380_CONTROL4, 0, SMB380_READ_REGISTER); - uReg = SMB380_ssp_read(); - SMB380_ssp_write(SMB380_CONTROL4, - uReg & ~SMB380_CONTROL4_ENABLE_ADV_INT_MASK, - SMB380_WRITE_REGISTER); - SMB380_ssp_read(); - SMB380_Unprepare(); - irq_restore(cpsr); -} - -void SMB380_enableNewDataInt(void) -{ - unsigned short uReg; - unsigned long cpsr = irq_disable(); - /* - * prevent deep sleep, reason: 400 µs wake-up time is to long for 3kHz - * interrupts - */ - SMB380_Prepare(); - SMB380_ssp_write(SMB380_CONTROL4, 0, SMB380_READ_REGISTER); - uReg = SMB380_ssp_read(); - SMB380_ssp_write(SMB380_CONTROL4, uReg | SMB380_CONTROL4_NEW_DATA_INT_MASK, - SMB380_WRITE_REGISTER); - SMB380_ssp_read(); - SMB380_Unprepare(); - // measuring temperature dependent internal sample rate of SMB380 - tickStart = xtimer_now_usec(); - tickCurrentSamples = 0; - irq_restore(cpsr); -} - -void SMB380_disableNewDataInt(void) -{ - unsigned short uReg; - unsigned long cpsr = irq_disable(); - SMB380_Prepare(); - SMB380_ssp_write(SMB380_CONTROL4, 0, SMB380_READ_REGISTER); - uReg = SMB380_ssp_read(); - SMB380_ssp_write(SMB380_CONTROL4, uReg & ~SMB380_CONTROL4_NEW_DATA_INT_MASK, - SMB380_WRITE_REGISTER); - SMB380_ssp_read(); - SMB380_Unprepare(); - /* - * enable deep sleep, reason: 400 µs wake-up time was to long for 3kHz - * interrupts - */ - irq_restore(cpsr); -} - -void SMB380_resetInterruptFlags(void) -{ - unsigned short uReg; - unsigned long cpsr = irq_disable(); - SMB380_Prepare(); - SMB380_ssp_write(SMB380_CONTROL1, 0, SMB380_READ_REGISTER); - uReg = SMB380_ssp_read(); - SMB380_ssp_write(SMB380_CONTROL1, uReg | SMB380_CONTROL1_RESET_INT_MASK, - SMB380_WRITE_REGISTER); - SMB380_ssp_read(); - SMB380_Unprepare(); - irq_restore(cpsr); -} - -void SMB380_enableEEPROM(void) -{ - unsigned short uReg; - unsigned long cpsr = irq_disable(); - SMB380_Prepare(); - SMB380_ssp_write(SMB380_CONTROL1, 0, SMB380_READ_REGISTER); - uReg = SMB380_ssp_read(); - SMB380_ssp_write(SMB380_CONTROL1, uReg | SMB380_CONTROL1_EE_W_MASK, - SMB380_WRITE_REGISTER); - SMB380_ssp_read(); - SMB380_Unprepare(); - irq_restore(cpsr); -} - -void SMB380_disableEEPROM(void) -{ - unsigned short uReg; - unsigned long cpsr = irq_disable(); - SMB380_Prepare(); - SMB380_ssp_write(SMB380_CONTROL1, 0, SMB380_READ_REGISTER); - uReg = SMB380_ssp_read(); - SMB380_ssp_write(SMB380_CONTROL1, uReg & ~SMB380_CONTROL1_EE_W_MASK, - SMB380_WRITE_REGISTER); - SMB380_ssp_read(); - SMB380_Unprepare(); - irq_restore(cpsr); -} - -/* - * Return offsets from offset registers, - * remove xyz afterwards because it is useless - */ -unsigned char SMB380_readOffset(uint16_t *offset) -{ - if (sizeof(offset) < 3) { - return false; - } - - unsigned short uReg; - unsigned long cpsr = irq_disable(); - SMB380_Prepare(); - - SMB380_ssp_write(SMB380_OFFSET_LSB_GAIN_X, 0, SMB380_READ_REGISTER); - uReg = ((SMB380_ssp_read() & SMB380_ACC_LSB_MASK) >> 6); - SMB380_ssp_write(SMB380_OFFSET_MSB_X, 0, SMB380_READ_REGISTER); - uReg |= (SMB380_ssp_read() & SMB380_ACC_MSB_MASK) << 2; - - - offset[0] = uReg; - printf("Offset X: %u ", uReg); - - SMB380_ssp_write(SMB380_OFFSET_LSB_GAIN_Y, 0, SMB380_READ_REGISTER); - uReg = (SMB380_ssp_read() & SMB380_ACC_LSB_MASK) >> 6; - SMB380_ssp_write(SMB380_OFFSET_MSB_Y, 0, SMB380_READ_REGISTER); - uReg |= (SMB380_ssp_read() & SMB380_ACC_MSB_MASK) << 2; - - offset[1] = uReg; - printf("Offset Y: %u ", uReg); - - SMB380_ssp_write(SMB380_OFFSET_LSB_GAIN_Z, 0, SMB380_READ_REGISTER); - uReg = (SMB380_ssp_read() & SMB380_ACC_LSB_MASK) >> 6; - SMB380_ssp_write(SMB380_OFFSET_MSB_Z, 0, SMB380_READ_REGISTER); - uReg |= (SMB380_ssp_read() & SMB380_ACC_MSB_MASK) << 2; - - offset[2] = uReg; - printf("Offset Z: %u \r\n", uReg); - - SMB380_Unprepare(); - irq_restore(cpsr); - - return true; -} - -unsigned char SMB380_readOffsetTemp(uint16_t *offset) -{ - unsigned short uReg; - unsigned long cpsr = irq_disable(); - SMB380_Prepare(); - - SMB380_ssp_write(SMB380_OFFSET_LSB_GAIN_T, 0, SMB380_READ_REGISTER); - uReg = ((SMB380_ssp_read() & SMB380_ACC_LSB_MASK) >> 6); - SMB380_ssp_write(SMB380_OFFSET_MSB_T, 0, SMB380_READ_REGISTER); - uReg |= (SMB380_ssp_read() & SMB380_ACC_MSB_MASK) << 2; - - - offset[0] = uReg; - printf("Offset T: %u ", uReg); - - SMB380_Unprepare(); - irq_restore(cpsr); - - return true; -} - -/* - * EEPROM = 1 if data has to be written in EEPROM and not only in image - */ -void SMB380_writeOffset(uint16_t *offset, uint8_t EEPROM) -{ - printf("Writing Offset X: %u Y: %u Z: %u\r\n", offset[0], offset[1], offset[2]); - - if (sizeof(offset) >= 3) { - uint16_t eeoffset = 0; - - if (EEPROM) { - //create offset if saving to EEPROM is needed - eeoffset = SMB380_EEPROM_OFFSET; - } - - unsigned short uReg; - unsigned long cpsr = irq_disable(); - SMB380_Prepare(); - - //x-Axis - uReg = (offset[0] & 0x03) << 6; //get both LSB Bits - //write them to image or eeprom - SMB380_ssp_write(SMB380_OFFSET_LSB_GAIN_X, 0, SMB380_READ_REGISTER); - uReg |= (SMB380_ssp_read() & 0x3F); //saves gain from same register - SMB380_ssp_write(SMB380_OFFSET_LSB_GAIN_X + eeoffset, (uint8_t)uReg, - SMB380_WRITE_REGISTER); //write them to image or eeprom - SMB380_ssp_read(); - xtimer_usleep(50000); - - uReg = (offset[0] & 0x3FC) >> 2; //get MSB Bits - SMB380_ssp_write(SMB380_OFFSET_MSB_X + eeoffset, (uint8_t)uReg, - SMB380_WRITE_REGISTER); //write them to image or eeprom - SMB380_ssp_read(); - xtimer_usleep(50000); - - //y-Axis - uReg = (offset[1] & 0x03) << 6; //get both LSB Bits - SMB380_ssp_write(SMB380_OFFSET_LSB_GAIN_Y, 0, SMB380_READ_REGISTER); - uReg |= (SMB380_ssp_read() & 0x3F); //saves gain from same register - SMB380_ssp_write(SMB380_OFFSET_LSB_GAIN_Y + eeoffset, (uint8_t)uReg, - SMB380_WRITE_REGISTER); //write them to image or eeprom - SMB380_ssp_read(); - xtimer_usleep(50000); - - uReg = (offset[1] & 0x3FC) >> 2; //get MSB Bits - SMB380_ssp_write(SMB380_OFFSET_MSB_Y + eeoffset, (uint8_t)uReg, - SMB380_WRITE_REGISTER); //write them to image or eeprom - SMB380_ssp_read(); - xtimer_usleep(50000); - - //z-Axis - uReg = (offset[2] & 0x03) << 6; //get both LSB Bits - SMB380_ssp_write(SMB380_OFFSET_LSB_GAIN_Z, 0, - SMB380_READ_REGISTER); //write them to image or eeprom - uReg |= (SMB380_ssp_read() & 0x3F); //saves gain from same register - SMB380_ssp_write(SMB380_OFFSET_LSB_GAIN_Z + eeoffset, (uint8_t)uReg, - SMB380_WRITE_REGISTER); //write them to image or eeprom - SMB380_ssp_read(); - xtimer_usleep(50000); - - uReg = (offset[2] & 0x3FC) >> 2; //get MSB Bits - SMB380_ssp_write(SMB380_OFFSET_MSB_Z + eeoffset, (uint8_t)uReg, - SMB380_WRITE_REGISTER); //write them to image or eeprom - SMB380_ssp_read(); - xtimer_usleep(50000); - - SMB380_Unprepare(); - irq_restore(cpsr); - - } -} - -void SMB380_writeOffsetTemp(uint16_t *offset, uint8_t EEPROM) -{ - printf("Writing Offset Temp: %u\r\n", offset[0]); - - if (sizeof(offset) >= 1) { - uint16_t eeoffset = 0; - - if (EEPROM) { - //create offset if saving to EEPROM is needed - eeoffset = SMB380_EEPROM_OFFSET; - } - - unsigned short uReg; - unsigned long cpsr = irq_disable(); - SMB380_Prepare(); - - //T-Axis - uReg = (offset[0] & 0x03) << 6; //get both LSB Bits - SMB380_ssp_write(SMB380_OFFSET_LSB_GAIN_T, 0, - SMB380_READ_REGISTER); //write them to image or eeprom - uReg |= (SMB380_ssp_read() & 0x3F); //saves gain from same register - SMB380_ssp_write(SMB380_OFFSET_LSB_GAIN_T + eeoffset, (uint8_t)uReg, - SMB380_WRITE_REGISTER); //write them to image or eeprom - SMB380_ssp_read(); - xtimer_usleep(50000); - - uReg = (offset[0] & 0x3FC) >> 2; //get MSB Bits - SMB380_ssp_write(SMB380_OFFSET_MSB_T + eeoffset, (uint8_t)uReg, - SMB380_WRITE_REGISTER); //write them to image or eeprom - SMB380_ssp_read(); - xtimer_usleep(50000); - - SMB380_Unprepare(); - irq_restore(cpsr); - } -} - -unsigned char SMB380_readGain(uint16_t *gain) -{ - if (sizeof(gain) < 3) { - return false; - } - - unsigned long cpsr = irq_disable(); - SMB380_Prepare(); - - //x-gain - SMB380_ssp_write(SMB380_OFFSET_LSB_GAIN_X, 0, SMB380_READ_REGISTER); - gain[0] = (SMB380_ssp_read() & SMB380_OFFSET_GAIN_MASK); - //y-gain - SMB380_ssp_write(SMB380_OFFSET_LSB_GAIN_Y, 0, SMB380_READ_REGISTER); - gain[1] = (SMB380_ssp_read() & SMB380_OFFSET_GAIN_MASK); - //z-gain - SMB380_ssp_write(SMB380_OFFSET_LSB_GAIN_Z, 0, SMB380_READ_REGISTER); - gain[2] = (SMB380_ssp_read() & SMB380_OFFSET_GAIN_MASK); - - SMB380_Unprepare(); - irq_restore(cpsr); - - return true; -} - -unsigned char SMB380_readGainTemp(uint16_t *gain) -{ - if (sizeof(gain) < 1) { - return false; - } - - unsigned long cpsr = irq_disable(); - SMB380_Prepare(); - - //T-gain - SMB380_ssp_write(SMB380_OFFSET_LSB_GAIN_T, 0, SMB380_READ_REGISTER); - gain[0] = (SMB380_ssp_read() & SMB380_OFFSET_GAIN_MASK); - - SMB380_Unprepare(); - irq_restore(cpsr); - - return true; -} diff --git a/boards/avsextrem/drivers/avsextrem-ssp0.c b/boards/avsextrem/drivers/avsextrem-ssp0.c deleted file mode 100644 index b271c23174..0000000000 --- a/boards/avsextrem/drivers/avsextrem-ssp0.c +++ /dev/null @@ -1,425 +0,0 @@ -/* - * avsextrem-ssp0.c - implementation of the SPI0 interface for the LPC2387, - * and the AVSESTREM board. - * Copyright (C) 2013 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. - */ - -/** - * @file - * @internal - * @brief Implements the SPI0 interface for the LPC2387 - * - * @author Marco Ziegert - * @author Zakaria Kasmi - * @version $Revision: 3854 $ - * - * @note $Id: avsextrem-ssp0.c 3854 2013-08-14 15:27:01Z zkasmi $ - */ - -#include "lpc23xx.h" /* LPC23XX/24xx Peripheral Registers */ -#include "cpu.h" -#include "VIC.h" -#include "periph_conf.h" -#include "ssp0-board.h" -#include "smb380-board.h" -//#include "mma7455l-board.h" -#include "gpioint.h" -#include - -//uint16_t sampleRateMMA7455L; -//uint16_t interruptTicksMMA7455L; -// -//static void MMA7455L_extIntHandler(void); - -uint32_t SSP0Init(void) -{ - - /* - * enable clock to SSP0 for security reason. - * By default, it's enabled already - */ - PCONP |= PCSSP0; - //TODO: configure CLK, MISO, MOSI by default as GPIOs. -#if USE_CS - // P1.20 1.21 1.23 1.24 - // PINSEL3 |= BIT8 | BIT9 | BIT10 | BIT11 | BIT14 | BIT15 | BIT16 | BIT17; -#else - // No SSEL0 - // PINSEL3 |= BIT8 | BIT9 | BIT14 | BIT15 | BIT16 | BIT17; //1.20 1.23 1.24 -#endif - -#if SSP1_INTERRUPT_MODE - - if (install_irq(SSP1_INT, (void *)SSP0Handler, HIGHEST_PRIORITY) == FALSE) { - return (FALSE); - } - - /* - * Set SSPINMS registers to enable interrupts, - * enable all error related interrupts - */ - - SSP1IMSC = SSPIMSC_RORIM | SSPIMSC_RTIM; -#endif - - return (1); -} - -/* - * datasize (wordsize) in decimal (4-16), cpol&cpha =(0/1) and frequency divided - * by 1000 (e.g. 8 MHz = 8000) - */ -uint8_t SSP0Prepare(uint8_t chip, uint8_t datasize, uint8_t cpol, uint8_t cpha, - uint16_t freq) -{ - switch (chip) { - case BMA180_INTERN: - case SMB380_ACC: { -#if USE_CS - PINSEL3 |= BIT8 | BIT9 | BIT10 | BIT11 | BIT14 | BIT15 | BIT16 | - BIT17; //P1.20 1.21 1.23 1.24 -#else - // 1.20 1.23 1.24 are not configured as SSEL0 - PINSEL3 |= BIT8 | BIT9 | BIT14 | BIT15 | BIT16 | BIT17; -#endif - break; - } - - case BMA180_EXTERN: - case L3G_EXTERN: - case NANOPAN: - case ACAMDMS: { -#if USE_CS - PINSEL0 |= BIT31; - PINSEL1 |= BIT1 | BIT3 | BIT5; // P0.15 0.16 0.17 0.18 -#else - // Turn on NanoPAN - PINSEL0 |= BIT31; - // 0.15 0.17 0.18 are not configured as SSEL0 - PINSEL1 |= BIT3 | BIT5; -#endif - break; - } - - case NORDIC: { - PINSEL0 |= BIT31; - PINSEL1 |= BIT3 | BIT5; // 0.15 0.17 0.18 SSEL0 (No) - break; - } - - default: { - printf("wrong CHIP selected\n"); - return 0; - } - } - - uint32_t SSP0CR0tmp = 0; - - switch (datasize) { - case 4: - SSP0CR0tmp = BIT0 | BIT1; - break; - - case 5: - SSP0CR0tmp = BIT2; - break; - - case 6: - SSP0CR0tmp = BIT0 | BIT2; - break; - - case 7: - SSP0CR0tmp = BIT1 | BIT2; - break; - - case 8: - SSP0CR0tmp = BIT0 | BIT1 | BIT2; - break; - - case 9: - SSP0CR0tmp = BIT3; - break; - - case 10: - SSP0CR0tmp = BIT0 | BIT3; - break; - - case 11: - SSP0CR0tmp = BIT1 | BIT3; - break; - - case 12: - SSP0CR0tmp = BIT0 | BIT1 | BIT3; - break; - - case 13: - SSP0CR0tmp = BIT2 | BIT3; - break; - - case 14: - SSP0CR0tmp = BIT0 | BIT2 | BIT3; - break; - - case 15: - SSP0CR0tmp = BIT1 | BIT2 | BIT3; - break; - - case 16: - SSP0CR0tmp = BIT0 | BIT1 | BIT2 | BIT3; - break; - - default: - return 0; - } - - if (cpol) { - SSP0CR0tmp |= BIT6; - } - - if (cpha) { - SSP0CR0tmp |= BIT7; - } - - SSP0CR1 = 0x00; // SSP0 disabled - - // Setting xx-Bit Datasize, CPOL and CPHA - SSP0CR0 = SSP0CR0tmp; - - // Clock Setup - uint32_t pclksel; - uint32_t cpsr; - lpc2387_pclk_scale(CLOCK_CORECLOCK / 1000, freq, &pclksel, &cpsr); - PCLKSEL1 &= ~(BIT10 | BIT11); // CCLK to PCLK divider ??? - PCLKSEL1 |= pclksel << 10; - SSP0CPSR = cpsr; - - // Enable - SSP0CR1 |= BIT1; // SSP0 enabled - - uint32_t dummy; - - for (uint32_t i = 0; i < FIFOSIZE; i++) { - dummy = SSP0DR; // clear the RxFIFO - } - - /* to suppress unused-but-set-variable */ - (void) dummy; - - return 1; -} - -uint8_t SSP0Unprepare(uint8_t chip) -{ - switch (chip) { - case BMA180_INTERN: - case SMB380_ACC: { - // Turn off Acceleration Sensor - PINSEL3 &= ~(BIT8 | BIT9 | BIT10 | BIT11 | BIT14 | BIT15 | BIT16 | - BIT17); - FIO1DIR |= BIT20 | BIT21 | BIT24; - FIO1DIR &= ~BIT23; // MISO as Input - FIO1SET = BIT20 | BIT24; /* - * CLK + SSEL + MOSI GPIO as Output - * TODO: depends on CPOL+CPHA Settings - */ - FIO1CLR = BIT21; - break; - } - - case BMA180_EXTERN: - case L3G_EXTERN: - case NORDIC: - case NANOPAN: - case ACAMDMS: { - // Turn off Nanopan (Pins to GPIO) - PINSEL0 &= ~(BIT30 | BIT31); //CLK to GPIO - PINSEL1 &= ~(BIT0 | BIT1 | BIT2 | BIT3 | BIT4 | BIT5); - FIO0DIR |= BIT15 | BIT16 | BIT18; //CLK + SSEL + MOSI GPIO as Output - FIO0DIR &= ~BIT17; // MISO as Input - FIO0SET = BIT15 | BIT16; /* - * CLK + SSEL + MOSI GPIO as Output - * TODO: depends on CPOL+CPHA Settings - */ - FIO0CLR = BIT18; - break; - } - - default: { - printf("wrong CHIP selected\n"); - return 0; - } - } - - return 1; -} - -unsigned char SMB380_ssp_write(const unsigned char regAddr, - const unsigned char data, unsigned char flag) -{ - - uint16_t temp = 0; - - if (flag) { - temp = (unsigned int)(((regAddr & 0xFF7F) << 8) | data); - - } - else { - temp = (((unsigned int)(regAddr | 0x80) << 8) | 0xFF); - } - - return SSP0_write(temp, SMB380_ACC); -} - -unsigned char SSP0_write(const uint16_t data, uint8_t device) -{ - unsigned char ret = 1; - - while ((SSP0SR & (SSPSR_TNF | SSPSR_BSY)) != SSPSR_TNF) - ; - - if (!USE_CS) { - switch (device) { - case BMA180_INTERN: - case SMB380_ACC: { - FIO1CLR = SSP0_SEL; - break; - } - - case BMA180_EXTERN: - case L3G_EXTERN: - case NANOPAN: { - FIO0CLR = SSP0_SELN; - break; - } - - case ACAMDMS: - case NORDIC: - // Chip Select is done in Nordic driver - break; - - default: - ret = 0; - goto ret; - } - } - - SSP0DR = data; - - if (!USE_CS) { - while (SSP0SR & SSPSR_BSY) - ; - - switch (device) { - case BMA180_INTERN: - case SMB380_ACC: { - FIO1SET = SSP0_SEL; - break; - } - - case BMA180_EXTERN: - case L3G_EXTERN: - case NANOPAN: { - FIO0SET = SSP0_SELN; - break; - } - - case ACAMDMS: - case NORDIC: - // Chip Select is done in Nordic driver - break; - - default: - ret = 0; - goto ret; - } - } - -ret: - return ret; -} - -unsigned short SSP0_read(uint8_t device) -{ - uint16_t data; - - while (!(SSP0SR & SSPSR_RNE)) - ; - - if (!USE_CS) { - switch (device) { - case BMA180_INTERN: - case SMB380_ACC: { - FIO1CLR = SSP0_SEL; - break; - } - - case BMA180_EXTERN: - case L3G_EXTERN: - case NANOPAN: { - FIO0CLR = SSP0_SELN; - break; - } - - case NORDIC: - case ACAMDMS: - // Chip Select is done in Nordic driver - break; - - default: - data = 0xFFFF; - goto ret; - } - } - - data = SSP0DR; - - if (!USE_CS) { - switch (device) { - case BMA180_INTERN: - case SMB380_ACC: { - FIO1SET = SSP0_SEL; - break; - } - - case BMA180_EXTERN: - case L3G_EXTERN: - case NANOPAN: { - FIO0SET = SSP0_SELN; - break; - } - - case ACAMDMS: - case NORDIC: - // Chip Select is done in Nordic driver - break; - - default: - data = 0xFFFF; - goto ret; - } - } - -ret: - return data; -} - -unsigned short SMB380_ssp_read(void) -{ - return SSP0_read(SMB380_ACC); -} - -unsigned short nrf24l01_ssp_read_write(const uint8_t data) -{ - SSP0_write(data, NORDIC); - return SSP0_read(NORDIC); -} - -unsigned short acam_trx(const uint8_t data) -{ - SSP0_write(data, ACAMDMS); - return SSP0_read(ACAMDMS); -} diff --git a/boards/avsextrem/include/smb380-board.h b/boards/avsextrem/include/smb380-board.h deleted file mode 100644 index 95924735f9..0000000000 --- a/boards/avsextrem/include/smb380-board.h +++ /dev/null @@ -1,258 +0,0 @@ -/* - * msba2acc-smb380.h - Definitions of the Driver for the SMB380 acceleration - * sensor. - * Copyright (C) 2013 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. - **/ - -/** - * @file - * @internal - * @brief SMB380 acceleration sensor definitions for the LPC2387 - * - * @author Marco Ziegert - * @author Zakaria Kasmi - * - */ - -#ifndef SMB380_H -#define SMB380_H -#include -#include "bitarithm.h" - -#ifdef __cplusplus -extern "C" { -#endif - -#define SMB380_DEBUG_MESSAGE "SMB380 Driver Error: " - -#define MSG_TYPE_SMB380_WAKEUP 814 - -#define SMB380_X_AXIS 0 /* X Axis-Name */ -#define SMB380_Y_AXIS 1 /* Y Axis-Name */ -#define SMB380_Z_AXIS 2 /* Z Axis-Name */ - -#define LPM_PREVENT_SLEEP_ACCSENSOR BIT2 - -enum SMB380_MODE { - SMB380_POLL, - SMB380_POLL_AFTER_CONTINOUS, - SMB380_CONTINOUS, - SMB380_THRESHOLD, - SMB380_FALSEALERT -}; - -volatile enum SMB380_MODE smb380_mode; - -/* Writeable values to EEPROM: from 0x0A (control1) to 0x1D (offset_T). - For writing enable ... flag and add eeprom_offset_address. - - Generally it is a good idea to read out shared register addresses before writing, - registers 0x14 and 34h are especially critical. -*/ - -#define SMB380_EEPROM_OFFSET 0x20 -/* Chip-ID Bit0-2, default: 010b */ -#define SMB380_CHIP_ID 0x00 -/* Chip-ID mask */ -#define SMB380_CHIP_ID_MASK 0x07 -/* ml_version Bit0-3 ; al_version Bit4-7 */ -#define SMB380_AL_ML_VERSION 0x01 -#define SMB380_AL_MASK 0xF0 -#define SMB380_ML_MASK 0x0F -/* LSB_acc_x Bit6-7; new_data_x Bit0 */ -#define SMB380_ACC_X_LSB_NEWDATA 0x02 -/* MSB_acc_x Bit0-7 */ -#define SMB380_ACC_X_MSB 0x03 -/* LSB_acc_y Bit6-7; new_data_y Bit0 */ -#define SMB380_ACC_Y_LSB_NEWDATA 0x04 -/* MSB_acc_y Bit0-7 */ -#define SMB380_ACC_Y_MSB 0x05 -/* LSB_acc_z Bit6-7; new_data_z Bit0 */ -#define SMB380_ACC_Z_LSB_NEWDATA 0x06 -/* MSB_acc_z Bit0-7 */ -#define SMB380_ACC_Z_MSB 0x07 -#define SMB380_ACC_LSB_MASK 0xC0 -#define SMB380_ACC_MSB_MASK 0xFF -#define SMB380_ACC_NEWDATA_MASK 0x01 -/* Temperature Bit0-7 */ -#define SMB380_TEMP 0x08 -/* Status register, contains six flags */ -#define SMB380_STATUS 0x09 -#define SMB380_STATUS_ST_RESULT_MASK 0x80 -#define SMB380_STATUS_ALERT_PHASE_MASK 0x10 -#define SMB380_STATUS_LG_LATCHED_MASK 0x08 -#define SMB380_STATUS_HG_LATCHED_MASK 0x04 -#define SMB380_STATUS_STATUS_LG_MASK 0x02 -#define SMB380_STATUS_STATUS_HG_MASK 0x01 -/* Control register - contains seven values, default: x000 0000b */ -#define SMB380_CONTROL1 0x0A -#define SMB380_CONTROL1_RESET_INT_MASK 0x40 -#define SMB380_CONTROL1_UPDATE_MASK 0x20 -#define SMB380_CONTROL1_EE_W_MASK 0x10 -#define SMB380_CONTROL1_SELF_TEST_1_MASK 0x08 -#define SMB380_CONTROL1_SELF_TEST_0_MASK 0x04 -#define SMB380_CONTROL1_SOFT_RESET_MASK 0x02 -#define SMB380_CONTROL1_SLEEP_MASK 0x01 -/* Control register - contains six values, default: x000 0011b */ -#define SMB380_CONTROL2 0x0B -#define SMB380_CONTROL2_ALERT_MASK 0x80 -#define SMB380_CONTROL2_ANY_MOTION_MASK 0x40 -#define SMB380_CONTROL2_COUNTER_HG_MASK 0x30 -#define SMB380_CONTROL2_COUNTER_LG_MASK 0x0C -#define SMB380_CONTROL2_ENABLE_HG_MASK 0x02 -#define SMB380_CONTROL2_ENABLE_LG_MASK 0x01 -/* default: 20 */ -#define SMB380_LG_THRES 0x0C -/* default: 150 */ -#define SMB380_LG_DUR 0x0D -/* default: 160 */ -#define SMB380_HG_THRES 0x0E -/* default: 150 */ -#define SMB380_HG_DUR 0x0F -/* default: 0 */ -#define SMB380_ANY_MOTION_THRES 0x10 -/* default: 0000 0000b */ -#define SMB380_ANY_MOTION_DUR_HYST 0x1 -#define SMB380_ANY_MOTION_DUR_MASK 0xC0 -#define SMB380_ANY_MOTION_DUR_HG_HYST_MASK 0x38 -#define SMB380_ANY_MOTION_DUR_LG_HYST_MASK 0x07 -/* default: 162 */ -#define SMB380_CUST1 0x12 -/* default: 13 */ -#define SMB380_CUST2 0x13 -/* default: xxx0 1110b */ -#define SMB380_CONTROL3 0x14 -#define SMB380_CONTROL3_RANGE_MASK 0x18 -#define SMB380_CONTROL3_BANDWITH_MASK 0x07 -/* default: 1000 0000b */ -#define SMB380_CONTROL4 0x15 -#define SMB380_CONTROL4_SPI4_MASK 0x80 -#define SMB380_CONTROL4_ENABLE_ADV_INT_MASK 0x40 -#define SMB380_CONTROL4_NEW_DATA_INT_MASK 0x20 -#define SMB380_CONTROL4_LATCH_INT_MASK 0x10 -#define SMB380_CONTROL4_SHADOW_DIS_MASK 0x08 -#define SMB380_CONTROL4_WAKEUP_PAUSE_MASK 0x06 -#define SMB380_CONTROL4_WAKEUP_MASK 0x01 - -#define SMB380_OFFSET_LSB_GAIN_X 0x16 -#define SMB380_OFFSET_LSB_GAIN_Y 0x17 -#define SMB380_OFFSET_LSB_GAIN_Z 0x18 -#define SMB380_OFFSET_LSB_GAIN_T 0x19 -#define SMB380_OFFSET_LSB_MASK 0xC0 -#define SMB380_OFFSET_GAIN_MASK 0x3F - -#define SMB380_OFFSET_MSB_X 0x1A -#define SMB380_OFFSET_MSB_Y 0x1B -#define SMB380_OFFSET_MSB_Z 0x1C -#define SMB380_OFFSET_MSB_T 0x1D - -#define SMB380_TEMP_OFFSET -30 -#define SMB380_DEFAULT_MAXG 4.0f -#define SMB380_READ_REGISTER 0x00 -#define SMB380_WRITE_REGISTER 0x01 -#define SMB380_WAKE_UP_PAUSE_20MS 0x00 -#define SMB380_WAKE_UP_PAUSE_80MS 0x01 -#define SMB380_WAKE_UP_PAUSE_320MS 0x02 -#define SMB380_WAKE_UP_PAUSE_2560MS 0x03 -#define SMB380_RANGE_2G 0x00 -#define SMB380_RANGE_4G 0x01 -#define SMB380_RANGE_8G 0x02 -#define SMB380_BAND_WIDTH_25HZ 0x00 -#define SMB380_BAND_WIDTH_50HZ 0x01 -#define SMB380_BAND_WIDTH_100HZ 0x02 -#define SMB380_BAND_WIDTH_190HZ 0x03 -#define SMB380_BAND_WIDTH_375HZ 0x04 -#define SMB380_BAND_WIDTH_750HZ 0x05 -#define SMB380_BAND_WIDTH_1500HZ 0x06 -/* SMB380_RING_BUFF_SIZE * int16_t (2Byte) * 4 (x,y,z,Temp) = 512 Byte (for 64) */ -#define SMB380_RING_BUFF_SIZE 256 -/* TODO chsnge size to 2048 */ -#define SMB380_RING_BUFF_MAX_THREADS 10 -#define SMB380_SAMPLE_RATE_MAX 3000 - -/* - * change from Header (public) to internal use (private) - * (use it after every write to EEPROM). - * set update_image Bit in control1 to - * copie content from EEPROM (0x2B to 0x3D) to Image (0x0B to 0x1D) - **/ -void SMB380_update_image(void); - -/* - * change from Header (public) to internal use (private) - * set ee_w Bit in control1 to - * enable read to 0x16 to 0x22 and - * enable write to 0x16 to 0x3D - **/ -void SMB380_enable_eeprom_default(void); -/* Example Hysterese function */ -uint8_t SMB380_HystereseFunctionSample(int16_t *value); - -/* Simple api for single-sample, single thread interrupt mode */ -uint8_t SMB380_init_simple(uint16_t samplerate, uint8_t bandwidth, - uint8_t range); - - -/* Enables Interrupts (normally only once called) */ -uint8_t SMB380_init(uint8_t (*func)(int16_t *)); -void SMB380_setSampleRate(uint16_t rate); -uint16_t SMB380_getSampleRate(void); -void freeRingReadPointer(void); -void actualizeRingReadPointer(void); -uint8_t readRingBuff(int16_t *value); -uint8_t writeRingBuff(int16_t *value); -void SMB380_activateDynRangeSet(uint8_t activate); -uint8_t checkRange(int16_t *value); - -void SMB380_enableEEPROM(void); -void SMB380_disableEEPROM(void); - -/* getter */ -float SMB380_getSampleRatio(void); -void SMB380_getAcceleration(unsigned char axis, int16_t *pAbs, int16_t *pMg); -int16_t SMB380_getTemperature(void); -unsigned char SMB380_getChipID(void); -unsigned char SMB380_getWakeUpPause(void); -unsigned char SMB380_getBandWidth(void); -int16_t SMB380_getBandWidthAbs(void); -unsigned char SMB380_getRange(void); -unsigned char SMB380_getCustomerReg(void); -unsigned char SMB380_readOffset(uint16_t *offset); -unsigned char SMB380_readOffsetTemp(uint16_t *offset); -unsigned char SMB380_readGain(uint16_t *gain); -unsigned char SMB380_readGainTemp(uint16_t *gain); - -/* setter */ -void SMB380_setTempOffset(uint16_t offset, uint8_t EEPROM); -void SMB380_setWakeUpPause(unsigned char duration); -void SMB380_setBandWidth(unsigned char bandWidth); -void SMB380_setRange(unsigned char range); -void SMB380_softReset(void); -void SMB380_setCustomerReg(unsigned char data); -void SMB380_setUpperLimit(void); -void SMB380_enableUpperLimit(void); -void SMB380_disableUpperLimit(void); -void SMB380_enableLowerLimit(void); -void SMB380_disableLowerLimit(void); -uint8_t SMB380_setAnyMotionLimit(uint16_t mg, uint16_t gvalueint); -void SMB380_enableAnyMotionLimit(void); -void SMB380_disableAnyMotionLimit(void); -void SMB380_enableNewDataInt(void); -void SMB380_disableNewDataInt(void); -void SMB380_resetInterruptFlags(void); -void SMB380_writeOffset(uint16_t *offset, uint8_t EEPROM); -void SMB380_writeOffsetTemp(uint16_t *offset, uint8_t EEPROM); - -/* stats */ -void SMB380_ShowMemory(void); -void SMB380_Selftest_1(void); - -#ifdef __cplusplus -} -#endif - -#endif /* SMB380_H */ diff --git a/boards/avsextrem/include/ssp0-board.h b/boards/avsextrem/include/ssp0-board.h deleted file mode 100644 index debe157fcf..0000000000 --- a/boards/avsextrem/include/ssp0-board.h +++ /dev/null @@ -1,125 +0,0 @@ -/* - * ssp0-borad.h - header file of the SPI interface for the LPC2387. - * Copyright (C) 2013 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. - * - */ - -/** - * @file - * @internal - * @brief SPI interface definitions for the LPC2387 - * - * @author Marco Ziegert - * @author Zakaria Kasmi - * @version $Revision: 3854 $ - * - * @note $Id: avsextrem-ssp0.c 3854 2010-01-18 15:27:01Z zkasmi $ - */ -#ifndef SSP_H -#define SSP_H - -#include "stdint.h" - -#ifdef __cplusplus -extern "C" { -#endif - -#define DMA_ENABLED 0 - -/* - * if USE_CS is zero, set SSEL as GPIO that you have total control of the - * sequence - **/ -#define USE_CS 0 - -/* - * if 1, use driver for onboard BMA180, otherwise for external BMA180 utilizing - * Nanopan Connector - **/ -#define BMA180_ONBOARD 1 - -#define SMB380_ACC 0 -#define NANOPAN 1 -#define NORDIC 2 -#define BMA180_EXTERN 3 -#define BMA180_INTERN 4 -#define L3G_EXTERN 5 -#define L3G_INTERN 6 -#define ACAMDMS 7 - -/* SPI read and write buffer size */ -#define BUFSIZE 256 -#define FIFOSIZE 8 - -/* SSP select pin */ -#define SSP0_SEL 1 << 21 /* P1.21 SMB380 */ - -#define SSP0_SELN 1 << 16 /* P0.16 Nanotron */ - -/* SSP1 external interrupt Pin (SMB380 specific) */ -#define SMB380_INT1 1 << 1 /* P0.1 */ -#define BMA180_INT1 1 << 8 /* P2.8 */ - - - -/* SSP1 CR0 register */ -#define SSPCR0_DSS 1 << 0 -#define SSPCR0_FRF 1 << 4 -#define SSPCR0_SPO 1 << 6 -#define SSPCR0_SPH 1 << 7 -#define SSPCR0_SCR 1 << 8 - -/* SSP1 CR1 register */ -#define SSPCR1_LBM 1 << 0 -#define SSPCR1_SSE 1 << 1 -#define SSPCR1_MS 1 << 2 -#define SSPCR1_SOD 1 << 3 - -/* SSP1 Interrupt Mask Set/Clear register */ -#define SSPIMSC_RORIM 1 << 0 -#define SSPIMSC_RTIM 1 << 1 -#define SSPIMSC_RXIM 1 << 2 -#define SSPIMSC_TXIM 1 << 3 - -/* SSP1 Interrupt Status register */ -#define SSPRIS_RORRIS 1 << 0 -#define SSPRIS_RTRIS 1 << 1 -#define SSPRIS_RXRIS 1 << 2 -#define SSPRIS_TXRIS 1 << 3 - -/* SSP1 Masked Interrupt register */ -#define SSPMIS_RORMIS 1 << 0 -#define SSPMIS_RTMIS 1 << 1 -#define SSPMIS_RXMIS 1 << 2 -#define SSPMIS_TXMIS 1 << 3 - -/* SSP1 Interrupt clear register */ -#define SSPICR_RORIC 1 << 0 -#define SSPICR_RTIC 1 << 1 - -#define SSP1_INTERRUPT_MODE 0 -#define SMB380_EXTINT_MODE 1 -#define BMA180_EXTINT_MODE 1 - -uint32_t SSP0Init(void); -uint8_t SSP0Prepare(uint8_t chip, uint8_t datasize, uint8_t cpol, uint8_t cpha, - uint16_t freq); -uint8_t SSP0Unprepare(uint8_t chip); -unsigned char SSP0_write(const uint16_t data, uint8_t device); -unsigned short SSP0_read(uint8_t device); -unsigned char SMB380_ssp_write(const unsigned char regAddr, - const unsigned char data, unsigned char flag); -unsigned short SMB380_ssp_read(void); -unsigned short nrf24l01_ssp_read_write(const uint8_t data); -unsigned short acam_trx(const uint8_t data); -void SSP0Handler(void); - -#ifdef __cplusplus -} -#endif - -#endif /* SSP_H */