标题: N32G455VEL7芯片如何通过DMA控制I2C写eeprom [打印本页]

作者: pyq151818    时间: 2023-10-30 15:45
标题: N32G455VEL7芯片如何通过DMA控制I2C写eeprom
芯片是N32G455VEL7,工具是keil5,用DMA来控制I2C写eeprom 程序如下
void I2C_EE_PageWrite(u8* pBuffer, u16 WriteAddr, u16 NumByteToWrite)
{
        DMA_InitType  DMA_InitStructure;
        /* enter rountine safely */
        /* DMA initialization */
        
        DMA_DeInit(DMA1_CH4);
        DMA_InitStructure.PeriphAddr = (u32)&I2Cx->DAT;
        DMA_InitStructure.MemAddr = (u32)pBuffer;
        DMA_InitStructure.Direction = DMA_DIR_PERIPH_DST
        DMA_InitStructure.BufSize = NumByteToWrite
        DMA_InitStructure.PeriphInc = DMA_PERIPH_INC_DISABLE;
        DMA_InitStructure.DMA_MemoryInc = DMA_MEM_INC_ENABLE;
        DMA_InitStructure.PeriphDataSize = DMA_MemoryDataSize_Byte;
        DMA_InitStructure.MemDataSize = DMA_MemoryDataSize_Byte;
        DMA_InitStructure.CircularMode = DMA_MODE_NORMAL;
        DMA_InitStructure.Priority = DMA_PRIORITY_VERY_HIGH;
        DMA_InitStructure.Mem2Mem = DMA_M2M_DISABLE;
        
        DMA_Init(DMA1_CH4, &DMA_InitStructure);
        
        I2C_ConfigAck(I2Cx, ENABLE);
        I2C_GenerateStart(I2Cx, ENABLE);
        while (!I2C_CheckEvent(I2Cx, I2C_EVT_MASTER_MODE_FLAG)) // EV5
        {
        };
        I2C_SendAddr7bit(I2Cx, EEPROM_ADDR, I2C_DIRECTION_SEND);
        while (!I2C_CheckEvent(I2Cx, I2C_EVT_MASTER_TXMODE_FLAG)) // EV6
        {
        };
        
        I2C_SendData(I2Cx, WriteAddr);//地址
        while (!I2C_CheckEvent(I2Cx, I2C_EVT_MASTER_DATA_SENDED))
        {
        };
               
        I2C_EnableDMA(I2Cx, ENABLE);
        DMA_EnableChannel(DMA1_CH4, ENABLE);
        while (!DMA_GetFlagStatus(DMA1_FLAG_TC4, DMA1))
                ;
        I2C_GenerateStop(I2Cx, ENABLE);
        I2C_EE_WriteOnePageCompleted();
}

我已经将数据发送到数据寄存器中了,然后怎么写到eeprom中呢?不应该自动写吗?难道我要通过 I2C_SendData()函数循环写入?

作者: pyq151818    时间: 2023-11-2 15:06
要把寄存器的地址WriteAddr值也放在buf中
作者: pyq151818    时间: 2023-11-2 15:17
我这里不行的问题是我传进来的地址是16位的,我只把低8位的地址发到data中去了
作者: Hephaestus    时间: 2023-11-2 22:55

        DMA_InitStructure.Direction = DMA_DIR_PERIPH_DST
        DMA_InitStructure.BufSize = NumByteToWrite

这两句能编译通过???
作者: pyq151818    时间: 2023-11-3 09:38
Hephaestus 发表于 2023-11-2 22:55
DMA_InitStructure.Direction = DMA_DIR_PERIPH_DST
        DMA_InitStructure.BufSize = NumB ...

这个肯定编译不过,这个是我在放上来时,删除后面测试时的其他参数时删除多了




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1