硬件平台:PLC1758软件平台 uCOS-II
本文引用地址://m.amcfsurvey.com/article/201611/319144.htm开发环境: IAR EWARM
源码如下
#define BSP_I2C2_PINS(DEF_BIT_10|DEF_BIT_11)
static voidBSP_I2C2_Init(CPU_INT32U fi2c)
{
//获取外设时钟
CPU_INT32U Fpclk= BSP_PM_PerClkFreqGet(BSP_PM_PER_NBR_I2C2);
//使能该功率模块
BSP_PM_PerClkEn(BSP_PM_PER_NBR_I2C2);
//配置脉冲捕捉管脚
BSP_GPIO_Cfg(BSP_GPIO_PORT0_FAST,//P0.10引脚
BSP_I2C2_PINS,//设置成脉冲捕捉
BSP_GPIO_OPT_FNCT_3);//引脚输入使能
//设置占空比
if(fi2c>400000)
fi2c = 400000;
I2C2SCLH = (Fpclk+1/fi2c ) / 2;//高电平占空比寄存器
I2C2SCLL = (Fpclk/fi2c) / 2;//低电平占空比寄存器
//配置成I2C主模式
I2C2CONCLR = 0x2C;//STA|SI|AA|STO;
I2C2CONSET = 0x40;//I2EN=1,使能主I2C
//设置中断源
BSP_IntVectSet((CPU_INT08U)BSP_INT_SRC_NBR_I2C2,(CPU_FNCT_VOID)I2C2_IRQ_ISR_handler );
BSP_IntPrioSet((CPU_INT08U)BSP_INT_SRC_NBR_I2C2,0x01);
//使能中断
BSP_IntEn(BSP_INT_SRC_NBR_I2C2);
//I2C2中断通道号为28
}
问题 :一个字节的变量写入与读出的的结果不一致,源码如下
INT8U I2C_WriteNByte(INT8U sla, INT8U suba_type, INT32U suba, INT8U *s, INT32U num)
{
if (num > 0)//如果读取的个数为0,则返回错误
{// 设置参数
if (suba_type == 1)
{// 子地址为单字节