PSoCの受信割込みのコードの削減
受信割込みの時間を少しでも短くしたくて試して見ました。アセンブラの事はあまり良く解りませんのでpush popの不要部分を
コメントアウト”;”して有ります。
PSoCは割込みが掛かるとBoot.asmのベクターテーブルの_RX8_1_ISRのラベルのアドレスにジャンプします。
_RX8_1_ISRはLibLibray Soursホルダーの中のrx8_1int.asmのファイルの中に有ります。
下記の部分がファイルを開くと有ります。

;-----------------------------------------------------------------------------
;  FUNCTION NAME: _RX8_1_ISR
;
;  DESCRIPTION: Unless modified, this implements only a null handler stub.
;
;-----------------------------------------------------------------------------
;
_RX8_1_ISR;
;@PSoC_UserCode_BODY@ (Do not change this line.)
   ;---------------------------------------------------
   ; Insert your custom code below this banner
   ;---------------------------------------------------
   ;   NOTE: interrupt service routines must preserve
   ;   the values of the A and X CPU registers

普通は下記の様にコンパイルされて出来たmainCのラベルにjmpする様に書きます。
//  ljmp    _isr_rx8_1    現在は"//"でコメントアウトして有ります。

コンパイルされて出来たmainC.Sファイルの中の_isr_rx8_1部分をコピーしてこの下へ貼り付けます。元のmain.Cは変更しない。そして不要だと思われる部分をコメントアウトします。
この様にしないとメインプログラムを変更するたびにmainC.Sファイルの_isr_rx8_1部分をコメントアウトしなければならないと思われる。

// _isr_rx8_1::
    .dbline -1
;   push A         コメントアウト開始
;   mov A,REG[0xd0]
;   push A
;   mov A,REG[0xd3]
;   push A
;   mov A,REG[0xd4]
;   push A
;   mov A,REG[0xd5]
;   push A
    mov A,[__r0]      ここから使用している
    push A
    mov A,[__r1]
    push A         ここまで使用している
;   mov A,[__r2]      コメントアウト再開
;   push A
;   mov A,[__r3]
;   push A
;   mov A,[__r4]
;   push A
;   mov A,[__r5]
;   push A
;   mov A,[__r6]
;   push A
;   mov A,[__r7]
;   push A
;   mov A,[__r8]
;   push A
;   mov A,[__r9]
;   push A
;   mov A,[__r10]
;   push A
;   mov A,[__r11]
;   push A
;   mov A,[__rX]
;   push A
;   mov A,[__rY]
;   push A
;   mov A,[__rZ]
;   push A
    .dbline 81        ここから受信処理(コンパイラのコードのまま)
; //-----------------------------------------------------------------------------
; // 1文字受信 RX jushin
; //void fWaitToReceiveByte(void)  
; void isr_rx8_1()
; {  
    .dbline 82
;    if (( bRxStatus & RX8_1_RX_NO_ERROR ) == 0 ){  
    tst [_bRxStatus],-32
    jnz L12
    .dbline 82
    .dbline 84
;
;         bRxData = RX8_1_bReadRxData();  
    push X
    xcall _RX8_1_bReadRxData
    pop X
    mov [_bRxData],A
    .dbline 86
;
;       if( t > 20 ) t=0;
    cmp [_t],20
    jc L14
    jz L14
X3:
    .dbline 86
    mov [_t],0
L14:
    .dbline 87
;       buffer[t] = bRxData;
    mov [__r1],[_t]
    mov [__r0],0
    add [__r1],<_buffer
    adc [__r0],>_buffer
    mov A,[_bRxData]
    mvi [__r1],A
    .dbline 88
;       t++;
    inc [_t]
    .dbline 89
;       if (bRxData == 0x0d){
    cmp [_bRxData],13
    jnz L16
    .dbline 89
    .dbline 90
;           bCrStatus = TRUE;
    mov [_bCrStatus],1
    .dbline 91
;           t--;
    dec [_t]
    .dbline 92
;           buffer[t] = '\0';
    mov [__r1],[_t]
    mov [__r0],0
    add [__r1],<_buffer
    adc [__r0],>_buffer
    mov A,0
    mvi [__r1],A
    .dbline 93
;       }
L16:
    .dbline 94
L12:
    .dbline -2
    .dbline 95
;     }
; }
L11:
;   pop A           ここからまた、コメントアウト
;   mov [__rZ],A
;   pop A
;   mov [__rY],A
;   pop A
;   mov [__rX],A
;   pop A
;   mov [__r11],A
;   pop A
;   mov [__r10],A
;   pop A
;   mov [__r9],A
;   pop A
;   mov [__r8],A
;   pop A
;   mov [__r7],A
;   pop A
;   mov [__r6],A
;   pop A
;   mov [__r5],A
;   pop A
;   mov [__r4],A
;   pop A
;   mov [__r3],A
;   pop A
;   mov [__r2],A
    pop A             ここから使用している
    mov [__r1],A
    pop A
    mov [__r0],A         ここまで使用
;   pop A             コメントアウト再開
;   mov REG[213],A
;   pop A
;   mov REG[212],A
;   pop A
;   mov REG[211],A
;   pop A
;   mov REG[208],A
;   pop A            コメントアウトはここで終りです。
    .dbline 0 ; func end
    reti
   ;---------------------------------------------------
   ; Insert your custom code above this banner
   ;---------------------------------------------------
   ;@PSoC_UserCode_END@ (Do not change this line.)

他の処理につづく

動作確認はしています。コードは増えてしまいます。割込み時間を測定して比較などもしてません。(^^;) 
参考になればです。勘違いしてたらすみませんです。

 

まごのてメカトロソフトに戻る