unsigned lpc176x_cclk( void ) { const unsigned cclksel = LPC176X_SCB.cclksel; unsigned cclk_in = 0u; unsigned cclk = 0u; if ( ( cclksel & LPC176X_SCB_CCLKSEL_CCLKSEL ) != 0u ) { cclk_in = lpc176x_pllclk(); } else { cclk_in = lpc176x_sysclk(); } cclk = cclk_in / LPC176X_SCB_CCLKSEL_CCLKDIV_GET( cclksel ); return cclk; }
/** * @brief Checks the usb module. * * @return RTEMS_SUCCESFUL if the usb module is correct. */ static rtems_status_code check_usb_module( void ) { rtems_status_code status_code = RTEMS_INCORRECT_STATE; const uint32_t pllclk = lpc176x_pllclk(); const uint32_t usbclk = LPC176X_USB_CLOCK; if ( pllclk % usbclk == 0u ) { const uint32_t usbdiv = pllclk / usbclk; LPC176X_SCB.usbclksel = LPC176X_SCB_USBCLKSEL_USBDIV( usbdiv ) | LPC176X_SCB_USBCLKSEL_USBSEL( 1 ); status_code = RTEMS_SUCCESSFUL; } /* else implies that the module has an incorrect pllclk or usbclk value. Also, there is nothing to do. */ return status_code; }