arduino-timer-api
arduino-timer-api copied to clipboard
Реализация вызовов timer_init_ISR_xxHz для PIC32MZ 200МГц
Дополнить реализацию вызовов timer_init_ISR_xxHz для чипов PIC32MZ 200МГц.
Сейчас она прячется за пустыми дефайнами в общем для PIC32 файле: https://github.com/sadr0b0t/arduino-timer-api/blob/master/timer-api/timer_setup_pic32.c
например:
/**
* freq: 50Hz = 50 ops/sec
* period: 1sec/50 = 20ms
*/
void timer_init_ISR_50Hz(int timer) {
#if defined(__PIC32MX1XX__) || defined(__PIC32MX2XX__)
// 40MHz
// TODO
// 40000000 / 32 / 25000 = 50 => 20ms
//uint8_t tckps = 0b101; // set prescalar 1:32
//uint16_t prx = 0x61A8; // 25000
#elif defined(__PIC32MZXX__)
// 200MHz
// TODO
// 200000000 / PB3(usually == 2) / 64 / 31250 = 50 => 20ms
//uint8_t tckps = 0b110; // set prescalar 1:64
//uint16_t prx = F_CPU / (PB3DIV + 1) / 64 / 50;
#else
// 80MHz
// to set timer clock period to 20ms (50 operations per second == 50Hz) on 80MHz CPU
// use prescaler 1:64 (TIMER_PRESCALER_1_64) and adjustment=25000:
// 80000000/64/50 = 1250000/50 = 25000
timer_init_ISR(timer, TIMER_PRESCALER_1_64, 25000-1);
#endif
}
Вроде ничего сложного, но там, судя по коду Servo.cpp, в игру вступает еще один делитель PB3, нужно разобраться, как он работает и всегда ли там лежит обещанная двойка.