Skip to content
GitLab
Explore
Sign in
Register
Primary navigation
Search or go to…
Project
Skyward Boardcore
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Package registry
Container registry
Model registry
Operate
Environments
Terraform modules
Monitor
Incidents
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
Nicolò Caruso
Skyward Boardcore
Commits
d9d026c2
Commit
d9d026c2
authored
5 years ago
by
Andrea Milluzzo
Browse files
Options
Downloads
Patches
Plain Diff
[IMU] LSM9DS1
adjusted formatting and Doxygen comments for members
parent
0dbf5ecb
No related branches found
No related tags found
No related merge requests found
Changes
2
Show whitespace changes
Inline
Side-by-side
Showing
2 changed files
src/tests/drivers/test-lsm9ds1-fifo.cpp
+78
-53
78 additions, 53 deletions
src/tests/drivers/test-lsm9ds1-fifo.cpp
src/tests/drivers/test-lsm9ds1.cpp
+21
-19
21 additions, 19 deletions
src/tests/drivers/test-lsm9ds1.cpp
with
99 additions
and
72 deletions
src/tests/drivers/test-lsm9ds1-fifo.cpp
+
78
−
53
View file @
d9d026c2
...
...
@@ -23,28 +23,30 @@
*/
#include
<array>
#include
"drivers/HardwareTimer.h"
#include
"drivers/spi/SPIDriver.h"
#include
"logger/Logger.h"
#include
"sensors/LSM9DS1/LSM9DS1_AxelGyro.h"
#include
"sensors/LSM9DS1/LSM9DS1_Magneto.h"
#include
"diagnostic/CpuMeter.h"
#include
"logger/Logger.h"
using
namespace
miosix
;
using
namespace
std
;
typedef
Gpio
<
GPIOA_BASE
,
5
>
GpioSck
;
//SPI1 f407
// SPI1 f407
typedef
Gpio
<
GPIOA_BASE
,
5
>
GpioSck
;
typedef
Gpio
<
GPIOA_BASE
,
6
>
GpioMiso
;
typedef
Gpio
<
GPIOA_BASE
,
7
>
GpioMosi
;
typedef
Gpio
<
GPIOC_BASE
,
13
>
GpioINT1
;
//INT1 A/G
// INT1 A/G LSM9DS1
typedef
Gpio
<
GPIOC_BASE
,
13
>
GpioINT1
;
// SPI
// SPI
bus & cs
SPIBus
bus
(
SPI1
);
GpioPin
cs_XLG
(
GPIOE_BASE
,
7
);
GpioPin
cs_M
(
GPIOE_BASE
,
9
);
// LED just for
init
// LED just for
visual reference
GpioPin
LED1
(
GPIOD_BASE
,
15
);
GpioPin
LED2
(
GPIOD_BASE
,
13
);
GpioPin
LED3
(
GPIOD_BASE
,
14
);
...
...
@@ -52,11 +54,10 @@ GpioPin LED3(GPIOD_BASE, 14);
// USR pushbutton
GpioPin
PUSHBUTTON
(
GPIOA_BASE
,
0
);
// SPI read flag
volatile
bool
flagSPIReadRequest
=
false
;
//IMU obj
data
//
IMU obj
variables
static
const
bool
FIFO_ENABLED
=
true
;
static
const
uint8_t
FIFO_WATERMARK
=
20
;
static
const
uint16_t
FIFO_SAMPLES
=
1000
;
...
...
@@ -105,8 +106,6 @@ void timer5Config();
void
EXTI1Config
();
void
printStats
(
void
*
);
uint16_t
fifo_counter
=
0
;
int
main
()
{
...
...
@@ -115,8 +114,10 @@ int main()
uint64_t
lastMagtick
=
0
;
uint64_t
lastTemptick
=
0
;
// Spawn thread for loggings logger stats
Thread
::
create
(
printStats
,
4096
);
// start logger
Logger
&
logger
=
Logger
::
instance
();
logger
.
start
();
...
...
@@ -124,27 +125,38 @@ int main()
timer5Config
();
EXTI1Config
();
lsm9ds1_xlg
=
new
LSM9DS1_XLG
(
bus
,
cs_XLG
,
LSM9DS1_XLG
::
AxelFSR
::
FS_8
,
LSM9DS1_XLG
::
Gyro
FSR
::
FS_
245
,
LSM9DS1_XLG
::
ODR
::
ODR_238
,
FIFO_ENABLED
,
FIFO_WATERMARK
);
lsm9ds1_xlg
=
new
LSM9DS1_XLG
(
bus
,
cs_XLG
,
LSM9DS1_XLG
::
Axel
FSR
::
FS_
8
,
LSM9DS1_XLG
::
GyroFSR
::
FS_245
,
LSM9DS1_XLG
::
ODR
::
ODR_238
,
FIFO_ENABLED
,
FIFO_WATERMARK
);
lsm9ds1_m
=
new
LSM9DS1_M
(
bus
,
cs_M
,
LSM9DS1_M
::
MagFSR
::
FS_8
,
LSM9DS1_M
::
ODR
::
ODR_40
);
lsm9ds1_m
=
new
LSM9DS1_M
(
bus
,
cs_M
,
LSM9DS1_M
::
MagFSR
::
FS_8
,
LSM9DS1_M
::
ODR
::
ODR_40
);
while
(
!
lsm9ds1_xlg
->
init
());
while
(
!
lsm9ds1_m
->
init
());
while
(
!
lsm9ds1_xlg
->
init
())
;
while
(
!
lsm9ds1_m
->
init
())
;
LED2
.
high
();
// init OK
lsm9ds1_xlg
->
clearFIFO
();
//just to be sure to intercept the first interrupt
// just to be sure to intercept the first interrupt rising edge
lsm9ds1_xlg
->
clearFIFO
();
//
start
sampling
// sampling
until you push the button
while
(
!
PUSHBUTTON
.
value
())
{
//ACCELEROMETER + GYROSCOPE UPDATE (FIFO)
//an interrupt is set: time to dump the FIFO
if
(
flagSPIReadRequest
)
{
flagSPIReadRequest
=
false
;
dt
=
hrclock
.
toMicroSeconds
(
delta
)
/
FIFO_WATERMARK
;
//delta of each sample
// delta of each sample = delta beetween interrupts / #samples
dt
=
hrclock
.
toMicroSeconds
(
delta
)
/
FIFO_WATERMARK
;
//dump the fifo
lsm9ds1_xlg
->
onSimpleUpdate
();
//update each timestamp and log the sample (da integrare su driver?)
for
(
int
i
=
0
;
i
<
FIFO_WATERMARK
;
i
++
)
{
lsm9ds1XLGSample
XLGsample
=
lsm9ds1_xlg
->
getLsm9ds1FIFO
()[
i
];
...
...
@@ -152,32 +164,42 @@ int main()
XLGsample
.
timestamp
=
XLGtimestamp
;
logger
.
log
(
XLGsample
);
}
LED1
.
low
();
fifo_counter
++
;
}
//MAGNETOMETER UPDATE (SIMPLE)
if
(
miosix
::
getTick
()
-
lastMagtick
>=
MAG_SAMPLING_PERIOD
)
{
lastMagtick
=
miosix
::
getTick
();
//get sample from the sensor
lsm9ds1_m
->
onSimpleUpdate
();
//update timestamp and log the sample
lsm9ds1MSample
MAGsample
;
MAGsample
.
magData
=
*
(
lsm9ds1_m
->
compassDataPtr
());
MAGsample
.
timestamp
=
lastMagtick
;
logger
.
log
(
MAGsample
);
}
//TEMPERATURE UPDATE (SIMPLE)
if
(
miosix
::
getTick
()
-
lastTemptick
>=
TEMP_SAMPLING_PERIOD
)
{
lastTemptick
=
miosix
::
getTick
();
//get sample from the sensor
lsm9ds1_xlg
->
temperatureUpdate
();
//update timestamp and log the sample
lsm9ds1TSample
Tsample
;
Tsample
.
tempData
=
*
(
lsm9ds1_xlg
->
tempDataPtr
());
Tsample
.
timestamp
=
lastTemptick
;
logger
.
log
(
Tsample
);
}
}
//stop log
logger
.
stop
();
LED1
.
low
();
...
...
@@ -186,7 +208,9 @@ int main()
Thread
::
sleep
(
10000
);
reboot
();
while
(
1
);
while
(
1
)
;
return
0
;
}
...
...
@@ -225,7 +249,6 @@ void gpioConfig()
// Select USR pushbutton
PUSHBUTTON
.
mode
(
Mode
::
INPUT
);
}
cs_XLG
.
high
();
...
...
@@ -271,7 +294,9 @@ void EXTI1Config() // PC13
void
printStats
(
void
*
)
{
Logger
&
log
=
Logger
::
instance
();
while
(
!
log
.
isStarted
());
while
(
!
log
.
isStarted
())
;
while
(
log
.
isStarted
())
{
LogStats
stats
=
log
.
getLogStats
();
...
...
This diff is collapsed.
Click to expand it.
src/tests/drivers/test-lsm9ds1.cpp
+
21
−
19
View file @
d9d026c2
...
...
@@ -28,8 +28,8 @@
using
namespace
miosix
;
typedef
Gpio
<
GPIOA_BASE
,
5
>
GpioSck
;
// questi sono i pin SPI per
// f407_discovery
// pin f407 discovery SPI1
typedef
Gpio
<
GPIOA_BASE
,
5
>
GpioSck
;
typedef
Gpio
<
GPIOA_BASE
,
6
>
GpioMiso
;
typedef
Gpio
<
GPIOA_BASE
,
7
>
GpioMosi
;
...
...
@@ -37,7 +37,6 @@ static const bool FIFO_ENABLED = false;
// SPI
SPIBus
bus
(
SPI1
);
// SPIBusConfig cfg;
GpioPin
cs_XLG
(
GPIOE_BASE
,
7
);
GpioPin
cs_M
(
GPIOE_BASE
,
9
);
...
...
@@ -54,7 +53,8 @@ int main()
{
FastInterruptDisableLock
dLock
;
RCC
->
APB2ENR
|=
RCC_APB2ENR_SPI1EN
;
// SPI1 ENABLE
// SPI1 ENABLE
RCC
->
APB2ENR
|=
RCC_APB2ENR_SPI1EN
;
GpioSck
::
mode
(
Mode
::
ALTERNATE
);
GpioMiso
::
mode
(
Mode
::
ALTERNATE
);
...
...
@@ -73,20 +73,10 @@ int main()
LED2
.
mode
(
Mode
::
OUTPUT
);
}
// chip select high
cs_XLG
.
high
();
cs_M
.
high
();
// dump regiters
/*
for(int reg=0; reg<=0x38; reg++)
{
SPISlave spislave(bus, cs_XLG, cfg);
SPITransaction spi(spislave);
uint8_t data = spi.read(reg);
printf("0x%02X-->0x%02X\n", reg,data);
}
}*/
LSM9DS1_XLG
lsm9ds1X
(
bus
,
cs_XLG
,
LSM9DS1_XLG
::
AxelFSR
::
FS_8
,
LSM9DS1_XLG
::
GyroFSR
::
FS_245
,
LSM9DS1_XLG
::
ODR
::
ODR_952
);
...
...
@@ -110,18 +100,30 @@ int main()
long
long
first_tick
=
getTick
();
for
(;;)
{
//get timestamp
long
long
last_tick
=
getTick
();
//get axel+gyro+temp data
lsm9ds1X
.
onSimpleUpdate
();
adata
=
*
(
lsm9ds1X
.
accelDataPtr
());
gdata
=
*
(
lsm9ds1X
.
gyroDataPtr
());
tdata
=
*
(
lsm9ds1X
.
tempDataPtr
());
//get magneto data
lsm9ds1M
.
onSimpleUpdate
();
mdata
=
*
(
lsm9ds1M
.
compassDataPtr
());
// clang-format off
printf
(
"%d,%.3f,%.3f,%.3f,%.3f,%.3f,%.3f,%.3f,%.3f,%.3f,%.1f
\n
"
,
(
int
)(
last_tick
-
first_tick
),
adata
.
getX
(),
adata
.
getY
(),
adata
.
getZ
(),
gdata
.
getX
(),
gdata
.
getY
(),
gdata
.
getZ
(),
mdata
.
getX
(),
mdata
.
getY
(),
mdata
.
getZ
(),
tdata
);
// printf("%.3f,%.3f,%.3f\n", mdata.getX(), mdata.getY(), mdata.getZ());
(
int
)(
last_tick
-
first_tick
),
adata
.
getX
(),
adata
.
getY
(),
adata
.
getZ
(),
gdata
.
getX
(),
gdata
.
getY
(),
gdata
.
getZ
(),
mdata
.
getX
(),
mdata
.
getY
(),
mdata
.
getZ
(),
tdata
);
// clang-format on
}
return
0
;
...
...
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment