嵌入式实验五

发布时间 : 星期六 文章嵌入式实验五更新完毕开始阅读

仲恺农业工程学院实验报告纸

实验五 NAND Flash 控制器

一、实验目的

1.了解NAND Flash芯片的接口

2.掌握通过NAND Flash控制器访问NAND Flash的方法 二、实验内容

1. 掌握读NAND Flash的操作;

2. 把一部分代码存放在NAND Flash地址4096之后,当程序启动后通过NAND Flash控制器将代码从NAND Flash复制到SDRAM并执行。 三、实验设备

1. EL-ARM-830教学实验箱,PentiumII以上的PC机,仿真调试电缆,串口电缆。

2. PC操作系统WIN98或WIN2000或WINXP,MDK集成开发环境,仿真调试驱动程序 四、实验步骤

1.本实验仅使用实验教学系统的CPU板,串口。在进行本实验时,LCD电源开关、音频的左右声道开关、AD通道选择开关、触摸屏中断选择开关等均应处在关闭状态。

2.在PC机并口和实验箱的CPU板上的JTAG接口之间,连接仿真调试电缆,以及串口间连接公/母接头串口线。

3.检查连接是否可靠,可靠后,接入电源线,系统上电。 4.打开MDK开发环境,修改源文件的head.s程序。 5. 修改init.c程序。

6 .修改main.c程序,nand.c。

7. 编译,生成可执行程序,观察试验现象。 四、实验程序 res.s:

PRESERVE8 IMPORT Main

AREA RESET, CODE, READONLY EXPORT _start _start

ENTRY

ldr sp, =4096

第 1 页 共 5 页

b1 disable_watch_dog b1 memsetup

b1 copy_2th_to_sdram b1 create_page_table b1 mmu_init

ldr sp, =0x40000000 ldr pc, =0x00040000 halt_loop: b halt_loop 2、Text2.c: #define WTCON

#define MEN_CTL_BASE 0x48000000 #define r0 0

void disable_watch_dog(void) { }

void memstup(void) {

WTCON=0;

unsingned long const mem_cfg_val[]={ 0x22011110, 0x00000700, 0x00000700, 0x00000700, 0x00000700, 0x00000700, 0x00000700, 0x00018005, 0x00018005, 0x008C07A3, 0x000000B1, 0X00000030, 0X00000030, } int i=0;

第 2 页 共 5 页

}

volatile unsingned long *p=(volatile unsingned long*)MEN_CTL_BASE; for(;i<13;i++) p[i]=men_cfg_val[i]

void copy_2th_to_sdram(void) { }

create_page_table(void) {

#define MMU_FULL_ACCESS (3<<10) #define MMU_DOMAIN (0<<5) #define MMU_SPECIAL (1<<4) #define MMU_CACHEABLE(1<<3) #define MMU_BUFFERABLE (1<<2) #define MMU_SECTTON (2) #define

MMU_SECDESC

unsingned int *pdwSrc = (unsingned int *)2048; unsingned int *pdwDest = (unsingned int *)0x30004000; while (pdwSrc<(unsingned int *)4096) { }

*pdwDest=*pdwSrc; pdwDest++; pdwSrc++;

(MMU_FULL_ACCESS|MMU_DOMAIN|MMU_SPECIAL|MMU_SECTTON)

#define

MMU_SECDESC_WB

(MMU_FULL_ACCESS|MMU_DOMAIN|MMU_SPECIAL|MMU_CACHEABLE|MMU_BUFFERABLE|MMU_SECTTON)

#define MMU_SECTION_SIZE 0X00100000 unsingned long virtuladdr,physicaladdr;

unsingned long *mmu_tld_base=(unsingned long *)0x30000000;

第 3 页 共 5 页

}

virtuladdr=0; physicaladdr=0;

*(mmu_tld_base+(virtuladdr>>20))=(physicaladdr&0xFFF00000)|MMU_SECDESC_WB; virtuladdr=0xA0000000; physicaladdr=0x56000000;

*(mmu_tld_base+(virtuladdr>>20))=(physicaladdr&0xFFF00000)|MMU_SECDESC; virtuladdr=0xB0000000; physicaladdr=0x30000000; while(virtuladdr<0xB4000000) { }

*(mmu_tld_base+(virtuladdr>>20))=(physicaladdr&0xFFF00000)|MMU_SECDESC_WB; virtuladdr+=0x100000; physicaladdr+=0x100000;

*(mmu_tld_base+(virtuladdr>>20))=(physicaladdr&0xFFF00000)|MMU_SECDESC_WB; *(mmu_tld_base+(virtuladdr>>20))=(physicaladdr&0xFFF00000)|MMU_SECDESC; *(mmu_tld_base+(virtuladdr>>20))=(physicaladdr&0xFFF00000)|MMU_SECDESC_WB;

void mmuu_init(void) {

unsigned long ttb = 0x30000000;

__asm__(

\

\\\\\\

\\

\

第 4 页 共 5 页

联系合同范文客服:xxxxx#qq.com(#替换为@)