SlideShare a Scribd company logo
1 of 19
Download to read offline
FM音源シールド
for GR-SAKURA
SAKURAボードユーザ会
西村備山 (@lipoyang)
自己紹介
西村備山 (@lipoyang)
■奈良県在住
■組込み系技術者(ソフト)
■OSレスからLinuxまで
■たいていCかC++
■ロボット製作が趣味
FM音源シールド for GR-SAKURA
YAMAHA YM2203
1980年代に一世を風靡したFM音源チップ
わずかなデータ量のパラメータで
さまざまな楽器の音を合成できる
80年代のパソコンに広く採用
回路の設計
回路の設計
GR-SAKURA

YM2203

4MHz
マスタークロック

YM3014
FM音源出力
(デジタル)

DAC

8ビット
外部メモリバス

リセット
割り込み
(未使用)

浮動小数点

SSG音源出力
(アナログ×3ch)

Mix
&
アンプ

オーディオ
出力
GR-SAKURAのメモリバス
A0
データバス
D0-D7

nWR
nRD
nCS3
スイッチサイエンス
Arduino用バニラシールド基板
4カ所パターンカットすれば
GR-SAKURAの拡張コネクタに
ピッタリ!
メモリバス
桜ライブラリにないので自力でレジスタ設定
// read YM2203 status
#define YM2203_STATUS
(*(volatile unsigned char*)0x05000000) // CS3,A16=0
// read YM2203 register address
#define YM2203_REG_ADDR (*(volatile unsigned char*)0x05000000) // CS3,A16=0
// read/write YM2203 register value
#define YM2203_REG_DATA (*(volatile unsigned char*)0x05010000) // CS3,A16=1
SYSTEM.SYSCR0.WORD = 0x5a03;
SYSTEM.SCKCR.BIT.BCK = 4;

// enable external bus
// BCLK 1/4 prescale

MPC.PWPR.BIT.B0WI = 0;
MPC.PWPR.BIT.PFSWE = 1;

// disable access protection
//

MPC.PFCSE.BIT.CS3E = 1;
MPC.PFCSS0.BIT.CS3S = 2;
MPC.PFAOE1.BIT.A16E = 1;
MPC.PFBCR0.BYTE = 0;

//
//
//
//

enable CS3
set PC4 function as CS3
enable A16
8bit data bus, PCX as address bus

BSC.CS3CR.WORD = 0x0001 | (2 << 4);

// 8bit data bus.
マスタークロック(4MHz)
// set PC7 as MTIOC3A
MPC.PWPR.BIT.B0WI = 0;// disable access protection
MPC.PWPR.BIT.PFSWE = 1; //
MPC.PC7PFS.BIT.PSEL = 0x01; // set PC7 as MTIOC3A
MPC.PWPR.BIT.PFSWE = 0; // enable access protection again
MPC.PWPR.BIT.B0WI = 1;//
PORTC.PMR.BIT.B7 = 1;// use PC7 as peripheral
SYSTEM.PRCR.WORD = 0xA502;// disable access
MSTP(MTU) = 0;// enable MTU (MTU0-MTU5)
// stop and clear MTU3's TCNT
MTU.TSTR.BIT.CST3 = 0;
MTU3.TCNT = 0x0000;

MTU3で
protection
4MHz, Duty 50%
のパルスを発生

MTU3.TCR.BIT.TPSC = 0;// counter clock: PCLK/1 = 48MHz
MTU3.TCR.BIT.CKEG = 0;// count on rising edge
MTU3.TCR.BIT.CCLR = 1;// clear TCNT on TGRA compare match
// PWM mode 1
MTU3.TMDR.BYTE = 0x02;
// set output level
MTU3.TIORH.BIT.IOA = 1; // initially output 0, output 0 on cycle compare match
MTU3.TIORH.BIT.IOB = 2; // output 1 on duty compare match
// set cycle and duty
MTU3.TGRA = 11; // cycle = 1/4MHz = 250ns(48MHz/12 =4MHz)
MTU3.TGRB = 5;// duty = cycle/2 = 125ns
// start MTU3's TCNT
MTU.TSTR.BIT.CST3 = 1;
タイマ割り込み
TMR0+TMR1でタイマ割り込みを発生
// TMR0(8bit) + TMR1(8bit) cascaded 16bit timer mode
// TMR0: upper 8 bits / TMR1: lower 8 bits
SYSTEM.PRCR.WORD = 0xA50B; // enable writing to protected registers
MSTP(TMR01) = 0;
// turn on TMR0,1
TMR0.TCCR.BIT.CSS = 0x03;
// TMR0 clocked by TMR1 overflow
TMR1.TCCR.BIT.CSS = 0x01;
// TMR1 clocked by PCLKB / prescaler
TMR1.TCCR.BIT.CKS = 0x04;
// 1/64 prescaler for TMR1

