本文整理汇总了C++中I2C_DMACmd函数的典型用法代码示例。如果您正苦于以下问题:C++ I2C_DMACmd函数的具体用法?C++ I2C_DMACmd怎么用?C++ I2C_DMACmd使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了I2C_DMACmd函数的20个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C++代码示例。
示例1: SendDataBy_I2C1
void SendDataBy_I2C1()
{
DMA_ConfigForI2C1Send();
I2C_AcknowledgeConfig(I2C1, ENABLE);
I2C_ITConfig(I2C1, I2C_IT_BUF , DISABLE);
while(I2C_GetFlagStatus(CODEC_I2C, I2C_FLAG_BUSY)) //wait for bus is not busy
{
}
/* Start the config sequence */
I2C_GenerateSTART(CODEC_I2C, ENABLE);
while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_MODE_SELECT)) // EV5
{
}
/* Transmit the slave address and enable writing operation */
I2C_Send7bitAddress(CODEC_I2C, CODEC_ADDRESS, I2C_Direction_Transmitter);
DMA_Cmd(DMA1_Stream6, ENABLE);
I2C_DMACmd(I2C2, ENABLE);
/* DMA1 Channel6 transfer complete test */
while(DMA_GetFlagStatus(DMA1_Stream6,DMA_FLAG_TCIF6)==RESET)
{
}
I2C_DMACmd(I2C1, DISABLE);
DMA_Cmd(DMA1_Stream6, DISABLE);
// wait until BTF
while (!(I2C1->SR1 & 0x04));
I2C_GenerateSTOP(I2C1, ENABLE);
// wait until BUSY clear
while (I2C1->SR2 & 0x02);
if(I2C1->CR1 & 0x200)
I2C1->CR1 &= 0xFDFF;
}
开发者ID:eseawind,项目名称:robotPlatfrom,代码行数:33,代码来源:I2C_MasterComInit.c
示例2: I2C1_Write
int16_t I2C1_Write(uint8_t * buffer, uint8_t address, uint16_t length)
{
int16_t return_code = pdTRUE;
uint16_t bytes_sent = 0;
while(I2C_GetFlagStatus(I2C1, I2C_FLAG_BUSY)) {} /*TODO: Timeout*/
I2C_GenerateSTART(I2C1, ENABLE);
while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_MODE_SELECT)) {}
I2C_Send7bitAddress(I2C1, address, I2C_Direction_Transmitter);
while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED)) {}
I2C1_DMA_TX_Semaphore = 0;
if (length < 2)
{
while (bytes_sent < length)
{
I2C_SendData(I2C1, buffer[bytes_sent]);
while(I2C_GetFlagStatus(I2C1, I2C_FLAG_BTF) == RESET) {}
bytes_sent++;
}
I2C_GenerateSTOP(I2C1, ENABLE);
while(I2C1->CR1 & I2C_CR1_STOP) {}
}
else
{
I2C1_DMAConfig((uint32_t)buffer, length, DIR_TX);
I2C_DMALastTransferCmd(I2C1, ENABLE);
DMA_Cmd(I2C1_DMA_STREAM_TX, ENABLE);
I2C_DMACmd(I2C1, ENABLE);
/* Wait for DMA interrupt */
while (I2C1_DMA_TX_Semaphore == 0) {}
}
return return_code;
}
开发者ID:drahosj,项目名称:avionics-software,代码行数:35,代码来源:i2c.c
示例3: GPIO_Configuration
void GPIO_Configuration(void)
{
/* Disable the Serial Wire Jtag Debug Port SWJ-DP */
GPIO_PinRemapConfig(GPIO_Remap_SWJ_Disable, ENABLE);
/* Enable GPIOA, GPIOB, GPIOC, GPIOD, GPIOE and AFIO clocks */
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB |RCC_APB2Periph_GPIOC | RCC_APB2Periph_GPIOD | RCC_APB2Periph_GPIOE | RCC_APB2Periph_AFIO, ENABLE);
/* COnfigure All*/
SetIoMode(GPIOA,GPIO_Pin_All,GPIO_Mode_Out_PP);
SetIoMode(GPIOB,GPIO_Pin_All,GPIO_Mode_Out_PP);
SetIoMode(GPIOC,GPIO_Pin_All,GPIO_Mode_Out_PP);
SetIoMode(GPIOD,GPIO_Pin_All,GPIO_Mode_Out_PP);
SetIoMode(GPIOE,GPIO_Pin_All,GPIO_Mode_Out_PP);
/* Configure USART1*/
SetIoMode(GPIOA,GPIO_Pin_9,GPIO_Mode_AF_PP);
SetIoMode(GPIOA,GPIO_Pin_10,GPIO_Mode_IN_FLOATING);
/* Configure USART2*/
SetIoMode(GPIOA,GPIO_Pin_2,GPIO_Mode_AF_PP);
SetIoMode(GPIOA,GPIO_Pin_3,GPIO_Mode_IN_FLOATING);
/* Configure USART3*/
SetIoMode(GPIOB,GPIO_Pin_10,GPIO_Mode_AF_PP);
SetIoMode(GPIOB,GPIO_Pin_11,GPIO_Mode_IN_FLOATING);
/* Configure CAN1 pin*/
SetIoMode(GPIOA,GPIO_Pin_11,GPIO_Mode_IPU);
SetIoMode(GPIOA,GPIO_Pin_12,GPIO_Mode_AF_PP);
/* Configure CAN2 pin*/
SetIoMode(GPIOB,GPIO_Pin_8,GPIO_Mode_IPU);
SetIoMode(GPIOB,GPIO_Pin_9,GPIO_Mode_AF_PP);
/* Configure ADC NISSAN*/
SetIoMode(GPIOA,GPIO_Pin_0,GPIO_Mode_AIN);
/* Configure BOOT1*/
SetIoMode(GPIOB,GPIO_Pin_2,GPIO_Mode_IN_FLOATING);
I2C_DMACmd(I2C2,DISABLE);
}
开发者ID:bg8wj,项目名称:icar-firmware,代码行数:33,代码来源:init.c
示例4: I2C_AcknowledgeConfig
void i2cMgr_t::ReadMany() {
// Enable Acknowledgement
I2C_AcknowledgeConfig(I2C1, ENABLE);
// Prepare DMA
DMA_DeInit(I2C_DMA_CHNL_RX);
DMA_InitTypeDef DMA_InitStructure;
//DMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t) &I2C1->DR;
DMA_InitStructure.DMA_PeripheralBaseAddr = 0x40005410;
// Decide where to read data to
if(CmdToRead->DataToRead.Buf == 0) { // no need in this data
DMA_InitStructure.DMA_MemoryBaseAddr = (uint32_t) &CmdToRead->DataToRead.InnerBuf[0]; // dummy place
DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Disable; // Do not move pointer
}
else {
DMA_InitStructure.DMA_MemoryBaseAddr = (uint32_t) &CmdToRead->DataToRead.Buf[0];
DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;
}
DMA_InitStructure.DMA_BufferSize = CmdToRead->DataToRead.Length;
DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralSRC; // From I2C to memory
DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;
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_Medium;
DMA_InitStructure.DMA_M2M = DMA_M2M_Disable;
DMA_Init(I2C_DMA_CHNL_RX, &DMA_InitStructure);
//Inform the DMA that the next End Of Transfer Signal will be the last one, need to send NACK after last byte
I2C_DMALastTransferCmd(I2C1, ENABLE);
// Start transmission
I2C_DMACmd(I2C1, ENABLE); // Enable DMA
DMA_Cmd(I2C_DMA_CHNL_RX, ENABLE); // Enable DMA channel
Delay.Reset(&Timer);
}
开发者ID:Kreyl,项目名称:nute,代码行数:34,代码来源:i2c_mgr.cpp
示例5: sEE_Init
/**
* @brief Initializes peripherals used by the I2C EEPROM driver.
* @param None
* @retval None
*/
void sEE_Init(void)
{
I2C_InitTypeDef I2C_InitStructure;
sEE_LowLevel_Init();
/* If the I2C peripheral is already enabled, don't reconfigure it */
if ((sEE_I2C->CR1 & I2C_CR1_PE) == 0)
{
/*!< I2C configuration */
/* sEE_I2C configuration */
I2C_InitStructure.I2C_Mode = I2C_Mode_I2C;
I2C_InitStructure.I2C_DutyCycle = I2C_DutyCycle_2;
I2C_InitStructure.I2C_OwnAddress1 = 0x00;
I2C_InitStructure.I2C_Ack = I2C_Ack_Enable;
I2C_InitStructure.I2C_AcknowledgedAddress = I2C_AcknowledgedAddress_7bit;
I2C_InitStructure.I2C_ClockSpeed = I2C_SPEED;
/* Apply sEE_I2C configuration after enabling it */
I2C_Init(sEE_I2C, &I2C_InitStructure);
/* sEE_I2C Peripheral Enable */
I2C_Cmd(sEE_I2C, ENABLE);
}
/* Enable the sEE_I2C peripheral DMA requests */
I2C_DMACmd(sEE_I2C, ENABLE);
/*!< Select the EEPROM address */
sEEAddress = sEE_HW_ADDRESS;
}
开发者ID:CHPeter,项目名称:stm32f429-gps,代码行数:36,代码来源:stm32f429i_discovery_i2c_ee.c
示例6: sEE_Init
/**
* @brief Initializes peripherals used by the I2C EEPROM driver.
* @param None
* @retval None
*/
void sEE_Init(void)
{
I2C_InitTypeDef I2C_InitStructure;
sEE_LowLevel_Init();
/*!< I2C configuration */
/* sEE_I2C configuration */
I2C_InitStructure.I2C_Mode = I2C_Mode_I2C;
I2C_InitStructure.I2C_DutyCycle = I2C_DutyCycle_2;
I2C_InitStructure.I2C_OwnAddress1 = I2C_SLAVE_ADDRESS7;
I2C_InitStructure.I2C_Ack = I2C_Ack_Enable;
I2C_InitStructure.I2C_AcknowledgedAddress = I2C_AcknowledgedAddress_7bit;
I2C_InitStructure.I2C_ClockSpeed = I2C_SPEED;
/* sEE_I2C Peripheral Enable */
I2C_Cmd(sEE_I2C, ENABLE);
/* Apply sEE_I2C configuration after enabling it */
I2C_Init(sEE_I2C, &I2C_InitStructure);
/* Enable the sEE_I2C peripheral DMA requests */
I2C_DMACmd(sEE_I2C, ENABLE);
#if 0
#if defined (sEE_M24C64_32)
/*!< Select the EEPROM address according to the state of E0, E1, E2 pins */
sEEAddress = sEE_HW_ADDRESS;
#elif defined (sEE_M24C08)
/*!< depending on the sEE Address selected in the stm322xg_eval_i2c_ee.h file */
#ifdef sEE_Block0_ADDRESS
/*!< Select the sEE Block0 to write on */
sEEAddress = sEE_Block0_ADDRESS;
#elif defined (sEE_AT24C02)
sEEAddress = 0xA0;
#endif
#ifdef sEE_Block1_ADDRESS
/*!< Select the sEE Block1 to write on */
sEEAddress = sEE_Block1_ADDRESS;
#endif
#ifdef sEE_Block2_ADDRESS
/*!< Select the sEE Block2 to write on */
sEEAddress = sEE_Block2_ADDRESS;
#endif
#ifdef sEE_Block3_ADDRESS
/*!< Select the sEE Block3 to write on */
sEEAddress = sEE_Block3_ADDRESS;
#endif
#endif /*!< sEE_M24C64_32 */
#endif
sEEAddress = 0xA0;
}
开发者ID:kouliwei,项目名称:94STM32,代码行数:60,代码来源:i2c.c
示例7: SENSOR_I2C_BUS_Configuration
/********************
- I2C2初始化
*********************/
void SENSOR_I2C_BUS_Configuration(void)
{
I2C_InitTypeDef I2C_InitStructure;
GPIO_InitTypeDef GPIO_InitStructure;
NVIC_InitTypeDef NVIC_InitStructure;
// I2C Periph clock enable
RCC_APB1PeriphClockCmd(RCC_APB1Periph_I2C2, ENABLE);
// GPIO Periph clock enable
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB | RCC_APB2Periph_AFIO, ENABLE);
// I2C configuration
I2C_InitStructure.I2C_Mode = I2C_Mode_I2C;
I2C_InitStructure.I2C_DutyCycle = I2C_DutyCycle_2;
I2C_InitStructure.I2C_OwnAddress1 = 0xa0;
I2C_InitStructure.I2C_Ack = I2C_Ack_Disable;
I2C_InitStructure.I2C_AcknowledgedAddress = I2C_AcknowledgedAddress_7bit;
I2C_InitStructure.I2C_ClockSpeed = I2C2_Speed;
// Configure I2C2 SCL as alternate function Open-drain output
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_OD;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOB, &GPIO_InitStructure);
// Configure I2C2 SDA as alternate function Open-drain output
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_OD;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOB, &GPIO_InitStructure);
// Apply I2C configuration after enabling it
//I2C_AcknowledgeConfig(SENSOR_I2C_BUS, ENABLE);
I2C_Init(SENSOR_I2C_BUS, &I2C_InitStructure);
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);
NVIC_InitStructure.NVIC_IRQChannel = I2C2_EV_IRQn;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 5;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
NVIC_InitStructure.NVIC_IRQChannel = I2C2_ER_IRQn;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 5;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
// I2C Peripheral Enable
I2C_ITConfig(SENSOR_I2C_BUS, I2C_IT_EVT|I2C_IT_ERR, ENABLE);
I2C_DMACmd(SENSOR_I2C_BUS, DISABLE);
I2C_Cmd(SENSOR_I2C_BUS, ENABLE);
}
开发者ID:mainbody,项目名称:YellowDog,代码行数:56,代码来源:PPP_init.c
示例8: I2C_DMA_Read
void I2C_DMA_Read(u8 slaveAddr, u8 readAddr)
{
/* Disable DMA channel*/
DMA_Cmd(DMA1_Channel7, DISABLE);
/* Set current data number again to 14 for MPu6050, only possible after disabling the DMA channel */
DMA_SetCurrDataCounter(DMA1_Channel7, 14);
/* While the bus is busy */
while(I2C_GetFlagStatus(MPU6050_I2C, I2C_FLAG_BUSY));
/* Enable DMA NACK automatic generation */
I2C_DMALastTransferCmd(MPU6050_I2C, ENABLE); //Note this one, very important
/* Send START condition */
I2C_GenerateSTART(MPU6050_I2C, ENABLE);
/* Test on EV5 and clear it */
while(!I2C_CheckEvent(MPU6050_I2C, I2C_EVENT_MASTER_MODE_SELECT));
/* Send MPU6050 address for write */
I2C_Send7bitAddress(MPU6050_I2C, slaveAddr, I2C_Direction_Transmitter);
/* Test on EV6 and clear it */
while(!I2C_CheckEvent(MPU6050_I2C, I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED));
/* Clear EV6 by setting again the PE bit */
I2C_Cmd(MPU6050_I2C, ENABLE);
/* Send the MPU6050's internal address to write to */
I2C_SendData(MPU6050_I2C, readAddr);
/* Test on EV8 and clear it */
while(!I2C_CheckEvent(MPU6050_I2C, I2C_EVENT_MASTER_BYTE_TRANSMITTED));
/* Send STRAT condition a second time */
I2C_GenerateSTART(MPU6050_I2C, ENABLE);
/* Test on EV5 and clear it */
while(!I2C_CheckEvent(MPU6050_I2C, I2C_EVENT_MASTER_MODE_SELECT));
/* Send MPU6050 address for read */
I2C_Send7bitAddress(MPU6050_I2C, slaveAddr, I2C_Direction_Receiver);
/* Test on EV6 and clear it */
while(!I2C_CheckEvent(MPU6050_I2C, I2C_EVENT_MASTER_RECEIVER_MODE_SELECTED));
/* Start DMA to receive data from I2C */
DMA_Cmd(DMA1_Channel7, ENABLE);
I2C_DMACmd(MPU6050_I2C, ENABLE);
// When the data transmission is complete, it will automatically jump to DMA interrupt routine to finish the rest.
//now go back to the main routine
}
开发者ID:james54068,项目名称:vibration_test,代码行数:53,代码来源:MPU6050.c
示例9: i2c_dma_read
void i2c_dma_read( u8 read_addr)
{
// read_addr +=1;
//disable dma channel
DMA_Cmd( MPU6050_DMA_CHANNEL, DISABLE);
//? set current data number again to 14
DMA_SetCurrDataCounter(MPU6050_DMA_CHANNEL, 14);
//while the bus is busy
while( I2C_GetFlagStatus( MPU6050_I2C,I2C_FLAG_BUSY));
//enable dma nack automatic generation.....
I2C_DMALastTransferCmd( MPU6050_I2C, ENABLE);
//send start condition
I2C_GenerateSTART( MPU6050_I2C, ENABLE);
//test on ev5 and clear it
while( !I2C_CheckEvent( MPU6050_I2C, I2C_EVENT_MASTER_MODE_SELECT));
//send mpu6050 address for write
I2C_Send7bitAddress( MPU6050_I2C, I2C1_MPU6050, I2C_Direction_Transmitter );
//test on ev6 and clear it
while( !I2C_CheckEvent(MPU6050_I2C, I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED));
//clear ev6 by setting again the PE bit
I2C_Cmd( MPU6050_I2C,ENABLE);
//send the mpu6050 internal address to write to
I2C_SendData( MPU6050_I2C, read_addr);
//test on ev8 and clear it
while(!I2C_CheckEvent( MPU6050_I2C, I2C_EVENT_MASTER_BYTE_TRANSMITTED));
//send start condition a second time
I2C_GenerateSTART(MPU6050_I2C, ENABLE);
//test on ev5 and clear it
while( !I2C_CheckEvent(MPU6050_I2C, I2C_EVENT_MASTER_MODE_SELECT));
//send mpu6050 address for read
I2C_Send7bitAddress(MPU6050_I2C,I2C1_MPU6050, I2C_Direction_Receiver);
//test on ev6 and clear it
while( !I2C_CheckEvent( MPU6050_I2C, I2C_EVENT_MASTER_RECEIVER_MODE_SELECTED));
//start dma to receive data from i2c
DMA_Cmd(MPU6050_DMA_CHANNEL, ENABLE);
I2C_DMACmd(MPU6050_I2C, ENABLE);
//when the data transmission is complete, it will automatically jump to dma interrupt routine
//to finish the rest.
}
开发者ID:cross-sky,项目名称:stm32,代码行数:51,代码来源:mpu6050.c
示例10: I2C_Init_Func
void I2C_Init_Func(void)
{
I2C_InitTypeDef I2C_InitStructure;
I2C_InitStructure.I2C_Mode = I2C_Mode_I2C;
I2C_InitStructure.I2C_DutyCycle = I2C_DutyCycle_2;
I2C_InitStructure.I2C_OwnAddress1 = I2C_SLAVE_ADDRESS7;
I2C_InitStructure.I2C_Ack = I2C_Ack_Enable;
I2C_InitStructure.I2C_AcknowledgedAddress = I2C_AcknowledgedAddress_7bit;
I2C_InitStructure.I2C_ClockSpeed = I2C_SPEED;
I2C_Cmd(sEE_I2C, ENABLE);
I2C_Init(sEE_I2C, &I2C_InitStructure);
I2C_DMACmd(sEE_I2C, ENABLE);
}
开发者ID:JSFamily,项目名称:stm32f103_dev,代码行数:15,代码来源:main.c
示例11: sendData
void sendData() {
while(I2C_GetFlagStatus( I2C2, I2C_FLAG_BUSY ));
I2C_GenerateSTART( I2C2, ENABLE );
while( !I2C_CheckEvent(I2C2, I2C_EVENT_MASTER_MODE_SELECT) );
I2C_Send7bitAddress( I2C2, FM_WRITE_ADDRESS, I2C_Direction_Transmitter );
while( !I2C_CheckEvent(I2C2, I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED) );
I2C_SendData( I2C2, out_buf[0] );
while( !I2C_CheckEvent(I2C2, I2C_EVENT_MASTER_BYTE_TRANSMITTED) );
/* Enable the DMA Channel4 Transfer Complete IT */
DMA_ITConfig(DMA1_Channel4, DMA_IT_TC | DMA_IT_TE, ENABLE);
I2C_DMACmd(I2C2, ENABLE);
DMA_Cmd( DMA1_Channel4, ENABLE );
}
开发者ID:John-Uzumaki,项目名称:stm32-player,代码行数:15,代码来源:radio.c
示例12: I2C_Master_BufferWrite
/**
* @brief Send a buffer of bytes to the slave.
* @param pBuffer: Buffer of bytes to be sent to the slave.
* @param NumByteToRead: Number of bytes to be sent to the slave.
* @retval : None.
*/
void I2C_Master_BufferWrite(uint8_t* pBuffer, uint16_t NumByteToWrite)
{
#ifdef DMA_Master_Transmit
DMA_InitStructure.DMA_MemoryBaseAddr = (uint32_t)pBuffer;
DMA_InitStructure.DMA_BufferSize = NumByteToWrite;
DMA_Init(DMA1_Channel6, &DMA_InitStructure);
I2C_ITConfig(I2C1, I2C_IT_EVT, ENABLE);
I2C_DMACmd(I2C1, ENABLE);
I2C_GenerateSTART(I2C1, ENABLE);
DMA_ITConfig(DMA1_Channel6, DMA_IT_TC, ENABLE);
#endif
#ifdef Polling_Master_Transmit
/* Send START condition */
I2C_GenerateSTART(I2C1, ENABLE);
/* Test on EV5 and clear it */
while (!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_MODE_SELECT));
/* Send slave address for write */
I2C_Send7bitAddress(I2C1,SLAVE_ADDRESS, I2C_Direction_Transmitter);
/* Test on EV6 and clear it */
while (!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED));
I2C_SendData(I2C1, *pBuffer);
pBuffer++;
NumByteToWrite--;
/* While there is data to be written */
while (NumByteToWrite--)
{
while ((I2C_GetLastEvent(I2C1) & 0x04) != 0x04); /* Poll on BTF */
/* Send the current byte */
I2C_SendData(I2C1, *pBuffer);
/* Point to the next byte to be written */
pBuffer++;
}
/* Test on EV8_2 and clear it, BTF = TxE = 1, DR and shift registers are
empty */
while (!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_BYTE_TRANSMITTED));
/* Send STOP condition */
I2C_GenerateSTOP(I2C1, ENABLE);
#endif
}
开发者ID:emmamuelo,项目名称:IPM,代码行数:54,代码来源:driver.c
示例13: I2C2_EV_IRQHandler
/**
* @brief This function handles I2C2 Event interrupt request.
* @param None
* @retval : None
*/
void I2C2_EV_IRQHandler(void)
{
#ifdef slave2
uint8_t j=0;
#endif
#if defined(DMA_Slave_Transmit) || defined(DMA_Slave_Receive)
__IO uint32_t temp;
__IO int32_t temp1;
if (I2C_GetFlagStatus(I2C2, I2C_FLAG_ADDR))
{
DMA_Cmd(DMA1_Channel1, ENABLE);
ADC_SoftwareStartConvCmd(ADC1, ENABLE);
if (DMA1_Channel1->CNDTR == 0)
{
DMA_Cmd(DMA1_Channel4, DISABLE);
DMA_Cmd(DMA1_Channel1, DISABLE);
#ifdef slave2
/* Calculate the Temperature values */
for (j=0; j<BufferSize; j++)
{
temp1 = Buffer[j];
temp1 = ( temp1 * 3300 ) / 0x1000; /* Finds mV */
temp1 = ((((1430-temp1)*100000)/430)+25000)/1000;
Slave_Buffer_Tx[j] = temp1;
}
#endif
DMA1_Channel4->CNDTR = 255;
DMA1_Channel1->CNDTR = BufferSize;
I2C_DMACmd(I2C2, ENABLE);
DMA_Cmd(DMA1_Channel4, ENABLE);
/* clear ADDR by reading SR2 */
temp = I2C2->SR2 ;
}
}
if (I2C_GetFlagStatus(I2C2, I2C_FLAG_STOPF))
{
I2C_Cmd(I2C2, ENABLE);
}
#endif
}
开发者ID:emmamuelo,项目名称:IPM,代码行数:53,代码来源:stm32f10x_it.c
示例14: sEE_Init
/**
* @brief Initializes peripherals used by the I2C EEPROM driver.
* @param None
* @retval None
*/
void sEE_Init(void)
{
sEE_LowLevel_Init();
/*!< I2C configuration */
/* sEE_I2C Peripheral Enable */
I2C_Cmd(sEE_I2C, ENABLE);
/* sEE_I2C configuration after enabling it */
I2C_Init(sEE_I2C, I2C_SPEED, I2C_SLAVE_ADDRESS7, I2C_Mode_I2C, I2C_DutyCycle_2,
I2C_Ack_Enable, I2C_AcknowledgedAddress_7bit);
/* Enable the sEE_I2C peripheral DMA requests */
I2C_DMACmd(sEE_I2C, ENABLE);
#if defined (sEE_M24C64_32)
/*!< Select the EEPROM address according to the state of E0, E1, E2 pins */
sEEAddress = sEE_HW_ADDRESS;
#endif /*!< sEE_M24C64_32 */
}
开发者ID:glockwork,项目名称:ev-stm8l151k6-emotor,代码行数:24,代码来源:stm8_eval_i2c_ee.c
示例15: I2C1_Read
int16_t I2C1_Read(uint8_t * buffer, uint8_t address, uint16_t length)
{
int16_t return_code = pdTRUE;
uint16_t bytes_received = 0;
while(I2C_GetFlagStatus(I2C1, I2C_FLAG_BUSY)) {} /*TODO: Timeout*/
I2C_GenerateSTART(I2C1, ENABLE);
while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_MODE_SELECT)) {}
I2C_Send7bitAddress(I2C1, address, I2C_Direction_Receiver);
while(I2C_GetFlagStatus(I2C1, I2C_FLAG_ADDR) == RESET) {}
I2C1_DMA_RX_Semaphore = 0;
if (length < 2)
{
I2C_AcknowledgeConfig(I2C1, DISABLE);
(void)I2C1->SR2;
I2C_GenerateSTOP(I2C1, ENABLE);
while(I2C_GetFlagStatus(I2C1, I2C_FLAG_RXNE) == RESET) {}
if (length > 0)
{
buffer[bytes_received] = I2C_ReceiveData(I2C1);
}
while(I2C1->CR1 & I2C_CR1_STOP) {}
I2C_AcknowledgeConfig(I2C1, ENABLE);
}
else
{
while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_RECEIVER_MODE_SELECTED)) {}
I2C1_DMAConfig((uint32_t)buffer, length, DIR_RX);
I2C_DMALastTransferCmd(I2C1, ENABLE);
DMA_Cmd(I2C1_DMA_STREAM_RX, ENABLE);
I2C_DMACmd(I2C1, ENABLE);
/* Wait for DMA interrupt */
while (I2C1_DMA_RX_Semaphore == 0) {}
}
return return_code;
}
开发者ID:drahosj,项目名称:avionics-software,代码行数:40,代码来源:i2c.c
示例16: DMA_DeInit
void i2cMgr_t::WriteMany() {
// Prepare DMA
DMA_DeInit(I2C_DMA_CHNL_TX);
DMA_InitTypeDef DMA_InitStructure;
DMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t) &I2C1->DR;
DMA_InitStructure.DMA_MemoryBaseAddr = (uint32_t) &CmdToRead->DataToWrite.Buf[0];
DMA_InitStructure.DMA_BufferSize = CmdToRead->DataToWrite.Length;
DMA_InitStructure.DMA_Priority = DMA_Priority_High;
DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralDST; // From memory to I2C
DMA_InitStructure.DMA_Mode = DMA_Mode_Normal;
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_M2M = DMA_M2M_Disable;
DMA_Init(I2C_DMA_CHNL_TX, &DMA_InitStructure);
// Start transmission
DMA_Cmd(I2C_DMA_CHNL_TX, ENABLE); // Enable DMA channel
I2C_DMACmd(I2C1, ENABLE); // Enable DMA
//Uart.PrintString("ST\r\r");
Delay.Reset(&Timer);
}
开发者ID:Kreyl,项目名称:nute,代码行数:22,代码来源:i2c_mgr.cpp
示例17: main
/**
* @brief Main program
* @param None
* @retval None
*/
int main(void)
{
/* At this stage the microcontroller clock setting is already configured,
this is done through SystemInit() function which is called from startup
file (startup_stm32f2xx.s) before to branch to application main.
To reconfigure the default setting of SystemInit() function, refer to
system_stm32f2xx.c file
*/
/* I2C configuration ---------------------------------------------------------*/
I2C_Config();
/* Initialize LEDs mounted on STM322xG-EVAL board */
STM_EVAL_LEDInit(LED1);
STM_EVAL_LEDInit(LED2);
STM_EVAL_LEDInit(LED3);
STM_EVAL_LEDInit(LED4);
/* SysTick configuration -----------------------------------------------------*/
SysTickConfig();
/* Clear the RxBuffer */
Fill_Buffer(RxBuffer, RXBUFFERSIZE);
/*************************************Master Code******************************/
#if defined (I2C_MASTER)
/* I2C Struct Initialize */
I2C_InitStructure.I2C_Mode = I2C_Mode_I2C;
I2C_InitStructure.I2C_DutyCycle = I2C_DUTYCYCLE;
I2C_InitStructure.I2C_OwnAddress1 = 0xA0;
I2C_InitStructure.I2C_Ack = I2C_Ack_Enable;
I2C_InitStructure.I2C_ClockSpeed = I2C_SPEED;
#ifndef I2C_10BITS_ADDRESS
I2C_InitStructure.I2C_AcknowledgedAddress = I2C_AcknowledgedAddress_7bit;
#else
I2C_InitStructure.I2C_AcknowledgedAddress = I2C_AcknowledgedAddress_10bit;
#endif /* I2C_10BITS_ADDRESS */
/* I2C Initialize */
I2C_Init(I2Cx, &I2C_InitStructure);
/* Master Transmitter --------------------------------------------------------*/
/* Generate the Start condition */
I2C_GenerateSTART(I2Cx, ENABLE);
#ifdef I2C_10BITS_ADDRESS
/* Test on I2C1 EV5 and clear it */
TimeOut = USER_TIMEOUT;
while ((!I2C_CheckEvent(I2Cx, I2C_EVENT_MASTER_MODE_SELECT))&&(TimeOut != 0x00))
{}
if(TimeOut == 0)
{
TimeOut_UserCallback();
}
/* Send Header to I2Cx for write or time out */
I2C_SendData(I2Cx, HEADER_ADDRESS_Write);
/* Test on I2Cx EV9 and clear it */
TimeOut = USER_TIMEOUT;
while ((!I2C_CheckEvent(I2Cx, I2C_EVENT_MASTER_MODE_ADDRESS10))&&(TimeOut != 0x00))
{}
if(TimeOut == 0)
{
TimeOut_UserCallback();
}
/* Send I2Cx slave Address for write */
I2C_Send7bitAddress(I2Cx, (uint8_t)SLAVE_ADDRESS, I2C_Direction_Transmitter);
#else /* I2C_7BITS_ADDRESS */
/* Test on I2Cx EV5 and clear it or time out */
TimeOut = USER_TIMEOUT;
while ((!I2C_CheckEvent(I2Cx, I2C_EVENT_MASTER_MODE_SELECT))&&(TimeOut != 0x00))
{}
if(TimeOut == 0)
{
TimeOut_UserCallback();
}
/* Send I2Cx slave Address for write */
I2C_Send7bitAddress(I2Cx, SLAVE_ADDRESS, I2C_Direction_Transmitter);
#endif /* I2C_10BITS_ADDRESS */
/* Test on I2Cx EV6 and clear it or time out */
TimeOut = USER_TIMEOUT;
while ((!I2C_CheckEvent(I2Cx, I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED))&&(TimeOut != 0x00))
{}
if(TimeOut == 0)
{
TimeOut_UserCallback();
}
/* I2Cx DMA Enable */
I2C_DMACmd(I2Cx, ENABLE);
//.........这里部分代码省略.........
开发者ID:JanusRC,项目名称:T2-Terminus,代码行数:101,代码来源:main.c
示例18: main
/**
* @brief Main program
* @param None
* @retval None
*/
int main(void)
{
/* System Clocks Configuration */
RCC_Configuration();
/* Configure the GPIO ports */
GPIO_Configuration();
/* DMA1 channel5 configuration ----------------------------------------------*/
DMA_DeInit(DMA1_Channel5);
DMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t)I2C2_DR_Address;
DMA_InitStructure.DMA_MemoryBaseAddr = (uint32_t)I2C2_Buffer_Rx;
DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralSRC;
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_VeryHigh;
DMA_InitStructure.DMA_M2M = DMA_M2M_Disable;
DMA_Init(DMA1_Channel5, &DMA_InitStructure);
/* DMA1 channel6 configuration ----------------------------------------------*/
DMA_DeInit(DMA1_Channel6);
DMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t)I2C1_DR_Address;
DMA_InitStructure.DMA_MemoryBaseAddr = (uint32_t)I2C1_Buffer_Tx;
DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralDST;
DMA_InitStructure.DMA_Priority = DMA_Priority_High;
DMA_Init(DMA1_Channel6, &DMA_InitStructure);
/* Enable I2C1 and I2C2 ----------------------------------------------------*/
I2C_Cmd(I2C1, ENABLE);
I2C_Cmd(I2C2, ENABLE);
/* I2C1 configuration ------------------------------------------------------*/
I2C_InitStructure.I2C_Mode = I2C_Mode_I2C;
I2C_InitStructure.I2C_DutyCycle = I2C_DutyCycle_2;
I2C_InitStructure.I2C_OwnAddress1 = I2C1_SLAVE_ADDRESS7;
I2C_InitStructure.I2C_Ack = I2C_Ack_Enable;
I2C_InitStructure.I2C_AcknowledgedAddress = I2C_AcknowledgedAddress_7bit;
I2C_InitStructure.I2C_ClockSpeed = ClockSpeed;
I2C_Init(I2C1, &I2C_InitStructure);
/* I2C2 configuration ------------------------------------------------------*/
I2C_InitStructure.I2C_OwnAddress1 = I2C2_SLAVE_ADDRESS7;
I2C_Init(I2C2, &I2C_InitStructure);
/*----- Transmission Phase -----*/
/* Send I2C1 START condition */
I2C_GenerateSTART(I2C1, ENABLE);
/* Test on I2C1 EV5 and clear it */
while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_MODE_SELECT));
/* Send I2C2 slave Address for write */
I2C_Send7bitAddress(I2C1, I2C2_SLAVE_ADDRESS7, I2C_Direction_Transmitter);
/* Test on I2C2 EV1 and clear it */
while(!I2C_CheckEvent(I2C2, I2C_EVENT_SLAVE_RECEIVER_ADDRESS_MATCHED));
/* Test on I2C1 EV6 and clear it */
while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED));
/* Enable I2C2 DMA */
I2C_DMACmd(I2C2, ENABLE);
/* Enable I2C1 DMA */
I2C_DMACmd(I2C1, ENABLE);
/* Enable DMA1 Channel5 */
DMA_Cmd(DMA1_Channel5, ENABLE);
/* Enable DMA1 Channel6 */
DMA_Cmd(DMA1_Channel6, ENABLE);
/* DMA1 Channel5 transfer complete test */
while(!DMA_GetFlagStatus(DMA1_FLAG_TC5));
/* DMA1 Channel6 transfer complete test */
while(!DMA_GetFlagStatus(DMA1_FLAG_TC6));
/* Send I2C1 STOP Condition */
I2C_GenerateSTOP(I2C1, ENABLE);
/* Test on I2C2 EV4 */
while(!I2C_CheckEvent(I2C2, I2C_EVENT_SLAVE_STOP_DETECTED));
/* Clear I2C2 STOPF flag: read operation to I2C_SR1 followed by a
write operation to I2C_CR1 */
(void)(I2C_GetFlagStatus(I2C2, I2C_FLAG_STOPF));
I2C_Cmd(I2C2, ENABLE);
/* Check if the transmitted and received data are equal */
TransferStatus = Buffercmp(I2C1_Buffer_Tx, I2C2_Buffer_Rx, BufferSize);
/* TransferStatus = PASSED, if the transmitted and received data
are the same */
/* TransferStatus = FAILED, if the transmitted and received data
are different */
while (1)
{
}
}
开发者ID:DerekTan,项目名称:STM32F107_ucosIII,代码行数:100,代码来源:main.c
示例19: LM75_ShutDown
/**
* @brief Enables or disables the LM75.
* @param NewState: specifies the LM75 new status. This parameter can be ENABLE
* or DISABLE.
* @retval None
*/
uint8_t LM75_ShutDown(FunctionalState NewState)
{
uint8_t LM75_BufferRX[2] ={0,0};
uint8_t LM75_BufferTX = 0;
__IO uint8_t RegValue = 0;
/* Test on BUSY Flag */
LM75_Timeout = LM75_LONG_TIMEOUT;
while (I2C_GetFlagStatus(LM75_I2C,I2C_FLAG_BUSY))
{
if((LM75_Timeout--) == 0) return LM75_TIMEOUT_UserCallback();
}
/* Configure DMA Peripheral */
LM75_DMA_Config(LM75_DMA_RX, (uint8_t*)LM75_BufferRX, 2);
/* Enable DMA NACK automatic generation */
I2C_DMALastTransferCmd(LM75_I2C, ENABLE);
/* Enable the I2C peripheral */
I2C_GenerateSTART(LM75_I2C, ENABLE);
/* Test on SB Flag */
LM75_Timeout = LM75_FLAG_TIMEOUT;
while (!I2C_GetFlagStatus(LM75_I2C,I2C_FLAG_SB))
{
if((LM75_Timeout--) == 0) return LM75_TIMEOUT_UserCallback();
}
/* Send device address for write */
I2C_Send7bitAddress(LM75_I2C, LM75_ADDR, I2C_Direction_Transmitter);
/* Test on ADDR Flag */
LM75_Timeout = LM75_FLAG_TIMEOUT;
while (!I2C_CheckEvent(LM75_I2C, I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED))
{
if((LM75_Timeout--) == 0) return LM75_TIMEOUT_UserCallback();
}
/* Send the device's internal address to write to */
I2C_SendData(LM75_I2C, LM75_REG_CONF);
/* Test on TXE FLag (data sent) */
LM75_Timeout = LM75_FLAG_TIMEOUT;
while ((!I2C_GetFlagStatus(LM75_I2C,I2C_FLAG_TXE)) && (!I2C_GetFlagStatus(LM75_I2C,I2C_FLAG_BTF)))
{
if((LM75_Timeout--) == 0) return LM75_TIMEOUT_UserCallback();
}
/* Send START condition a second time */
I2C_GenerateSTART(LM75_I2C, ENABLE);
/* Test on SB Flag */
LM75_Timeout = LM75_FLAG_TIMEOUT;
while (!I2C_GetFlagStatus(LM75_I2C,I2C_FLAG_SB))
{
if((LM75_Timeout--) == 0) return LM75_TIMEOUT_UserCallback();
}
/* Send LM75 address for read */
I2C_Send7bitAddress(LM75_I2C, LM75_ADDR, I2C_Direction_Receiver);
/* Test on ADDR Flag */
LM75_Timeout = LM75_FLAG_TIMEOUT;
while (!I2C_CheckEvent(LM75_I2C, I2C_EVENT_MASTER_RECEIVER_MODE_SELECTED))
{
if((LM75_Timeout--) == 0) return LM75_TIMEOUT_UserCallback();
}
/* Enable I2C DMA request */
I2C_DMACmd(LM75_I2C,ENABLE);
/* Enable DMA RX Channel */
DMA_Cmd(LM75_DMA_RX_CHANNEL, ENABLE);
/* Wait until DMA Transfer Complete */
LM75_Timeout = LM75_LONG_TIMEOUT;
while (!DMA_GetFlagStatus(LM75_DMA_RX_TCFLAG))
{
if((LM75_Timeout--) == 0) return LM75_TIMEOUT_UserCallback();
}
/* Send STOP Condition */
I2C_GenerateSTOP(LM75_I2C, ENABLE);
/* Disable DMA RX Channel */
DMA_Cmd(LM75_DMA_RX_CHANNEL, DISABLE);
/* Disable I2C DMA request */
I2C_DMACmd(LM75_I2C,DISABLE);
/* Clear DMA RX Transfer Complete Flag */
DMA_ClearFlag(LM75_DMA_RX_TCFLAG);
//.........这里部分代码省略.........
开发者ID:0x00f,项目名称:STM32F1-workarea,代码行数:101,代码来源:stm32_eval_i2c_tsensor.c
示例20: LM75_WriteConfReg
/**
* @brief Write to the configuration register of the LM75.
* @param RegValue: sepecifies the value to be written to LM75 configuration
* register.
* @retval None
*/
uint8_t LM75_WriteConfReg(uint8_t RegValue)
{
uint8_t LM75_BufferTX = 0;
LM75_BufferTX = (uint8_t)(RegValue);
/* Test on BUSY Flag */
LM75_Timeout = LM75_LONG_TIMEOUT;
while (I2C_GetFlagStatus(LM75_I2C,I2C_FLAG_BUSY))
{
if((LM75_Timeout--) == 0) return LM75_TIMEOUT_UserCallback();
}
/* Configure DMA Peripheral */
LM75_DMA_Config(LM75_DMA_TX, (uint8_t*)(&LM75_BufferTX), 1);
/* Enable the I2C peripheral */
I2C_GenerateSTART(LM75_I2C, ENABLE);
/* Test on SB Flag */
LM75_Timeout = LM75_FLAG_TIMEOUT;
while (I2C_GetFlagStatus(LM75_I2C,I2C_FLAG_SB) == RESET)
{
if((LM75_Timeout--) == 0) return LM75_TIMEOUT_UserCallback();
}
/* Transmit the slave address and enable writing operation */
I2C_Send7bitAddress(LM75_I2C, LM75_ADDR, I2C_Direction_Transmitter);
/* Test on ADDR Flag */
LM75_Timeout = LM75_FLAG_TIMEOUT;
while (!I2C_CheckEvent(LM75_I2C, I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED))
{
if((LM75_Timeout--) == 0) return LM75_TIMEOUT_UserCallback();
}
/* Transmit the first address for r/w operations */
I2C_SendData(LM75_I2C, LM75_REG_CONF);
/* Test on TXE FLag (data sent) */
LM75_Timeout = LM75_FLAG_TIMEOUT;
while ((!I2C_GetFlagStatus(LM75_I2C,I2C_FLAG_TXE)) && (!I2C_GetFlagStatus(LM75_I2C,I2C_FLAG_BTF)))
{
if((LM75_Timeout--) == 0) return LM75_TIMEOUT_UserCallback();
}
/* Enable I2C DMA request */
I2C_DMACmd(LM75_I2C,ENABLE);
/* Enable DMA TX Channel */
DMA_Cmd(LM75_DMA_TX_CHANNEL, ENABLE);
/* Wait until DMA Transfer Complete */
LM75_Timeout = LM75_LONG_TIMEOUT;
while (!DMA_GetFlagStatus(LM75_DMA_TX_TCFLAG))
{
if((LM75_Timeout--) == 0) return LM75_TIMEOUT_UserCallback();
}
/* Wait until BTF Flag is set before generating STOP */
LM75_Timeout = LM75_LONG_TIMEOUT;
while ((!I2C_GetFlagStatus(LM75_I2C,I2C_FLAG_BTF)))
{
if((LM75_Timeout--) == 0) return LM75_TIMEOUT_UserCallback();
}
/* Send STOP Condition */
I2C_GenerateSTOP(LM75_I2C, ENABLE);
/* Disable DMA TX Channel */
DMA_Cmd(LM75_DMA_TX_CHANNEL, DISABLE);
/* Disable I2C DMA request */
I2C_DMACmd(LM75_I2C,DISABLE);
/* Clear DMA TX Transfer Complete Flag */
DMA_ClearFlag(LM75_DMA_TX_TCFLAG);
return LM75_OK;
}
开发者ID:0x00f,项目名称:STM32F1-workarea,代码行数:86,代码来源:stm32_eval_i2c_tsensor.c
注:本文中的I2C_DMACmd函数示例由纯净天空整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。 |
请发表评论