⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mac_cc2430.c

📁 zigbee location examples
💻 C
字号:
/*******************************************************************************************************
 *                                                                                                     *
 *        **********                                                                                   *
 *       ************                                                                                  *
 *      ***        ***                                                                                 *
 *      ***   +++   ***                                                                                *
 *      ***   + +   ***                                                                                *
 *      ***   +                         CHIPCON CC2430 INTEGRATED 802.15.4 MAC AND PHY                 *
 *      ***   + +   ***                                   MAC-CC2430.C                                 *
 *      ***   +++   ***                                                                                *
 *      ***        ***                                                                                 *
 *       ************                                                                                  *
 *        **********                                                                                   *
 *                                                                                                     *
 *******************************************************************************************************
 * CONFIDENTIAL                                                                                        *
 * The use of this file is restricted by the signed MAC software license agreement.                    *
 *                                                                                                     *
 * Copyright Chipcon AS, 2005                                                                          *
 *******************************************************************************************************/
#include "mac_headers.h"

DMA_CHANNEL_CONFIGURATION      pDma1234Configs[4];

static ROOT void DisableMcuRfErrInterrupt (void);
static ROOT void DisableMcuRfifInterrupt (void);
static ROOT void EnableMcuDmaInterrupt (void);
static ROOT void EnableMcuRfifInterrupt (void);
static ROOT void EnableMcuRfErrInterrupt (void);
static ROOT void InitializeDmaAes (void);
static ROOT void InitializeDmaRf (void);

//-------------------------------------------------------------------------------------------------------
//
// DMA routines
//
//-------------------------------------------------------------------------------------------------------
//-------------------------------------------------------------------------------------------------------
//
//-------------------------------------------------------------------------------------------------------
ROOT void InitializeDma (void)
{
    DMA_CHANNEL_CONFIGURATION   *dmaChannelConfiguration;
    WORD	                    address;

    FetchDmaChannelConfiguration(DMA_TO_AES_CHANNEL_NO, &dmaChannelConfiguration);

    address = (WORD)dmaChannelConfiguration;
    DMA1CFGH = (BYTE)(address >> 8);
    DMA1CFGL = (BYTE)(address);
    DMAIRQ = 0;
    InitializeDmaRf ();
    InitializeDmaAes ();
    EnableMcuDmaInterrupt ();

}

//-------------------------------------------------------------------------------------------------------
//
//-------------------------------------------------------------------------------------------------------
ROOT void FetchDmaChannelConfiguration (BYTE                        dmaChannelNo,
                                        DMA_CHANNEL_CONFIGURATION   **dmaChannelConfiguration)
{
    *dmaChannelConfiguration = &pDma1234Configs[dmaChannelNo - 1];
}


//-------------------------------------------------------------------------------------------------------
//
//-------------------------------------------------------------------------------------------------------
ROOT void StartDma (BYTE dmaChannelNo)
{
    switch (dmaChannelNo)
    {

        case DMA_TO_AES_CHANNEL_NO:
            DMAIRQ &= ~DMA_TO_AES_INTERRUPT_MASK;
            DMAARM = DMA_TO_AES_START;
            break;

        case DMA_FROM_AES_CHANNEL_NO:
            DMAIRQ &= ~DMA_FROM_AES_INTERRUPT_MASK;
            DMAARM = DMA_FROM_AES_START;
            break;

        case DMA_CHANNEL_NO_3:
            DMAIRQ &= ~DMA_CHANNEL_NO_3_INTERRUPT_MASK;
            DMAARM = DMA_CHANNEL_NO_3_START;
            DMAREQ = DMA_CHANNEL_NO_3_START;
            break;

        case DMA_RFRX_CHANNEL:
            DMAIRQ &= ~DMA_RFRX_CHANNEL_BM;
            DMAARM = DMA_RF_START;
            DMAREQ = DMA_RF_START;
            break;

    }
}

//-------------------------------------------------------------------------------------------------------
//
//-------------------------------------------------------------------------------------------------------
static ROOT void EnableMcuDmaInterrupt (void)
{
    DMAIF /*IEX7*/ = FALSE;
    DMAIE /*EX7*/ = TRUE;
}

//-------------------------------------------------------------------------------------------------------
//
//-------------------------------------------------------------------------------------------------------
static ROOT void InitializeDmaRf (void)
{
    pDma1234Configs[DMA_RFRX_CHANNEL - 1].srcMsb = HIBYTE(&X_RFD);
    pDma1234Configs[DMA_RFRX_CHANNEL - 1].srcLsb = LOBYTE(&X_RFD);
    pDma1234Configs[DMA_RFRX_CHANNEL - 1].lenMsb = 0x00;
    pDma1234Configs[DMA_RFRX_CHANNEL - 1].wsizeTmodeTrigger = BYTE_TRANSFER | TRANSFER_MODE_SINGLE | DMA_RF_TRIGGER;
    pDma1234Configs[DMA_RFRX_CHANNEL - 1].incIrqM8Pri = SRC_INC_NONE | DST_INC_ONE_BYTE | DMA_IRQ_ENABLE | DMA_7_BIT_TRANSFER_COUNT | DMA_PRIORITY_LOW;
}