// default BPM = 80 (80 quarter notes in 1 minute)
// interrupt interval = 1/8 * 32th note interval
//
= 60sec / (BPM*8*8)
// compare match = 60 * 1,000,000us / (BPM*4*8) * (48MHz / 64)
TMR01.TCORA = (uint16_t)((60000000UL * 48) / (80*8*8*64));
TMR0.TCR.BIT.CCLR = 0x01;// set counter clear by compare match A
TMR0.TCR.BIT.CMIEA = 0x01;// enable compare match A interrupt
TMR01.TCNT = 0x0000;// clear the counter
IPR(TMR0, CMIA0) = 1;// set interrupt priority level
IEN(TMR0, CMIA0) = 1;// enable compare match A interrupt
多重割り込み
extern "C" void Excep_TMR0_CMIA0(void) __INTTERUPT_FUNC;
extern "C" void Excep_TMR0_CMIA0(void)
{
int i;
static int tgl=0;
// enable multiple interrupt
// setpsw_i();
// for Renesas CCRX
__builtin_rx_setpsw('I');// for GCC
i = 100;
// interval procedure for playing music
MMLplayer.onTimer();
// clear interrupt
IR(TMR0, CMIA0) = 0;
}
あれ?桜ライブラリは?

ほとんど使ってません
(´・ω・`)
制御ライブラリの設計
アプリ(スケッチ)

MMLパーサクラス
( YM2203_MMLplayer )

音色構造体
( YM2203_Timbre )

YM2203制御クラス
( YM2203 )

タイマ

YM2203
昔なつかしのMML
楽譜を文字列で表現

char *note1,*note2,*note3;
note1 = (char*)"L8Q7O4V14"
"DBAGD4RDDBAGE4REE>C<BAF+4R>DDDC<AB4RD"
"DBAGD4RDDBADE4REE>C<BA>DDDDEDC<AGR>D4";
note2 = (char*)"L8Q4O5V13"
"RRRRRD16C+16D16C+16DRRRRRE16D+16E16D+16E"
"RRRRRF+16F16F+16F16F+RRRRRD16D+16E16D+16D"
"RRRRRD16C+16D16C+16DRRRRRE16D+16E16D+16E"
"RRRRRF+16F16F+16F16F+RRRRRRD4";
note3 = (char*)"L8Q8O4V14"
"G4D4G4D4G4AB>C4<G4>C4<G4A4D4A4D4GDEF+"
"G4D4G4D4G4AB>C4<G4>C4<G4A4D4ADEF+G4D4";
MMLplayer.setNote(FM_CH1, note1);
MMLplayer.setNote(FM_CH2, note2);
MMLplayer.setNote(FM_CH3, note3);
今後の課題

■プリセット音色の整備
■Android端末との通信
■MIDI対応
■もっとPhysical Computing!
■NT京都2014
ご清聴ありがとうございました
ブログで公開&解説

滴了庵日録
http://d.hatena.ne.jp/licheng/
「FM音源」でブログ内検索

More Related Content

More from Bizan Nishimura

光る縄文土器を作る
光る縄文土器を作る光る縄文土器を作る
光る縄文土器を作るBizan Nishimura
 
IoT渾天儀で太陽の運行を知る
IoT渾天儀で太陽の運行を知るIoT渾天儀で太陽の運行を知る
IoT渾天儀で太陽の運行を知るBizan Nishimura
 
ALGYAN 6th IoT基板で倒立振子
ALGYAN 6th IoT基板で倒立振子ALGYAN 6th IoT基板で倒立振子
ALGYAN 6th IoT基板で倒立振子Bizan Nishimura
 
TeXで多言語文書作成! (2011年ごろの資料)
TeXで多言語文書作成! (2011年ごろの資料)TeXで多言語文書作成! (2011年ごろの資料)
TeXで多言語文書作成! (2011年ごろの資料)Bizan Nishimura
 
だんグラ用お玉コントローラ
だんグラ用お玉コントローラだんグラ用お玉コントローラ
だんグラ用お玉コントローラBizan Nishimura
 
可視光を利用したIoTエッジデバイスとの通信
可視光を利用したIoTエッジデバイスとの通信可視光を利用したIoTエッジデバイスとの通信
可視光を利用したIoTエッジデバイスとの通信Bizan Nishimura
 
IoTマニ車でクラウドに功徳を積む
IoTマニ車でクラウドに功徳を積むIoTマニ車でクラウドに功徳を積む
IoTマニ車でクラウドに功徳を積むBizan Nishimura
 
Arduino系IDE設定切替ツール inoSwitch
Arduino系IDE設定切替ツール inoSwitchArduino系IDE設定切替ツール inoSwitch
Arduino系IDE設定切替ツール inoSwitchBizan Nishimura
 
二足歩行ロボットKXR-L2をGR-ROSEで動かす
二足歩行ロボットKXR-L2をGR-ROSEで動かす二足歩行ロボットKXR-L2をGR-ROSEで動かす
二足歩行ロボットKXR-L2をGR-ROSEで動かすBizan Nishimura
 
ラジコンで演奏する楽器
ラジコンで演奏する楽器ラジコンで演奏する楽器
ラジコンで演奏する楽器Bizan Nishimura
 
GRでシリアルサーボ
GRでシリアルサーボGRでシリアルサーボ
GRでシリアルサーボBizan Nishimura
 
Esp8266でラジコン基板
Esp8266でラジコン基板Esp8266でラジコン基板
Esp8266でラジコン基板Bizan Nishimura
 
BLEラジコン基板でIoTしてみた
BLEラジコン基板でIoTしてみたBLEラジコン基板でIoTしてみた
BLEラジコン基板でIoTしてみたBizan Nishimura
 
ミニ四足 ~歩くミニ四駆~
ミニ四足 ~歩くミニ四駆~ミニ四足 ~歩くミニ四駆~
ミニ四足 ~歩くミニ四駆~Bizan Nishimura
 
mrubyでC使う? Cでmruby使う?
mrubyでC使う? Cでmruby使う?mrubyでC使う? Cでmruby使う?
mrubyでC使う? Cでmruby使う?Bizan Nishimura
 
GR-KURUMIでミニ四駆をラジコン化
GR-KURUMIでミニ四駆をラジコン化GR-KURUMIでミニ四駆をラジコン化
GR-KURUMIでミニ四駆をラジコン化Bizan Nishimura
 

More from Bizan Nishimura (20)

光る縄文土器を作る
光る縄文土器を作る光る縄文土器を作る
光る縄文土器を作る
 
IoT渾天儀で太陽の運行を知る
IoT渾天儀で太陽の運行を知るIoT渾天儀で太陽の運行を知る
IoT渾天儀で太陽の運行を知る
 
ALGYAN 6th IoT基板で倒立振子
ALGYAN 6th IoT基板で倒立振子ALGYAN 6th IoT基板で倒立振子
ALGYAN 6th IoT基板で倒立振子
 
GR-MANGOでEtherCAT
GR-MANGOでEtherCATGR-MANGOでEtherCAT
GR-MANGOでEtherCAT
 
TeXで多言語文書作成! (2011年ごろの資料)
TeXで多言語文書作成! (2011年ごろの資料)TeXで多言語文書作成! (2011年ごろの資料)
TeXで多言語文書作成! (2011年ごろの資料)
 
GR-SAKURAでEtherCAT
GR-SAKURAでEtherCATGR-SAKURAでEtherCAT
GR-SAKURAでEtherCAT
 
だんグラ用お玉コントローラ
だんグラ用お玉コントローラだんグラ用お玉コントローラ
だんグラ用お玉コントローラ
 
可視光を利用したIoTエッジデバイスとの通信
可視光を利用したIoTエッジデバイスとの通信可視光を利用したIoTエッジデバイスとの通信
可視光を利用したIoTエッジデバイスとの通信
 
IoTマニ車でクラウドに功徳を積む
IoTマニ車でクラウドに功徳を積むIoTマニ車でクラウドに功徳を積む
IoTマニ車でクラウドに功徳を積む
 
Arduino系IDE設定切替ツール inoSwitch
Arduino系IDE設定切替ツール inoSwitchArduino系IDE設定切替ツール inoSwitch
Arduino系IDE設定切替ツール inoSwitch
 
二足歩行ロボットKXR-L2をGR-ROSEで動かす
二足歩行ロボットKXR-L2をGR-ROSEで動かす二足歩行ロボットKXR-L2をGR-ROSEで動かす
二足歩行ロボットKXR-L2をGR-ROSEで動かす
 
ラジコンで演奏する楽器
ラジコンで演奏する楽器ラジコンで演奏する楽器
ラジコンで演奏する楽器
 
CANとCANopen
CANとCANopenCANとCANopen
CANとCANopen
 
GRでシリアルサーボ
GRでシリアルサーボGRでシリアルサーボ
GRでシリアルサーボ
 
Esp8266でラジコン基板
Esp8266でラジコン基板Esp8266でラジコン基板
Esp8266でラジコン基板
 
BLEラジコン基板でIoTしてみた
BLEラジコン基板でIoTしてみたBLEラジコン基板でIoTしてみた
BLEラジコン基板でIoTしてみた
 
ミニ四足 ~歩くミニ四駆~
ミニ四足 ~歩くミニ四駆~ミニ四足 ~歩くミニ四駆~
ミニ四足 ~歩くミニ四駆~
 
SerialScreen
SerialScreenSerialScreen
SerialScreen
 
mrubyでC使う? Cでmruby使う?
mrubyでC使う? Cでmruby使う?mrubyでC使う? Cでmruby使う?
mrubyでC使う? Cでmruby使う?
 
GR-KURUMIでミニ四駆をラジコン化
GR-KURUMIでミニ四駆をラジコン化GR-KURUMIでミニ四駆をラジコン化
GR-KURUMIでミニ四駆をラジコン化
 

Recently uploaded

TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案sugiuralab
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)Hiroshi Tomioka
 
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfAWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfFumieNakayama
 
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineerYuki Kikuchi
 
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?akihisamiyanaga1
 
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...博三 太田
 
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfクラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfFumieNakayama
 
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)UEHARA, Tetsutaro
 

Recently uploaded (8)

TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
 
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfAWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
 
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
 
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
 
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
 
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfクラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
 
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
 

FM音源シールド for GR-SAKURA