summaryrefslogtreecommitdiffstats
path: root/c
diff options
context:
space:
mode:
authorJay Monkman <jtm@smoothsmoothie.com>2006-06-03 03:20:15 +0000
committerJay Monkman <jtm@smoothsmoothie.com>2006-06-03 03:20:15 +0000
commit47dbc76bfabfe80aeb922d338f6458e93bb3ad33 (patch)
tree20bafbf2ed16abad3a0f61115df3dc896f251b78 /c
parent2006-06-02 Jay Monkman <jtm@lopingdog.com> (diff)
downloadrtems-47dbc76bfabfe80aeb922d338f6458e93bb3ad33.tar.bz2
2006-06-02 Jay Monkman <jtm@lopingdog.com>
* startup/bspstart.c: Fixed PLL calculations.
Diffstat (limited to 'c')
-rw-r--r--c/src/lib/libbsp/arm/csb336/ChangeLog8
-rw-r--r--c/src/lib/libbsp/arm/csb336/startup/bspstart.c39
2 files changed, 35 insertions, 12 deletions
diff --git a/c/src/lib/libbsp/arm/csb336/ChangeLog b/c/src/lib/libbsp/arm/csb336/ChangeLog
index b7e7269adb..a4865d2cfd 100644
--- a/c/src/lib/libbsp/arm/csb336/ChangeLog
+++ b/c/src/lib/libbsp/arm/csb336/ChangeLog
@@ -1,4 +1,10 @@
-2006-06-02 Jay Monkman
+2006-06-02 Jay Monkman <jtm@lopingdog.com>
+
+ * Makefile.am, console/uart.c, startup/exit.c: Changed UART
+ driver to be interrupt driven, added support for both UARTs.
+
+
+2006-06-02 Jay Monkman <jtm@lopingdog.com>
* network/network.c: Changed interrupt handling
to use shared rtems_irq_connect_data struct.
diff --git a/c/src/lib/libbsp/arm/csb336/startup/bspstart.c b/c/src/lib/libbsp/arm/csb336/startup/bspstart.c
index 164ad94650..ae160f575a 100644
--- a/c/src/lib/libbsp/arm/csb336/startup/bspstart.c
+++ b/c/src/lib/libbsp/arm/csb336/startup/bspstart.c
@@ -86,8 +86,24 @@ void bsp_pretasking_hook(void)
/* Since RTEMS is not configured, no RTEMS functions can be called. */
/* */
/**************************************************************************/
+void mmu_set_cpu_async_mode(void);
void bsp_start_default( void )
{
+ int i;
+
+ /* Set the MCU prescaler to divide by 1 */
+ MC9328MXL_PLL_CSCR &= ~MC9328MXL_PLL_CSCR_PRESC;
+
+ /* Enable the MCU PLL */
+ MC9328MXL_PLL_CSCR |= MC9328MXL_PLL_CSCR_MPEN;
+
+ /* Delay to allow time for PLL to get going */
+ for (i = 0; i < 100; i++) {
+ asm volatile ("nop\n");
+ }
+
+ /* Set the CPU to asynchrous clock mode, so it uses its fastest clock */
+ mmu_set_cpu_async_mode();
/* disable interrupts */
MC9328MXL_AITC_INTENABLEL = 0;
@@ -153,12 +169,12 @@ void bsp_start_default( void )
/* Calcuate the frequency for perclk1 */
int get_perclk1_freq(void)
{
- int fin;
- int fpll;
- int pd;
- int mfd;
- int mfi;
- int mfn;
+ unsigned int fin;
+ unsigned int fpll;
+ unsigned int pd;
+ unsigned int mfd;
+ unsigned int mfi;
+ unsigned int mfn;
uint32_t reg;
int perclk1;
@@ -187,13 +203,14 @@ int get_perclk1_freq(void)
printk("mfd = %d\n", mfd);
printk("mfi = %d\n", mfi);
printk("mfn = %d\n", mfn);
- printk("(fin * mfi) / (pd + 1) = %d\n", (fin * mfi) / (pd + 1));
- printk("(fin * mfn) / ((pd + 1) * (mfd + 1)) = %d\n",
- (fin * mfn) / ((pd + 1) * (mfd + 1)));
+ printk("rounded (fin * mfi) / (pd + 1) = %d\n", (fin * mfi) / (pd + 1));
+ printk("rounded (fin * mfn) / ((pd + 1) * (mfd + 1)) = %d\n",
+ ((long long)fin * mfn) / ((pd + 1) * (mfd + 1)));
#endif
- fpll = 2 * ( ((fin * mfi) / (pd + 1)) +
- ((fin * mfn) / ((pd + 1) * (mfd + 1))) );
+ fpll = 2 * ( ((fin * mfi + (pd + 1) / 2) / (pd + 1)) +
+ (((long long)fin * mfn + ((pd + 1) * (mfd + 1)) / 2) /
+ ((pd + 1) * (mfd + 1))) );
/* calculate the output of the PERCLK1 divider */
reg = MC9328MXL_PLL_PCDR;