Передо мной стоит задача разобраться в архитектуре xtensa (в частности esp8266)
Самая насущная проблема - написать прерывания по таймеру без SDK
В общем-то, до чего я смог додуматься:
1. Пишу в регистр ccompare0 значение 0 (т.е. по идее каждый раз, когда обнуляется ccount, должно срабатывать прерывание)
2. Ставлю interrupt level на 0
3. Записываю в регистр intenable = 1 << irq_number
4. Пользуюсь (пока) SDKшной функцией _xtos_set_interrupt_handler(irq_number, func), чтобы функция func обрабатывала прерывания
Естественно, ничего не работает)
Все ломается еще на стадии 3
При проверке регистра intenable оказывается, что он постоянно содержит нули
Регистр interrupt постоянно возвращает значение 0x24 (если irq_number = 8)
Если никаких манипуляций не производить, он возвращает 0x64
Понимаю, что пока делаю какой-то бред
Поэтому с нетерпением жду, когда кто-нибудь объяснит хотя бы control flow прерываний в xtens'e )
Заранее благодарен
P.S. Еще в документации к архитектуре xtensa очень часто встречаются таблички, в которых рассказано про всякие параметры. Дак вот, как ими можно пользоваться (например, есть параметр INTTYPE. Как ему задать значение Timer?) Как вообще различать разные типы прерываний?
Спасибо!)
Самая насущная проблема - написать прерывания по таймеру без SDK
В общем-то, до чего я смог додуматься:
1. Пишу в регистр ccompare0 значение 0 (т.е. по идее каждый раз, когда обнуляется ccount, должно срабатывать прерывание)
2. Ставлю interrupt level на 0
3. Записываю в регистр intenable = 1 << irq_number
4. Пользуюсь (пока) SDKшной функцией _xtos_set_interrupt_handler(irq_number, func), чтобы функция func обрабатывала прерывания
Естественно, ничего не работает)
Все ломается еще на стадии 3
При проверке регистра intenable оказывается, что он постоянно содержит нули
Регистр interrupt постоянно возвращает значение 0x24 (если irq_number = 8)
Если никаких манипуляций не производить, он возвращает 0x64
Понимаю, что пока делаю какой-то бред
Поэтому с нетерпением жду, когда кто-нибудь объяснит хотя бы control flow прерываний в xtens'e )
Заранее благодарен
P.S. Еще в документации к архитектуре xtensa очень часто встречаются таблички, в которых рассказано про всякие параметры. Дак вот, как ими можно пользоваться (например, есть параметр INTTYPE. Как ему задать значение Timer?) Как вообще различать разные типы прерываний?
Спасибо!)