发表于:2011/11/23 10:33:49
#0楼
第一部分:
飞凌6410开发板 裸机调试程序开发教程手册(PDF版):
点击此处下载 http://bbs.mcuol.com/TopicView.aspx?boardId=07ACF0AF-3DB4-4B3B-B044-9DA468CCDABC&topicId=520B20FE-1AC4-45EF-9ED0-FA412CF441C1
第二部分:
OK6410 裸机LED开发模板:点击此处下载 http://bbs.mcuol.com/TopicView.aspx?boardId=07ACF0AF-3DB4-4B3B-B044-9DA468CCDABC&topicId=520B20FE-1AC4-45EF-9ED0-FA412CF441C1
第三部分:
因为LCD部分是飞凌开源的,而且内容也没有需要特别说明的,需要这部分源码的朋友可以在飞凌网站直接下载。这里先对LCD测试程序中,调整uboot初始化部分做一些注释(仅代表个人观点)
1.将board/samsung/smdk6410/smdk6410.c lowlevel_init.s
// 128MB for SDRAM 0xC0000000 -> 0x50000000
.set __base, 0x500
.rept 0x580 - 0x500
FL_SECTION_ENTRY __base,3,0,1,1
.set __base,__base+1
.endr
将这一段去掉,也可以不去掉但是将不再应用这段地址
地址的虚拟地址和物理地址一一对应.这样我们在裸机程序中才可以重新对mmu做地址映射,将0地址映射到我们需要
的地方以中断到来的时候能够跳转到相应代码执行中断跳转函数.
2: 将board/samsung/smdk6410/config.mk TEXT_BASE=0x50100000 . 0x50100000将作为我们以后编写裸机程序的
起始地址
3: 将board/samsung/smdk6410/smdk6410.c
ulong virt_to_phy_smdk6410(ulong addr)
{
if ((0xc0000000 <= addr) && (addr < 0xc8000000))
return (addr - 0xc0000000 + 0x50000000);
else
printf("do not support this address : %08lx\n", addr);
return addr;
}
更改为
ulong virt_to_phy_smdk6410(ulong addr)
{
if ((0x50000000 <= addr) && (addr < 0x58000000))
return (addr - 0x50000000 + 0x50000000);
else
printf("do not support this address : %08lx\n", addr);
return addr;
}
4:将include/configs/smdk6410.h中
#define USBD_DOWN_ADDR 0xc0000000 改为 #define USBD_DOWN_ADDR 0x50000000
#define CFG_UBOOT_BASE 0xc7e00000 改为 #define CFG_UBOOT_BASE 0x57e00000
#define CONFIG_BOOTCOMMAND "nand read 0xc0008000 0x100000 0x300000;bootm 0xc0008000"改为
#define CONFIG_BOOTCOMMAND "nand read 0x50100000 0x100000 0x300000;bootm 0x50100000"将2M大小的
flash内容加载到内存中的0x50100000的起始地址处并跳转到0x50100000 地址处执行
编译uboot 下载开uboot.bin 到 flash 0 - 0x100000 地址处
接下来说一下裸机开发流程
1:裸机连接地址为0x50100000
2:因为uboot已经为我们做了系统初始化工作.裸机初始化程序只要重新设定,中断入口,各个模式堆栈地址即可.
3:重新进行虚拟地址映射 将0地址映射到 0x50100000;
__ENTRY: b reset /*跳转到reset*/
ldr pc, _undefined_instruction
ldr pc, _software_interrupt
ldr pc, _prefetch_abort
ldr pc, _data_abort
ldr pc, _not_used
ldr pc, _irq
ldr pc, _fiq
reset:
@Initialize stacks
bl InitStacks
bl Main
b .
_fiq:
.word fiq
irq:
mov sp,#0x57000000
irq_save_user_regs
bl do_irq
irq_restore_user_regs
发生中断后跳转到 irq执行 ,首先设置irq模式的 堆栈地址 保存现场跳转到do_irq执行中断处理函数,最后恢复现场
uboot.bin 和裸机测试lcd 程序 下载地址飞凌论坛S3C6410开发板专区:www.witech.com.cn
飞凌6410开发板 裸机调试程序开发教程手册(PDF版):
点击此处下载 http://bbs.mcuol.com/TopicView.aspx?boardId=07ACF0AF-3DB4-4B3B-B044-9DA468CCDABC&topicId=520B20FE-1AC4-45EF-9ED0-FA412CF441C1
第二部分:
OK6410 裸机LED开发模板:点击此处下载 http://bbs.mcuol.com/TopicView.aspx?boardId=07ACF0AF-3DB4-4B3B-B044-9DA468CCDABC&topicId=520B20FE-1AC4-45EF-9ED0-FA412CF441C1
第三部分:
因为LCD部分是飞凌开源的,而且内容也没有需要特别说明的,需要这部分源码的朋友可以在飞凌网站直接下载。这里先对LCD测试程序中,调整uboot初始化部分做一些注释(仅代表个人观点)
1.将board/samsung/smdk6410/smdk6410.c lowlevel_init.s
// 128MB for SDRAM 0xC0000000 -> 0x50000000
.set __base, 0x500
.rept 0x580 - 0x500
FL_SECTION_ENTRY __base,3,0,1,1
.set __base,__base+1
.endr
将这一段去掉,也可以不去掉但是将不再应用这段地址
地址的虚拟地址和物理地址一一对应.这样我们在裸机程序中才可以重新对mmu做地址映射,将0地址映射到我们需要
的地方以中断到来的时候能够跳转到相应代码执行中断跳转函数.
2: 将board/samsung/smdk6410/config.mk TEXT_BASE=0x50100000 . 0x50100000将作为我们以后编写裸机程序的
起始地址
3: 将board/samsung/smdk6410/smdk6410.c
ulong virt_to_phy_smdk6410(ulong addr)
{
if ((0xc0000000 <= addr) && (addr < 0xc8000000))
return (addr - 0xc0000000 + 0x50000000);
else
printf("do not support this address : %08lx\n", addr);
return addr;
}
更改为
ulong virt_to_phy_smdk6410(ulong addr)
{
if ((0x50000000 <= addr) && (addr < 0x58000000))
return (addr - 0x50000000 + 0x50000000);
else
printf("do not support this address : %08lx\n", addr);
return addr;
}
4:将include/configs/smdk6410.h中
#define USBD_DOWN_ADDR 0xc0000000 改为 #define USBD_DOWN_ADDR 0x50000000
#define CFG_UBOOT_BASE 0xc7e00000 改为 #define CFG_UBOOT_BASE 0x57e00000
#define CONFIG_BOOTCOMMAND "nand read 0xc0008000 0x100000 0x300000;bootm 0xc0008000"改为
#define CONFIG_BOOTCOMMAND "nand read 0x50100000 0x100000 0x300000;bootm 0x50100000"将2M大小的
flash内容加载到内存中的0x50100000的起始地址处并跳转到0x50100000 地址处执行
编译uboot 下载开uboot.bin 到 flash 0 - 0x100000 地址处
接下来说一下裸机开发流程
1:裸机连接地址为0x50100000
2:因为uboot已经为我们做了系统初始化工作.裸机初始化程序只要重新设定,中断入口,各个模式堆栈地址即可.
3:重新进行虚拟地址映射 将0地址映射到 0x50100000;
__ENTRY: b reset /*跳转到reset*/
ldr pc, _undefined_instruction
ldr pc, _software_interrupt
ldr pc, _prefetch_abort
ldr pc, _data_abort
ldr pc, _not_used
ldr pc, _irq
ldr pc, _fiq
reset:
@Initialize stacks
bl InitStacks
bl Main
b .
_fiq:
.word fiq
irq:
mov sp,#0x57000000
irq_save_user_regs
bl do_irq
irq_restore_user_regs
发生中断后跳转到 irq执行 ,首先设置irq模式的 堆栈地址 保存现场跳转到do_irq执行中断处理函数,最后恢复现场
uboot.bin 和裸机测试lcd 程序 下载地址飞凌论坛S3C6410开发板专区:www.witech.com.cn