• R/O
  • HTTP
  • SSH
  • HTTPS

標籤
無標籤

Frequently used words (click to add to your profile)

javac++androidlinuxc#windowsobjective-ccocoa誰得qtpythonphprubygameguibathyscaphec計画中(planning stage)翻訳omegatframeworktwitterdomtestvb.netdirectxゲームエンジンbtronarduinopreviewer

12半音階によるトーン生成


File Info

修訂. 05c64c80a10b324b375562a6070f403efa4d0028
大小 1,991 bytes
時間 2013-06-03 23:41:51
作者 suikan
Log Message

最初のコミット

Content

/**
 * @file rotenc.c
 * @author Shinichiro Nakamura
 * @brief AD799x I2C ADCからデータを読み込み、API経由でアプリケーションへ渡す
 */

#include <t_services.h>
#include <s_services.h>
#include <i2c_subsystem.h>
#include "kernel_id.h"
#include "uzume.h"
#include "rotenc.h"

/**
 * @brief rotencのチャンネル数
 */
#define NUM_CH 4

/**
 * @brief ADC変換値保存用配列
 * @details
 * 変換値を保存する。アクセスは排他的でなければならない。値は符号付き左詰めである。
 * 整数部はないので、1ビットの符号の右に小数部が連なる。
 */
static fract32 values[NUM_CH];

/**
 * @brief rotenc制御タスク
 * @param exinf タスク引数。
 */
void rotenc_task(VP_INT exinf)
{
    while (1) {
        /* 排他区間開始 */
        syscall(wai_sem(ROTENC_SEM));
        values[0] = (((0x0F) << 8) | 0xFF) << 19;
        values[1] = (((0x0F) << 8) | 0xFF) << 19;
        values[2] = (((0x0F) << 8) | 0xFF) << 19;
        values[3] = (((0x0F) << 8) | 0xFF) << 19;
        syscall(sig_sem(ROTENC_SEM));
        /* 排他区間終了 */

        tslp_tsk(1);
    }
}

/**
 * @brief ボリューム値の取得
 * @param ch 0から始まるチャンネル指定番号。(3まで)
 * @return 32bit符号付き固定小数点数のボリューム値
 */

fract32 rotenc_get_volume(unsigned int ch)
{
    fract32 retval;

    // パラメータチェック
    if (ch >= NUM_CH) {
        ch = NUM_CH - 1;
    }

    /* 排他区間開始 */
    syscall(wai_sem(ROTENC_SEM));
    retval = values[ch];
    syscall(sig_sem(ROTENC_SEM));
    /* 排他区間終了 */

    return retval;
}

/**
 * @brief ボリューム値の設定
 * @param ch 0から始まるチャンネル指定番号。rotencは3まで
 * @param value 32bit符号付き固定小数点数のボリューム設定値
 * @details
 * ボリュームに初期値を与える。
 */
void rotenc_set_volume(unsigned int ch, fract32 value)
{
}