예제 #1
0
파일: Ymf825.cs 프로젝트: upsilon/ymf825
        /// <summary>
        /// アドレスとデータの書き込み命令を送信キューに追加します。
        /// </summary>
        /// <param name="address">YMF825 のレジスタ番号。範囲は 0x00 から 0x7f です。</param>
        /// <param name="data">レジスタに書き込まれるデータ。</param>
        public virtual void Write(byte address, byte data)
        {
            if (IsDisposed)
            {
                throw new ObjectDisposedException(ToString());
            }

            if (address >= 0x80)
            {
                throw new ArgumentOutOfRangeException(nameof(address));
            }

            lock (lockObject)
            {
                SpiInterface.Write(address, data);
                WriteBytes += 2;
                WriteCommandCount++;
                DataWrote?.Invoke(this, new DataTransferedEventArgs(CurrentTargetChip, address, data));

                if (AutoFlush)
                {
                    SpiInterface.Flush();
                }
            }
        }
예제 #2
0
파일: Ymf825.cs 프로젝트: upsilon/ymf825
        /// <summary>
        /// アドレスと可変長データの書き込み命令を送信キューに追加します。
        /// </summary>
        /// <param name="address">YMF825 のレジスタ番号。範囲は 0x00 から 0x7f です。</param>
        /// <param name="data">可変長データが格納された <see cref="byte"/> 型の配列。</param>
        /// <param name="offset">配列の読み出しを開始するインデクス。</param>
        /// <param name="count">配列を読み出すバイト数。</param>
        public virtual void BurstWrite(byte address, byte[] data, int offset, int count)
        {
            if (IsDisposed)
            {
                throw new ObjectDisposedException(ToString());
            }

            if (address >= 0x80)
            {
                throw new ArgumentOutOfRangeException(nameof(address));
            }

            lock (lockObject)
            {
                SpiInterface.BurstWrite(address, data, offset, count);

                WriteBytes++;
                BurstWriteBytes += count;
                BurstWriteCommandCount++;

                DataBurstWrote?.Invoke(this, new DataBurstWriteEventArgs(CurrentTargetChip, address, data, offset, count));

                if (AutoFlush)
                {
                    SpiInterface.Flush();
                }
            }
        }
예제 #3
0
파일: Ymf825.cs 프로젝트: upsilon/ymf825
        /// <summary>
        /// 書き込み命令の送信キューをフラッシュし、YMF825 に即時に実行させます。
        /// </summary>
        public void Flush()
        {
            if (IsDisposed)
            {
                throw new ObjectDisposedException(ToString());
            }

            lock (lockObject)
                SpiInterface.Flush();
        }