新手上路
- 积分
- 31
- 金钱
- 31
- 注册时间
- 2013-8-1
- 在线时间
- 10 小时
|

楼主 |
发表于 2013-8-1 20:01:51
|
显示全部楼层
回复【6楼】styleno1:
您好,我用的是DMA1_channal6,I2C1的发送DMA,我没有设置中断,然后卡在了 while(!DMA_GetFlagStatus(DMA1_FLAG_TC6));这个寄存器写着是中断状态寄存器,是不是必须配置啊。
---------------------------------
while(I2C_GetFlagStatus(I2C1, I2C_FLAG_BUSY));
/* Send START condition */
I2C_GenerateSTART(I2C1, ENABLE);
/* Test on EV5 and clear it */
while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_MODE_SELECT));
/* Send EEPROM address for write */
I2C_Send7bitAddress(I2C1, EEPROM_ADDRESS, I2C_Direction_Transmitter);
/* Test on EV6 and clear it */
while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED));
/**
添加DMA
**/
/* Enable I2C1 DMA */
I2C_DMACmd(I2C1, ENABLE);
/* Enable DMA1 Channel6 */
DMA_Cmd(DMA1_Channel6, ENABLE);
printf("卡住前");
/* DMA1 Channel6 transfer complete test */
while(!DMA_GetFlagStatus(DMA1_FLAG_TC6));
printf("卡住后");
/* Send I2C1 STOP Condition */
I2C_GenerateSTOP(I2C1, ENABLE);
对于I2C的读写已经实现。我对DMA的配置为
DMA_DeInit(DMA1_Channel6);
DMA_InitStructure.DMA_PeripheralBaseAddr = (u32)I2C1_DR_Address;
DMA_InitStructure.DMA_MemoryBaseAddr = (u32)I2C1_Buffer_Tx;
DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralDST;
DMA_InitStructure.DMA_BufferSize = BufferSize;
DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;
DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;
DMA_InitStructure.DMA_PeripheralDataSize = DMA_MemoryDataSize_Byte;
DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_Byte;
DMA_InitStructure.DMA_Mode = DMA_Mode_Normal;
DMA_InitStructure.DMA_Priority = DMA_Priority_High;
DMA_InitStructure.DMA_M2M = DMA_M2M_Disable;
DMA_Init(DMA1_Channel6, &DMA_InitStructure);
麻烦帮一下忙 谢谢 |
|