新手入门 
 
	- 积分
 - 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的(个人认为)。 
感觉是使用的是默认的中断优先级,在程序中没有发现是在哪还有设定,如有麻烦请解答一下。 
 
 
 
 
 
 |   
 
 
 
 |