#include "dw_driver.h"
|
#include "deca_device_api.h"
|
|
|
|
void delay_ms(uint32_t nTimer)
|
{
|
uint32_t i=1000*nTimer;
|
delay_us(i);
|
}
|
|
void Reset_DW1000(void)
|
{
|
|
GPIO_InitTypeDef GPIO_InitStruct = {0};
|
|
HAL_GPIO_WritePin(DW1000_RSTn_GPIO, DW1000_RSTn, GPIO_PIN_RESET);
|
|
GPIO_InitStruct.Pin = DW1000_RSTn;
|
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
|
GPIO_InitStruct.Pull = GPIO_NOPULL;
|
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
|
HAL_GPIO_Init(DW1000_RSTn_GPIO, &GPIO_InitStruct);
|
|
//drive the RSTn pin low
|
// GPIO_ResetBits(DW1000_RSTn_GPIO, DW1000_RSTn);
|
deca_sleep(100);
|
//put the pin back to tri-state ... as input
|
GPIO_InitStruct.Pin = DW1000_RSTn;
|
GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;
|
GPIO_InitStruct.Pull = GPIO_NOPULL;
|
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
|
HAL_GPIO_Init(DW1000_RSTn_GPIO, &GPIO_InitStruct);
|
|
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 = ENABLE;
|
// EXTI_Init(&EXTI_InitStructure);
|
|
//}
|
|
//¶ÁÈ¡ÍⲿÖжÏ״̬
|
//ITStatus Get_Ext_IRQ_Statues(void)
|
//{
|
// return EXTI_GetITStatus(DECAIRQ_EXTI);
|
//}
|
|
|
////ʹÄÜÍⲿÖжÏ
|
//void Enable_Ext_IRQ(void)
|
//{
|
// NVIC_EnableIRQ(DECAIRQ_EXTI_IRQn);
|
//}
|
|
////½ûÖ¹ÍⲿÖжÏ
|
//void Disable_Ext_IRQ(void)
|
//{
|
// NVIC_DisableIRQ(DECAIRQ_EXTI_IRQn);
|
//}
|
|
/*! ------------------------------------------------------------------------------------------------------------------
|
* Function: decamutexon()
|
*
|
* Description: This function should disable interrupts. This is called at the start of a critical section
|
* It returns the irq state before disable, this value is used to re-enable in decamutexoff call
|
*
|
* Note: The body of this function is defined in deca_mutex.c and is platform specific
|
*
|
* input parameters:
|
*
|
* output parameters
|
*
|
* returns the state of the DW1000 interrupt
|
*/
|
//decaIrqStatus_t decamutexon(void)
|
//{
|
// decaIrqStatus_t s = Get_Ext_IRQ_Statues();
|
|
// if(s)
|
// {
|
// Disable_Ext_IRQ(); //disable the external interrupt line
|
// }
|
// return s ; // return state before disable, value is used to re-enable in decamutexoff call
|
//}
|
|
/*! ------------------------------------------------------------------------------------------------------------------
|
* Function: decamutexoff()
|
*
|
* Description: This function should re-enable interrupts, or at least restore their state as returned(&saved) by decamutexon
|
* This is called at the end of a critical section
|
*
|
* Note: The body of this function is defined in deca_mutex.c and is platform specific
|
*
|
* input parameters:
|
* @param s - the state of the DW1000 interrupt as returned by decamutexon
|
*
|
* output parameters
|
*
|
* returns the state of the DW1000 interrupt
|
*/
|
//void decamutexoff(decaIrqStatus_t s) // put a function here that re-enables the interrupt at the end of the critical section
|
//{
|
// if(s) //need to check the port state as we can't use level sensitive interrupt on the STM ARM
|
// {
|
// Enable_Ext_IRQ();
|
// }
|
//}
|