C-Firstボードの割り込みをe2 studioのGCCで使ってみたので状況を紹介します。
e2 studioでGNUのGCCを使うときの基本はこちらです。
https://qiita.com/Fuji_chan/items/0fd5bda8b4b34caa6c71
今回は割り込み処理のGCCへのポーティングの紹介です。
GCCでExecutable Projectを新規作成します。ターゲットデバイスはR5F104LE,Hardware Debugの構成はEZ(RL78)を選択します。
ポーティングしてみたのは,\03_サンプル・プログラム\第8章\リスト3_sample1_3です。
元のサンプルコードはこれです。
#include "iodefine.h"
void main(void)
{
PM1 = 0x7F;
OSMC |= 0x10;
RTCEN = 1;
ITMK = 0;
ITMC = 0x8000 + 15000/4-1;
__EI( );
while( 1 ) {
}
}
unsigned char p1;
#pragma interrupt intit(vect=INTIT)
void intit(void)
{
P1 ^= 0x80;
p1 = P1;
}
ポイントは2つ。割り込み許可のコードと割り込み処理関数の指定。
__EI( );
#pragma interrupt intit(vect=INTIT)
GCCでは
EI();
void INT_IT(void) __attribute__ ((interrupt));
となるので,サンプルと同じ関数構成とするなら,
#include <iodefine.h>
#include "iodefine_ext.h"
void main(void)
{
PM1 = 0x7F;
OSMC |= 0x10;
RTCEN = 1;
ITMK = 0;
ITMC = 0x8000 + 15000/4-1;
EI( );
while( 1 ) {
}
}
unsigned char p1;
#include "interrupt_handlers.h"
void INT_IT (void)
{
P1 ^= 0x80;
p1 = P1;
}
inhandler.cファイルのINT_IT関数はデフォルトで生成されているので,コメントアウトしておきます。
/*
* INT_IT (0x38)
*/
//void INT_IT (void) { }
以上で完成。
ビルドして実行するとLEDが設定した時間で点滅します。