瀏覽代碼

[bsp][dm365] Support rt_hw_console_output function; Adjust the initialization sequence; Cleanup code.
[drv][mmcsd] Undo Changes.

weety 7 年之前
父節點
當前提交
5150e19d4b

+ 15 - 13
bsp/dm365/applications/application.c

@@ -39,14 +39,10 @@
 #include <drivers/mmcsd_core.h>
 #endif
 
-#ifdef RT_USING_SPI
-#include <spi-davinci.h>
-#endif
-
 int main(void)
 {
-	platform_init();
-	
+	int timeout = 0;
+
 /* Filesystem Initialization */
 #ifdef RT_USING_DFS
 	{
@@ -70,15 +66,17 @@ int main(void)
 	}
 #endif
 
-#ifdef RT_USING_SPI
+#ifdef RT_USING_SDIO
+	rt_mmcsd_core_init();
+	rt_mmcsd_blk_init();
+	rt_hw_mmcsd_init();
+	timeout = 0;
+	while ((rt_device_find("sd0") == RT_NULL) && (timeout++ < RT_TICK_PER_SECOND*2))
 	{
-		rt_hw_spi_init();
+		rt_thread_delay(1);
 	}
-#endif
 
-#ifdef RT_USING_SDIO
-	rt_hw_mmcsd_init();
-	if (MMCSD_HOST_PLUGED == mmcsd_wait_cd_changed(RT_TICK_PER_SECOND*2))
+	if (timeout < RT_TICK_PER_SECOND*2)
 	{
 		/* mount sd card fat partition 1 as root directory */
 		if (dfs_mount("sd0", "/", "elm", 0, 0) == 0)
@@ -87,7 +85,11 @@ int main(void)
 		}
 		else
 			rt_kprintf("File System initialzation failed!%d\n", rt_get_errno());
-	}	
+	}
+	else
+	{
+		rt_kprintf("No SD card found.\n");
+	}
 #endif
 	}
 #endif

+ 92 - 14
bsp/dm365/applications/board.c

@@ -75,6 +75,9 @@ void rt_timer_handler(int vector, void *param)
 	volatile timer_regs_t *regs =
 		(volatile timer_regs_t*)DAVINCI_TIMER1_BASE;//DAVINCI_TIMER0_BASE;
 
+	psc_change_state(DAVINCI_DM365_LPSC_TIMER0, 3);
+	psc_change_state(DAVINCI_DM365_LPSC_TIMER1, 3);
+
 	/*disable timer*/
 	regs->tcr &= ~(0x3UL << 6);
 
@@ -101,16 +104,101 @@ void rt_timer_handler(int vector, void *param)
 
  }
 
+#define LSR_DR		0x01		/* Data ready */
+#define LSR_THRE	0x20		/* Xmit holding register empty */
+#define BPS			115200	/* serial baudrate */
+
+typedef struct uartport
+{
+	volatile rt_uint32_t rbr;
+	volatile rt_uint32_t ier;
+	volatile rt_uint32_t fcr;
+	volatile rt_uint32_t lcr;
+	volatile rt_uint32_t mcr;
+	volatile rt_uint32_t lsr;
+	volatile rt_uint32_t msr;
+	volatile rt_uint32_t scr;
+	volatile rt_uint32_t dll;
+	volatile rt_uint32_t dlh;
+	
+	volatile rt_uint32_t res[2];
+	volatile rt_uint32_t pwremu_mgmt;
+	volatile rt_uint32_t mdr;
+}uartport;
+
+#define thr rbr
+#define iir fcr
+
+#define UART0	((struct uartport *)DAVINCI_UART0_BASE)
+
+static void davinci_uart_putc(char c)
+{
+    while (!(UART0->lsr & LSR_THRE));
+	UART0->thr = c;
+}
+
+/**
+ * This function is used to display a string on console, normally, it's
+ * invoked by rt_kprintf
+ *
+ * @param str the displayed string
+ */
+void rt_hw_console_output(const char* str)
+{
+	while (*str)
+	{
+		if (*str=='\n')
+		{
+			davinci_uart_putc('\r');
+		}
+
+		davinci_uart_putc(*str++);
+	}
+}
+
+static void rt_hw_console_init(void)
+{
+	rt_uint32_t divisor;
+	
+	divisor = (24000000 + (BPS * (16 / 2))) / (16 * BPS);
+	UART0->ier = 0;
+	UART0->lcr = 0x83; //8N1
+	UART0->dll = 0;
+	UART0->dlh = 0;
+	UART0->lcr = 0x03;
+	UART0->mcr = 0x03; //RTS,CTS
+	UART0->fcr = 0x07; //FIFO
+	UART0->lcr = 0x83;
+	UART0->dll = divisor & 0xff;
+	UART0->dlh = (divisor >> 8) & 0xff;
+	UART0->lcr = 0x03;
+	UART0->mdr = 0; //16x over-sampling
+	UART0->pwremu_mgmt = 0x6000;
+}
+
 /**
  * This function will init dm365 board
  */
 void rt_hw_board_init()
 {
-	psc_change_state(DAVINCI_DM365_LPSC_TIMER0, 3);
-	psc_change_state(DAVINCI_DM365_LPSC_TIMER1, 3);
+	/* initialize console */
+	rt_hw_console_init();
+
+	/* initialize mmu */
+	rt_hw_mmu_init(dm365_mem_desc, sizeof(dm365_mem_desc)/sizeof(dm365_mem_desc[0]));
+
+	/* initialize hardware interrupt */
+	rt_hw_interrupt_init();
+
 	/* initialize the system clock */
-	//rt_hw_clock_init();
-	davinci_clk_init();
+	rt_hw_clock_init();
+
+	/* initialize heap memory system */
+#ifdef __CC_ARM
+	rt_system_heap_init((void*)&Image$$ER_ZI$$ZI$$Limit, (void*)0x88000000);
+#else
+	rt_system_heap_init((void*)&__bss_end, (void*)0x88000000);
+#endif
 
 	/* initialize early device */
 #ifdef RT_USING_COMPONENTS_INIT
@@ -120,16 +208,6 @@ void rt_hw_board_init()
 	rt_console_set_device(RT_CONSOLE_DEVICE_NAME);
 #endif
 
-	/* initialize mmu */
-	rt_hw_mmu_init(dm365_mem_desc, sizeof(dm365_mem_desc)/sizeof(dm365_mem_desc[0]));
-
-		/* initialize heap memory system */
-#ifdef __CC_ARM
-		rt_system_heap_init((void*)&Image$$ER_ZI$$ZI$$Limit, (void*)0x88000000);
-#else
-		rt_system_heap_init((void*)&__bss_end, (void*)0x88000000);
-#endif
-
 	/* initialize timer0 */
 	rt_hw_timer_init();
 

+ 1 - 0
bsp/dm365/drivers/spi-davinci.c

@@ -963,4 +963,5 @@ int rt_hw_spi_init(void)
     return 0;
 }
 
