What makes this library work exclusively with Atmega328P boards?
That library relies mostly on Timer&nbsp;1 and, as you already noticed,
the Timer&nbsp;1 of the ATmega32U4 is very similar, if not identical, to
the one of the 328P. At least similar enough to expect the library to
work identically.

I took a look at both datasheets and the only difference I can see that
can possibly affect the library is the pinout. The pins relevant to the
library are:

       328P  32U4
ICP1 =  PB0   PD4
OC1A =  PB1   PB5


The pinout of the 328P is hardcoded into the library. CPPM.h contains
these lines:



#define CPPM_ICP1 8 // Input Capture Pin of Arduino UNO is pin 8 - ICP1 (Atmega328 PB0)
#define CPPM_OC1A 9 // Output Compare Pin of Arduino UNO is pin 9 - OC1A (Atmega328 PB1)


CPPM.cpp has two instances (here and here)
of this:

if ((PINB &amp; _BV(PINB1))) // rising edge ?


If you change the code in these three places to match the pinout of the
32U4, I would expect the library to work for you.

You could also change that conditionally as

#ifdef __AVR_ATmega32U4__
    ...
#else // assume ATmega328P
    ...
#endif


in order to make the library compatible with both MCUs, and then submit
a pull request to the original author.