嵌入式系统作业及答案
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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);
}