请选择 进入手机版 | 继续访问电脑版
查看: 2175|回复: 1

RT1052——3.hello world的简要分析

[复制链接]
  • TA的每日心情
    慵懒
    2024-2-8 09:39
  • 签到天数: 217 天

    [LV.7]常住居民III

    92

    主题

    1109

    帖子

    29

    版主

    Rank: 7Rank: 7Rank: 7

    积分
    7535

    热心会员

    最后登录
    2024-4-15
    发表于 2018-10-26 22:19:35 | 显示全部楼层 |阅读模式
    今天在公司忙了一天,快累死了,回来依然不能阻止我研究1052的热情说到代码运行,一般都是从复位中断开始的,那么我们也从复位中断开始看
    代码如下
    Reset_Handler   PROC
                    EXPORT  Reset_Handler             [WEAK]
                    IMPORT  SystemInit
                    IMPORT  __main

                    CPSID   I               ; Mask interrupts
                    LDR     R0, =0xE000ED08
                    LDR     R1, =__Vectors
                    STR     R1, [R0]
                    LDR     R2, [R1]
                    MSR     MSP, R2
                    LDR     R0, =SystemInit
                    BLX     R0
                    CPSIE   i               ; Unmask interrupts
                    LDR     R0, =__main
                    BX      R0
                    ENDP


    有个很奇怪的数0xE000ED08
    可以在m7内核的手册上查到,这是中断向量表的偏移寄存器

    QQ截图20181026193752.png

    那么复位后的动作就很清楚了,先屏蔽中断,然后加载中断向量表 然后解除屏蔽中断,跳转到SystemInit,跳转到_main(可以理解为到main)
    至于这个SystemInit里面是设置看门狗,配置时钟的,以后我们慢慢聊。

    main里面主要有
        BOARD_ConfigMPU();
        BOARD_InitPins();
        BOARD_BootClockRUN();
        BOARD_InitDebugConsole(); 这几个函数


    其中BOARD_ConfigMPU();主要是设置存储区域保护的
    比如MPU->RBAR = ARM_MPU_RBAR(0, 0xC0000000U);
        MPU->RASR = ARM_MPU_RASR(0, ARM_MPU_AP_FULL, 2, 0, 0, 0, 0, ARM_MPU_REGION_SIZE_512MB);
    就是设置它是第0个区域(最多16个)地址是0xC0000000U  可以获取指令,都可以去访问它,属于设备,不可共享,不可以缓存,大小512MB
    下面这个是官方推荐的设置

    QQ截图20181026204658.png

    BOARD_InitPins();是用来初始化引脚,这个以后再说
    BOARD_BootClockRUN();是用来设置各个外设的时钟源,可以在这里修改外设时钟分频
    BOARD_InitDebugConsole();就比较神奇了,这个是官方提供用来调试的配置函数(里面比较复杂不太好理解,以后研究研究再分享)
    在这里只是配置了串口1的初始化
                lpuart_config_t lpuart_config;
                LPUART_GetDefaultConfig(&lpuart_config);
                lpuart_config.baudRate_Bps = baudRate;
                /* Enable clock and initial UART module follow user configure structure. */
                LPUART_Init((LPUART_Type *)s_debugConsoleIO.ioBase, &lpuart_config, clkSrcFreq);
                LPUART_EnableTx(s_debugConsoleIO.ioBase, true);
                LPUART_EnableRx(s_debugConsoleIO.ioBase, true);


    具体配置如下
        config->baudRate_Bps = 115200U;
        config->parityMode = kLPUART_ParityDisabled;
        config->dataBitsCount = kLPUART_EightDataBits;
        config->isMsb = false;
        config->stopBitCount = kLPUART_OneStopBit;
        config->txFifoWatermark = 0;
        config->rxFifoWatermark = 0;
        config->enableRxRTS = false;
        config->enableTxCTS = false;
        config->txCtsConfig = kLPUART_CtsSampleAtStart;
        config->txCtsSource = kLPUART_CtsSourcePin;
        config->rxIdleType = kLPUART_IdleTypeStartBit;
        config->rxIdleConfig = kLPUART_IdleCharacter1;
        config->enableTx = false;
        config->enableRx = false;

    接下来就是打印和回显了,在此暂不做讨论
    该会员没有填写今日想说内容.
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2024-3-26 15:16
  • 签到天数: 266 天

    [LV.8]以坛为家I

    3298

    主题

    6545

    帖子

    0

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    31998
    最后登录
    2024-4-9
    发表于 2018-10-29 16:02:38 | 显示全部楼层
    支持下
    签到签到
    回复

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /4 下一条

    Archiver|手机版|小黑屋|恩智浦技术社区

    GMT+8, 2024-4-17 00:33 , Processed in 0.123779 second(s), 20 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2021, Tencent Cloud.

    快速回复 返回顶部 返回列表