本ドキュメントはCypress (サイプレス) 製品に関する情報が記載されております。 AN07-00161-2 FR Family FR80 MB91660Series 外部バスアクセスによる 蛍光表示管モジュール制御方法 AN07-00161-2 注意事項 本資料の記載内容は、予告なしに変更することがありますので、ご用命の際は営業部 門にご確認ください。 本資料に記載された動作概要や応用回路例は、半導体デバイスの標準的な動作や使い 方を示したもので、実際に使用する機器での動作を保証するものではありません。し たがいまして、これらを使用するにあたってはお客様の責任において機器の設計を行 ってください。これらの使用に起因する損害などについては、当社はその責任を負い ません。 本資料に記載された動作概要・回路図を含む技術情報は、当社もしくは第三者の特許 権、著作権等の知的財産権やその他の権利の使用権または実施権の許諾を意味するも のではありません。また、これらの使用について、第三者の知的財産権やその他の権 利の実施ができることの保証を行うものではありません。したがって、これらの使用 に起因する第三者の知的財産権やその他の権利の侵害について、当社はその責任を負 いません。 本資料に記載された製品は、通常の産業用、一般事務用、パーソナル用、家庭用など の一般的用途に使用されることを意図して設計・製造されています。極めて高度な安 全性が要求され、仮に当該安全性が確保されない場合、社会的に重大な影響を与えか つ直接生命・身体に対する重大な危険性を伴う用途(原子力施設における核反応制御、 航空機自動飛行制御、航空交通管制、大量輸送システムにおける運行制御、生命維持 のための医療機器、兵器システムにおけるミサイル発射制御をいう)、ならびに極め て高い信頼性が要求される用途(海底中継器、宇宙衛星をいう)に使用されるよう設 計・製造されたものではありません。したがって、これらの用途にご使用をお考えの お客様は、必ず事前に営業部門までご相談ください。ご相談なく使用されたことによ り発生した損害などについては、責任を負いかねますのでご了承ください。 半導体デバイスはある確率で故障が発生します。当社半導体デバイスが故障しても、 結果的に人身事故、火災事故、社会的な損害を生じさせないよう、お客様は、装置の 冗長設計、延焼対策設計、過電流防止対策設計、誤動作防止設計などの安全設計をお 願いします。 本資料に記載された製品を輸出または提供する場合は、外国為替及び外国貿易法およ び米国輸出管理関連法規等の規制をご確認の上、必要な手続きをおとりください。 本書に記載されている社名および製品名などの固有名詞は、各社の商標または登録商 標です。 Copyright© 2009 FUJITSU MICROELECTRONICS LIMITED all rights reserved 1 AN07-00161-2 改版履歴 版数 日付 内容 1.0 版 2007.3.21 新規作成 2.0 版 2009.4.13 ドキュメント名称変更 2 AN07-00161-2 目次 注意事項 ...............................................................................................................................1 改版履歴 ...............................................................................................................................2 目次 ...................................................................................................................................... 3 1 はじめに ........................................................................................................................ 4 2 マニュアル..................................................................................................................... 5 2.1 3 ハード構成..................................................................................................................... 6 3.1 4 本アプリケーションにて使用されているマニュアルについて............................... 5 推奨回路図 ............................................................................................................. 6 ソフトウエア ................................................................................................................. 7 4.1 動作 ........................................................................................................................ 7 4.2 サンプルソフト ...................................................................................................... 7 3 AN07-00161-2 1 はじめに 本アプリケーションノートは、富士通の 32 ビット MCU FR80 ファミリの外部バスによって双葉 電子工業株式会社製の蛍光表示管モジュール(グラフィックディスプレイモジュール GP1118A01B)を制御する方法について説明します。なお、制御方法の説明には、FR80 ファミリの MB91F662 を使用しています。 4 AN07-00161-2 2 マニュアル 2.1 本アプリケーションにて使用されているマニュアルについて ・双葉電子工業株式会社製の蛍光表示管モジュール(グラフィックディスプレイモジュール GP1118A01B)のアプリケーションノートは下記の URL を参照してください。ユーザー登録が 必要です。 http://www.futaba.co.jp/display/module/full_dot_md/mdl_dotmatrix.html ・富士通マイコンに関するハードウエアドキュメント類、データシート類は下記の URL か らダウンロード可能です。 http://jp.fujitsu.com/microelectronics/brochures/(日本語) http://www.fujitsu.com/global/services/microelectronics/documents/(English) ※ 上記 URL は予告なく変更される可能性があります。 5 AN07-00161-2 3 ハード構成 3.1 推奨回路図 3.3V 3.3V マイコン FR80 MB91660series P10/D08 P11/D09 P12/D10 P13/D11 P14/D12 P15/D13 P16/D14 P17/D15 P67/INT23_2 P56/WR0X P55/RDX P53/CS3X P20/A00 レベル シフタ 蛍光表示管 GP1118A01B 5.0V D0 D1 D2 D3 D4 D5 D6 D7 INT WR RD CS C/D 図 1. MB91660series と蛍光表示管モジュールの接続例 GP1118A01 には、蛍光表示管駆動回路が内蔵されていますので、MB91660series の外部 8bit データバスアクセスによって容易にディスプレイ表示制御が可能です。接続例は図 1 の通りで す。マイコン FR80 ファミリ MB91660series は 3V 製品、蛍光表示管 GP1118A01B は 5V 製品のた めレベルシフタを介した接続が必要です。制御系の端子(INT23_2,WR0X,RDX,CS3X)は、誤動 作しないよう 3.3V 電源にプルアップ抵抗処理します。GP1118A01B の C/D 端子には MB91660series の A00 端子を接続し、A00=0(偶数アドレス)アクセスでデータセット、 A00=1(奇数アドレス)アクセスでコマンドセットします。GP1118A01B の INT 端子からは 1 フレーム毎にパルスが出力されるため、MB91660series の外部割込み処理にて表示データ をセットする事で、蛍光表示管に文字や絵を表示する事ができます。 6 AN07-00161-2 4 ソフトウエア 4.1 動作 GP1118A01B には、漢字、ひらがな、数字、記号など各種フォントデータが格納されて いますので、容易に文字表示する事ができます。ここでは、このフォントデータを表示す るコマンドを使って、図 2 のように”富士通 FR80 MB91F662“と表示させ、128 フレー ム周期毎に表示文字を点滅させるサンプルソフトについて説明します。 図 2. 蛍光表示管の表示 4.2 サンプルソフト サンプルソフトでの各関数の関係を下記に示します。 main() 読み出し ① clock() ② ③ external_bus ④ external_interrupt() 割り込み ext_int_23( display1() font_data_set 図 3: 各関数の関係 7 VFD_control() AN07-00161-2 関数名 引数 戻り値 処理内容 void clock(void) void void 本関数はマイコンの動作クロックや FLASH ウェイトを以下の通り設定します。 CPU/周辺機能動作クロック 32MHz(原発振 4MHz 時) 外バス動作クロック 4MHz, FLASH ウェイト 1 サイクル void clock(void) { /****** ROM access wait setting ******/ IO_FCTLR.bit.FWC = 1; /* FLASH wait 1 */ /****** Clock Set ******/ IO_CLK.IO_DIVR0.byte = 0x00; /* BCLK:1divid */ IO_CLK.IO_DIVR1.byte = 0x70; /* TCLK:8dvide */ IO_CLK.IO_DIVR2.byte = 0x00; /* PCLK:1divid */ IO_UCCR.byte = 0x00; /* USBCLK:disable */ IO_UCCR.byte = 0x06; /* USBCLK:PLL-1divid */ IO_UCCR.byte = 0x07; /* USBCLK:enable */ IO_CLKG.IO_PLLCR.hword = 0x27F0; /* CLK:8_PLL, USB:24_PLL */ IO_PORT3.IO_EPFR19.bit.XAE = 1; /* enable X0A,X1A */ IO_CLKG.IO_CSELR.bit.SCEN = 1; /* enable SBCLK */ IO_CLKG.IO_CSTBR.bit.SOSW = 6; /* set SBCLK oscillation stabilization wait time */ IO_CLKG.IO_CSELR.bit.PCEN = 1; /* enable PLL */ while( 1 != IO_CLKG.IO_CMONR.bit.PCRDY ){ ; } IO_CLKG.IO_CSELR.bit.CKS = 2; /* Clock Select(MCLK => PLL) */ while( 2 != IO_CLKG.IO_CMONR.bit.CKM ){ ; } } 8 AN07-00161-2 関数名 引数 戻り値 処理内容 void external_bus(void) void void 本関数はマイコンの外部バスアクセスを以下の通り設定します。 void external_bus(void) { unsigned int check; /****** setting of external bus access ******/ IO_PORT2.IO_PFR2.bit.PFR20 = 1; /* A00 output */ IO_PORT2.IO_PFR5.bit.PFR53 = 1; /* CS3 output */ IO_PORT2.IO_PFR5.bit.PFR55 = 1; /* RDX output */ IO_PORT2.IO_PFR5.bit.PFR56 = 1; /* WR0X output*/ IO_PORT2.IO_PFR1.byte = 0xFF; /* D08-D15 output */ IO_EBUS.IO_ASR0 = 0x00000000; IO_EBUS.IO_ACR3 = 0x00000008; IO_EBUS.IO_AWR3 = 0x0000FFF0; IO_EBUS.IO_ASR3 = 0x00240007; /* CS0 setting invalidity */ /* Separate bus, Data 8bit */ /* CS wait setting */ /* 0x0024_0000- 64KB External bus area */ /* Little endian, WRX/CS enable */ /* write data check */ check = IO_EBUS.IO_ASR3; if(check != 0x00240007) { IO_EBUS.IO_ASR3 = 0x00240007; } } 9 /* rewrite */ AN07-00161-2 関数名 引数 戻り値 処理内容 void external_interrupt(void) void void 本関数はマイコンの外部割込みを以下の通り設定します。 INT23_2 の入力許可、立ち上がりエッジ検出割り込み許可 unsigned char pattern; void external_interrupt(void) { pattern=0x00; IO_ICR[2].byte = 0x10; IO_PORT2.IO_PFR6.bit.PFR67 = 1; IO_PORT3.IO_EPFR31.bit.INT23E0 = 0; IO_PORT3.IO_EPFR31.bit.INT23E1 = 1; IO_ELVR2.bit.LBLA23= 0x02; IO_EIRR2.byte= 0x00; IO_ENIR2.byte= 0x80; /* INT23 interrupt level setting */ /* INT23_2 input enable */ /* INT23_2 input enable */ /* INT23_2 input enable */ /* Riging edge */ /* Interrput flag clear */ /* INT23 enable */ } 10 AN07-00161-2 関数名 引数 戻り値 処理内容 void VFD_control(void) void void 本関数は蛍光表示管を初期化します。 #define VFD_Data_Access #define VFD_Comand_Access (volatile unsigned char *)(0x240000) (volatile unsigned char *)(0x240001) void VFD_control(void) { unsigned int i,j,k; unsigned char check_data; *VFD_Comand_Access = 0x14; *VFD_Data_Access = 0x20; *VFD_Comand_Access = 0x04; *VFD_Comand_Access = 0x0E; */ *VFD_Data_Access = 0x00; *VFD_Comand_Access = 0x0F; */ *VFD_Data_Access = 0x00; *VFD_Comand_Access = 0x08; for(i=0;i<0x90F;i++) { *VFD_Data_Access = 0x00; } *VFD_Comand_Access = 0x0E; */ *VFD_Data_Access = 0x00; *VFD_Comand_Access = 0x0F; */ *VFD_Data_Access = 0x00; *VFD_Comand_Access = 0x09; for(j=0;j<0x90F;j++) { check_data = *VFD_Data_Access; if(check_data != 0x00) { *VFD_Comand_Access = 0x0E; */ *VFD_Data_Access = 0x00; //0x00 *VFD_Comand_Access = 0x0F; */ *VFD_Data_Access = 0x00; //0x00 *VFD_Comand_Access = 0x08; for(k=0;k<0x90F;k++) { 11 /* internal function command */ /* R/W address auto increment */ /* lower address setting of write command /* 0x00 */ /* upper address setting of write command /* 0x00 */ /* Display data write command */ /* RAM clear (blank display) */ /* lower address setting of read command /* 0x00 */ /* upper address setting of read command /* 0x00 */ /* Display data read command */ /* RAM data check */ /* lower address setting of write command /* 0x00 */ /* upper address setting of write command /* 0x00 */ /* Display data write command */ AN07-00161-2 関数名 引数 戻り値 処理内容 __interrupt void ext_int_23(void) void void 本関数は、外部割込みに入力された蛍光表示管モジュールからのフレーム周期信 号にて、表示データを更新します。表示文字を 128 フレーム周期毎に点滅します。 __interrupt void ext_int_23(void) { IO_EIRR2.byte = 0x00; switch(pattern) { case(0x00): display1(0x00); break; /* Brightness display of 100% */ case(0x80): display1(0xFF); break; /* Brightness display of 0% */ default: break; } pattern = pattern +1; } 12 AN07-00161-2 関数名 引数 戻り値 処理内容 void display1(char set) char set: 輝度データ void 本関数は、引数として輝度データを指定し、蛍光表示管に文字を表示します。 また、文字の表示位置や、表示文字種やフォントサイズを設定します。 void display1(char set) { unsigned int i; //--------------brightness adjustment ------------------*VFD_Comand_Access = 0x13; /* brightness adjustment command */ *VFD_Data_Access = set; /* brightness setting */ for(i=0;i<100;i++); //--------------Character data of the first line------------------*VFD_Comand_Access = 0x0E; /* lower address setting of write command */ *VFD_Data_Access = 0x00; /* lower address setting (Display start address) */ *VFD_Comand_Access = 0x0F; /* upper address setting of write command */ *VFD_Data_Access = 0x00; /* upper address setting (Display start address) */ for(i=0;i<250;i++); font_data_set(0x59,0x19,0x00); /* "富" 24*24 font size */ font_data_set(0x4E,0x0B,0x00); /* "士" 24*24 font size */ font_data_set(0x4C,0x14,0x00); /* "通" 24*24 font size */ font_data_set(0x00,0x00,0xC8); /*"Blank" 8*16 font */ font_data_set(0x06,0x01,0x80); /* "F" 12*24 font size */ font_data_set(0x12,0x01,0x80); /* "R" 12*24 font size */ font_data_set(0x18,0x00,0x80); /* "8" 12*24 font size */ font_data_set(0x10,0x00,0x80); /* "0" 12*24 font size */ //--------------Character data of the second line------------------*VFD_Comand_Access = 0x0E; /* lower address setting of write command */ *VFD_Data_Access = 0x04; /* lower address setting (Display start address) */ *VFD_Comand_Access = 0x0F; /* upper address setting of write command */ *VFD_Data_Access = 0x00; /* upper address setting (Display start address) */ for(i=0;i<250;i++); font_data_set(0x0D,0x01,0x80); /* "M" 12*24 font size */ font_data_set(0x02,0x01,0x80); /* "B" 12*24 font size */ font_data_set(0x19,0x00,0x80); /* "9" 12*24 font size */ font_data_set(0x11,0x00,0x80); /* "1" 12*24 font size */ font_data_set(0x06,0x01,0x80); /* "F" 12*24 font size */ font data set(0x16,0x00,0x80); /* "6" 12*24 font size */ 13 AN07-00161-2 関数名 引数 戻り値 処理内容 void font_data_set(char font1, char font2, char size) char font1 文字コード下位データ char font2 文字コード上位データ char size フォントサイズ void 本関数は、蛍光表示管モジュールのフォント ROM を使用した文字表示を行なう 関数です。引数として、フォント種類とフォントサイズを指定します。 void font_data_set(char font1,char font2,char size) { unsigned int i; *VFD_Comand_Access = 0x07; /* font ROM data display command */ *VFD_Data_Access = font1; /* font data */ *VFD_Data_Access = font2; /* font data */ *VFD_Data_Access = size; /* font size */ for(i=0;i<250;i++); /* waiting time of font data setting */ } 14