資源簡介
代碼的功能是將數據寫入指定頁面后再讀出,并通過串口發送。代碼已測試,可以直接使用。注:本例子是根據協議棧的提供的代碼進行整理、改編的,如有不足之處,請各位大神指定!謝謝!
代碼片段和文件信息
#include?
typedef?unsigned?char?uchar;
typedef?unsigned?int??uint;
typedef?unsigned?long?ulong;
typedef?char?BYTE;
#define?st(x)??????do?{?x?}?while?(__LINE__?==?-1)
#define?HAL_DMA_SET_ADDR_DESC0(?a?)?\
??st(?\
????DMA0CFGH?=?(uchar)(?(uint)(a)?>>?8?);??\
????DMA0CFGL?=?(uchar)(?(uint)(a)?&?0xFF?);???????\
??)
#define?HAL_DMA_SET_ADDR_DESC1234(?a?)?\
??st(?\
????DMA1CFGH?=?(uchar)(?(uint)(a)?>>?8?);??\
????DMA1CFGL?=?(uchar)(?(uint)(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?=?~(?1?<(ch)?)
#define?HAL_DMA_CHECK_IRQ(?ch?)???????(DMAIRQ?&?(?1?<(ch)?))
//?Macro?for?quickly?setting?the?source?address?of?a?DMA?structure.
#define?HAL_DMA_SET_SOURCE(?pDesc?src?)?\
??st(?\
????pDesc->srcAddrH?=?(uchar)((uint)(src)?>>?8);?\
????pDesc->srcAddrL?=?(uchar)(?(uint)(src)?&?0xFF?);?\
??)
//?Macro?for?quickly?setting?the?destination?address?of?a?DMA?structure.
#define?HAL_DMA_SET_DEST(?pDesc?dst?)?\
??st(?\
????pDesc->dstAddrH?=?(uchar)((uint)(dst)?>>?8);?\
????pDesc->dstAddrL?=?(uchar)(?(uint)(dst)?&?0xFF?);?\
??)
//?Macro?for?quickly?setting?the?number?of?bytes?to?be?transferred?by?the?DMA
//?max?length?is?0x1FFF.
#define?HAL_DMA_SET_LEN(?pDesc?len?)?\
??st(?\
????pDesc->xferLenL?=?(uchar)(?(uint)(len)?&?0xFF);?\
????pDesc->xferLenV?&=?~HAL_DMA_LEN_H;?\
????pDesc->xferLenV?|=?(uchar)((uint)(len)?>>?8);?\
??)
#define?HAL_DMA_GET_LEN(?pDesc?)?\
??(((uint)(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;?\
????pDes
- 上一篇:最小的HTTP服務器
- 下一篇:Qt的pro文件轉VS的工程文件
評論
共有 條評論