Ignore:
Timestamp:
Jun 26, 2017, 2:55:03 PM (7 years ago)
Author:
ertl-honda
Message:

nucleo_f401re依存部の追加

File:
1 edited

Legend:

Unmodified
Added
Removed
  • asp3_wo_tecs/trunk/arch/arm_m_gcc/common/core_kernel_impl.h

    r302 r303  
    33 *      Toyohashi Open Platform for Embedded Real-Time Systems/
    44 *      Advanced Standard Profile Kernel
    5  * 
     5 *
    66 *  Copyright (C) 2000-2003 by Embedded and Real-Time Systems Laboratory
    77 *                              Toyohashi Univ. of Technology, JAPAN
    88 *  Copyright (C) 2005-2015 by Embedded and Real-Time Systems Laboratory
    99 *              Graduate School of Information Science, Nagoya Univ., JAPAN
    10  * 
     10 *
    1111 *  上記著作権è€
    1212は,以下の(1)〜(4)の条件を満たす場合に限り,本ソフトウェ
     
    4545 *      å
    4646è²¬ã™ã‚‹ã“と.
    47  * 
     47 *
    4848 *  本ソフトウェアは,無保証で提供されているものである.上記著作権è€
    4949お
     
    5252 *  アの利用により直接的または間接的に生じたいかなる損害に関しても,そ
    5353 *  の責任を負わない.
    54  * 
     54 *
    5555 *  @(#) $Id: core_kernel_impl.h 322 2015-04-30 13:23:48Z ertl-ishikawa $
    5656 */
     
    6666#ifndef TOPPERS_CORE_KERNEL_IMPL_H
    6767#define TOPPERS_CORE_KERNEL_IMPL_H
     68
     69/*
     70 *  型キャストを行うマクロの定義
     71 */
     72#ifndef CAST
     73#define CAST(type, val)     ((type)(val))
     74#endif /* CAST */
    6875
    6976#ifndef TOPPERS_MACRO_ONLY
     
    133140        /*
    134141         *  PSPが有効ならタスクコンテキスト,MSPが有効なら非タスクコンテキスト
    135          *  とする. 
     142         *  とする.
    136143         */
    137144        if ((get_control() & CONTROL_PSP) == CONTROL_PSP){
     
    163170ˆåº¦ãƒžã‚¹
    164171 *  クは,BASEPRIを用いる.
    165  * 
     172 *
    166173 *  それに対してCPUロックフラグがセットされいる間は,BASEPRIを,カーネ
    167174 *  ル管理外のものを除くすべての割込み要求をマスクする値(TIPM_LOCK)と,
     
    209216 *  TIPM_LOCKは,CPUロック状æ
    210217‹ã§ã®BASEPRIの値.カーネル管理外のものを
    211  *  除くすべての割込みをマスクする値に定義する. 
     218 *  除くすべての割込みをマスクする値に定義する.
    212219 */
    213220#define IIPM_LOCK    INT_IPM(TIPM_LOCK)
     
    229236/*
    230237 *  CPUロックフラグ実現のための変数
    231  * 
     238 *
    232239 *  これらの変数は,CPUロック状æ
    233240‹ã®æ™‚のみ書き換えてもよいとする.
    234  *  インライン関数中で,アクセスの順序が変化しないよう,volatile を指定. 
     241 *  インライン関数中で,アクセスの順序が変化しないよう,volatile を指定.
    235242 */
    236243extern volatile bool_t  lock_flag;    /* CPUロックフラグの値を保持する変数 */
     
    309316}
    310317
     318
     319/*
     320 * タスクディスパッチできる状æ
     321‹ã«ãŠã„て,CPUロック解除状æ
     322‹ã‹ã‚‰ï¼ŒCPUロック
     323 * 状æ
     324‹ã¸é·ç§»ã•ã›ã‚‹é–¢æ•°ï¼Ž
     325 *
     326 * この関数は,ディスパッチできる状æ
     327‹ã§ã®ã¿å‘¼ã³å‡ºã•ã‚Œã‚‹ï¼Žãƒ‡ã‚£ã‚¹ãƒ‘ッチでき
     328 * る状æ
     329‹ã«ãŠã„ては,割込み優å
     330ˆåº¦ãƒžã‚¹ã‚¯å
     331¨è§£é™¤çŠ¶æ
     332‹ã§ã‚ã‚‹
     333 */
     334Inline void
     335lock_cpu_dsp(void)
     336{
     337    /*
     338     * この時点ではå¿
     339ず割込み優å
     340ˆåº¦å
     341¨è§£é™¤çŠ¶æ
     342‹ã§ã‚るため,
     343     * ・割込み優å
     344ˆåº¦ãƒžã‚¹ã‚¯ã‚’CPUロック状æ
     345‹
     346     * ・割込み優å
     347ˆåº¦ãƒžã‚¹ã‚¯ã®ä¿å­˜å€¤ã‚’IIPM_ENAALL
     348     * をå¿
     349ず実行する
     350     */
     351    set_basepri(IIPM_LOCK);
     352    SCS_SYNC;
     353        saved_iipm = IIPM_ENAALL;
     354        lock_flag = true;
     355        /* クリティカルセクションの前後でメモリが書き換わる可能性がある */
     356        ARM_MEMORY_CHANGED;
     357}
     358
     359/*
     360 * タスクディスパッチできる状æ
     361‹ã«æˆ»ã‚‹çŠ¶æ³ã«ãŠã„て,CPUロック状æ
     362‹ã‹ã‚‰ï¼ŒCPU
     363 * ロック解除状æ
     364‹ã¸é·ç§»ã•ã›ã‚‹é–¢æ•°ï¼Ž
     365 *
     366 * この関数は,CPUロック解除後は,ディスパッチできる状æ
     367‹ã«æˆ»ã‚‹çŠ¶æ³ã§ã®ã¿å‘¼
     368 * び出される.ディスパッチできる状æ
     369‹ã«ãŠã„ては,割込み優å
     370ˆåº¦ãƒžã‚¹ã‚¯å
     371¨è§£é™¤
     372 * 状æ
     373‹ã§ã‚ã‚‹
     374 */
     375Inline void
     376unlock_cpu_dsp(void)
     377{
     378        /* クリティカルセクションの前後でメモリが書き換わる可能性がある */
     379        ARM_MEMORY_CHANGED;
     380        lock_flag = false;
     381        set_basepri(IIPM_ENAALL);
     382}
     383
    311384/*
    312385 *  CPUロック状æ
     
    329402ˆåº¦ã®ãƒ“ットå¹
    330403(TBITW_IPRI)が 8 の場合は,-256 〜 0 が指定可能である.
    331  *   
     404 *
    332405 */
    333406#define VALID_INTPRI_CHGIPM(intpri) \
     
    406479}
    407480
    408 #define lock_cpu_dsp lock_cpu
    409 #define unlock_cpu_dsp unlock_cpu
    410 
    411481/*
    412482 *  スタートアップルーチン(start.S)
    413483 */
    414 extern void _start(void);
     484extern void _kernel_start(void);
    415485
    416486/*
     
    438508     */
    439509    sil_orw((void *)0xE000ED04, (uint32_t)(0x10000000U));
    440     unlock_cpu();
     510    unlock_cpu_dsp();
    441511    /* ここで _dispatchへジャンプ */
    442512    SCS_SYNC;
    443     lock_cpu();
     513    lock_cpu_dsp();
    444514}
    445515
     
    520590 *
    521591 *  割込みハンドラ番号(inhno)と割込み番号(intno)は,割り込み発生時に
    522  *  EPSRに設定される例外番号とする. 
     592 *  EPSRに設定される例外番号とする.
    523593 */
    524594
     
    563633 *
    564634 *  割込み属性が設定されていない割込み要求ラインに対して割込み要求禁止
    565  *  フラグをクリアしようとした場合には,falseを返す. 
     635 *  フラグをクリアしようとした場合には,falseを返す.
    566636 */
    567637Inline bool_t
     
    618688                                        (1 << (tmp & 0x1f)));
    619689        }
    620    
     690
    621691        return(true);
    622692}
     
    648718/*
    649719 *  CPU例外ハンドラ関係
    650  */ 
     720 */
    651721
    652722/*
Note: See TracChangeset for help on using the changeset viewer.