新手入门
- 积分
- 2
- 金钱
- 2
- 注册时间
- 2017-8-24
- 在线时间
- 0 小时
|
发表于 2017-8-24 16:44:21
|
显示全部楼层
在UCOSIII下:
我也有同样问题,但是我认为这里有错,应该不是这里设置systick中断的优先级
NVIC_INT_CTRL EQU 0xE000ED04 ; Interrupt control state register.
NVIC_SYSPRI14 EQU 0xE000ED22 ; System priority register (priority 14).
NVIC_PENDSV_PRI EQU 0xFFFF ; PendSV和滴答定时器优先级设置为最低
NVIC_PENDSVSET EQU 0x10000000 ; Value to trigger PendSV exception.
OSStartHighRdy
LDR R0, =NVIC_SYSPRI14 ; Set the PendSV exception priority
LDR R1, =NVIC_PENDSV_PRI
STRB R1, [R0]
MOVS R0, #0 ; Set the PSP to 0 for initial context switch call
MSR PSP, R0
LDR R0, =OS_CPU_ExceptStkBase ; Initialize the MSP to the OS_CPU_ExceptStkBase
LDR R1, [R0]
MSR MSP, R1
LDR R0, =NVIC_INT_CTRL ; Trigger the PendSV exception (causes context switch)
LDR R1, =NVIC_PENDSVSET
STR R1, [R0]
CPSIE I ; Enable interrupts at processor level
OSStartHang
B OSStartHang ; Should never get here
/////////////////////////////////////////////////////////////////////////////////////
0xE000ED22 是PendSV的异常优先级寄存器
0xE000ED23 是systick的异常优先级寄存器
表8.3B 系统异常优先级寄存器阵列 0xE000_ED18 - 0xE000_ED23
地址 | 名称 | 类型 | 复位值 | 描述 | 0xE000_ED18 | PRI_4 | 存储器管理 fault 的优先级 | 0xE000_ED19 | PRI_5 | 总线 fault 的优先级 | 0xE000_ED1A | PRI_6 | 用法 fault 的优先级 | 0xE000_ED1B | ‐ | ‐ | ‐ | ‐ | 0xE000_ED1C | ‐ | ‐ | ‐ | ‐ | 0xE000_ED1D | ‐ | ‐ | ‐ | ‐ | 0xE000_ED1E | ‐ | ‐ | ‐ | ‐ | 0xE000_ED1F | PRI_11 | SVC 优先级 | 0xE000_ED20 | PRI_12 | 调试监视器的优先级 | 0xE000_ED21 | ‐ | ‐ | ‐ | ‐ | 0xE000_ED22 | PRI_14 | PendSV 的优先级 | 0xE000_ED23 | PRI_15 | SysTick 的优先级 |
所以这里只是设置了PendSv的并没有设置Systick的(个人认为)。
感觉是使用的是默认的中断优先级,在程序中没有发现是在哪还有设定,如有麻烦请解答一下。
|
|