はじめまして。H8初心者のマッチ箱と申します。 現在、開発環境にYellow-IDEを使い、H8S-2238のプログラムを作っている ところなのですが、タイマパルスユニット0(TPU)のTGRAレジスタにアクセス できなくて困っております。 H8-3048では、ITUのジェネラルレジスタはGRA_HとGRA_という1対の 8bitレジスタだったのですが、H8Sではこれが1つの16bitレジスタに統合 されてしまい、データシートにも「TGRAとTCNTは16bitアクセスのみ。 8bitアクセスは禁止。」と書かれています。 そこで、以下のようにプログラムを組んだのですが、どうしてもTGRA_0に まともにアクセスできず、数値が設定できません。 タイマパルスユニット0関係のレジスタ定義部 #define TSTR (*(volatile unsigned char *)0xFFFEB0) #define TCR_0 (*(volatile unsigned char *)0xFFFF10) #define TIER_0 (*(volatile unsigned char *)0xFFFF14) #define TSR_0 (*(volatile unsigned char *)0xFFFF15) #define TCNT_0 (*(volatile unsigned int *)0xFFFF16) #define TGRA_0 (*(volatile unsigned int *)0xFFFF18) ↑ TCNTとTGRAは16bitアクセスなのでポインタの型をintとした。 タイマパルスユニット0の設定部(抜粋) TCR_0 = 0x21 ; /* カウントクリア条件:TGRAコンペアマッチ クロックエッジ:L→H プリスケーラ:4分周 */ TGRA_0 = 0xABCD; // GRAに43981(=0xABCD)をセット TIER_0 = 0x01 ; // TGRAコンペアマッチ割り込みを有効とする。 TSTR = 0x01 ; // 全TPU共通レジスタ。TPU0をカウント開始とする。 リモートデバッガで、TGRA_0レジスタの値がセットされる瞬間を監視して みましたが、セットしたい値である0xABCDのうち、下位のCDだけしか セットされないような状況です。(結局、8bitアクセスしかできてない様子。) なぜなのでしょう? コンパイラが吐き出したアセンブラコードを調べてみましたところ、 TGRA_0 = 0xABCD; // GRAに43981(=0xABCD)をセット の行に相当する部分は、 MOV.W #H'ABCD,R0 MOV.L #H'00FFFF18,ER1 MOV.W R0,@ER1 となっていました。これでなぜTGRA_0に0xABCDがセットできないのか 不思議でなりません。 周囲の誰にも聞けない状況で(H8経験者ゼロ)、とうとうこちらの皆様に おすがりするしかなくなりました。不躾な質問で恐縮ですが、何とぞ知恵を お貸し下けたら嬉しいです。よろしくお願い申し上げます。