?? mac_cc2430.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 + -