2025-08-13 16:43:29 +08:00
|
|
|
|
/*
|
|
|
|
|
|
*Copyright ,2023 , NANOCHAP
|
|
|
|
|
|
*File name: ENS1_I2C.C
|
|
|
|
|
|
*Author:
|
|
|
|
|
|
*Version: V1.0
|
|
|
|
|
|
*Date: 2023-11-
|
|
|
|
|
|
*Description:
|
|
|
|
|
|
*Function List:
|
|
|
|
|
|
|
|
|
|
|
|
History:
|
|
|
|
|
|
1.V1.0
|
|
|
|
|
|
Date:
|
|
|
|
|
|
Author:
|
2025-08-29 11:30:52 +08:00
|
|
|
|
Modification: <EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
2025-08-13 16:43:29 +08:00
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
|
|
#include "ENS1_IIC.h"
|
|
|
|
|
|
|
|
|
|
|
|
IIC_ConfigStructure IIC0_Config =
|
|
|
|
|
|
{
|
|
|
|
|
|
.MODE = IIC_SLAVE ,
|
|
|
|
|
|
.OWN_ADDRESS = 0x78 ,
|
|
|
|
|
|
.ACK_EN = true ,
|
|
|
|
|
|
.IIC_SPEED = IIC_STARDARD_MODE_10K ,
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
IIC_ConfigStructure IIC1_Config =
|
|
|
|
|
|
{
|
|
|
|
|
|
.MODE = IIC_SLAVE ,
|
|
|
|
|
|
.OWN_ADDRESS = 0x78 ,
|
|
|
|
|
|
.ACK_EN = true ,
|
|
|
|
|
|
.IIC_SPEED = IIC_STARDARD_MODE_10K ,
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
|
2025-08-29 11:30:52 +08:00
|
|
|
|
//bus error <20>жϣ<D0B6>ITERRENʹ<4E>ܣ<EFBFBD>
|
2025-08-13 16:43:29 +08:00
|
|
|
|
bool IIC_BUS_ERROR(CMSDK_I2C_TypeDef* CMSDK_I2Cx){return (bool)(((CMSDK_I2Cx->I2C_STS >> 8)&0x1) ? true :false);}
|
2025-08-29 11:30:52 +08:00
|
|
|
|
//Ӧ<><D3A6><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>
|
2025-08-13 16:43:29 +08:00
|
|
|
|
bool IIC_ACK_ERROR(CMSDK_I2C_TypeDef* CMSDK_I2Cx){return (bool)(((CMSDK_I2Cx->I2C_STS >> 10)&0x1) ? true :false);}
|
2025-08-29 11:30:52 +08:00
|
|
|
|
//<2F>ٲ<EFBFBD>
|
2025-08-13 16:43:29 +08:00
|
|
|
|
bool IIC_ARBITRAT_ERROR(CMSDK_I2C_TypeDef* CMSDK_I2Cx){return (bool)(((CMSDK_I2Cx->I2C_STS >> 9)&0x1) ? true :false);}
|
2025-08-29 11:30:52 +08:00
|
|
|
|
//<2F><><EFBFBD>/<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
2025-08-13 16:43:29 +08:00
|
|
|
|
bool IIC_OVERRUN_ERROR(CMSDK_I2C_TypeDef* CMSDK_I2Cx){return (bool)(((CMSDK_I2Cx->I2C_STS >> 11)&0x1) ? true :false);}
|
|
|
|
|
|
|
2025-08-29 11:30:52 +08:00
|
|
|
|
//ITEVFENʹ<4E>ܺ<EFBFBD><DCBA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>¼<EFBFBD>
|
|
|
|
|
|
//<2F><>ʼ״̬<D7B4><CCAC><EFBFBD><EFBFBD>ʼλ<CABC><CEBB><EFBFBD>ͣ<EFBFBD><CDA3><EFBFBD><EFBFBD><EFBFBD>ģʽ<C4A3><CABD>
|
2025-08-13 16:43:29 +08:00
|
|
|
|
bool IIC_SB_EVENT(CMSDK_I2C_TypeDef* CMSDK_I2Cx){return (bool)(((CMSDK_I2Cx->I2C_STS)&0x1) ? true :false);}
|
2025-08-29 11:30:52 +08:00
|
|
|
|
//<2F><>ַ<EFBFBD><D6B7><EFBFBD>ͣ<EFBFBD><CDA3><EFBFBD><EFBFBD><EFBFBD>ģʽ<C4A3><CABD> / <20><>ַƥ<D6B7>䣨<EFBFBD>ӻ<EFBFBD><D3BB>¼<EFBFBD><C2BC><EFBFBD>
|
2025-08-13 16:43:29 +08:00
|
|
|
|
bool IIC_ADDR_EVENT(CMSDK_I2C_TypeDef* CMSDK_I2Cx){return (bool)(((CMSDK_I2Cx->I2C_STS >> 1)&0x1) ? true :false);}
|
2025-08-29 11:30:52 +08:00
|
|
|
|
//<2F><><EFBFBD><EFBFBD>ģʽ<C4A3>£<EFBFBD><C2A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѷ<EFBFBD><D1B7><EFBFBD>10bit<69><74>ַ<EFBFBD><D6B7><EFBFBD>ݵĵ<DDB5>һ<EFBFBD><D2BB><EFBFBD>ֽڣ<D6BD><DAA3><EFBFBD><EFBFBD><EFBFBD>
|
2025-08-13 16:43:29 +08:00
|
|
|
|
bool IIC_ADD10_EVENT(CMSDK_I2C_TypeDef* CMSDK_I2Cx){return (bool)(((CMSDK_I2Cx->I2C_STS >> 3)&0x1) ? true :false);}
|
2025-08-29 11:30:52 +08:00
|
|
|
|
//<2F>ӻ<EFBFBD>ģʽ<C4A3>£<EFBFBD>ֹͣ<CDA3><D6B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>յ<EFBFBD>
|
2025-08-13 16:43:29 +08:00
|
|
|
|
bool IIC_STOPF_EVENT(CMSDK_I2C_TypeDef* CMSDK_I2Cx){return (bool)(((CMSDK_I2Cx->I2C_STS >> 4)&0x1) ? true :false);}
|
2025-08-29 11:30:52 +08:00
|
|
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD>ֽڴ<D6BD><DAB4><EFBFBD>ɹ<EFBFBD>
|
2025-08-13 16:43:29 +08:00
|
|
|
|
bool IIC_BTF_EVENT(CMSDK_I2C_TypeDef* CMSDK_I2Cx){return (bool)(((CMSDK_I2Cx->I2C_STS >> 2)&0x1) ? true :false);}
|
|
|
|
|
|
|
2025-08-29 11:30:52 +08:00
|
|
|
|
//ITEVFEN <20><> ITBUFEN ʹ<>ܺ<EFBFBD><DCBA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>¼<EFBFBD>
|
|
|
|
|
|
//<2F><><EFBFBD>ݼĴ<DDBC><C4B4><EFBFBD><EFBFBD>ǿգ<C7BF><D5A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD>
|
2025-08-13 16:43:29 +08:00
|
|
|
|
bool IIC_RxNE_EVENT(CMSDK_I2C_TypeDef* CMSDK_I2Cx){return (bool)(((CMSDK_I2Cx->I2C_STS >> 5)&0x1) ? true :false);}
|
2025-08-29 11:30:52 +08:00
|
|
|
|
//<2F><><EFBFBD>ݼĴ<DDBC><C4B4><EFBFBD><EFBFBD>գ<EFBFBD><D5A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD>
|
2025-08-13 16:43:29 +08:00
|
|
|
|
bool IIC_TxE_EVENT(CMSDK_I2C_TypeDef* CMSDK_I2Cx){return (bool)(((CMSDK_I2Cx->I2C_STS >> 6)&0x1) ? true :false);}
|
|
|
|
|
|
|
2025-08-29 11:30:52 +08:00
|
|
|
|
//<2F><><EFBFBD><EFBFBD>״̬<D7B4><CCAC><EFBFBD><EFBFBD>æ<EFBFBD><C3A6><EFBFBD>
|
2025-08-13 16:43:29 +08:00
|
|
|
|
uint8_t IIC_Bus_BUSY(CMSDK_I2C_TypeDef* CMSDK_I2Cx){return (uint8_t)(((CMSDK_I2Cx->I2C_STS >> 13)&0x1) ? 1 :0);};
|
|
|
|
|
|
|
2025-08-29 11:30:52 +08:00
|
|
|
|
//ģʽȷ<CABD><C8B7>
|
2025-08-13 16:43:29 +08:00
|
|
|
|
bool IIC_MASTER_MODE(CMSDK_I2C_TypeDef* CMSDK_I2Cx){return (bool)(((CMSDK_I2Cx->I2C_STS >> 12)&0x1) ? true :false);}
|
|
|
|
|
|
|
|
|
|
|
|
uint8_t IIC_Config_init(CMSDK_I2C_TypeDef* CMSDK_I2Cx ,IIC_ConfigStructure* IIC_Para )
|
|
|
|
|
|
{
|
|
|
|
|
|
if(CMSDK_I2Cx == CMSDK_I2C0)
|
|
|
|
|
|
{
|
|
|
|
|
|
GPIO_AltFunction(GPIO_6 , ALT_FUNC1);
|
|
|
|
|
|
GPIO_AltFunction(GPIO_7 , ALT_FUNC1);
|
|
|
|
|
|
}
|
|
|
|
|
|
else if(CMSDK_I2Cx == CMSDK_I2C1)
|
|
|
|
|
|
{
|
|
|
|
|
|
GPIO_AltFunction(GPIO_8 , ALT_FUNC2);
|
|
|
|
|
|
GPIO_AltFunction(GPIO_9 , ALT_FUNC2);
|
|
|
|
|
|
}
|
|
|
|
|
|
if(IIC_Para->MODE == IIC_SLAVE)
|
|
|
|
|
|
{
|
2025-08-29 11:30:52 +08:00
|
|
|
|
// CMSDK_I2Cx->I2C_CR2|=(1<<7);//|(1<<8);//<2F>ж<EFBFBD>ʹ<EFBFBD><CAB9>--bit8<74><38>buffer<65>ж<EFBFBD> / bit7<74><37><EFBFBD>¼<EFBFBD><C2BC>ж<EFBFBD> / bit6<74><36><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>
|
2025-08-13 16:43:29 +08:00
|
|
|
|
CMSDK_I2Cx->I2C_CR1|=(1);
|
|
|
|
|
|
CMSDK_I2Cx->I2C_OAR = IIC_Para->OWN_ADDRESS ;
|
|
|
|
|
|
if(IIC_Para->ACK_EN == true)
|
|
|
|
|
|
CMSDK_I2Cx->I2C_CR1 |= (1<<5);
|
|
|
|
|
|
}
|
|
|
|
|
|
else
|
|
|
|
|
|
{
|
|
|
|
|
|
/*
|
|
|
|
|
|
IIC master transmitter:
|
2025-08-29 11:30:52 +08:00
|
|
|
|
IIC_CR2:<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>ʱ<EFBFBD><EFBFBD>Ƶ<EFBFBD><EFBFBD>
|
|
|
|
|
|
IIC_CR1:ʹ<EFBFBD><EFBFBD>IIC<EFBFBD>ӿ<EFBFBD>
|
|
|
|
|
|
IIC_CR1:<EFBFBD><EFBFBD><EFBFBD><EFBFBD>START λ IIC<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
2025-08-13 16:43:29 +08:00
|
|
|
|
*/
|
|
|
|
|
|
CMSDK_I2Cx->I2C_CR2 |= IIC_Para->IIC_SPEED ;
|
|
|
|
|
|
CMSDK_I2Cx->I2C_CR1 |= (1) ;
|
|
|
|
|
|
CMSDK_I2Cx->I2C_OAR = IIC_Para->OWN_ADDRESS ;
|
|
|
|
|
|
if(IIC_Para->ACK_EN == true)
|
|
|
|
|
|
CMSDK_I2Cx->I2C_CR1 |= (1<<5);
|
|
|
|
|
|
}
|
|
|
|
|
|
return 0;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void IIC_ITConfig(CMSDK_I2C_TypeDef* CMSDK_I2Cx ,uint16_t IIC_IT_SEL ,FunctionalState NewState)
|
|
|
|
|
|
{
|
|
|
|
|
|
if(CMSDK_I2Cx == CMSDK_I2C1){
|
|
|
|
|
|
CMSDK_I2C1->I2C_CR2 |= IIC_IT_SEL;
|
|
|
|
|
|
NVIC_DisableIRQ(I2C1_Event_IRQn);
|
|
|
|
|
|
NVIC_ClearPendingIRQ(I2C1_Event_IRQn);
|
|
|
|
|
|
NVIC_DisableIRQ(I2C1_Error_IRQn);
|
|
|
|
|
|
NVIC_ClearPendingIRQ(I2C1_Error_IRQn);
|
|
|
|
|
|
if(NewState == ENABLE)
|
|
|
|
|
|
NVIC_EnableIRQ(I2C1_Event_IRQn);
|
|
|
|
|
|
}
|
|
|
|
|
|
else if(CMSDK_I2Cx == CMSDK_I2C0){
|
|
|
|
|
|
CMSDK_I2C0->I2C_CR2 |= IIC_IT_SEL;
|
|
|
|
|
|
NVIC_DisableIRQ(I2C0_Event_IRQn);
|
|
|
|
|
|
NVIC_ClearPendingIRQ(I2C0_Event_IRQn);
|
|
|
|
|
|
NVIC_DisableIRQ(I2C0_Error_IRQn);
|
|
|
|
|
|
NVIC_ClearPendingIRQ(I2C0_Error_IRQn);
|
|
|
|
|
|
if(NewState == ENABLE)
|
|
|
|
|
|
NVIC_EnableIRQ(I2C0_Event_IRQn);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2025-08-29 11:30:52 +08:00
|
|
|
|
void IIC_Cmd(CMSDK_I2C_TypeDef* CMSDK_I2Cx ,FunctionalState NewState) //ʹ<><CAB9>IIC<49><43><EFBFBD><EFBFBD>
|
2025-08-13 16:43:29 +08:00
|
|
|
|
{
|
|
|
|
|
|
if(CMSDK_I2Cx ==CMSDK_I2C0)
|
|
|
|
|
|
{
|
|
|
|
|
|
PCLK_Enable(I2C0_PCLK_EN);
|
|
|
|
|
|
}
|
|
|
|
|
|
else if(CMSDK_I2Cx ==CMSDK_I2C1)
|
|
|
|
|
|
{
|
|
|
|
|
|
PCLK_Enable(I2C1_PCLK_EN);
|
|
|
|
|
|
}
|
|
|
|
|
|
else
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
if(NewState == ENABLE)
|
|
|
|
|
|
CMSDK_I2Cx->I2C_CR1 |= (1);
|
|
|
|
|
|
else
|
|
|
|
|
|
CMSDK_I2Cx->I2C_CR1 &=~ (1);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void IIC_GenerateSTART(CMSDK_I2C_TypeDef* CMSDK_I2Cx)
|
|
|
|
|
|
{
|
|
|
|
|
|
while(IIC_Bus_BUSY(CMSDK_I2Cx));
|
|
|
|
|
|
CMSDK_I2Cx->I2C_CR1 |= (1<<3);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void IIC_GenerateSTOP(CMSDK_I2C_TypeDef* CMSDK_I2Cx)
|
|
|
|
|
|
{
|
|
|
|
|
|
CMSDK_I2Cx->I2C_CR1 |= (1<<4);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2025-08-29 11:30:52 +08:00
|
|
|
|
//general call <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>豸<EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD><EFBFBD>ڳ<EFBFBD>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD>豸<EFBFBD><E8B1B8><EFBFBD>豸ͬ<E8B1B8><CDAC>
|
|
|
|
|
|
//<2F><><EFBFBD>豸ͨ<E8B1B8><CDA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>߷<EFBFBD><DFB7><EFBFBD>0x00<30><30>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>GENERAL CALL
|
2025-08-13 16:43:29 +08:00
|
|
|
|
void IIC_GeneralCallCmd(CMSDK_I2C_TypeDef* CMSDK_I2Cx)
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void IIC_Send7bitAddress(CMSDK_I2C_TypeDef* CMSDK_I2Cx ,uint8_t Address)
|
|
|
|
|
|
{
|
|
|
|
|
|
CMSDK_I2Cx->I2C_DR = Address ;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void IIC_SendData(CMSDK_I2C_TypeDef* CMSDK_I2Cx , uint8_t data)
|
|
|
|
|
|
{
|
|
|
|
|
|
CMSDK_I2Cx->I2C_DR = data;
|
2025-08-29 11:30:52 +08:00
|
|
|
|
while(IIC_BTF_EVENT(CMSDK_I2Cx) == false); //<2F>ֽڴ<D6BD><DAB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
2025-08-13 16:43:29 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
uint8_t IIC_ReadData(CMSDK_I2C_TypeDef* CMSDK_I2Cx)
|
|
|
|
|
|
{
|
|
|
|
|
|
return CMSDK_I2Cx->I2C_DR;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void I2C0_Event_Handler(void)
|
|
|
|
|
|
{
|
|
|
|
|
|
NVIC_ClearPendingIRQ(I2C0_Event_IRQn);
|
|
|
|
|
|
if(IIC_MASTER_MODE(CMSDK_I2C0) == TRUE)
|
|
|
|
|
|
{
|
|
|
|
|
|
if(IIC_SB_EVENT(CMSDK_I2C0) == true )
|
|
|
|
|
|
{
|
|
|
|
|
|
return ;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
if(IIC_ADDR_EVENT(CMSDK_I2C0) == true )
|
|
|
|
|
|
{
|
|
|
|
|
|
return ;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
if(IIC_ADD10_EVENT(CMSDK_I2C0) == true)
|
|
|
|
|
|
{
|
|
|
|
|
|
return;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
else
|
|
|
|
|
|
{
|
|
|
|
|
|
if(IIC_ADDR_EVENT(CMSDK_I2C0) == true)
|
|
|
|
|
|
{
|
|
|
|
|
|
return ;
|
|
|
|
|
|
}
|
|
|
|
|
|
if(IIC_STOPF_EVENT(CMSDK_I2C0) == true)
|
|
|
|
|
|
{
|
2025-08-29 11:30:52 +08:00
|
|
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ٽ<EFBFBD><D9BD>գ<EFBFBD><D5A3><EFBFBD>ر<EFBFBD>IIC!!!
|
2025-08-13 16:43:29 +08:00
|
|
|
|
IIC_Cmd(CMSDK_I2C0 ,DISABLE) ;
|
2025-08-29 11:30:52 +08:00
|
|
|
|
CMSDK_I2C0->I2C_CR2|=(1<<7); //<2F>ж<EFBFBD>ʹ<EFBFBD><CAB9>--bit8<74><38>buffer<65>ж<EFBFBD> / bit7<74><37><EFBFBD>¼<EFBFBD><C2BC>ж<EFBFBD> / bit6<74><36><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>
|
2025-08-13 16:43:29 +08:00
|
|
|
|
CMSDK_I2C0->I2C_CR1|=(1);
|
|
|
|
|
|
CMSDK_I2C0->I2C_OAR = 0X78 ;
|
|
|
|
|
|
CMSDK_I2C0->I2C_CR1 |= (1<<5);
|
|
|
|
|
|
IIC_Cmd(CMSDK_I2C0 ,ENABLE) ;
|
|
|
|
|
|
return ;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
if(IIC_BTF_EVENT(CMSDK_I2C0) == true)
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
if(IIC_RxNE_EVENT(CMSDK_I2C0) == true)
|
|
|
|
|
|
{
|
|
|
|
|
|
uint8_t read_data = (uint8_t)(CMSDK_I2C0->I2C_DR & 0xff);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
if(IIC_TxE_EVENT(CMSDK_I2C0) == true)
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
return ;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void I2C0_Error_Handler(void)
|
|
|
|
|
|
{
|
|
|
|
|
|
NVIC_ClearPendingIRQ(I2C0_Error_IRQn);
|
|
|
|
|
|
|
|
|
|
|
|
if(IIC_BUS_ERROR(CMSDK_I2C0) == true)
|
|
|
|
|
|
{
|
|
|
|
|
|
return ;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
if(IIC_ACK_ERROR(CMSDK_I2C0) == true)
|
|
|
|
|
|
{
|
|
|
|
|
|
return ;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
if(IIC_ARBITRAT_ERROR(CMSDK_I2C0) == true)
|
|
|
|
|
|
{
|
|
|
|
|
|
return ;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
if(IIC_OVERRUN_ERROR(CMSDK_I2C0) == true)
|
|
|
|
|
|
{
|
|
|
|
|
|
return ;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void I2C1_Event_Handler(void)
|
|
|
|
|
|
{
|
|
|
|
|
|
NVIC_ClearPendingIRQ(I2C1_Event_IRQn);
|
|
|
|
|
|
if(IIC_MASTER_MODE(CMSDK_I2C1) == TRUE)
|
|
|
|
|
|
{
|
|
|
|
|
|
if(IIC_SB_EVENT(CMSDK_I2C1) == true )
|
|
|
|
|
|
{
|
|
|
|
|
|
return ;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
if(IIC_ADDR_EVENT(CMSDK_I2C1) == true )
|
|
|
|
|
|
{
|
|
|
|
|
|
return;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
if(IIC_ADD10_EVENT(CMSDK_I2C1) == true)
|
|
|
|
|
|
{
|
|
|
|
|
|
return;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
else
|
|
|
|
|
|
{
|
2025-08-29 11:30:52 +08:00
|
|
|
|
if(IIC_ADDR_EVENT(CMSDK_I2C1) == true) //<2F><>Ϊ<EFBFBD>ӻ<EFBFBD><D3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˴<EFBFBD><CBB4><EFBFBD><EFBFBD>ַƥ<D6B7>䣡
|
2025-08-13 16:43:29 +08:00
|
|
|
|
{
|
|
|
|
|
|
return ;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2025-08-29 11:30:52 +08:00
|
|
|
|
if(IIC_STOPF_EVENT(CMSDK_I2C1) == true) //<2F><>Ϊ<EFBFBD>ӻ<EFBFBD><D3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>յ<EFBFBD>STOP<4F>ź<EFBFBD>
|
2025-08-13 16:43:29 +08:00
|
|
|
|
{
|
2025-08-29 11:30:52 +08:00
|
|
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ٽ<EFBFBD><D9BD>գ<EFBFBD><D5A3><EFBFBD>ر<EFBFBD>IIC!!!
|
2025-08-13 16:43:29 +08:00
|
|
|
|
IIC_Cmd(CMSDK_I2C1 ,DISABLE) ;
|
2025-08-29 11:30:52 +08:00
|
|
|
|
CMSDK_I2C1->I2C_CR2|=(1<<7); //<2F>ж<EFBFBD>ʹ<EFBFBD><CAB9>--bit8<74><38>buffer<65>ж<EFBFBD> / bit7<74><37><EFBFBD>¼<EFBFBD><C2BC>ж<EFBFBD> / bit6<74><36><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>
|
2025-08-13 16:43:29 +08:00
|
|
|
|
CMSDK_I2C1->I2C_CR1|=(1);
|
|
|
|
|
|
CMSDK_I2C1->I2C_OAR = 0X78 ;
|
|
|
|
|
|
CMSDK_I2C1->I2C_CR1 |= (1<<5);
|
|
|
|
|
|
IIC_Cmd(CMSDK_I2C1 ,ENABLE) ;
|
|
|
|
|
|
IIC_ITConfig(CMSDK_I2C0,0 ,DISABLE);
|
|
|
|
|
|
IIC_ITConfig(CMSDK_I2C0,0 ,ENABLE);
|
|
|
|
|
|
return ;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
if(IIC_BTF_EVENT(CMSDK_I2C1) == true)
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
|
|
}
|
2025-08-29 11:30:52 +08:00
|
|
|
|
if((IIC_RxNE_EVENT(CMSDK_I2C1) == true)) //<2F><>Ϊ<EFBFBD>ӻ<EFBFBD><D3BB><EFBFBD>buffer<65>ǿգ<C7BF><D5A3><EFBFBD>IIC_DR<44>е<EFBFBD><D0B5><EFBFBD><EFBFBD><EFBFBD>
|
2025-08-13 16:43:29 +08:00
|
|
|
|
{
|
|
|
|
|
|
uint8_t read_data = (uint8_t)(CMSDK_I2C1->I2C_DR & 0xff);
|
|
|
|
|
|
}
|
|
|
|
|
|
if(IIC_TxE_EVENT(CMSDK_I2C1) == true)
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
return ;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void I2C1_Error_Handler(void)
|
|
|
|
|
|
{
|
|
|
|
|
|
NVIC_ClearPendingIRQ(I2C1_Error_IRQn);
|
|
|
|
|
|
|
|
|
|
|
|
if(IIC_BUS_ERROR(CMSDK_I2C1) == true)
|
|
|
|
|
|
{
|
|
|
|
|
|
return ;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
if(IIC_ACK_ERROR(CMSDK_I2C1) == true)
|
|
|
|
|
|
{
|
|
|
|
|
|
return ;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
if(IIC_ARBITRAT_ERROR(CMSDK_I2C1) == true)
|
|
|
|
|
|
{
|
|
|
|
|
|
return ;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
if(IIC_OVERRUN_ERROR(CMSDK_I2C1) == true)
|
|
|
|
|
|
{
|
|
|
|
|
|
return ;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|