普誠創智(成都)科技有限公司-论坛

 找回密码
 立即注册
搜索
热搜: PT32 BLDCM Motor USB
查看: 14823|回复: 0

I2C中断发送字符串

[复制链接]

3

主题

3

帖子

153

积分

內部人

Rank: 5Rank: 5

积分
153
发表于 2017-8-3 14:08:34 | 显示全部楼层 |阅读模式
功能:使用I2C中断连续发送17个字符
注意:在中断中需要先对FIFO进行写入,再清除中断标志位。若先清除中断标志位将多次进入中断程序。

参考源码如下:

//******************** I2C初始化 ***********************
void I2CMInit(void)
{
    //Configure GPIO Alternate Function for ADC
    GPIOAfr(GPIOB,BIT02,AF2);      //Set PB02 as SCL(AF2)
    GPIOPuPd(GPIOB,BIT02,PULLUP);  //SCL Pull Up=PB02
    GPIOOTDR(GPIOB,BIT02,1,0);      //SCL Open Drain=PB02

    GPIOAfr(GPIOA,BIT01,AF2);      //Set PA01 as SDA(AF2)
    GPIOPuPd(GPIOA,BIT01,PULLUP);  //SDA Pull Up=PA01
    GPIOOTDR(GPIOA,BIT01,1,0);     //SDA Open Drain=PA01
    //Configure I2C
    pI2C0Ctrl->I2C_TX_TL = 0;   //配置触发中断FIFO深度
    pI2C0Ctrl->I2C_IDR = I2CINTR_TXEMPTY;   //禁止FIFO空中断
    I2CMConfig(I2C0,I2CRATE_SS); //standard speed
}

//******************** interrupt ***********************
void I2C0_IRQHandler(void)         //irq 7
{
    while(1)
    {
        pI2C0Ctrl->I2C_DATA_CMD = gDispBuf[DisRow][TX_Count];
        TX_Count ++;
        if(((TX_Count % 8)==0))
        {
            break;
        }
        else if(TX_Count > 16)
        {
            TX_Count = 0;
            pI2C0Ctrl->I2C_IDR = I2CINTR_TXEMPTY;
            break;
        }
    }
    pI2C0Ctrl->I2C_ISC = pI2C0Ctrl ->I2C_RIS;
}



//******************** main ***********************
int main(void)
{
    .......
    I2CMInit()
    .......

    pI2C0Ctrl->I2C_IER  =  I2CINTR_TXEMPTY;  // enable TX empty  interrupt
    while(1);
}



回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

蜀ICP备16008743号-1|普诚科技公司|小黑屋|普誠創智(成都)科技有限公司-论坛  

GMT+8, 2022-8-13 08:57 , Processed in 0.157720 second(s), 23 queries .

快速回复 返回顶部 返回列表