Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Реализация вызовов timer_init_ISR_xxHz для PIC32MZ 200МГц #3

Open
sadr0b0t opened this issue Aug 24, 2017 · 0 comments

Comments

@sadr0b0t
Copy link
Owner

Дополнить реализацию вызовов 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, нужно разобраться, как он работает и всегда ли там лежит обещанная двойка.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

1 participant