Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
D
dw1000_driver_freertos
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
Model registry
Operate
Environments
Monitor
Incidents
Service Desk
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
cm-projects
dw1000_driver_freertos
Commits
72e4d64d
Commit
72e4d64d
authored
9 years ago
by
Georg von Zengen
Browse files
Options
Downloads
Patches
Plain Diff
further work on dw1000 driver
parent
f4f64e01
No related branches found
Branches containing commit
No related tags found
No related merge requests found
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
Inc/dw1000_hal.h
+3
-1
3 additions, 1 deletion
Inc/dw1000_hal.h
Src/dw1000.c
+11
-1
11 additions, 1 deletion
Src/dw1000.c
Src/dw1000_hal.c
+33
-10
33 additions, 10 deletions
Src/dw1000_hal.c
with
47 additions
and
12 deletions
Inc/dw1000_hal.h
+
3
−
1
View file @
72e4d64d
#ifndef __dw1000_hal_H
#define __dw1000_hal_H
#include
"FreeRTOS.h"
#include
"task.h"
extern
TaskHandle_t
xHandleDW1000HAL
;
#define DW1000HAL_SPI_TIMEOUT 10
...
...
@@ -17,6 +20,5 @@ int dw1000Hal_readDmaRegister(uint8_t regID, uint8_t *dest, uint16_t len, void (
int
dw1000Hal_writeDmaRegister
(
uint8_t
regID
,
uint8_t
*
src
,
uint16_t
len
,
void
(
*
callback
)(
int
state
,
void
*
data
,
uint16_t
len
));
void
vTaskDW1000HAL
(
void
*
pvParameters
);
void
dw1000Hal_extiCallback
(
void
);
#endif
/*__ dw1000_hal_H */
This diff is collapsed.
Click to expand it.
Src/dw1000.c
+
11
−
1
View file @
72e4d64d
...
...
@@ -4,8 +4,10 @@
#include
"deca_regs.h"
// sends a frame and blocks until finished
int
dw1000_sendFrame
(
uint8_t
*
payload
,
uint16_t
len
)
{
int
dw1000_sendFrame
(
uint8_t
*
payload
,
uint16_t
len
)
{
uint64_t
event_clear
=
0
;
// write tx data to data buffer
// this buffer only contains the payload, PHR is generated by the chip
// the chip automatically appends two FCS (CRC) bytes to this payload
...
...
@@ -69,3 +71,11 @@ int dw1000_sendFrame(uint8_t *payload, uint16_t len) {
return
0
;
}
int
dw1000_setPanAddr
(
uint16_t
addr
)
{
return
dw1000Hal_writeSubRegister
(
PANADR_ID
,
PANADR_SHORT_ADDR_OFFSET
,(
uint8_t
*
)
&
addr
,
PANADR_SHORT_ADDR_LEN
);
}
int
dw1000_setPanId
(
uint16_t
addr
)
{
return
dw1000Hal_writeSubRegister
(
PANADR_ID
,
PANADR_PAN_ID_OFFSET
,(
uint8_t
*
)
&
addr
,
PANADR_PAN_ID_LEN
);
}
This diff is collapsed.
Click to expand it.
Src/dw1000_hal.c
+
33
−
10
View file @
72e4d64d
...
...
@@ -9,12 +9,15 @@
#include
"spi.h"
#include
"test_app.h"
SPI_HandleTypeDef
*
hspi
;
uint8_t
read3
[
7
];
static
void
(
*
spiCallback
)(
int
state
,
void
*
data
,
uint16_t
len
);
static
void
*
spiCallbackData
;
static
SemaphoreHandle_t
spiSema
=
NULL
;
//semaphore for SPI access
TaskHandle_t
xHandleDW1000HAL
=
NULL
;
void
dw1000Hal_reset
(
void
)
{
...
...
@@ -127,7 +130,7 @@ int dw1000Hal_readRegister(uint8_t regID, uint8_t *dest, uint16_t len)
xSemaphoreGive
(
spiSema
);
}
else
{
ret
=
HAL_LOCKED
;
trace_printf
(
"nb"
);
//
trace_printf("nb");
}
portEXIT_CRITICAL
();
return
ret
;
...
...
@@ -150,7 +153,7 @@ int dw1000Hal_readRegisterFromIsr(uint8_t regID, uint8_t *dest, uint16_t len)
xSemaphoreGiveFromISR
(
spiSema
,
pdFALSE
);
}
else
{
ret
=
HAL_LOCKED
;
trace_printf
(
"ib"
);
//
trace_printf("ib");
}
return
ret
;
}
...
...
@@ -173,7 +176,7 @@ int dw1000Hal_writeRegister(uint8_t regID, uint8_t *src, uint16_t len)
xSemaphoreGive
(
spiSema
);
}
else
{
ret
=
HAL_LOCKED
;
trace_printf
(
"na"
);
//
trace_printf("na");
}
portEXIT_CRITICAL
();
return
ret
;
...
...
@@ -196,7 +199,7 @@ int dw1000Hal_writeRegisterFromIsr(uint8_t regID, uint8_t *src, uint16_t len)
xSemaphoreGiveFromISR
(
spiSema
,
pdFALSE
);
}
else
{
ret
=
HAL_LOCKED
;
trace_printf
(
"ia"
);
//
trace_printf("ia");
}
return
ret
;
}
...
...
@@ -251,8 +254,6 @@ void vTaskDW1000HAL(void *pvParameters)
hspi
=
&
hspi1
;
spiSema
=
xSemaphoreCreateMutex
();
//creating semaphore for SPI access
TickType_t
xNextWakeTime
;
xNextWakeTime
=
xTaskGetTickCount
();
//Configure the dw1000
dw1000Hal_reset
();
...
...
@@ -262,21 +263,34 @@ void vTaskDW1000HAL(void *pvParameters)
//trace_printf("sys_mask %x\n",sys_mask);
dw1000Hal_writeRegister
(
SYS_MASK_ID
,
&
sys_mask
,
SYS_MASK_LEN
);
//set TX LED
uint32_t
gpio
=
0x
00001000UL
;
uint32_t
gpio
=
0x
5540
;
dw1000Hal_writeSubRegister
(
GPIO_CTRL_ID
,
GPIO_MODE_OFFSET
,(
uint8_t
*
)
&
gpio
,
GPIO_MODE_LEN
);
uint32_t
led
=
0
;
dw1000Hal_readSubRegister
(
PMSC_ID
,
PMSC_CTRL0_OFFSET
,(
uint8_t
*
)
&
led
,
PMSC_CTRL0_LEN
);
led
|=
(
1
<<
18
)
|
(
1
<<
23
);
// Preparing LEDs for blink mode
dw1000Hal_writeSubRegister
(
PMSC_ID
,
PMSC_CTRL0_OFFSET
,(
uint8_t
*
)
&
led
,
PMSC_CTRL0_LEN
);
dw1000Hal_readSubRegister
(
PMSC_ID
,
PMSC_LEDC_OFFSET
,(
uint8_t
*
)
&
led
,
PMSC_LEDC_LEN
);
led
|=
PMSC_LEDC_BLNKEN
;
led
|=
PMSC_LEDC_BLNKEN
;
// enable blink mode
//led |= 0xF0000; // force leds to blink once
dw1000Hal_writeSubRegister
(
PMSC_ID
,
PMSC_LEDC_OFFSET
,(
uint8_t
*
)
&
led
,
PMSC_LEDC_LEN
);
//led &= ~0xF0000; // reset froce blink bits. needed to make the leds blinking
//dw1000Hal_writeSubRegister(PMSC_ID,PMSC_LEDC_OFFSET,(uint8_t*)&led,PMSC_LEDC_LEN);
//uint8_t event_clear[SYS_STATUS_LEN];
//memset(event_clear, 0xff, SYS_STATUS_LEN);
//dw1000Hal_writeRegister(SYS_STATUS_ID, &event_clear, SYS_STATUS_LEN);
uint32_t
sys_ctrl
=
0
;
dw1000Hal_readRegisterFromIsr
(
SYS_CTRL_ID
,
(
uint8_t
*
)
&
sys_ctrl
,
SYS_CTRL_LEN
);
// switch to rx mode
sys_ctrl
|=
SYS_CTRL_RXENAB
;
dw1000Hal_writeRegisterFromIsr
(
SYS_CTRL_ID
,
(
uint8_t
*
)
&
sys_ctrl
,
SYS_CTRL_LEN
);
uint8_t
led_values
=
0
;
TickType_t
xNextWakeTime
;
xNextWakeTime
=
xTaskGetTickCount
();
while
(
1
){
vTaskDelayUntil
(
&
xNextWakeTime
,
1000
/
portTICK_PERIOD_MS
);
osDelay
(
1000
);
}
vTaskDelete
(
NULL
);
}
...
...
@@ -323,14 +337,23 @@ void HAL_SPI_TxCpltCallback(SPI_HandleTypeDef *hspi)
void
dw1000Hal_extiCallback
(
void
)
{
BaseType_t
xHigherPriorityTaskWoken
;
uint64_t
event
=
0
;
uint64_t
event_clear
=
0
;
dw1000Hal_readRegisterFromIsr
(
SYS_STATUS_ID
,
(
uint8_t
*
)
&
event
,
SYS_STATUS_LEN
);
if
(
event
&
SYS_STATUS_TXFRS
){
// Frame sent
event_clear
|=
SYS_STATUS_TXFRS
;
//clear interrupt
//trace_printf("sent\n");
uint32_t
sys_ctrl
=
0
;
dw1000Hal_readRegisterFromIsr
(
SYS_CTRL_ID
,
(
uint8_t
*
)
&
sys_ctrl
,
SYS_CTRL_LEN
);
// switch to rx mode
sys_ctrl
|=
SYS_CTRL_RXENAB
;
dw1000Hal_writeRegisterFromIsr
(
SYS_CTRL_ID
,
(
uint8_t
*
)
&
sys_ctrl
,
SYS_CTRL_LEN
);
xHigherPriorityTaskWoken
=
pdFALSE
;
xTaskNotifyFromISR
(
xHandleTestApp
,
0x50
,
eSetValueWithOverwrite
,
&
xHigherPriorityTaskWoken
);
}
if
(
event
&
SYS_STATUS_RXDFR
){
// Frame
sent
if
(
event
&
SYS_STATUS_RXDFR
){
// Frame
received
event_clear
|=
SYS_STATUS_RXDFR
;
//clear interrupt
//trace_printf("received\n");
uint32_t
sys_ctrl
=
0
;
dw1000Hal_readRegisterFromIsr
(
SYS_CTRL_ID
,
(
uint8_t
*
)
&
sys_ctrl
,
SYS_CTRL_LEN
);
// switch to rx mode
sys_ctrl
|=
SYS_CTRL_RXENAB
;
...
...
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