• 締切済み

AKI-RX621で外部バスクロックを出力するには

AKI-RX621で外部バスクロック(BCLK)からクロックパルスを出力したいのですが、ハードウェエアマニュアルの8.10.3を参照して以下のように記述したのですが、上手くいきませんでした。 記述の仕方が間違っているか、対応するヘッダファイルをインクルードしていないせいなのではないかと思いますが、よくわかっていないのが現状です。プログラムはTB6560AHQを使って二相バイポーラステッピングモータを駆動させるためのものです。教えていただけたら幸いです。 #include"iodefine.h" #include "typedefine.h" #ifdef __cplusplus #include <ios> // Remove the comment when you use ios _SINT ios_base::Init::init_cnt; // Remove the comment when you use ios #endif void main(void); #ifdef __cplusplus extern "C" { void abort(void); } #endif void main(void) { PORTA.DDR.BYTE=0xff; /* ポートAの端子は全て出力端子に設定する */ PORTA.DR.BYTE=0x00; /* ポートAの出力端子を初期設定する */ PORT5.DDR.BYTE=0xff; PORT5.DR.BYTE=0x00; SCKCR.PSTOP.BIT=0; //BCLK出力設定 PORT5.DDR.B3=1; //出力ポートに設定 SCKCR.BCK[3:0]=0000; //BCLKの周波数設定 BCLKDIV.BCKCR.B0=1; //BCLK端子からBCLKの2分周クロックを出力 PORTA.DR.BIT.B0=1; //RESETをHにする PORTA.DR.BIT.B1=1; //ENABLEをHにする } #ifdef __cplusplus void abort(void) { } #endif

みんなの回答

  • Visar
  • ベストアンサー率19% (17/87)
回答No.1

こんにちは。 何か勘違いされているようですね。 外部バスクロック(BCLK)は文字通り 外部に引っ張り出したバス用のクロックですから、 使い方が違いますね。 それに、TB6560AHQのクロック入力は ~15KHzまでなので、BCLKを出力させたとしても そんなに遅いクロックは作れるのか疑問です。(しっかり調べてません。) TB6560AHQのクロックを作って、出力したいのであれば、 MTU(マルチファンクションタイマ/パルスユニット)か、 PPG(プログラマブルパルスジェネレータユニット)で クロックを生成/供給してください。 ルネサスのアプリケーションノートの 「2.16 MTUタイマ」あたりが参考になると思います。 URL貼り付けておきます。 がんばってください。 以上です。 外していたらごめんなさい。

参考URL:
http://documentation.renesas.com/doc/products/mpumcu/apn/rx/r01an0586ju_rx.pdf
nanokananoka
質問者

お礼

