TIMER_FRC1 - это hard таймер 0
TIMER_FRC2 - это hard таймер 1
Спасибо за разъяснение!
1. странно что вами указанная нумерация не совпадает с том что вижу в core_esp8266_timer.c . Тут видно что FRC1 это не timer0 а timer1.На пример здесь
Код:
void timer1_attachInterrupt(timercallback userFunc) {
timer1_user_cb = userFunc;
ETS_FRC1_INTR_ENABLE();}
и тут
Код:
//timer1's counter value(count from initial_value to 0)
#define FRC1_COUNT_ADDRESS 0x04
Если смотреть как они все 3 считают (пока я трёх смог увидеть используя timerx_read() или TxV), то видно что timer0 32bit, timer1 23bit, timer2 32bit
И именно timer1 это FRC1 так как единственный имеет 23бит, A timer0 это 32бит. Тут какая то путаница с нумерацией?
И кто такой в таком случае timer0??
2. timer1 я частично победил - записываю считываю без проблем. timer0 тоже, только вместе они не работают.
Код:
timer1_isr_init();
timer1_enable(2,0,1);
timer1_write( 10000);
timer1_attachInterrupt(userFunct);
но если теми же командами пробую управлять таймер2, то получаю какие то странные результаты. Записываю одну величину а получаю совсем другое.
например вместо 500 000 000 выдаёт что записанно 5 072 128. А прерывание вообще не работает
!! ОООчень большая просьба помочь с этим таймером2. Может быть какой то кусочек кода хотя бы взглянуть. Типа как я таймер1 запускаю.
Sorry, но я только начинаю вникать в программирование.
Использую Ардуино Иде и , timer2_enable(0,0,1); timer2_write(val); timer2_read(); timer2_attachInterrupt(test); T2L, T2V, T2C, T2I, T2A...
3. И всё же где ошибка в скетче из-за чего перестаёт работать таймер1 при запуске прерывания таймер0?
Код:
timer1_isr_init();
timer1_enable(2,0,1);
timer1_write( 10000);
timer1_attachInterrupt(two);
timer0_isr_init();
timer0_attachInterrupt(one);
В чипе есть ещё 2 таймера. Один 32-х битный, второй 64-х битный. Оба работают с шагом в us и имеют регистры alarm для вызова прерывания.
А можно подробнее хотя бы их названия/регистры, как их вызвать и как записать из Ардуино Иде прерывание в эти таймеры