* UZUME_SSM2603_I2C_ADRS はSSM2603 コーデックの I2Cデバイスアドレスである。7bitアドレスを右詰めで表現する
* デフォルトは0x1A
*
- * UZUME_AD7999_I2C_ADRS はAD7999 ADCの I2Cデバイスアドレスである。7bitアドレスを右詰めで表現する。
+ * UZUME_AD7999_I2C_ADRS はAD7991/5/9 ADCの I2Cデバイスアドレスである。7bitアドレスを右詰めで表現する。
* デフォルトは 0x28
*
* その他、I2Cペリフェラルのポート番号を指定するマクロもあるが、2012年時点で0以外には対応していないので
//#define UZUME_BLOCKSIZE 64
//#define UZUME_INT_BITS 0
//#define UZUME_SSM2603_I2C_ADRS 0x1A
-//#define UZUME_AD7999_I2C_ADRS 0x28
-
+#define UZUME_AD7999_I2C_ADRS 0x28
+//#define UZUME_SSM2603_I2C_ADRS_2
// #define MAIN_TASK_PRIORITY 7
// #define LOGTASK_PRIORITY 5
// #define CODEC_TASK_PRIORITY 4
#include "ad7999.h"
/**
- * @brief AD7999のチャンネル数
+ * @brief AD7999のチャンネル数 UZUME_AD7999_I2C_ADRS_2が宣言されている場合にはチャンネル数を2にする。
*/
+#ifdef UZUME_AD7999_I2C_ADRS_2
+#define NUM_CH 8
+#else
#define NUM_CH 4
+#endif
/**
* @brief ADC変換値保存用配列
/*
* ADCのI2Cアドレス。
- * AD7999の7bit I2Cアドレスはデフォルトで0x28と決め打ちしている。他のアドレスを使いたい時には
+ * AD7999の7bit I2Cアドレスはデフォルトで0x29と決め打ちしている。他のアドレスを使いたい時には
* sys_config.hで宣言すると良い
*/
#ifndef UZUME_AD7999_I2C_ADRS
-#define UZUME_AD7999_I2C_ADRS 0x28
+#define UZUME_AD7999_I2C_ADRS 0x29
#endif
/**
syscall(sig_sem(AD7999_SEM));
/* 排他区間終了 */
+#ifdef UZUME_AD7999_I2C_ADRS_2
+ i2ccall(i2c_master_read(UZUME_AD7999_I2C_PORT, UZUME_AD7999_I2C_ADRS_2, adcbuf, 2));
+
+ /* 上位バイトのbit 5:4 をチャンネル番号として受け取る。2番目のADCなのでオフセットは4 */
+ ch = (( adcbuf[0] & 0x30 ) >> 4) + 4;
+ /*上位バイトのbit 3;0と下位バイトから12bitのADCデータを作る。そのデータを32bitに左詰めする */
+
+ /* 排他区間開始 */
+ syscall(wai_sem(AD7999_SEM));
+ values[ch] = ( (( adcbuf[0] & 0x0F )<<8 ) | adcbuf[1] ) << 19;
+ syscall(sig_sem(AD7999_SEM));
+ /* 排他区間終了 */
+
+#endif
+
tslp_tsk(1);
}
}
* \return 32bit符号付き固定小数点数のボリューム値
*/
-fract32 get_volume(unsigned int ch)
+fract32 ad7999_get_volume(unsigned int ch)
{
fract32 retval;
return retval;
}
-
-/**
- * \brief ボリューム値の設定
- * \param ch 0から始まるチャンネル指定番号。AD7999は3まで
- * \param value 32bit符号付き固定小数点数のボリューム設定値
- * \details
- * ボリュームに初期値を与える。この関数は互換性維持用なので
- * AD7999を使う場合には中身は空である。
- */
-
-
-void set_volume(unsigned int ch, fract32 value)
-{
-}
#ifndef _MACRO_ONLY
extern void ad7999_task(VP_INT exinf);
+extern fract32 ad7999_get_volume(unsigned int ch);
#endif
#endif /* AD7999_H_ */
#include <t_services.h>
#include <cdefBF592-A.h>
#include <bsp_amakusa592.h>
+#include <ad7999.h>
void board_initialize(VP_INT exinf)
{
*pPORTG_FER = 0x00ee;
}
+
+/**
+ * \brief ボリューム値の取得
+ * \param ch 0から始まるチャンネル指定番号。Amakusaはボリュームを1個持っているだけなので、
+ * 3までのインデックスを扱う
+ */
+
+fract32 get_volume(unsigned int ch)
+{
+ if ( ch >= UZUME_NUM_VOLUME)
+ return 0;
+
+ return ( ad7999_get_volume( ch ) );
+}
+
+/**
+ * \brief ボリューム値の設定
+ * \param ch 0から始まるチャンネル指定番号。AD7999は3まで
+ * \param value 32bit符号付き固定小数点数のボリューム設定値
+ * \details
+ * ボリュームに初期値を与える。
+ */
+
+void set_volume(unsigned int ch, fract32 value)
+{
+}
#define BSP_AMAKUSA592_H_
/**
+ * \breif ボリューム入力のチャンネル数
+ * \details
+ * BSPが持つボリュームのチャンネル数。ここでいうボリュームはポテンショメータに限らない。
+ * ロータリーエンコーダーなども含む。また、システムが複数種のボリューム(例えばADCと
+ * ロータリーエンコーダー)を持つ場合には、それらのチャンネル数の総和である。
+ */
+
+#define UZUME_NUM_VOLUME 4
+
+
+/**
* \brief ボード・イニシャライザ
* \param exinf 0を渡す。関数からは無視される。
* \details
#include <t_services.h>
#include <cdefBF592-A.h>
#include <bsp_bluetank.h>
+#include <rotenc.h>
void board_initialize(VP_INT exinf)
{
*pPORTG_FER = 0x00ee;
}
+/**
+ * \brief ボリューム値の取得
+ * \param ch 0から始まるチャンネル指定番号。Amakusaはボリュームを1個持っているだけなので、
+ * 3までのインデックスを扱う
+ */
+
+fract32 get_volume(unsigned int ch)
+{
+ if ( ch >= UZUME_NUM_VOLUME)
+ return 0;
+
+ return ( rotenc_get_volume( ch ) );
+}
+
+/**
+ * \brief ボリューム値の設定
+ * \param ch 0から始まるチャンネル指定番号。AD7999は3まで
+ * \param value 32bit符号付き固定小数点数のボリューム設定値
+ * \details
+ * ボリュームに初期値を与える。
+ */
+
+void set_volume(unsigned int ch, fract32 value)
+{
+ rotenc_set_volume( ch, value );
+}
#define BSP_BLUETANK_H
/**
+ * \breif ボリューム入力のチャンネル数
+ * \details
+ * BSPが持つボリュームのチャンネル数。ここでいうボリュームはポテンショメータに限らない。
+ * ロータリーエンコーダーなども含む。また、システムが複数種のボリューム(例えばADCと
+ * ロータリーエンコーダー)を持つ場合には、それらのチャンネル数の総和である。
+ */
+
+#define UZUME_NUM_VOLUME 4
+
+/**
* \brief ボード・イニシャライザ
* \param exinf 0を渡す。関数からは無視される。
* \details
* \return 32bit符号付き固定小数点数のボリューム値
*/
-fract32 get_volume(unsigned int ch)
+fract32 rotenc_get_volume(unsigned int ch)
{
fract32 retval;
* \details
* ボリュームに初期値を与える。
*/
-void set_volume(unsigned int ch, fract32 value)
+void rotenc_set_volume(unsigned int ch, fract32 value)
{
}
#ifndef _MACRO_ONLY
extern void rotenc_task(VP_INT exinf);
+fract32 rotenc_get_volume(unsigned int ch);
+void rotenc_set_volume(unsigned int ch, fract32 value);
+
#endif
#endif /* ROTENC_H */