回答ありがとうございます。早速参考にしてやってみようと思います。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • 組み込みマイコン

    組み込みマイコンでプログラミングしていると以下の様なエラーがでるのですが原因が分かりません。 教えてください。 C:\WorkSpace\sample\sample\sample.c(33) : C5020 (E) Identifier "PORTA" is undefined C5020 (E) Identifier "名前" is undefined シンボル"名前"の定義がありません。 プログラムは以下のようになっています。マイコンはAKI-RX621。 /***********************************************************************/ /* */ /* FILE :sample.c */ /* DATE :Tue, Apr 23, 2013 */ /* DESCRIPTION :Main Program */ /* CPU TYPE :RX62N */ /* */ /* This file is generated by Renesas Project Generator (Ver.4.53). */ /* NOTE:THIS IS A TYPICAL EXAMPLE. */ /* */ /***********************************************************************/ //#include"iodefine,h" //#include "typedefine.h" #ifdef __cplusplus //#include <ios> // Remove the comment when you use ios //_SINT ios_base::Init::init_cnt; // Remove the comment when you use ios #endif void main(void); #ifdef __cplusplus extern "C" { void abort(void); } #endif void main(void) { long int t; /* 変数tの設定 */ PORTA.DDR.BYTE=0xff; /* ポートAの端子は全て出力端子に設定する */ PORTA.DR.BYTE=0x00; /* ポートAの出力端子を初期設定する */ while(1) /* 無限ループ */ { for(t=0;t<6000000;t++); /* 約1秒間の時間保持 */ PORTA.DR.BYTE=0x01; /* LED(赤)を点灯、LED(緑)を消灯 */ for(t=0;t<6000000;t++); /* 約1秒間の時間保持 */ PORTA.DR.BYTE=0x02; /* LED(緑)を点灯、LED(赤)を消灯 */ } } #ifdef __cplusplus void abort(void) { } #endif

  • AKI-h8 3069f C言語 HEW マイコン DIPスイッチで LED ON_OFF プログラム 「組込みI/O制御演習」

    こんにちは。 標記開発環境でマイコンを制御しています。 下記ソースでDIPスイッチのONOFFでLEDを点灯させたいのですが うまくいきません。 多分 P4DR.BIT.B0 =~P5DR.BIT.B0; の部分の修正が必要かと思うのですが。 どなたかご存知の方よろしくお願いします。 //------------------ #include "iodefine.h" void main(void); #ifdef __cplusplus extern "C" { void abort(void); } #endif void main(void) { P5DDR = 0; P5PCR.BYTE = 0xff; P4DDR = 0xff; while(1) { P4DR.BIT.B0 =~P5DR.BIT.B0; } } #ifdef __cplusplus void abort(void) { } #endif

  • AKI-H8/3048Fでのタイマ割り込み

    秋月電子で http://akizukidenshi.com/catalog/items2.php?p=1&q="K-00004" を買いマイコンの勉強をしています。 コンパイル等はGCC Developer Lite、モニタプログラムを使いRAM上で 動作確認をしています。 タイマによる割り込みをしたいと思い、参考書のプログラムを参考に マザーボード上の2つのLEDが交互に光るようにしたいのですが、 肝心のint_imaia0()が全く実行されていません。 #include <3048.h> int c; void int_imia0( void ) { ITU0.TSR.BIT.IMFA = 0; c -= 1; if( c == 0 ){ P5.DR.BYTE = ~ P5.DR.BYTE; c = 10; } } int main( void ) { c = 10; P5.DDR = 0x03; ITU0.TCR.BIT.CCLR = 1; ITU0.TCR.BIT.TPSC = 3; ITU0.GRA = 39999; ITU.TSTR.BIT.STR0 = 1; P5.DR.BYTE = 0x01; EI; while( 1 ){ } } また、割り込みを使わない方法ということで #include <3048.h> int main( void ) { int c = 10; P5.DDR = 0x03; ITU0.TCR.BIT.CCLR = 1; ITU0.TCR.BIT.TPSC = 3; ITU0.GRA = 39999; ITU.TSTR.BIT.STR0 = 1; P5.DR.BYTE = 0x01; while( 1 ){ while( !ITU0.TSR.BIT.IMFA ); c -= 1; if( c == 0 ){ P5.DR.BYTE = ~ P5.DR.BYTE; c = 10; } ITU0.TSR.BIT.IMFA = 0; } } を試したのですが、こちらはLEDが交互に点滅して成功しています。 なのでタイマ自体は動作していると思うのでですが、上のプログラムだと int_imaia0()動作しません。 何がいけないのでしょうか?よろしくお願いします。

  • 【pic】ビットを取り出して、足し算、出力

    問 PORTB に信号を入力する。この信号のうち、上位4ビットと下位4ビットを取り出し、それぞれを足し算して、PORTAに出力するプログラムを作成せよ。以下を参考にせよ。 参考 #include <pic.h> void main(void) { int x, y, z; TRISA = 0x00; TRISB = 0xFF; for(;;) { x = (0b11000000 & PORTB) >> 6; y = (0b00111000 & PORTB) >> 3; PORTA = x; } } ということで、実際に作っては見たのですが、あっているかどうかも不明です。特に苦手な分野ですので詳しい解説の方よろしくお願い致します。 自身で書いてみたプログラム↓ #include <pic.h> void main(void) { int x, y, z; TRISA = 0x00; TRISB = 0xFF; for(;;) { x = (0b11000000 & PORTB) >> 4; y = (0b00111000 & PORTB) << 0; z = x + y; PORTA = z; } }

  • ライブラリで宣言した構造体が認識されない

    ライブラリのヘッダファイル complex.h #ifndef COMPLEX_H #define COMPLEX_H #ifdef __cplusplus extern "C"{ #endif typedef struct{ double real,imaginary; } COMPLEX; extern int complex_error_code; extern COMPLEX add_complex(COMPLEX a ,COMPLEX b); #ifdef __cplusplus } #endif #endif ライブラリのソースファイル complex.c #include <stdio.h> #include <math.h> #include "complex.h" int complex_error_code = 0; COMPLEX add_complex(COMPLEX a ,COMPLEX b) { COMPLEX c; c.real=a.real+b.real; c.imaginary=a.imaginary+b.imaginary; return c; } 動作確認のアプリケーションファイル test_complex.c #include <stdio.h> int main(void) { COMPLEX z,z1,z2; z1={1.0,1.0}; z2={2.0,2.0}; z=add_complex(z1,z2); printf("%lf+%lfi",z.real,z.imaginary); return 0; } COMPLEX undeclared (first use in this function) というエラーメッセージが出て、宣言したはずの構造体COMPLEXが認識されていないようなのですが、理由がわかりません。 よろしくお願いします。

  • Aki-h8/3052マイコンについて

    今Aki-h8/3052マイコンを勉強しているのですが、初心者のためうまくいかず質問をしました。知識がないと思われるような質問をしてしまいますが、よろしくお願いします。 次のようなプログラムを書き込んで、LEDを点滅させたいのですが点滅しません。原因がわからないので、教えていただける方がいたらよろしくお願いします。 #define P5DDR (*(volatile unsigned char*)0xffffc8) #define P5DR (*(volatile unsigned char*)0xffffca) void wait (long loop){ while(loop--); } int main(void){ P5DDR = 0xff; while(1){ P5DR = 0xff; wait(200000); P5DR = 0; wait(200000); } } ポートBを使用した場合うまくいくのですが、ポート5を使用するとうまくいきません。 コンパイラにはGDLを、書き込みにはH8Write Turboを使用しています。

  • PICプログラミングに対する質問

    PIC16F627Aを使い、160KHzの周波数を外部に出力したいのですが、うまくいきません。 仕様はこのようになっています。 セラロックとして10MHzを使っています。(20MHzを使うことも考えている) 電源は5Vです。 開発環境はMPLAB IDEに CCS社Cコンパイラを使っています。 現在のプログラムはこのようになっています。 //////////////////////////////////////////////////////////////////////// //タイマ0を用いて160KHzの周波数を出力する //3.1μsでタイマ0の割り込み //////////////////////////////////////////////////////////////////////// #include<16f627a.h> #fuses HS,NOWDT,NOPROTECT,PUT,BROWNOUT,NOLVP  //コンフィグレーションの設定 #use delay(CLOCK = 10000000)      //発振子の周波数10MHz  //delay_ms()の使用 //定数の定義 #byte  PORTA=0x05 #bytePORTB=x06 #byte TMR0 = 0x01 #bit T0IF = 0x0B.2 //タイマ0割り込み処理 #INT_RTCC //タイマ0の割り込み処理関数の宣言 void rtcc_isr(void) { T0IF=0; //タイマ0の割り込みフラグ TMR0=0xF8; //タイマ0の初期値 PORTA^=0x04; //PORTAの出力反転 } //メイン関数 void main(void){ set_tris_a(0xF8); //出力ポートの設定 set_tris_b(0xF7); //出力ポートの設定 setup_timer_0(RTCC_INTERNAL | RTCC_DIV_1);//プリスケーラを使用しない set_timer0(0x0); //TMR0に0x0を書き込む enable_interrupts(INT_RTCC); //タイマ0の割り込み許可 enable_interrupts(GLOBAL); //グローバルの許可 PORTB = 0x7F; //出力 while(1){ //割り込みを待つ delay_ms(1); //1μs } } ///////////////////////////////////////////////////////////////////// このようなプログラムで160KHzの周波数を出力することは可能でしょうか? もし不足の部分や誤っていることがあったら教えてください。

  • C++の組込みマクロのassert()が使えない

    こんにちは。 CygwinでC++開発を行っているのですが、C++の関数型マクロであるassert()が使えなくて困っています。 main関数を含むソースファイルに、 #include assert.h を記述しておけば使えるはずなのですが、そのソースファイルから実行ファイルを、 g++コマンドでビルドしようとすると、以下のようなエラーが出ます。 ------------------------------------------------------------ $ g++ test03-STLの使用.cpp /cygdrive/c/Users/Kei/AppData/Local/Temp/cckwDP4e.o:test03-STLの使用.cpp:(.text+0x904): undefined reference to `___assert_func' collect2: ld はステータス 1 で終了しました ------------------------------------------------------------ test03-STLの使用.cpp のmain関数は、以下の通りです。 ------------------------------------------------------------ int main() { string s="ABC DEF\nGH\tIJ"; reverse(s.begin(), s.end() ); assert(s=="JI\tHG\nFED CBA"); cout<<s return 0; } ------------------------------------------------------------ ちなみに、実際にインクルードされる /usr/include/assert.h の内容は以下のようになっていました。 ------------------------------------------------------------ /* assert.h */ #ifdef __cplusplus extern "C" { #endif #include "_ansi.h" #undef assert #ifdef NDEBUG /* required by ANSI standard */ # define assert(__e) ((void)0) #else # define assert(__e) ((__e) ? (void)0 : __assert_func (__FILE__, __LINE__, \ __ASSERT_FUNC, #__e)) # ifndef __ASSERT_FUNC /* Use g++'s demangled names in C++. */ # if defined __cplusplus && defined __GNUC__ # define __ASSERT_FUNC __PRETTY_FUNCTION__ /* C99 requires the use of __func__. */ # elif __STDC_VERSION__ >= 199901L # define __ASSERT_FUNC __func__ /* Older versions of gcc don't have __func__ but can use __FUNCTION__. */ # elif __GNUC__ >= 2 # define __ASSERT_FUNC __FUNCTION__ /* failed to detect __func__ support. */ # else # define __ASSERT_FUNC ((char *) 0) # endif # endif /* !__ASSERT_FUNC */ #endif /* !NDEBUG */ void _EXFUN(__assert, (const char *, int, const char *) _ATTRIBUTE ((__noreturn__))); void _EXFUN(__assert_func, (const char *, int, const char *, const char *) _ATTRIBUTE ((__noreturn__))); #ifdef __cplusplus } #endif ------------------------------------------------------------ Borland C++ Compilerのbcc32コマンドでは、先ほどのソースファイルから実行ファイルをビルドすることができたので、何が問題なのかが分かりません。 以上の件について何かご存知の方がいらっしゃれば、是非教えて頂きたいと思います。 では、よろしくお願い致します。

  • H8-3048 LED点灯プログラムについて

    初歩的な質問で申し訳ございません。 H8-3048でスイッチ入力によってLEDを点灯させたいのですが、 スイッチの押されたタイミングによって LEDの点灯状況が変化してしまいます。 何故でしょうか?回路側の問題?ご助言お待ちしています。 参考までに下にLED点灯ソースコードを示します。 #include <3048f.h> #define led P1.DR.BYTE /*P1.DR.BYTEをledに割り当て*/ #define sw1 PA.DR.BIT.B2 #define sw2 PA.DR.BIT.B3 void initport(void) /*入出力端子設定*/ { P1.DDR = 0xff; PA.DDR = 0x00; } int main( void ){ initport(); led = 0x00; /*初期値設定*/ while(1){ if( sw1 == 1 ){ /*sw1が押された時LED点灯*/ led = 0xff;} else if( sw2 == 1 ){ /*sw2が押された時LED消灯*/ led = 0x00;} else{ led;} /*それ以外はLEDの状態保持*/ } }

  • VC++2010 EE で #ifdef _MSC_VER #endi

    VC++2010 EE で #ifdef _MSC_VER #endif でエラー ソース始まり // _msc_ver.cpp : コンソール アプリケーションのエントリ ポイントを定義します。 // #ifdef _MSC_VER #include "stdafx.h" #endif int _tmain(int argc, _TCHAR* argv[]) { return 0; } ソース終わり > fatal error C1020: 予期しない #endif です。 と出ます。なぜでしょうか?