⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 threadx_cpus.s

📁 hreadx实时嵌入式操作系统源代码,ARM移植. threadx是一个很好的多任务实时嵌入式操作系统
💻 S
📖 第 1 页 / 共 2 页
字号:
;/**************************************************************************/ 
;/*                                                                        */ 
;/*      only for 32bit mode and dosn't support interrupt nesting          */
;/*                                                                        */  
;/* File name:               threadX_cpu.s								   */
;/* Last modified Date:      2008-03-28									   */
;/* Last Version:            0.01										   */
;/* Descriptions:            asm file for armtarget						   */
;/* QQ:                      307102293									   */
;/* ENAIL:                   wodexinxiang1949@163.com                      */
;/*                                                                        */
;/**************************************************************************/

;/* Include necessary system files.  */
    INCLUDE option.inc
    CODE32
    AREA    thread,CODE,READONLY

        EXTERN __irq_handle
        EXTERN __ptx_sys_statck
        EXTERN __ptx_svc_statck
        EXTERN __ptx_irq_statck
        EXTERN __ptx_fiq_statck
        EXTERN __ptx_about_statck
        EXTERN __ptx_undef_statck

        EXTERN _tx_thread_current_ptr
        EXTERN _tx_thread_execute_ptr
        EXTERN _tx_thread_system_stack_ptr
        EXTERN __ptx_sys_statck
        EXTERN __ptx_svc_statck
        
        EXTERN __tx_thread_contex_save
        EXTERN __tx_thread_contex_restore
        EXTERN __tx_thread_preempt_check
        
        GLOBAL __tx_thread_swi_disable_irq
        GLOBAL __tx_thread_swi_enable_irq
        GLOBAL __tx_thread_swi_schedule
        GLOBAL __tx_thread_swi_system_return
		GLOBAL __tx_initialize_low_level
		GLOBAL __tx_thread_restore
		
		GLOBAL __thread_irq_handle
		GLOBAL __thread_swi_handle

