请问下,cc2530的DMA在传输中,如果我要传输一个成员全是uint32的结构体,那么1个字/字节算一次传输还是传输整个结构体算一次传输?datasheet也没讲明白四个传输模式到底能实现怎么样的效果。
我现在的情况是,我在写这个结构体的时候flash能被写入但是每个成员都只被写入了第一个字节,搞不懂传输模式跟源/目的地址的增量要怎么配置。以下是我的配置代码,而且奇怪的是目的地址的增量如果不是0就不能写入flash,求解!
- halDMADesc_t *ch = HAL_NV_DMA_GET_DESC();
- HAL_DMA_SET_SOURCE(ch, buf);
- HAL_DMA_SET_DEST(ch, &FWDATA);
- HAL_DMA_SET_VLEN(ch, HAL_DMA_VLEN_USE_LEN);
- HAL_DMA_SET_LEN(ch, (cnt * HAL_FLASH_WORD_SIZE));
- HAL_DMA_SET_WORD_SIZE(ch, HAL_DMA_WORDSIZE_BYTE);
- HAL_DMA_SET_TRIG_MODE(ch, HAL_DMA_TMODE_SINGLE);
- HAL_DMA_SET_TRIG_SRC(ch, HAL_DMA_TRIG_FLASH);
- HAL_DMA_SET_SRC_INC(ch, HAL_DMA_SRCINC_1);
- HAL_DMA_SET_DST_INC(ch, HAL_DMA_DSTINC_0);
- // The DMA is to be polled and shall not issue an IRQ upon completion.
- HAL_DMA_SET_IRQ(ch, HAL_DMA_IRQMASK_DISABLE);
- HAL_DMA_SET_M8( ch, HAL_DMA_M8_USE_8_BITS);
- HAL_DMA_SET_PRIORITY(ch, HAL_DMA_PRI_HIGH);
- HAL_DMA_CLEAR_IRQ(HAL_NV_DMA_CH);
- HAL_DMA_ARM_CH(HAL_NV_DMA_CH);
- FADDRL = (uint8)addr;
- FADDRH = (uint8)(addr >> 8);
-
- // DMA0CFGH =(uint8)(((uint)&dmaCh0) >> 8) & 0x00FF;
- // DMA0CFGL = (uint8)((uint)&dmaCh0) & 0x00FF;
-
- FCTL |= 0x02; // Trigger the DMA writes.
- while (FCTL & 0x80); // Wait until writing is done.
|