sam3x: Add convenince functions for setting clocks and usart baudrate.

This commit is contained in:
Gareth McMullin
2013-05-03 14:08:18 -07:00
committed by Piotr Esden-Tempski
parent 8265953b35
commit e2eadfddb8
4 changed files with 30 additions and 0 deletions

View File

@@ -18,6 +18,10 @@
*/
#include <libopencm3/sam3x/pmc.h>
#include <libopencm3/sam3x/eefc.h>
/** Default peripheral clock frequency after reset. */
u32 pmc_mck_frequency = 4000000;
void pmc_xtal_enable(bool en, u8 startup_time)
{
@@ -60,3 +64,18 @@ void pmc_mck_set_source(enum mck_src src)
while (!(PMC_SR & PMC_SR_MCKRDY));
}
void pmc_clock_setup_in_xtal_12mhz_out_84mhz(void)
{
eefc_set_latency(4);
/* 12MHz external xtal, maximum possible startup time */
pmc_xtal_enable(true, 0xff);
/* Select as main oscillator */
CKGR_MOR |= CKGR_MOR_KEY | CKGR_MOR_MOSCSEL;
/* Multiply by 7 for 84MHz */
pmc_plla_config(7, 1);
pmc_mck_set_source(MCK_SRC_PLLA);
pmc_mck_frequency = 84000000;
}

View File

@@ -18,6 +18,12 @@
*/
#include <libopencm3/sam3x/usart.h>
#include <libopencm3/sam3x/pmc.h>
void usart_set_baudrate(u32 usart, u32 baud)
{
USART_BRGR(usart) = pmc_mck_frequency / (16 * baud);
}
void usart_set_databits(u32 usart, int bits)
{