#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 制御タスク
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;
{
fract32 retval;
+ // パラメータチェック
+ if (ch >= NUM_CH)
+ ch = NUM_CH - 1;
+
/* 排他区間開始 */
wai_sem(AD7999_SEM);
retval = values[ch];