| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116 |
- '''
- Pin IRQ test for the CC3200 based boards.
- '''
- from machine import Pin
- import machine
- import os
- import time
- mch = os.uname().machine
- if 'LaunchPad' in mch:
- pins = ['GP16', 'GP13']
- elif 'WiPy' in mch:
- pins = ['GP16', 'GP13']
- else:
- raise Exception('Board not supported!')
- pin0 = Pin(pins[0], mode=Pin.OUT, value=1)
- pin1 = Pin(pins[1], mode=Pin.IN, pull=Pin.PULL_UP)
- def pin_handler (pin_o):
- global pin_irq_count_trigger
- global pin_irq_count_total
- global _trigger
- if _trigger & pin1_irq.flags():
- pin_irq_count_trigger += 1
- pin_irq_count_total += 1
- pin_irq_count_trigger = 0
- pin_irq_count_total = 0
- _trigger = Pin.IRQ_FALLING
- pin1_irq = pin1.irq(trigger=_trigger, handler=pin_handler)
- for i in range (0, 10):
- pin0.toggle()
- time.sleep_ms(5)
- print(pin_irq_count_trigger == 5)
- print(pin_irq_count_total == 5)
- pin_irq_count_trigger = 0
- pin_irq_count_total = 0
- _trigger = Pin.IRQ_RISING
- pin1_irq = pin1.irq(trigger=_trigger, handler=pin_handler)
- for i in range (0, 200):
- pin0.toggle()
- time.sleep_ms(5)
- print(pin_irq_count_trigger == 100)
- print(pin_irq_count_total == 100)
- pin1_irq.disable()
- pin0(1)
- pin_irq_count_trigger = 0
- pin_irq_count_total = 0
- _trigger = Pin.IRQ_FALLING
- pin1_irq.init(trigger=_trigger, handler=pin_handler)
- pin0(0)
- time.sleep_us(50)
- print(pin_irq_count_trigger == 1)
- print(pin_irq_count_total == 1)
- pin0(1)
- time.sleep_us(50)
- print(pin_irq_count_trigger == 1)
- print(pin_irq_count_total == 1)
- # check the call method
- pin1_irq()
- print(pin_irq_count_trigger == 1) # no flags since the irq was manually triggered
- print(pin_irq_count_total == 2)
- pin1_irq.disable()
- pin_irq_count_trigger = 0
- pin_irq_count_total = 0
- for i in range (0, 10):
- pin0.toggle()
- time.sleep_ms(5)
- print(pin_irq_count_trigger == 0)
- print(pin_irq_count_total == 0)
- # test waking up from suspended mode on low level
- pin0(0)
- t0 = time.ticks_ms()
- pin1_irq.init(trigger=Pin.IRQ_LOW_LEVEL, wake=machine.SLEEP)
- machine.sleep()
- print(time.ticks_ms() - t0 < 10)
- print('Awake')
- # test waking up from suspended mode on high level
- pin0(1)
- t0 = time.ticks_ms()
- pin1_irq.init(trigger=Pin.IRQ_HIGH_LEVEL, wake=machine.SLEEP)
- machine.sleep()
- print(time.ticks_ms() - t0 < 10)
- print('Awake')
- # check for memory leaks
- for i in range(0, 1000):
- pin0_irq = pin0.irq(trigger=_trigger, handler=pin_handler)
- pin1_irq = pin1.irq(trigger=_trigger, handler=pin_handler)
- # next ones must raise
- try:
- pin1_irq.init(trigger=123456, handler=pin_handler)
- except:
- print('Exception')
- try:
- pin1_irq.init(trigger=Pin.IRQ_LOW_LEVEL, wake=1789456)
- except:
- print('Exception')
- try:
- pin0_irq = pin0.irq(trigger=Pin.IRQ_RISING, wake=machine.SLEEP) # GP16 can't wake up from DEEPSLEEP
- except:
- print('Exception')
- pin0_irq.disable()
- pin1_irq.disable()
|