2. PIN

本章节主要介绍K2000的IO口使用方法。

2.1. 普通IO口配置方法

  • 控制IO口时需要先对IO口 参数配置的 类对象 class str_user_io(object) 进行配置,该对象位于 sharp_user 模块中。

    • class str_user_io(object)

      • pin : IO口 pin引脚号

      • mode : IO口 pin模式(输入输出模式)

      • 使用方法:

      IT_ON_OFF = Pin_Device.LCD__IO_5 #外部IO口宏
      IT_MTP = Pin_Device.LCD__IO_6    #外部IO口宏
      
      class User_Fun():
          My_IT_ON_OFF_Pin = Pin_Device(IT_ON_OFF,Pin_Device.IN)  #第一个参数是定义好的外部IO口宏,第二个参数是IO口输入输出模式
          My_IT_MTP_Pin = Pin_Device(IT_MTP,Pin_Device.IN)        #Pin_Device.IN 和 Pin_Device.OUT 就是配置输入或者输出模式
          #My_IT_MTP_Pin = Pin_Device(IT_MTP,Pin_Device.OUT)
      

2.2. IO口外部中断

什么是中断呢?

在程序运行过程中,系统出现了一个必须由CPU立即处理的情况,此时,CPU暂时中止程序的执行转而处理这个新的情况的过程就叫做中断。 在出现需要时,CPU必须暂停现在的事情,处理别的事情,处理完了再回去执行暂停的事情。

当输入引脚发生电平变化时触发硬件中断,触发器会执行中断处理函数。可以定义回调函数来做些中断响应的工作。

注意

当前IO外部中断只支持上升沿和下降沿的电平变化来触发中断。

2.3. IO口外部中断配置方法

  • ON_OFF_IRQHandler和MTP_IRQHandler。这些函数会在中断触发时被调用,并打印相关信息。同时,如果当前LCD显示开启且触发的引脚与IT_ON_OFF或IT_MTP相对应,则会进行一些操作,并打印相关信息。

  • 在main函数中,通过调用SHARP_user实例的My_IT_ON_OFF_Pin.IO_irq方法和My_IT_MTP_Pin.IO_irq方法,设置了两个引脚的中断触发条件(上升沿)和相应的中断处理函数(ON_OFF_IRQHandler和MTP_IRQHandler)。

  • 最后,使用一个无限循环来保持程序的运行,期间可能会捕捉到ITException异常并进行处理。

  • IO口外部中断配置需要先对 中断IO口 参数配置的 类对象 class user_IT_io(object) 进行配置,该对象位于 sharp_user 模块中。

注意

回调函数,必须包含两个参数,否则无法使用。

def ON_OFF_IRQHandler(index,pin):      #中断回调
print('ON_OFF index = %x,pin = %x'%(index,pin))
#===============点亮的情况下才执行中断=======================================================
if pin == Pin_Device.LCD__IO_5 and SHARP_user.display_on == 1:
    user_mode.Delay_ms(10)
    print('IO_55 ONOFF')

def MTP_IRQHandler(index,pin):      #中断回调
    print('MTP index = %x,pin = %x'%(index,pin))
    #===============点亮的情况下才执行中断=======================================================
    if pin ==Pin_Device.LCD__IO_6 and SHARP_user.display_on == 1:
        user_mode.Delay_ms(10)
        print('IO_66 MTP')

SHARP_user=User_Fun()
if __name__ == '__main__':
    SHARP_user.My_IT_ON_OFF_Pin.IO_irq(Pin_Device.EDGE_UP,ON_OFF_IRQHandler)
    SHARP_user.My_IT_MTP_Pin.IO_irq(Pin_Device.EDGE_UP,MTP_IRQHandler)
    while True:
        try:
            pass
        except ITException as e:    #IO口中断异常处理  不可修改
                print(e)

2.4. 完整示例代码

from sharp_user import Pin_Device,user_mode

IT_ON_OFF = Pin_Device.LCD__IO_5 #外部IO口宏
IT_MTP = Pin_Device.LCD__IO_6    #外部IO口宏

def ON_OFF_IRQHandler(index,pin):      #中断回调
    print('ON_OFF index = %x,pin = %x'%(index,pin))
    #===============点亮的情况下才执行中断=======================================================
    if pin == Pin_Device.LCD__IO_5 and SHARP_user.display_on == 1:
        user_mode.Delay_ms(10)
        print('IO_55 ONOFF')

def MTP_IRQHandler(index,pin):      #中断回调
    print('MTP index = %x,pin = %x'%(index,pin))
    #===============点亮的情况下才执行中断=======================================================
    if pin ==Pin_Device.LCD__IO_6 and SHARP_user.display_on == 1:
        user_mode.Delay_ms(10)
        print('IO_66 MTP')


class User_Fun():
    My_IT_ON_OFF_Pin = Pin_Device(IT_ON_OFF,Pin_Device.IN)  #第一个参数是定义好的外部IO口宏,第二个参数是IO口输入输出模式
    My_IT_MTP_Pin = Pin_Device(IT_MTP,Pin_Device.IN)        #Pin_Device.IN 和 Pin_Device.OUT 就是配置输入或者输出模式
    #My_IT_MTP_Pin = Pin_Device(IT_MTP,Pin_Device.OUT)


SHARP_user=User_Fun() #User_Fun实例化
if __name__ == '__main__':
    SHARP_user.My_IT_ON_OFF_Pin.IO_irq(Pin_Device.EDGE_UP,ON_OFF_IRQHandler)
    SHARP_user.My_IT_MTP_Pin.IO_irq(Pin_Device.EDGE_UP,MTP_IRQHandler)
    while True:
        try:
            pass
        except ITException as e:    #IO口中断异常处理  不可修改
                print(e)