历史上的今天
返回首页

历史上的今天

今天是:2025年06月03日(星期二)

正在发生

2018年06月03日 | STM32 I2C 硬件中断方式实现方法

2018-06-03 来源:eefocus

流程图如下:

 

I2C 中断处理函数如下:

 

/**
  * @brief  This function handles I2C1 Event interrupt request, tx, rx 
  *         buffer and number of bytes will be changed.
  * @param  None
  * @retval None
  */
void I2C1_EV_IRQHandler(void)
{
#ifdef ARC_I2C_IRQ
    uint32_t i2cEvent;
    I2C_param_struct __IO *pI2C_param;

    pI2C_param = ARC_get_I2C_param();
    i2cEvent = I2C_GetLastEvent(I2C1);
    
    switch (i2cEvent)
    {
        case I2C_EVENT_MASTER_MODE_SELECT:/* EV5 */
            if(pI2C_param->I2C_DIRECTION == ARC_I2C_DIRECTION_TX)
            {
                I2C_Send7bitAddress(I2C1, pI2C_param->DeviceAddr, I2C_Direction_Transmitter);
            }
            else
            {
                I2C_Send7bitAddress(I2C1, pI2C_param->DeviceAddr, I2C_Direction_Receiver);
            }
            break;

        /* Master Transmitter -------------------------------------------------------*/
        case I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED:
            I2C_SendData(I2C1, pI2C_param->SubAddr);
            if(pI2C_param->TxNumOfBytes == 0)
                I2C_ITConfig(I2C1, I2C_IT_BUF, DISABLE);
            break;
           
        case I2C_EVENT_MASTER_BYTE_TRANSMITTING:  /* Without BTF, EV8 */     
            if(pI2C_param->TX_I2C_Index < pI2C_param->TxNumOfBytes)
            {
                I2C_SendData(I2C1, pI2C_param->TxData[pI2C_param->TX_I2C_Index++]);
            }
            else 
            {      
                I2C_ITConfig(I2C1, I2C_IT_BUF, DISABLE);
            }
            break;

        case I2C_EVENT_MASTER_BYTE_TRANSMITTED: /* With BTF EV8-2 */
           if(pI2C_param->TX_Generate_stop == 1)
           {
             I2C_GenerateSTOP(I2C1, ENABLE);
             I2C_ITConfig(I2C1, I2C_IT_EVT, DISABLE);
           }
           else
           {
             pI2C_param->I2C_DIRECTION = ARC_I2C_DIRECTION_RX;
             I2C_ITConfig(I2C1, I2C_IT_BUF, ENABLE);
             I2C_GenerateSTART(I2C1, ENABLE);
           }
           break;

        /* Master Receiver -------------------------------------------------------*/
        case I2C_EVENT_MASTER_RECEIVER_MODE_SELECTED:
            if(pI2C_param->RX_I2C_Index == (pI2C_param->RxNumOfBytes - 1))
            {
                I2C_AcknowledgeConfig(I2C1, DISABLE);
                I2C_GenerateSTOP(I2C1, ENABLE);
            }
            break;

        case I2C_EVENT_MASTER_BYTE_RECEIVED:
            pI2C_param->RxData[pI2C_param->RX_I2C_Index++] = I2C_ReceiveData (I2C1);
            if(pI2C_param->RX_I2C_Index == (pI2C_param->RxNumOfBytes - 1))
            {
                I2C_AcknowledgeConfig(I2C1, DISABLE);
                I2C_GenerateSTOP(I2C1, ENABLE);
            }
            break;

        default:
            break;
    }

#endif
}


推荐阅读

史海拾趣

Avel Lindberg公司的发展小趣事

由于我无法直接获取Avel Lindberg公司的详细发展资料,因此我无法直接为您撰写5个关于该公司发展起来的具体故事。不过,我可以为您提供一个通用的故事框架,您可以根据这个框架结合公司的公开信息来撰写相关故事。

Avel Lindberg公司发展故事框架

  1. 创业初期: 描述Avel Lindberg公司成立的背景,包括创始人或核心团队的愿景、行业趋势以及初始产品或服务。可以提及公司如何克服初创期的困难,如资金短缺、市场竞争激烈等问题,逐渐在市场上站稳脚跟。

  2. 技术突破: 讲述公司在某个关键时期实现的技术突破,这项突破可能是对既有技术的改进,也可能是全新技术的研发。这个突破如何帮助公司打开了新的市场领域,提升了竞争力,成为行业内的领军者。

  3. 合作与扩展: 描述公司如何通过与其他企业、研究机构或高校建立合作关系,来扩大业务范围或提升技术水平。这些合作可能涉及共同研发、市场拓展、品牌建设等方面,对公司的长期发展产生了积极影响。

  4. 国际化战略: 讲述公司如何逐步实施国际化战略,进入海外市场。这包括公司如何分析国际市场的需求和竞争态势,制定合适的市场进入策略,以及在国际市场上取得的成就和面临的挑战。

  5. 社会责任与可持续发展: 介绍公司在发展过程中如何关注社会责任和可持续发展。这可以包括公司在环保、员工福利、社区支持等方面的举措,以及这些举措如何提升了公司的社会形象和品牌价值。

在撰写具体故事时,您可以根据Avel Lindberg公司的实际情况调整上述框架中的内容,并结合公司的官方公告、新闻报道和行业分析报告等资料来丰富细节。同时,请确保所描述的事实准确无误,避免主观评价和猜测。