//-------------------------------------------------------------------------------------------------------
//
//-------------------------------------------------------------------------------------------------------
static ROOT void InitializeDmaAes (void)
{
    DMA_CHANNEL_CONFIGURATION   *dmaChannelConfiguration;

    FetchDmaChannelConfiguration (DMA_TO_AES_CHANNEL_NO, &dmaChannelConfiguration);

    dmaChannelConfiguration->destMsb = (BYTE)(((WORD) &X_ENCDI) >> 8);
    dmaChannelConfiguration->destLsb = (BYTE)( (WORD) &X_ENCDI);
    dmaChannelConfiguration->lenMsb = USE_LEN;
    dmaChannelConfiguration->wsizeTmodeTrigger = BYTE_TRANSFER +
                                              TRANSFER_MODE_SINGLE +
                                              DMA_TO_AES_TRIGGER;
    dmaChannelConfiguration->incIrqM8Pri = SRC_INC_ONE_BYTE +
                                           DST_INC_NONE +
                                           DMA_IRQ_DISABLE +
                                           DMA_8_BIT_TRANSFER_COUNT +
                                           DMA_PRIORITY_HIGH;

    FetchDmaChannelConfiguration (DMA_FROM_AES_CHANNEL_NO, &dmaChannelConfiguration);

    dmaChannelConfiguration->srcMsb = (BYTE)(((WORD) &X_ENCDO) >> 8);
    dmaChannelConfiguration->srcLsb = (BYTE)( (WORD) &X_ENCDO);
    dmaChannelConfiguration->lenMsb = USE_LEN;
    dmaChannelConfiguration->wsizeTmodeTrigger = BYTE_TRANSFER +
                                              TRANSFER_MODE_SINGLE +
                                              DMA_FROM_AES_TRIGGER;
    dmaChannelConfiguration->incIrqM8Pri = SRC_INC_NONE +
                                           DST_INC_ONE_BYTE +
                                           DMA_IRQ_DISABLE +
                                           DMA_8_BIT_TRANSFER_COUNT +
                                           DMA_PRIORITY_HIGH;

}

//-------------------------------------------------------------------------------------------------------
//
// RF routines
//
//-------------------------------------------------------------------------------------------------------
//-------------------------------------------------------------------------------------------------------
//
//-------------------------------------------------------------------------------------------------------
ROOT void DisableRfInterrupts (void)
{
    SET_RFIM(RF_CLEAR_INTERRUPT_MASK);
    SET_RFIF(RF_CLEAR_ALL_INTERRUPTS);
    DisableMcuRfErrInterrupt ();
    DisableMcuRfifInterrupt ();

}

//-------------------------------------------------------------------------------------------------------
//
//-------------------------------------------------------------------------------------------------------
ROOT void EnableRfInterrupts (void)
{
    SET_RFIF(RF_CLEAR_ALL_INTERRUPTS);
    SET_RFIM(RF_SET_INTERRUPT_MASK);
    EnableMcuRfErrInterrupt ();
    EnableMcuRfifInterrupt ();
}

//-------------------------------------------------------------------------------------------------------
//
//-------------------------------------------------------------------------------------------------------
static ROOT void EnableMcuRfErrInterrupt (void)
{
    RFERRIF /*IE0*/ = FALSE;
    RFERRIE /*EX0*/ = TRUE;
}

//-------------------------------------------------------------------------------------------------------
//
//-------------------------------------------------------------------------------------------------------
static ROOT void EnableMcuRfifInterrupt (void)
{
    S1CON = FALSE;
    IEN2 |= MCU_RFIF_INTERRUPT_BM;
}

//-------------------------------------------------------------------------------------------------------
//
//-------------------------------------------------------------------------------------------------------
static ROOT void DisableMcuRfErrInterrupt (void)
{
    RFERRIE /*EX0*/ = FALSE;
}

//-------------------------------------------------------------------------------------------------------
//
//-------------------------------------------------------------------------------------------------------
static ROOT void DisableMcuRfifInterrupt (void)
{
    IEN2 &= ~MCU_RFIF_INTERRUPT_BM;
}

//-------------------------------------------------------------------------------------------------------
//
//-------------------------------------------------------------------------------------------------------
ROOT void InitializeRfInterrupts (void)
{
    DisableRfInterrupts ();
    EnableRfInterrupts ();
    EnableMcuRfifInterrupt ();
    EnableMcuRfErrInterrupt ();
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -