zhyinch
2020-11-02 c194f604712122b2640e10b6d7d901cf4ba3712f
Ô´Âë/ºËÐİå/Src/ExternalDevices/dw_driver.c
@@ -1,5 +1,5 @@
#include "dw_driver.h"
#include "deca_sleep.h"
#include "deca_device_api.h"
void Reset_DW1000(void)
{
@@ -50,7 +50,75 @@
    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_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();
    }
}