Coors Components Inc公司的发展小趣事

随着电子行业的不断发展,智能化、绿色化成为了行业的新趋势。Coors Components Inc公司敏锐地捕捉到这一趋势,加大了对智能电子产品和环保材料的研发力度。通过不断推出符合市场需求的新产品,公司成功抓住了行业发展的机遇,实现了快速发展。

Dfx公司的发展小趣事

某消费电子公司在生产过程中经常遇到质量问题,导致产品退货率居高不下。为了解决这个问题,该公司引入了DFX的设计理念,对产品设计、生产和测试等环节进行了全面优化。通过改进生产工艺、优化材料选择和加强质量控制等手段,该公司成功提高了产品的质量和可靠性,降低了退货率,赢得了消费者的信任。

B&K Precision公司的发展小趣事

在1948年,当美国民众开始大量购买电视机时,电视机的维修需求也随之增加。芝加哥的企业家卡尔·科恩(Carl Korn)和菲利普·班(Philip Ban)注意到了这一市场机会。他们发现,当时缺乏能够轻松测试电视组件的设备,于是决定自己动手制作。两位创业者从车库起步,开始制造自己的测试设备,并成立了中央电视服务公司。他们的业务迅速扩展,开始向其他电视维修店销售CRT再生器和真空管测试仪,为公司的后续发展奠定了坚实的基础。

CHIMEI(奇美)公司的发展小趣事

奇美公司自成立以来,始终坚持品质至上的原则。公司注重产品质量和性能的提升,通过引进先进的生产设备和工艺技术,不断提升产品的品质和竞争力。同时,奇美还建立了完善的质量管理体系,从原材料采购到产品出厂,每一个环节都严格把控,确保产品的品质达到客户的要求。这种对品质的执着追求,使得奇美的产品在市场上赢得了良好的口碑。

Cedrat Technologies公司的发展小趣事

在电子行业中,合作与共赢是企业发展的重要途径。Cedrat Technologies积极与产业链上下游企业建立紧密的合作关系,共同推动电子行业的发展。通过与合作伙伴的协同创新和技术交流,Cedrat Technologies不仅拓展了自身的业务范围,也提升了在行业内的影响力和竞争力。

问答坊 | AI 解惑

DS18B20头文件!绝对好使!M16 8M 的!

来源:http://www.ourdev.cn/bbs/bbs_content.jsp?bbs_sn=657257&bbs_page_no=1&bbs_id=9999 终于调通了!哈哈: 我也拿出来跟大家分享一下! 里面的内容什么都不用该,就该一下前面宏定义就可以了! 只需调用gettemp();就可以了!出口参数 ...…

查看全部问答>

求救!!

我现在正在做这个的数控电源的论文,不知道这个电路和程序是否问题,哪位大侠能帮我看看,有问题话能不能帮我改改 ,谢谢!!!whf-205@163.com [ 本帖最后由 yeloulo 于 2010-1-15 13:27 编辑 ]…

查看全部问答>

求Wince下自制的软键盘源码,evc和C#的都行。

求Wince下自制的软键盘源码,evc和C#的都行。系统自带的控制有些不自由。…

查看全部问答>

新手求救

我毕业设计弄MC68HC908GP32的设计  现在我串行输入电路(写人单片机的电路) 弄不出来 那里有啊 请高手指点哈!!!! 谢谢…

查看全部问答>

VXWORKS移植问题,请高手帮忙

我现在手里有一块s3c2410(arm920t,flash:16m,sdrom:64m)的开发板,现在用PPCBOOT2.0.0引导LINUX启动一切正常。我现在想把用这块开发板,运行vxworks,应该如何做呢,请高手帮忙,谢谢!!!!急…

查看全部问答>

请教关于stm32F103VC的fsmc问题

在用stm32f103vc 100pin做项目的时候,遇到一个问题。 我们想用103vc的fmsc挂5个外设。这5个外设的地址有4个只需要2根地址线,另外一个需要10根地址线。它们的数据线都是8位的。 因为用的103vc 100pin的,所以它的A0~A15和D0~D15是复用的, ...…

查看全部问答>

是不是用完TIM2.再用串口DMA接受会有bug?

RT.不知道为什么.如果不用TIM2计时.直接用DMA串口接收.是没问题的.但是用TIM2延时一阵子.就不能收到了... 大家帮帮忙,有必要我就上程序…

查看全部问答>

CPU的单核双核是什么意思?

CPU的单核双核是什么意思?…

查看全部问答>

TI的LM3429的LED驱动,使用pwm调光问题

最近测试TI的一款LED驱动,型号为LM3429. 测试条件: 输入电压:6~9V(实际使用电池供电) 输出电压:24V 输出电流:0.35A 外部PWM频率:25K 使用TI的WEBENCH设计电路如下: LM3429可调光电路如下: 问题如下: 在实际测试应用不带 ...…

查看全部问答>

有不知道求大神解释

#include \"msp430g2553.h\" const unsigned int spwm[] = { 250, 327, 396, 452, 487, 499, 487, 452, 396, 327, 250, 172, 103, 47, 12, 3, 12, 47, 103, 172, }; unsigned int n=0; void TimerA_PWM()//产生PWM波 { P1DIR |= BIT2; P1S ...…

查看全部问答>