diff --git a/wiringPi/odroidn2.c b/wiringPi/odroidn2.c index dfd4a79..07ea8ad 100755 --- a/wiringPi/odroidn2.c +++ b/wiringPi/odroidn2.c @@ -632,6 +632,10 @@ static int _digitalWrite (int pin, int value) return 0; } +/*----------------------------------------------------------------------------*/ +// PWM signal ___-----------___________---------------_______-----_ +// <--value--> <----value----> +// <-------range--------><-------range--------> /*----------------------------------------------------------------------------*/ static int _pwmWrite (int pin, int value) { @@ -733,6 +737,11 @@ static int _digitalWriteByte (const unsigned int value) return 0; } +/*----------------------------------------------------------------------------*/ +// PWM signal ___-----------___________---------------_______-----_ +// <--value--> <----value----> +// <-------range--------><-------range--------> +// PWM frequency == (PWM clock) / range /*----------------------------------------------------------------------------*/ static void _pwmSetRange (unsigned int range) { @@ -743,10 +752,20 @@ static void _pwmSetRange (unsigned int range) } } +/*----------------------------------------------------------------------------*/ +// Internal clock == 24MHz +// PWM clock == (Internal clock) / divisor +// PWM frequency == (PWM clock) / range /*----------------------------------------------------------------------------*/ static void _pwmSetClock (int divisor) { - divisor = (divisor - 1) & 0x7F; + if((divisor < 1) || (divisor > 128)) + { + msg(MSG_ERR, + "Set the clock prescaler (divisor) to 1 or more and 128 or less.: %s\n", + strerror (errno)); + } + divisor = (divisor - 1); for(uint16_t i = 1; i < 3; ++i) { *( pwm[i] + N2_PWM_MISC_REG_01_OFFSET ) = \