R8C/Tiny I/Oポートの仕組み

R8C/Tiny I/Oポートの仕組み
メモリ・マップトI/O方式
SFR : Special Function Register(特殊機能レジスタ)
アドレスの詳細はP171
メモリ・マップに内蔵モジュール機能を割り当てて使用する方式
=メモリ・マップトI/O方式
パソコンでのメモリへの書き込み
プログラムをコンパイル
C言語プログラム
:
変数xに1を記憶
x=1;
外部メモリ
1
CPU
1
1
変数xに割り当てられたメモリ
パソコンでのI/Oポートへの出力
C言語プログラム
:
p0=100;
:
outp( p0 , 1);
ポートアドレス100のI/O
ポートに1を出力
I/Oポート(メモリとは別)
ポート番号100のI/Oポート
1
CPU
1
5Vを外部へ出力
マイコンのメモリへの書き込み
C言語プログラム
:
x=1;
マイコン
内部メモリ
CPUコア
1
変数xに割り当てられたメモリ
マイコンのI/Oポートへの出力
C言語プログラム
:
p1_1=1;
メモリの一部に割り当てられた
SFR(特殊機能レジスタ)
マイコン
内部メモリ
1
1
CPUコア
変数p1_1に割り当てられたメモリ・アドレス
外部5Vを出力
サンプルプログラム
#include “sfr_r815.h”
SFRの定義(p1_1などが使えるように
している)
関数のプロトタイプ宣言
void set_IO(void);
Void main(void)
{
set_IO();
while(1){
if( p1_7 == 0){
p1_1 = 0;
}else{
p1_1 = 1;
}
if( p3_ 3== 0){
I/Oポートの初期化
p1_7==0
p1_1=0
ポートp1_7の電圧を読み込み0Vか確
ポートp1_1のLEDを点灯(0V出力
認(0VということはスイッチON)
時にLEDは光る)
p1_2 = 0;
}else{
p1_2 = 1;
}
p1_3 = ~ p1_3;
for( i=0 ; i<10000 ; i++);
}
}
Void set_IO(void)
{
drr1 = 1;
drr2 = 1;
pd1_1 = 1;
pd1_2 = 1;
p1_1 = 1;
p1_3 = 1;
}
p1_3=~p1_3
ポートp1_3を反転
ダミーのループ
(時間稼ぎ)
drr1=1
ポートp1_1を大電流に設定(駆動能力が
pd1_1=1
15mAになりLEDを点灯できる)
ポートp1_1を出力に設定
p1_1=1
ポートp1_1の初期値を5Vに設定(LED消灯)
I/Oポートの仕組みテストプログラム
void main(void){
*((char*)100)=0xFFFF;
*((char*)100)=0xFFFF;
*((char*)100)=0xFFFF;
}