嵌入式系统作业及答案

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

;exp3_1_1.s source code

N EQU 5

AREA Adding, CODE, READONLY

ENTRY

MOV R0,#0

MOV R1,#1

REPEAT ADD R0,R0,R1

ADD R1,R1,#1

CMP R1,#N

BLE REPEAT

LDR R2,=RESULT

STR R0,[R2]

HERE B HERE

AREA DataSpace, DATA, READWRITE

RESULT DCD 0

END

要求:

(1)画出以上代码的流程图,解释代码所能够实现的功能;(2)当代码执行完后,请指出R0=?,R1=?,R2=?

R0=1+2+3+4+5=15;R1=6;R2=Result地址

在ARM初始化过程中,如何给每一种模式下的SP定义一个堆栈地址?要求:(1)给出代码,(2)简要解释定义的过程。

P183

第三题

使用汇编实现下列for循环:

For (i=0; i<=10; i++) {a[i]=b[i]+i}

要求:(1)给出代码,(2)用ADS1.2验证所编程序。

N EQU 10

AREA Adding, CODE, READONLY

ENTRY

MOV R1,#0

MOV R2,=A

MOV R3,=B

REPEAT

LDR R0,[R3]

ADD R0,R0,R1

STR R0, [R2]

ADD R1,R1,#1

ADD R2,R2,#4

ADD R3,R3,#4

CMP R1,#N

BLE REPEAT

HERE B HERE

AREA DataSpace, DATA, READWRITE

A DCD 0 0 0 0 0 0 0 0 0 0 0

B DCD 0 0 0 0 0 0 0 0 0 0 0

END

基于ARM的硬件启动程序应该完成那些工作?

P182

第五题

设想使用S3C2440的UART0,以DMA方式接收串口发来的数据,并将接收到的数据存放至Nand Flash中。试编写UART0和NAND Flash控制器的初始化C程序。

UART0初始化

//对Uart进行初始化,以所需要的波特率为输入参数

void myUart0_Init(int baud)

{

rGPHCON = rGPHCON & (~(0xffff)) ;

rGPHCON = rGPHCON | (0xaaa0) ;

rGPHUP = 0x0; // The pull up function is enable

rUFCON0=0x31; //使用FIFO,RX_FIFO=32

rUMCON0=0x00; //不使用自动流控制

rULCON0=0x03; //不采用红外线传输模式,无奇偶校验位,1个停止位,8个数据位

rUCON0=0x06; //接收改成DMA方式

rUBRDIV0=( (int)(PCLK/16./baud+0.5) -1 );

}

NandFlash 控制器初始化

void NF8_Init(void)

{

// for S3C2440

rGPACON = (rGPACON &~ (0x3f<<17)) | (0x3f<<17);

rNFCONF = (TACLS<<12)|(TWRPH0<<8)|(TWRPH1<<4)|(0<<0);

// TACLS [14:12] CLE&ALE duration = HCLK*TACLS.

// TWRPH0 [10:8] TWRPH0 duration = HCLK*(TWRPH0+1)

// TWRPH1 [6:4] TWRPH1 duration = HCLK*(TWRPH1+1)

// AdvFlash(R) [3] Advanced NAND, 0:256/512, 1:1024/2048

// PageSize(R) [2] NAND memory page size

// when [3]==0, 0:256, 1:512 bytes/page.

// when [3]==1, 0:1024, 1:2048 bytes/page.

// AddrCycle(R) [1] NAND flash addr size

// when [3]==0, 0:3-addr, 1:4-addr.

// when [3]==1, 0:4-addr, 1:5-addr.

// BusWidth(R/W) [0] NAND bus width. 0:8-bit, 1:16-bit.

rNFCONT = (0<<13)|(0<<12)|(0<<10)|(0<<9)|(0<<8)|(1<<6)|(1<<5)|(1<<4)|(1<<1)|(1<<0);

// Lock-tight [13] 0:Disable lock, 1:Enable lock.

// Soft Lock [12] 0:Disable lock, 1:Enable lock.

// EnablillegalAcINT[10] Illegal access interupt control. 0:Disable, 1:Enable

// EnbRnBINT [9] RnB interrupt. 0:Disable, 1:Enable

// RnB_TrandMode[8] RnB transition detection config. 0:Low to High, 1:High to Low // SpareECCLock [6] 0:Unlock, 1:Lock

// MainECCLock [5] 0:Unlock, 1:Lock

// InitECC(W) [4] 1:Init ECC decoder/encoder.

// Reg_nCE [1] 0:nFCE=0, 1:nFCE=1.

// NANDC Enable [0] operating mode. 0:Disable, 1:Enable.

}

void Dma_init()

{

U32 srcAddr,dstAddr;

int tc,dsz,burst;

int length;

tc=32;

dsz=0;//字节传输

burst=0;//DMA原子操作的数据传输个数

length=tc*(burst ? 4:1)*((dsz==0)+(dsz==1)*2+(dsz==2)*4);

pISR_DMA0=(int)Dma0Done;

rINTMSK&=~(BIT_DMA0);

srcAddr = (U32)URXH0;

dstAddr = (U32)string_rec;

rDISRC0=srcAddr;

rDISRCC0=(1<<1)|(1<<0); // fixed,APB

rDIDST0 =dstAddr;

rDIDSTC0=(0<<2)|(0<<1)|(0<<0); // inc,AHB

rDCON0=(0<<31)|(0<<30)|(1<<29)|(burst<<28)|(0<<27)|(1<<24)|(1<<23)|(0<<22)|(dsz<<2

0)|(tc);

rDMASKTRIG0=(1<<1);

}

相关文档
最新文档