目次
前
次
GPIO動作テスト
マイコンにプッシュスイッチを4個、LEDを4個つけて
スイッチを押すと、LEDが点灯するファームウエアを
作成してみます。
ポート3の上位4ビットにLED、下位4ビットに
プッシュスイッチを接続した状態で動かします。
回路図は、以下とします。
ハードウエアは、次のボードを使います。
ポート3をGPIOで使うために、CONFIGUREレジスタに
パラメータを設定します。全部I/Oなので、0を8個
並べます。
GP3CON = 0x00000000 ;
上位を出力、下位を入力で使うので、DATレジスタの
31〜24ビットに、出力の4ビット、入力の4ビットを
指定。
GP3DAT = 0xF0000000 ;
プッシュスイッチだけを付けたいので、プルアップ
を下位4ビットに指定します。
GP3PAR = 0x00001111 ;
LEDを消灯するために、出力をすべて1に。
GP3SET = 0x000F0000 ;
ここまでの内容を、ひとつの関数にまとめて
使いやすくしておきます。
void init_usr(void)
{
/* configure Port 3 */
GP3CON = 0x00000000 ;
/* upper : output , lower : input */
GP3DAT = 0xF0000000 ;
/* pull up */
GP3PAR = 0x00001111 ;
/* upper : HIGH */
GP3SET = 0x000F0000 ;
}
プッシュスイッチの状態を反映させるために
次のシーケンスを実現します。
GP3DATの内容を読み込む
3〜0のビット値を20ビット左にシフト
GP3DATと2の内容で排他的論理和をとる
これを永久ループの中に入れて完成です。
言葉で書くと、理解しにくいですが、図にすると
次のようになります。
ソースコードは、以下。
#include <ADuC7026.h>
#define OFF 0
#define ON OFF+1
/* data definitions */
typedef unsigned char UBYTE ;
typedef signed char SBYTE ;
typedef unsigned short UWORD ;
typedef signed short SWORD ;
typedef unsigned long ULONG ;
typedef signed long SLONG ;
void init_usr(void);
int main(void)
{
ULONG tmp ;
/* initialize user */
init_usr();
/* endless loop */
while(ON)
{
/* get data */
tmp = GP3DAT ;
/* shift */
tmp <<= 20 ;
/* impress */
GP3DAT ^= tmp ;
}
/* dummy return */
return (0);
}
void init_usr(void)
{
/* configure Port 3 */
GP3CON = 0x00000000 ;
/* upper : output , lower : input */
GP3DAT = 0xF0000000 ;
/* pull up */
GP3PAR = 0x00001111 ;
/* upper : HIGH */
GP3SET = 0x000F0000 ;
}
目次
前
次