硬汉嵌入式论坛

 找回密码
 立即注册
查看: 4035|回复: 6
收起左侧

[ThreadX全家桶] tx_initialize_low_level.s,这一段看不懂,请大神分析一下,谢谢

[复制链接]

41

主题

126

回帖

249

积分

高级会员

积分
249
发表于 2020-9-9 13:40:03 | 显示全部楼层 |阅读模式
;    /* Configure SysTick.  */
;
    MOV     r0, #0xE000E000                         ; Build address of NVIC registers
    LDR     r1, =SYSTICK_CYCLES
    STR     r1, [r0, #0x14]                         ; Setup SysTick Reload Value
    MOV     r1, #0x7                                ; Build SysTick Control Enable Value
    STR     r1, [r0, #0x10]                         ; Setup SysTick Control
;
;    /* Configure handler priorities.  */
;
    LDR     r1, =0x00000000                         ; Rsrv, UsgF, BusF, MemM
    STR     r1, [r0, #0xD18]                        ; Setup System Handlers 4-7 Priority Registers

    LDR     r1, =0xFF000000                         ; SVCl, Rsrv, Rsrv, Rsrv
    STR     r1, [r0, #0xD1C]                        ; Setup System Handlers 8-11 Priority Registers
                                                    ; Note: SVC must be lowest priority, which is 0xFF

    LDR     r1, =0x40FF0000                         ; SysT, PnSV, Rsrv, DbgM
    STR     r1, [r0, #0xD20]                        ; Setup System Handlers 12-15 Priority Registers
                                                    ; Note: PnSV must be lowest priority, which is 0xFF

这一段是啥意思啊?
回复

使用道具 举报

3

主题

422

回帖

431

积分

高级会员

积分
431
发表于 2020-9-9 13:50:24 | 显示全部楼层
注释里不是清清楚楚的吗
回复

使用道具 举报

17

主题

109

回帖

160

积分

初级会员

积分
160
发表于 2020-9-9 14:00:35 | 显示全部楼层
英文注释写的明明白白,看不懂?汇编不会可以去看arm指南
回复

使用道具 举报

1

主题

26

回帖

29

积分

新手上路

积分
29
发表于 2020-9-9 14:56:26 | 显示全部楼层
就是配置systick这个定时器,用于产生系统心跳。还有就是配置中断分组以及系统用到的三个中断的优先级。只是汇编写的,有点生涩难懂罢了。
回复

使用道具 举报

41

主题

126

回帖

249

积分

高级会员

积分
249
 楼主| 发表于 2020-9-9 18:18:17 | 显示全部楼层
billy 发表于 2020-9-9 14:56
就是配置systick这个定时器,用于产生系统心跳。还有就是配置中断分组以及系统用到的三个中断的优先级。只 ...

这段代码吧SysTick 优先级值设置成了几啊?是最低优先级 15吗?
回复

使用道具 举报

5

主题

16

回帖

31

积分

新手上路

积分
31
发表于 2020-9-10 10:07:33 | 显示全部楼层
MOV     r0, #0xE000E000  这个是确定中断寄存器的基地址的  后面都是对这个基地址+各种偏移的写入操作  具体的偏移要查看手册,大概明白就行了,不需要细究
回复

使用道具 举报

5

主题

16

回帖

31

积分

新手上路

积分
31
发表于 2020-9-10 11:22:38 | 显示全部楼层
gugugui 发表于 2020-9-10 10:07
MOV     r0, #0xE000E000  这个是确定中断寄存器的基地址的  后面都是对这个基地址+各种偏移的写入操作   ...

仔细想想还是说明白吧
0xE000E000  这个是系统控制寄存器的基地址
LDR     r1, =0x40FF0000
STR     r1, [r0, #0xD20]
这段代码就是在 0xE000E000 + 0xD20 = 0xE000ED20这个地址处写入0x40FF0000这个值,具体翻看手册知道0xE000ED20这个地址就是设置系统中断优先级的某个寄存器,这个寄存器可以设置滴答定时器的优先级和pensv的优先级,其中滴答定时器优先级在这个32位寄存器的最高8位  pensv在次高8位 ,后16位为保留位。
根据这些,会发现0x40FF0000这个值 最高8位为0x40 为滴答定时器的,众所周知,stm32的优先级是砍掉后4位的,只用高4位,所以这里就知道是配置滴答定时器优先级为4。Pensv优先级为F 即15.
其他分析如上。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2025-5-19 11:40 , Processed in 0.250521 second(s), 23 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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