zoukankan      html  css  js  c++  java
  • 在Main函数之前发生的事 ZEDBOARD,ZYNQ7000

    What happened before running into main function on zedboard?

    Use the zedboard hardware platform to create a Xilinx project and named it print_demo as shown following:

    Look into the main function, nothing has been done in the init_platform() function.

    Where is the uart init invoking in such a complexing hardware driver files?

    Under the project explorer view, select the print_demo_bsp>ps7_cortexa9_0>libsrc>standalone_v3_08_a>src>asm_vectors.s

    Double click to read the contents of asm_vectors.s:

    .section .vectors

    _vector_table:

    B    _boot

    B    Undefined

    B    SVCHandler

    B    PrefetchAbortHandler

    B    DataAbortHandler

    NOP    /* Placeholder for address exception vector*/

    B    IRQHandler

    B    FIQHandler

    _vector_table locates the exception entry point, and the cortex a9 processor execute the first sentence B    _boot

    New we go to the definition of _boot (boot.S):

    /* this initializes the various processor modes */

     

    _prestart:

    _boot:

    #if XPAR_CPU_ID==0

    /* only allow cpu0 through */

        mrc    p15,0,r1,c0,c0,5

        and    r1, r1, #0xf

        cmp    r1, #0

        beq    OKToRun

    EndlessLoop0:

        wfe

        b    EndlessLoop0

     

    #elif XPAR_CPU_ID==1

    /* only allow cpu1 through */

        mrc    p15,0,r1,c0,c0,5

        and    r1, r1, #0xf

        cmp    r1, #1

        beq    OKToRun

    EndlessLoop1:

        wfe

        b    EndlessLoop1

    #endif

     

    The label OKToRun located in the same file:

    OKToRun:

        /* set VBAR to the _vector_table address in linker script */

        ldr    r0, =vector_base

        mcr    p15, 0, r0, c12, c0, 0

        …    …

        b    _start                /* jump to C startup code */

        and    r0, r0, r0                /* no op */

     

    _start label located in the xil_crt0.S :

    start:

        bl __cpu_init        /* Initialize the CPU first (BSP provides this) */

        mov    r0, #0

        …    …

        /* Initialize STDOUT */

        bl    Init_Uart

        …    …

        /* Let her rip */

        bl    main

    We have noticed that the bsp program run the Init_Uart before going into main function.

    The Init_Uart function locates in the uart.c file:

    #define UART_BAUDRATE    115200

    Buadrate is determined by the macro. Change it to 9600 if 9600 baudrate is desired.

    NOTICE: ANY change in those files locate in the bsp project>ps7_cortexa9_0 will be ignored as the contents will regenerate once building the project. If need to re-invode the init_uart function again in the main function to make a change.

  • 相关阅读:
    spring之为java.util.Properties类型的属性进行赋值
    spring之为级联集合属性进行赋值
    spring之级联属性赋值的两种方式
    打造最佳开发团队的几点建议
    软件开发中的11个系统思维定律
    走向“持续部署”
    关于“兴趣爱好”之我见
    技术人员应真正学会的第二课程
    Java语言的动态性支持
    Java深度历险(九)——Java安全
  • 原文地址:https://www.cnblogs.com/dragen/p/3116742.html
Copyright © 2011-2022 走看看