
初级技术员

- 积分
- 33
- 在线时间
- 17 小时
- 精华
- 0
- 注册时间
- 2020-12-8
- 最后登录
- 2021-3-9
|
本帖最后由 fanchenxinok 于 2021-3-2 16:37 编辑
实验了这个方法,I2C_SlaveReceiveDMA接口的DMA初始化了半中断使能,接收数据长度翻倍, 但是没有接收一半的callback来。
void I2C_SlaveReceiveDMA(I2C_Type *I2Cx, DMA_ChannelType *DMAx, uint8_t *rxBuffer, uint16_t length, DeviceCallback_Type callback)
{
DMA_ConfigType dmaConfig;
DEVICE_ASSERT(I2C_INSTANCE_MAX > I2C_INDEX(I2Cx));
DEVICE_ASSERT(IS_DMA_PERIPH(DMAx));
DEVICE_ASSERT(IS_DMA_TRANSFER_NUM(length));
dmaConfig.memStartAddr = (uint32_t)rxBuffer;
dmaConfig.memEndAddr = (uint32_t)rxBuffer + length;
dmaConfig.periphStartAddr = (uint32_t)(&(I2Cx->DATA));
dmaConfig.periphSelect = (I2C0 == I2Cx) ? DMA_PEPIRH_I2C0_RX : DMA_PEPIRH_I2C1_RX;
dmaConfig.MEM2MEM = DISABLE;
dmaConfig.memSize = DMA_MEM_SIZE_8BIT;
dmaConfig.periphSize = DMA_PERIPH_SIZE_32BIT;
dmaConfig.memIncrement = ENABLE;
dmaConfig.periphIncrement = DISABLE;
dmaConfig.direction = DMA_READ_FROM_PERIPH;
dmaConfig.transferNum = length;
dmaConfig.memByteMode = DMA_MEM_BYTE_MODE_1TIME;
dmaConfig.circular = DISABLE;
dmaConfig.channelPriority = DMA_PRIORITY_VERY_HIGH;
dmaConfig.errorInterruptEn = ENABLE;
dmaConfig.halfFinishInterruptEn = ENABLE;
dmaConfig.finishInterruptEn = DISABLE;
dmaConfig.channelEn = ENABLE;
dmaConfig.callBack = callback;
DMA_Init(DMAx, &dmaConfig);
}
|
|