+INIT_DEVICE_EXPORT(rt_hw_spi_init);
 

+ 2 - 1
bsp/dm365/platform/dm365.c

@@ -316,11 +316,12 @@ int davinci_clk_init(void)
 	return davinci_register_clks(clk_list, num_clks);
 }
 
-void platform_init(void)
+int platform_init(void)
 {
 	edma_init(dm365_edma_info);
 }
 
+INIT_BOARD_EXPORT(platform_init);
 
 /* Reset board using the watchdog timer */
 void reset_system(void)

+ 2 - 1
bsp/dm365/platform/system_clock.c

@@ -26,12 +26,13 @@
 #include <rtthread.h>
 #include "dm36x.h"
 
+extern int davinci_clk_init(void);
 
 /**
  * @brief System Clock Configuration
  */
 void rt_hw_clock_init(void)
 {
-
+	davinci_clk_init();
 }
 

+ 2 - 2
components/drivers/include/drivers/mmcsd_core.h

@@ -247,9 +247,9 @@ void mmcsd_change(struct rt_mmcsd_host *host);
 void mmcsd_detect(void *param);
 struct rt_mmcsd_host *mmcsd_alloc_host(void);
 void mmcsd_free_host(struct rt_mmcsd_host *host);
-int rt_mmcsd_core_init(void);
+void rt_mmcsd_core_init(void);
 
-int rt_mmcsd_blk_init(void);
+void rt_mmcsd_blk_init(void);
 rt_int32_t rt_mmcsd_blk_probe(struct rt_mmcsd_card *card);
 void rt_mmcsd_blk_remove(struct rt_mmcsd_card *card);
 

+ 1 - 4
components/drivers/sdio/block_dev.c

@@ -479,11 +479,8 @@ void rt_mmcsd_blk_remove(struct rt_mmcsd_card *card)
  * @deprecated since 2.1.0, this function does not need to be invoked
  * in the system initialization.
  */
-int rt_mmcsd_blk_init(void)
+void rt_mmcsd_blk_init(void)
 {
 	/* nothing */
-	return 0;
 }
 
-INIT_PREV_EXPORT(rt_mmcsd_blk_init);
-

+ 1 - 6
components/drivers/sdio/mmcsd_core.c

@@ -655,7 +655,6 @@ void mmcsd_detect(void *param)
                     if (init_sd(host, ocr))
                         mmcsd_power_off(host);
                     mmcsd_host_unlock(host);
-					rt_mb_send(&mmcsd_hotpluge_mb, (rt_uint32_t)host);
                     continue;
                 }
                 
@@ -727,7 +726,7 @@ void mmcsd_free_host(struct rt_mmcsd_host *host)
     rt_free(host);
 }
 
-int rt_mmcsd_core_init(void)
+void rt_mmcsd_core_init(void)
 {
     rt_err_t ret;
 
@@ -750,9 +749,5 @@ int rt_mmcsd_core_init(void)
     }
 
     rt_sdio_init();
-
-	return 0;
 }
 
-INIT_PREV_EXPORT(rt_mmcsd_core_init);
-