;/**************************************************************************/ 
;/*                                                                        */ 
;/*  FUNCTION                                               RELEASE        */ 
;/*                                                                        */ 
;/*    __thread_swi_handle                                                 */ 
;/*                                                           3.0a         */ 
;/*  AUTHOR                                                                */ 
;/*                                                                        */ 
;/*                                                                        */ 
;/*                                                                        */ 
;/*  DESCRIPTION                                                           */ 
;/*                                                                        */ 
;/*    This was called by swi vector. execute thread schedu here           */ 
;/*                                                                        */ 
;/*  INPUT                                                                 */ 
;/*                                                                        */ 
;/*    None                                                                */ 
;/*                                                                        */ 
;/*  OUTPUT                                                                */ 
;/*                                                                        */ 
;/*    None                                                                */ 
;/*                                                                        */ 
;/*  CALLS                                                                 */ 
;/*                                                                        */ 
;/*    None                                                                */ 
;/*                                                                        */ 
;/*  CALLED BY                                                             */ 
;/*                                                                        */ 
;/*    swi vector                                                          */ 
;/*                                                                        */ 
;/*  RELEASE HISTORY                                                       */ 
;/*                                                                        */ 
;/*    DATE              NAME                      DESCRIPTION             */ 
;/*                                                                        */ 
;/*                                                                        */ 
;/**************************************************************************/ 
__thread_swi_handle
    LDR     SP,         =__ptx_svc_statck
    LDR     SP,         [SP]
    CMP     R0,         #4
    LDRLO   PC,         [PC, R0, LSL #2]
    B       .
SwiFunction
    DCD     __tx_thread_swi_disable_irq
    DCD     __tx_thread_swi_enable_irq
    DCD		__tx_thread_swi_schedule
    DCD     __tx_thread_swi_system_return

;/**************************************************************************/ 
;/*                                                                        */ 
;/*  FUNCTION                                               RELEASE        */ 
;/*                                                                        */ 
;/*    __tx_thread_swi_disable_irq                                         */ 
;/*                                                           3.0a         */ 
;/*  AUTHOR                                                                */ 
;/*                                                                        */ 
;/*                                                                        */ 
;/*                                                                        */ 
;/*  DESCRIPTION                                                           */ 
;/*                                                                        */ 
;/*    Disable interrupt, because irq havn't been managed, just irq was    */
;/*    disable                                                             */ 
;/*                                                                        */ 
;/*  INPUT                                                                 */ 
;/*                                                                        */ 
;/*    None                                                                */ 
;/*                                                                        */ 
;/*  OUTPUT                                                                */ 
;/*                                                                        */ 
;/*    register of cpsr befor break                                        */ 
;/*                                                                        */ 
;/*  CALLS                                                                 */ 
;/*                                                                        */ 
;/*    None                                                                */ 
;/*                                                                        */ 
;/*  CALLED BY                                                             */ 
;/*                                                                        */ 
;/*    user codes                                                          */ 
;/*                                                                        */ 
;/*  RELEASE HISTORY                                                       */ 
;/*                                                                        */ 
;/*    DATE              NAME                      DESCRIPTION             */ 
;/*                                                                        */ 
;/*                                                                        */ 
;/**************************************************************************/ 
__tx_thread_swi_disable_irq                                         
        STMFD   SP!,    {LR}
        MRS     R0,     SPSR
        ORR     R1,     R0,     #NO_IRQ             ;  设置禁止中断标识
        MSR     SPSR_cxsf,      R1
        LDMFD   SP!,    {PC}^                       ;  退出

;/**************************************************************************/ 
;/*                                                                        */ 
;/*  FUNCTION                                               RELEASE        */ 
;/*                                                                        */ 
;/*    __tx_thread_swi_disable_irq                                         */ 
;/*                                                           3.0a         */ 
;/*  AUTHOR                                                                */ 
;/*                                                                        */ 
;/*                                                                        */ 
;/*                                                                        */ 
;/*  DESCRIPTION                                                           */ 
;/*                                                                        */ 
;/*    Disable interrupt, because irq havn't been managed, just irq was    */
;/*    disable                                                             */ 
;/*                                                                        */ 
;/*  INPUT                                                                 */ 
;/*                                                                        */ 
;/*    R1   register of cpsr befor break                                   */ 
;/*                                                                        */ 
;/*  OUTPUT                                                                */ 
;/*                                                                        */ 
;/*    None                                                                */ 
;/*                                                                        */ 
;/*  CALLS                                                                 */ 
;/*                                                                        */ 
;/*    None                                                                */ 
;/*                                                                        */ 
;/*  CALLED BY                                                             */ 
;/*                                                                        */ 
;/*    user codes                                                          */ 
;/*                                                                        */ 
;/*  RELEASE HISTORY                                                       */ 
;/*                                                                        */ 
;/*    DATE              NAME                      DESCRIPTION             */ 
;/*                                                                        */ 
;/*                                                                        */ 
;/**************************************************************************/ 
__tx_thread_swi_enable_irq
        STMFD   SP!,    {LR}
        MSR     SPSR_cxsf,      R1
        LDMFD   SP!,    {PC}^                                      ;  退出

;/**************************************************************************/ 
;/*                                                                        */ 
;/*  FUNCTION                                               RELEASE        */ 
;/*                                                                        */ 
;/*    __tx_thread_swi_system_return                                       */ 
;/*                                                           3.0a         */ 
;/*  AUTHOR                                                                */ 
;/*                                                                        */ 
;/*                                                                        */ 
;/*                                                                        */ 
;/*  DESCRIPTION                                                           */ 
;/*                                                                        */ 
;/*    Save contex and switch to a new Thread,                             */ 
;/*                                                                        */ 
;/*  INPUT                                                                 */ 
;/*                                                                        */ 
;/*    None                                                                */ 
;/*                                                                        */ 
;/*  OUTPUT                                                                */ 
;/*                                                                        */ 
;/*    None                                                                */ 
;/*                                                                        */ 
;/*  CALLS                                                                 */ 
;/*                                                                        */ 
;/*    __tx_thread_contex_restore                                          */                          */ 
;/*                                                                        */ 
;/*  CALLED BY                                                             */ 
;/*                                                                        */ 
;/*    core                                                                */ 
;/*                                                                        */ 
;/*  RELEASE HISTORY                                                       */ 
;/*                                                                        */ 
;/*    DATE              NAME                      DESCRIPTION             */ 
;/*                                                                        */ 
;/*                                                                        */ 
;/**************************************************************************/ 
__tx_thread_swi_system_return
    MRS     R0,         SPSR
    MOV     R1,         LR
    MSR     CPSR_cxsf,  #(Mode_SYS | NO_IRQ)
    STMFD   SP!,    {R1}                                    ; PC_pre
    STMFD   SP!,    {R0-R12, LR}							; reg
    STMFD   SP!,    {R0}									; cpsr
    
    LDR     R0,     =_tx_thread_current_ptr
    LDR     R0,     [R0]
    STR     SP,     [R0,    #8]
    ;LDR    PC,     =__tx_thread_restore
;/**************************************************************************/ 
;/*                                                                        */ 
;/*  FUNCTION                                               RELEASE        */ 
;/*                                                                        */ 
;/*    __tx_thread_restore                                                 */ 
;/*                                                           3.0a         */ 
;/*  AUTHOR                                                                */ 
;/*                                                                        */ 
;/*                                                                        */ 
;/*                                                                        */ 
;/*  DESCRIPTION                                                           */ 
;/*                                                                        */ 
;/*    Exectu thread with high priority,                                   */ 
;/*                                                                        */ 
;/*  INPUT                                                                 */ 
;/*                                                                        */ 
;/*    None                                                                */ 
;/*                                                                        */ 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -