R8C I/Oポートの仕組み SFR定義ファイルの中身 SFR定義ファイルとは   sfr_r815.hファイル p1_1などの変数名をプログラム中で利用でき るようにする  I/Oポートへのアクセスの場合、1バイト単位の アクセス以外に、1ビット毎(1つのI/Oポート 毎)のアクセスもできるようにしている SFR定義ファイルの中身 #pragma ADDRESS p1_addr 00E1H : : struct bit_def{ char b0:1; char b1:1; char b2:1; char b3:1; char b4:1; char b5:1; char b6:1; char b7:1; }; union byte_def{ struct bit_def bit; char.

Download Report

Transcript R8C I/Oポートの仕組み SFR定義ファイルの中身 SFR定義ファイルとは   sfr_r815.hファイル p1_1などの変数名をプログラム中で利用でき るようにする  I/Oポートへのアクセスの場合、1バイト単位の アクセス以外に、1ビット毎(1つのI/Oポート 毎)のアクセスもできるようにしている SFR定義ファイルの中身 #pragma ADDRESS p1_addr 00E1H : : struct bit_def{ char b0:1; char b1:1; char b2:1; char b3:1; char b4:1; char b5:1; char b6:1; char b7:1; }; union byte_def{ struct bit_def bit; char.

Slide 1

R8C I/Oポートの仕組み
SFR定義ファイルの中身


Slide 2

SFR定義ファイルとは



sfr_r815.hファイル
p1_1などの変数名をプログラム中で利用でき
るようにする
 I/Oポートへのアクセスの場合、1バイト単位の

アクセス以外に、1ビット毎(1つのI/Oポート
毎)のアクセスもできるようにしている


Slide 3

SFR定義ファイルの中身
#pragma ADDRESS p1_addr 00E1H
:
:
struct bit_def{
char b0:1;
char b1:1;
char b2:1;
char b3:1;
char b4:1;
char b5:1;
char b6:1;
char b7:1;
};
union byte_def{
struct bit_def bit;
char byte;
};
union byte_def p1_addr;


Slide 4

SFR定義ファイルの中身
#pragma ADDRESS p1_addr 00E1H
:
:
struct bit_def{
char b0:1;
char b1:1;
char b2:1;
char b3:1;
char b4:1;
char b5:1;
char b6:1;
char b7:1;
};
union byte_def{
struct bit_def bit;
char byte;
};
union byte_def p1_addr;

#pragma(「プラグマ」)とは、
コンパイラに特定の情報を渡す
ために使用するコンパイラ指令
です。
この中身は、コンパイラごとに
異なっています。
この場合は、p1_addrという変数
名を、アドレス00E1に強制的に
割り当てています。
こうすることで、p1_addrという
変数名でSFRの00E1アドレスへア
クセスできるようになります。


Slide 5

SFR定義ファイルの中身
#pragma ADDRESS p1_addr 00E1H
これはbit_def構造体の定義です。
:
:
char b0:1;と宣言すると1ビットの
struct bit_def{
データとなります。
char b0:1;
char b1:1;
この構造体のサイズは全部で8
char b2:1;
ビットです。(b0~b7)
char b3:1;
char b4:1;
この構造体の変数を作成した場
char b5:1;

char b6:1;
構造体変数名.b0
char b7:1;
などの方法で、対応するビット
};
へアクセスできます。
union byte_def{
struct bit_def bit;
プログラム
構造体変数名.b0=1;
x=構造体変数名.b1
char byte;
};
5V
1 1
構造体に対応したメモリ
union byte_def p1_addr;
b7

b6

b5

b4

b3

b2

b1

b0


Slide 6

SFR定義ファイルの中身
#pragma ADDRESS p1_addr 00E1H
• これはbyte_def共用体の定義です。
:
• bitというメンバ変数(bit_def型)と、
:
byteというメンバ変数(char型)は、ど
struct bit_def{
ちらも8ビットのデータです。
char b0:1;
• この共用体のサイズは全部で8ビットで
char b1:1;
す。
char b2:1;
• この共用体の変数を作成した場合
char b3:1;
共用体変数名.byte
char b4:1;
の方法で、8ビット全体にアクセスでき
char b5:1;
ます。
char b6:1;
• この共用体の変数で
char b7:1;
共用体変数名.bit.b0
};
の方法で、1ビット毎にアクセスできま
union byte_def{
す。
struct bit_def bit;
プログラム
共用体変数名.bit.b0=1;
共用体変数名.byte=0x0F;
char byte;
};
1
構造体に対応したメモリ 0 0 0 0 1 1 1 1
union byte_def p1_addr;
b7

b6

b5

b4

b3

b2

b1

b0


Slide 7

SFR定義ファイルの中身
#pragma ADDRESS p1_addr 00E1H
これが実際の変数の宣言です。
:
:
変数名p1_addrはbyte_def共用体の変数と
struct bit_def{
して定義されています。
char b0:1;
char b1:1;
#pragmaでアドレスを00E1に割り当てて
char b2:1;
いるので、SFRにアクセスする変数となっ
char b3:1;
ています。
char b4:1;
char b5:1;
char b6:1;
char b7:1;
};
union byte_def{
struct bit_def bit;
p1_addr.bit.b0=1;
プログラム
char byte;
};
1
メモリのSFR領域
00E1
union byte_def p1_addr;
b7

b6

b5

b4

b3

b2

b1

b0


Slide 8

SFR定義ファイルの中身2
#define p1 p1_addr.byte

#define p1_0 p1_addr.bit.b0
:
:

#defineでp1_0などがプログラム
中で利用できるように定義して
います。
こうすることで、p1_0がSFR内の
ポート1のビット0にアクセス
できるようになります。