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

📄 boot.s

📁 嵌入式系统 EP93xx处理器
💻 S
📖 第 1 页 / 共 2 页
字号:
//*****************************************************************************//// BOOT.S - Code which is loaded into the Cirrus Logic ARM processor via the//          boot ROM to 2048 Bytes buffer.//// Copyright (c) 2006 Cirrus Logic, Inc.////*****************************************************************************#include "asmdefs.h"//*****************************************************************************//// The read-only code area.////*****************************************************************************    _TEXT_    //    // This is the entry point of the program.    //    _ENTRY_    //    // Set up the stack pointer.    //    ldr     r13, =Stack    //    // Switch to SetUp.    //    b       SetUp//*****************************************************************************//// Configure the SDRAM based on the supplied settings.////*****************************************************************************SdramConfig _LABEL_    //    // Set the Initialize and MRS bits    //    ldr     r4, =0x80000003    str     r4, [r3, _CONST_ 0x0004]    //    // Delay for 200us.    //    mov     r4, _CONST_ 0x3000delay1 _LABEL_        subs    r4, r4, _CONST_ 1        bne     delay1    //    // Clear the MRS bit to issue a precharge all.    //    ldr     r4, =0x80000001    str     r4, [r3, _CONST_ 0x0004]    //    // Temporarily set the refresh timer to 0x10.    // Make it really low so that refresh cycles are generated.    //    ldr     r4, =0x10    str     r4, [r3, _CONST_ 0x0008]    //    // Delay for at least 80 SDRAM clock cycles.    //    mov     r4, _CONST_ 80delay2 _LABEL_        subs    r4, r4, _CONST_ 1        bne     delay2    //    // Set the refresh timer to the fastest required for any device that might    // be used.    //    ldr     r4, =0x01e0    str     r4, [r3, _CONST_ 0x0008]    //    // Select mode register update mode.    //    ldr     r4, =0x80000002    str     r4, [r3, _CONST_ 0x0004]    //    // Program the mode register on the SDRAM.    //    ldr     r4, [r2]    //    // Select normal operating mode.    //    ldr     r4, =0x80000000    str     r4, [r3, _CONST_ 0x0004]    //    // Return to the caller.    //    mov     pc, lr    //*****************************************************************************//// Test to see if the SDRAM has been configured in a usable mode.////*****************************************************************************SdramDetect _LABEL_    //    // Load the test patterns to be written to SDRAM.    //    ldr     r1, =0xf00dface    ldr     r2, =0xdeadbeef    ldr     r3, =0x08675309    ldr     r4, =0xdeafc0ed    //    // Store the test patterns to SDRAM.    //    stmia   r0, {r1-r4}    //    // Load the test patterns from SDRAM one at a time    // compare them to the actual pattern.    //    ldr     r5, [r0]    cmp     r5, r1    ldreq   r5, [r0, #0x0004]    cmpeq   r5, r2    ldreq   r5, [r0, #0x0008]    cmpeq   r5, r3    ldreq   r5, [r0, #0x000c]    cmpeq   r5, r4    //    // Return -1 if a mismatch was encountered, 0 otherwise.    //    mvnne   r0, _CONST_ 0x00000000    moveq   r0, _CONST_ 0x00000000    //    // Return to the caller.    //    mov     pc, lr//****************************************************************************//// SendChar sends a character to UART1.////****************************************************************************SendChar _LABEL_    //    // Load the base address to the UART 1 registers. 0x808c0000    //    ldr     r1, =0x808c0000    //    // Wait until the FIFO is empty.    //    mov     r3, _CONST_ 0x80sendchar0 _LABEL_        ldr     r2, [r1, _CONST_ 0x18]        tst     r2, r3        beq     sendchar0    //    // Write the character to UART1.    //    str     r0, [r1]    //    // Return to the caller.    //    mov     pc, lr//****************************************************************************//// ReceiveChar receives a character from UART1.////****************************************************************************ReceiveChar _LABEL_    //    // Load the base address to the UART 1 registers. 0x808c0000    //    ldr     r1, =0x808c0000    //    // Wait until there is a character in the receive FIFO for UART1.    //    mov     r3, _CONST_ 0x10receivechar0 _LABEL_        ldr     r2, [r1, _CONST_ 0x18]        tst     r2, r3        bne     receivechar0    //    // Read the character from UART1.    //    ldr     r0, [r1]    mov     r1, _CONST_ 0xff    and     r0, r0, r1    //    // Return to the caller.    //    mov     pc, lr//****************************************************************************//// SetBaud sets the baud rate to the specified rate.////****************************************************************************SetBaud _LABEL_    //    // Save the link register to the stack.    //    stmfd   r13!, {lr}    //    // Read the baud rate indicator from the host.    //    bl      ReceiveChar    //    // Load a pointer to the UART 1 Flag register.    // 0x808c0018 UARTFR    //    ldr     r3, =0x808c0000    //    // Get the baud rate divisor based on the requested baud rate.    //    //    // Is this 9600 Baud?    //    mov     r1, _CONST_ 47    cmp     r0, _CONST_ 0x30    beq     setbaud0    //    // Is this 19200 Baud?    //    mov     r1, _CONST_ 23    cmp     r0, _CONST_ 0x31    beq     setbaud0    //    // Is this 38400 Baud?    //    mov     r1, _CONST_ 11    cmp     r0, _CONST_ 0x32    beq     setbaud0    //    // Is this 57600 Baud?    //    mov     r1, _CONST_ 7    cmp     r0, _CONST_ 0x33    beq     setbaud0    //    // Well it is going to be 115200 Baud then.    //    mov     r1, _CONST_ 0x03    //    // Set the data length to 8 bits per character and enable the FIFO.    //setbaud0 _LABEL_    //    // Set the baud rate divider.    //    str     r1, [r3, _CONST_ 0x10]    //    // Clear the upper baud divisor register    //    mov     r1, _CONST_ 0    str     r1, [r3, _CONST_ 0xc]    //    // Set the mode to N-8-1    //    mov     r1, _CONST_ 0x60    str     r1, [r3, _CONST_ 0x8]    //    // Wait until we receive a '-' character from the host.    //setbaud1 _LABEL_        bl      ReceiveChar        cmp     r0, _CONST_ 0x2d        bne     setbaud1    //    // Return to the caller.    //    ldmfd   r13!, {pc}//****************************************************************************//// ReadLong reads a 32-bit value from the serial port.////****************************************************************************ReadLong _LABEL_    //    // Save the link register to the stack.    //    stmfd   r13!, {r4, lr}    //    // Read the first byte.    //    bl      ReceiveChar    //    // The first byte is the least significant 8 bits of the long value.    //    mov     r4, r0    //    // Read the second byte.    //    bl      ReceiveChar    //    // The second byte is the next 8 significant bits of the long value.    //    mov     r0, r0, lsl _CONST_ 8    orr     r4, r4, r0    //    // Read the third byte.    //    bl      ReceiveChar    //    // The third byte is the next 8 significant bits of the long value.    //    mov     r0, r0, lsl _CONST_ 16    orr     r4, r4, r0    //    // Read the fourth byte.    //    bl      ReceiveChar    //    // The fourth byte is the most significant 8 bits of the long value.    //    mov     r0, r0, lsl _CONST_ 24    orr     r0, r0, r4    //

⌨️ 快捷键说明

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