#include "dw_driver.h"
|
#include "deca_sleep.h"
|
|
void Reset_DW1000(void)
|
{
|
GPIO_InitTypeDef GPIO_InitStructure;
|
|
// Enable GPIO used for DW1000 reset
|
GPIO_InitStructure.GPIO_Pin = DW1000_RSTn;
|
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
|
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
|
GPIO_Init(DW1000_RSTn_GPIO, &GPIO_InitStructure);
|
|
//drive the RSTn pin low
|
GPIO_ResetBits(DW1000_RSTn_GPIO, DW1000_RSTn);
|
|
//put the pin back to tri-state ... as input
|
GPIO_InitStructure.GPIO_Pin = DW1000_RSTn;
|
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;
|
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
|
GPIO_Init(DW1000_RSTn_GPIO, &GPIO_InitStructure);
|
|
deca_sleep(2);
|
}
|
|
void DW_GPIO_Init(void)
|
{
|
GPIO_InitTypeDef GPIO_InitStructure;
|
EXTI_InitTypeDef EXTI_InitStructure;
|
|
/* Enable GPIO clock */
|
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
|
|
// Enable GPIO used for DW1000 wakeup
|
GPIO_InitStructure.GPIO_Pin = DW1000_WAKEUP;
|
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
|
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
|
GPIO_Init(DW1000_WAKEUP_GPIO, &GPIO_InitStructure);
|
|
// Enable GPIO used for DW1000 IRQ
|
GPIO_InitStructure.GPIO_Pin = DW1000_IRQ;
|
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD; //IRQ pin should be Pull Down to prevent unnecessary EXT IRQ while DW1000 goes to sleep mode
|
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
|
GPIO_Init(DW1000_IRQ_GPIO, &GPIO_InitStructure);
|
|
// Connect EXTI Line to GPIO Pin
|
GPIO_EXTILineConfig(DECAIRQ_EXTI_PORT, DECAIRQ_EXTI_PIN);
|
|
// Configure EXTI line
|
EXTI_InitStructure.EXTI_Line = DECAIRQ_EXTI;
|
EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
|
EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising; //MPW3 IRQ polarity is high by default
|
EXTI_InitStructure.EXTI_LineCmd = DISABLE;
|
EXTI_Init(&EXTI_InitStructure);
|
|
}
|