123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302 |
- #ifndef HAL_DMA_H
- #define HAL_DMA_H
- #ifdef __cplusplus
- extern "C"
- {
- #endif
- #include "hal_board.h"
- #include "hal_types.h"
- #if ((defined HAL_DMA) && (HAL_DMA == TRUE))
- #define HAL_DMA_SET_ADDR_DESC0( a ) \
- st( \
- DMA0CFGH = (uint8)( (uint16)(a) >> 8 ); \
- DMA0CFGL = (uint8)( (uint16)(a) & 0xFF ); \
- )
- #define HAL_DMA_SET_ADDR_DESC1234( a ) \
- st( \
- DMA1CFGH = (uint8)( (uint16)(a) >> 8 ); \
- DMA1CFGL = (uint8)( (uint16)(a) & 0xFF ); \
- )
- #define HAL_DMA_GET_DESC0() &dmaCh0
- #define HAL_DMA_GET_DESC1234( a ) (dmaCh1234+((a)-1))
- #define HAL_DMA_ARM_CH( ch ) DMAARM = (0x01 << (ch))
- #define HAL_DMA_CH_ARMED( ch ) (DMAARM & (0x01 << (ch)))
- #define HAL_DMA_ABORT_CH( ch ) DMAARM = (0x80 | (0x01 << (ch)))
- #define HAL_DMA_MAN_TRIGGER( ch ) DMAREQ = (0x01 << (ch))
- #define HAL_DMA_START_CH( ch ) HAL_DMA_MAN_TRIGGER( (ch) )
- #define HAL_DMA_CLEAR_IRQ( ch ) DMAIRQ = ((0x01 << (ch)) ^ 0xFF)
- #define HAL_DMA_CHECK_IRQ( ch ) (DMAIRQ & (0x01 << (ch)))
- #define HAL_DMA_SET_SOURCE( pDesc, src ) \
- st( \
- pDesc->srcAddrH = (uint8)( (uint16)(src) >> 8 ); \
- pDesc->srcAddrL = (uint8)( (uint16)(src) & 0xFF ); \
- )
- #define HAL_DMA_SET_DEST( pDesc, dst ) \
- st( \
- pDesc->dstAddrH = (uint8)( (uint16)(dst) >> 8 ); \
- pDesc->dstAddrL = (uint8)( (uint16)(dst) & 0xFF ); \
- )
- #define HAL_DMA_SET_LEN( pDesc, len ) \
- st( \
- pDesc->xferLenL = (uint8)( (uint16)(len) & 0xFF); \
- pDesc->xferLenV &= ~HAL_DMA_LEN_H; \
- pDesc->xferLenV |= (uint8)((uint16)(len) >> 8); \
- )
- #define HAL_DMA_GET_LEN( pDesc ) \
- (((uint16)(pDesc->xferLenV & HAL_DMA_LEN_H) << 8) | pDesc->xferLenL)
- #define HAL_DMA_SET_VLEN( pDesc, vMode ) \
- st( \
- pDesc->xferLenV &= ~HAL_DMA_LEN_V; \
- pDesc->xferLenV |= (vMode << 5); \
- )
- #define HAL_DMA_SET_WORD_SIZE( pDesc, xSz ) \
- st( \
- pDesc->ctrlA &= ~HAL_DMA_WORD_SIZE; \
- pDesc->ctrlA |= (xSz << 7); \
- )
- #define HAL_DMA_SET_TRIG_MODE( pDesc, tMode ) \
- st( \
- pDesc->ctrlA &= ~HAL_DMA_TRIG_MODE; \
- pDesc->ctrlA |= (tMode << 5); \
- )
- #define HAL_DMA_GET_TRIG_MODE( pDesc ) ((pDesc->ctrlA >> 5) & 0x3)
- #define HAL_DMA_SET_TRIG_SRC( pDesc, tSrc ) \
- st( \
- pDesc->ctrlA &= ~HAL_DMA_TRIG_SRC; \
- pDesc->ctrlA |= tSrc; \
- )
- #define HAL_DMA_SET_SRC_INC( pDesc, srcInc ) \
- st( \
- pDesc->ctrlB &= ~HAL_DMA_SRC_INC; \
- pDesc->ctrlB |= (srcInc << 6); \
- )
- #define HAL_DMA_SET_DST_INC( pDesc, dstInc ) \
- st( \
- pDesc->ctrlB &= ~HAL_DMA_DST_INC; \
- pDesc->ctrlB |= (dstInc << 4); \
- )
- #define HAL_DMA_SET_IRQ( pDesc, enable ) \
- st( \
- pDesc->ctrlB &= ~HAL_DMA_IRQ_MASK; \
- pDesc->ctrlB |= (enable << 3); \
- )
- #define HAL_DMA_SET_M8( pDesc, m8 ) \
- st( \
- pDesc->ctrlB &= ~HAL_DMA_M8; \
- pDesc->ctrlB |= (m8 << 2); \
- )
- #define HAL_DMA_SET_PRIORITY( pDesc, pri ) \
- st( \
- pDesc->ctrlB &= ~HAL_DMA_PRIORITY; \
- pDesc->ctrlB |= pri; \
- )
- #define HAL_DMA_VLEN_USE_LEN 0x00
- #define HAL_DMA_VLEN_1_P_VALOFFIRST 0x01
- #define HAL_DMA_VLEN_VALOFFIRST 0x02
- #define HAL_DMA_VLEN_1_P_VALOFFIRST_P_1 0x03
- #define HAL_DMA_VLEN_1_P_VALOFFIRST_P_2 0x04
- #define HAL_DMA_WORDSIZE_BYTE 0x00
- #define HAL_DMA_WORDSIZE_WORD 0x01
- #define HAL_DMA_TMODE_SINGLE 0x00
- #define HAL_DMA_TMODE_BLOCK 0x01
- #define HAL_DMA_TMODE_SINGLE_REPEATED 0x02
- #define HAL_DMA_TMODE_BLOCK_REPEATED 0x03
- #define HAL_DMA_TRIG_NONE 0
- #define HAL_DMA_TRIG_PREV 1
- #define HAL_DMA_TRIG_T1_CH0 2
- #define HAL_DMA_TRIG_T1_CH1 3
- #define HAL_DMA_TRIG_T1_CH2 4
- #define HAL_DMA_TRIG_T2_COMP 5
- #define HAL_DMA_TRIG_T2_OVFL 6
- #define HAL_DMA_TRIG_T3_CH0 7
- #define HAL_DMA_TRIG_T3_CH1 8
- #define HAL_DMA_TRIG_T4_CH0 9
- #define HAL_DMA_TRIG_T4_CH1 10
- #define HAL_DMA_TRIG_ST 11
- #define HAL_DMA_TRIG_IOC_0 12
- #define HAL_DMA_TRIG_IOC_1 13
- #define HAL_DMA_TRIG_URX0 14
- #define HAL_DMA_TRIG_UTX0 15
- #define HAL_DMA_TRIG_URX1 16
- #define HAL_DMA_TRIG_UTX1 17
- #define HAL_DMA_TRIG_FLASH 18
- #define HAL_DMA_TRIG_RADIO 19
- #define HAL_DMA_TRIG_ADC_CHALL 20
- #define HAL_DMA_TRIG_ADC_CH0 21
- #define HAL_DMA_TRIG_ADC_CH1 22
- #define HAL_DMA_TRIG_ADC_CH2 23
- #define HAL_DMA_TRIG_ADC_CH3 24
- #define HAL_DMA_TRIG_ADC_CH4 25
- #define HAL_DMA_TRIG_ADC_CH5 26
- #define HAL_DMA_TRIG_ADC_CH6 27
- #define HAL_DMA_TRIG_ADC_CH7 28
- #define HAL_DMA_TRIG_ENC_DW 29
- #define HAL_DMA_TRIG_ENC_UP 30
- #define HAL_DMA_SRCINC_0 0x00
- #define HAL_DMA_SRCINC_1 0x01
- #define HAL_DMA_SRCINC_2 0x02
- #define HAL_DMA_SRCINC_M1 0x03
- #define HAL_DMA_DSTINC_0 0x00
- #define HAL_DMA_DSTINC_1 0x01
- #define HAL_DMA_DSTINC_2 0x02
- #define HAL_DMA_DSTINC_M1 0x03
- #define HAL_DMA_IRQMASK_DISABLE 0x00
- #define HAL_DMA_IRQMASK_ENABLE 0x01
- #define HAL_DMA_M8_USE_8_BITS 0x00
- #define HAL_DMA_M8_USE_7_BITS 0x01
- #define HAL_DMA_PRI_LOW 0x00
- #define HAL_DMA_PRI_GUARANTEED 0x01
- #define HAL_DMA_PRI_HIGH 0x02
- #define HAL_DMA_PRI_ABSOLUTE 0x03
- #define HAL_DMA_MAX_ARM_CLOCKS 45
- #define HAL_DMA_LEN_V 0xE0
- #define HAL_DMA_LEN_H 0x1F
- #define HAL_DMA_WORD_SIZE 0x80
- #define HAL_DMA_TRIG_MODE 0x60
- #define HAL_DMA_TRIG_SRC 0x1F
- #define HAL_DMA_SRC_INC 0xC0
- #define HAL_DMA_DST_INC 0x30
- #define HAL_DMA_IRQ_MASK 0x08
- #define HAL_DMA_M8 0x04
- #define HAL_DMA_PRIORITY 0x03
- typedef struct {
- uint8 srcAddrH;
- uint8 srcAddrL;
- uint8 dstAddrH;
- uint8 dstAddrL;
- uint8 xferLenV;
- uint8 xferLenL;
- uint8 ctrlA;
- uint8 ctrlB;
- } halDMADesc_t;
- extern halDMADesc_t dmaCh0;
- extern halDMADesc_t dmaCh1234[4];
- void HalDmaInit( void );
- #endif
- #ifdef __cplusplus
- }
- #endif
- #endif
|