目次

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 ; }
  • 目次

    inserted by FC2 system