Тип GPIO
По линиям ввода-вывода общего назначения (GPIO) устройства Tibbo делятся на две категории:
- Устройства с однонаправленными линиями GPIO: каждую линию GPIO в них нужно явно настраивать как вход или выход
- Устройства с двунаправленными линиями GPIO: линии GPIO в них работают одновременно как выходы и как входы
Чтобы узнать, какого типа линии GPIO в вашем устройстве, обратитесь к документации по его платформе (например, для EM1000 она здесь).
Устройства с однонаправленными линиями GPIO
В таких устройствах выходной драйвер каждой линии ввода-вывода (им управляет объект io.) нужно явно включать или выключать. При загрузке устройства все выводы настроены как входы. Если вы хотите использовать какой-либо вывод как выход, сначала включите его выходной драйвер (установите io.enabled = 1 - YES):
...
io.num= PL_IO_NUM_5 'select the line
io.enabled= YES 'enable output driver (you need to do this only once)
io.state= LOW 'set the state
...
Следите, чтобы внешние цепи не пытались управлять линиями ввода-вывода, у которых включены выходные драйверы. В противном случае устройство и/или ваши цепи могут получить серьёзные повреждения!
Если драйвер включён (io.enabled = 1 - YES) и вы читаете состояние вывода, вы получаете состояние собственного выходного драйвера. Чтобы превратить линию во вход, выключите выходной драйвер (io.enabled = 0 - NO). Тогда можно будет считывать состояние внешнего сигнала, поданного на линию ввода-вывода:
...
io.num= PL_IO_NUM_4 'just to select some line as an example
io.enabled= NO 'now the output driver is off
x=io.state 'read line state into x
...
Есть и свойство io.portenabled. Оно позволяет настроить сразу все линии GPIO в 8-битном порту ввода-вывода.
Линии последовательного порта тоже требуют правильной настройки. Подробнее см. Настройка линий последовательного порта.
Устройства с двунаправленными линиями GPIO
Линии ввода-вывода этих устройств не нужно явно настраивать как входы или выходы. Все линии «квазидвунаправленные» и их можно рассматривать как выходы с открытым коллектором и слабыми подтягивающими резисторами к питанию. Чтобы «измерить» внешний сигнал, поданный на линию ввода-вывода, сначала установите на этой линии HIGH, затем прочитайте её состояние. Внешне подтягивать линию к LOW можно, даже если внутри на ней выставлен HIGH. Свойства io.enabled и io.portenabled существуют, но только для совместимости с другими платформами. Запись в эти свойства ни на что не влияет, а чтение всегда возвращает 1 - YES и 255 (все линии включены) соответственно.
Чтобы считать состояние внешнего сигнала на линии ввода-вывода, сначала установите на ней HIGH:
...
io.num= PL_IO_NUM 'just to select some line as an example
io.state= HIGH 'now we can read the line
x=io.state 'read line state into x
...
Линии последовательного порта в устройствах с двунаправленными GPIO настраивать не нужно.