OSDN Git Service

sys_config.hからいくつかのパラメータを設定可能にした。bsp_amakusabf592/sys_config.h 参照。
[uzume/uzume_bfin.git] / uzume_prototype / kernel / uzume / ad7999.c
index a371c66..39fc6dc 100644 (file)
 #include "ad7999.h"
 
 /**
+ * @brief AD7999のチャンネル数
+ */
+#define NUM_CH 4
+
+/**
  * @brief ADC変換値保存用配列
  * @details
  * 変換値を保存する。アクセスは排他的でなければならない。値は符号付き左詰めである。
  * 整数部はないので、1ビットの符号の右に小数部が連なる。
  */
-static fract32 values[4];
+static fract32 values[NUM_CH];
 
-#define AD7999_I2C_ADRS 0x28
+/*
+ * ADCのI2Cポート。
+ * AD7999が接続されているI2Cペリフェラルのポート番号。デフォルトは0である。他のポートを使いたい時には
+ * sys_config.hで宣言すると良い。なお、I2Cコントローラ・ペリフェラルがひとつしかない場合には0を指定
+ * する。
+ */
+#ifndef UZUME_AD7999_I2C_PORT
+#define UZUME_AD7999_I2C_PORT 0x00
+#endif
+
+/*
+ * ADCのI2Cアドレス。
+ * AD7999の7bit I2Cアドレスはデフォルトで0x28と決め打ちしている。他のアドレスを使いたい時には
+ * sys_config.hで宣言すると良い
+ */
+#ifndef UZUME_AD7999_I2C_ADRS
+#define UZUME_AD7999_I2C_ADRS 0x28
+#endif
 
 /**
  * \brief ADU999 制御タスク
@@ -34,7 +56,7 @@ void ad7999_task(VP_INT exinf)
 
     while(1)
     {
-        i2c_master_read(0, AD7999_I2C_ADRS, adcbuf, 2);
+        i2c_master_read(UZUME_AD7999_I2C_PORT, UZUME_AD7999_I2C_ADRS, adcbuf, 2);
 
             /* 上位バイトのbit 5:4 をチャンネル番号として受け取る */
         ch = ( adcbuf[0] & 0x30 ) >> 4;
@@ -54,6 +76,10 @@ fract32 get_volume(unsigned int ch)
 {
     fract32 retval;
 
+        // パラメータチェック
+    if (ch >= NUM_CH)
+        ch = NUM_CH - 1;
+
     /* 排他区間開始 */
     wai_sem(AD7999_SEM);
     retval = values[ch];