⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.c

📁 uboot底层驱动
💻 C
字号:
/*
 *	main.c    -     uart  
 *	
 *	Author: 	<zgxgoo@gmail.com>
 *	Date:		2007-10-31
 */
#include "my_printf.h"
#include "uart.h"
#include "my_string.h"
#include "uue.h"
#include "erase_copy.h"
#include "test.h"
#include "set_channel.h"



#define READ(addr)  (*((volatile  int *)(addr)))
#define WRITE(addr, data)  (*((volatile int *)(addr)) = (data))

U32 sysclk      = 75000000;  // 20MHz, 30MHz, 40MHz, 50MHz, 60MHz
U32 baudrate    = 9600;     // 57600, 56000, 38400, 19200, 9600
U32 databit     = 8;         // 6, 7, 8 
U32 trigerlevel = 0;

extern int addrdn;
int addr[2];
int count;
char chh;
char cmd[100];
void (*current_pc)();
int i = 0;


extern void irq_handler(void);


int c_entry(int RoBase, int ZiLimit)
{	
	int a, b=2;
	int c;
	*(volatile int *)(0x30000000) = b;
	a = *(volatile int*)(0x30000000);
	addr[0] = 0x30008000;
	addr[1] = 0x20003000;
	current_pc =(void (*)(void))(0x20003000);
	// uart must be initialized before printf using it to output
	init_uart0(sysclk, baudrate, databit,trigerlevel);
	install_irq_handler(irq_handler);
	
	my_printf("hello\n\r");


	/*if (mesg_begin(RoBase, ZiLimit))
	{
		my_printf("autoboot\n\r");
		((void(*)(void))(current_pc))();
		}*/
	//else 
	//{
	 my_printf("input help for help\n\r");
	 
	c = READ(0x10000018);
	my_printf("the irq=%x\n\r", c);
	 
	 
	 

	 while(1) {
			i = 0;
		    my_printf("uboot$:");
		   // delay();
			do {
			 uart_getchar(UART0_BASE, &chh );
			 cmd[i++] = chh;
//			 delay();
		   uart_putchar( UART0_BASE, chh );
		//   delay();
		  } while (chh != '\r');
	      uart_putchar( UART0_BASE, '\n' );
		  cmd[i-1] = '\0';
		   
		  switch( cmd_cmp(cmd)) {
			  case 0:
		       help_pp();
		       break;
			  case 1:
			  	uue_receive( (unsigned)addr[0] );
		  	    current_pc =(void (*)(void))(addr[0]);
		  	    break	;
			  case 2:
			    my_printf("go at address 0x%x\n\r", addr[0]);
			    ((void(*)(void))(current_pc))();
			    break;
			  case 3:
			    my_printf("erase at address 0x%x\n\r", addr[0]);
			    flash_erase(addr[0]);
			    break;
			   case 4:
			    my_printf("copy to flash begin\n\r");
			    my_printf("sdram_adr%x,  flash_addr%x\r\n", addr[0], addr[1]);
			    copy(addr[0], addr[1]);
			    break;
			   case 5:
			    sdram_test(0x30000000, 0x30800000);
			    install_irq_handler(irq_handler);
			    break;
			   case 6:
			   	cpu_test();
			   	break;
			   case 7:
			   	flash_test(0x20000000, 0x20200000);
			   	break;
			   case 8:
			   	rtc_test();
			   	break;
			   case 9:
			   	beep_test();
			   	break;
			   case 10:
			   	led_test();
			   	break;
			   case 11:
			   	key_test();
			   	break;
			   case 12:
			   	in_test();
			   	break;
			   case 13:
			   	out_test();
			   	break;
			   case 14:
			   	read_AD();
			   	break;
			   case 15:
			     set_channel();
			    break;
			  default:
			  	my_printf("bad cmd");
			  	break;
			}	
		  	   uart_putchar( UART0_BASE, '\n');
		       uart_putchar( UART0_BASE, '\r');
			}
	//}
	return 0;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -