Maybe it is the wrong place to start this discussion, but ......
In lpc open, lpc_chip_11u6x project, there is an error in sct_11u6x.h, as far as I understand.
The OUTPUTDIRCTRL register specifies (for each output) the impact of the counting direction on the meaning of set and clear operations on the output.
For each output there are 2 bits to set that behaviour.
However, the routine specified in sct_11u6x.h to set that register is:
STATIC INLINE void Chip_SCT_SetoutputdirControl(LPC_SCT_T *pSCT, CHIP_SCT_EVENT_T value)
pSCT->OUTPUTDIRCTRL |= value;
There is no reference to the output that is to be controlled, nor any handling of the 2 bits per output.
I think the routine should look like:
STATIC INLINE void Chip_SCT_SetoutputdirControl(LPC_SCT_T *pSCT, CHIP_SCT_OUTPUT_REG_T n, uint8_t value)
pSCT->OUTPUTDIRCTRL |= uint32_t (value << (n << 1));