i2c(Inter-Integrated Circuit)是一种串行通信协议,常用于连接微控制器和外部设备,如传感器、模数转换器等。在i2c通信过程中,中断是一种非常重要的通讯技术,能够让微控制器在特定情况下自动执行特定的程序,提高了系统的效率和稳定性。i2c中断是指当连接的外设向i2c主设备发送特定请求时,主设备能够即时响应,执行相关的程序。
i2c中断的产生是由外设所发出的i2c信号触发的。当外设需要向主机发送数据时,它会发出请求。如果主机设置了i2c中断函数,在响应请求的同时,中断服务程序将被执行。当中断服务程序执行完毕后,程序将返回到主程序中继续执行。
在i2c通讯过程中,中断产生的情况包括接收中断和发送中断:
1)接收中断:当外设向主设备发送一个数据包时,主设备发出一个ACK信号确认确认接收。当传输完一个字节时,主设备会检查是否有ACK信号,如果没有则主设备会触发一个接收中断,并在接收到一个完整数据包后终止传输。
2)发送中断:当主设备向外设传输数据时,主设备将每个数据包分成多个字节并发送,在每个数据包发送完毕后,主设备会等待外设响应一个ACK信号表示接收成功,如果在一定的时间内未收到响应,则主设备会触发一个发送中断。
i2c中断的优势在于节省了CPU的运行时间,提高了系统的效率。在没有中断服务程序的情况下,CPU需要不停地轮询是否有外设请求,感知外设的指令。这种方式会占用大量的CPU时间,导致系统效率下降。而当中断服务程序被触发时,CPU会立即跳转到中断服务程序执行相关操作,减少了CPU的工作量,相较于轮询方式,只在有外设请求时才触发程序执行,大大减少了系统的运行时间和功耗。
在实现i2c中断的功能时,需要采用特定的编程方法。首先,i2c外设需要挂接在特定的中断向量上,然后创建中断服务程序在这个向量上运行。
具体设置i2c中断步骤如下:
1)初始化i2c控制器;
2)在设备树上定义i2c设备;
3)设置特定的中断向量;
4)创建中断服务程序实现i2c中断的功能,并将其挂载在中断向量上;
5)在主函数调用函数,等待外设请求触发i2c中断。