2012年10月8日月曜日

TI C2000 LaunchPad 割り込み処理で悪戦苦闘

 
 テキサスインスツルメンツ(TI)のC2000 LaunchPad を 試し始めて、ほぼ1カ月たちました。
この、マイコン基板、他のマイコン基板(MSP430 LaunchPad や CQ出版の付属マイコン基板)に
に比べ やたら凝った構成になっているのに気付きました。
 例えば、以下の2点
 ●デジタルアイソレータISO72x
   PCとのシリアル通信(USBシリアル変換)を直接繋げず、デジタルアイソレータで通信によるPCからのノイズをシャットアウトするようになっているようです。
 ●LEDの点滅にロジックIC(バッファ)を使っている。
   今まで、LEDの点滅はGPIOの出力で行うのが定番と思っていたのですが、この基板、バッファを使うことで、GPIO端子が入力であろうと出力であろうと関係なく、端子の電圧レベル(Hi/Low)で点滅します。LEDはGPIO端子のモニタとなっているようです。
これらは、今後Know Howとして生かせそうな気がします。
 さて、開発の方では、CCSv5で作成するプロジェクトがデバッグは出来るものの、FlashROMへの書き込みが不調で、これがなかなか解決できずにいました。
 やむなく、デモプロジェクト(C2kLaunchPadDemo)をCCSv5にインポート(Copyで)し、
 このプロジェクトがFlashROMへの書き込みが成功するのを確かめた上で、大部分の機能を削りLEDの点滅のみのプログラムに改造しました。
 これをCCSv5でCopy/Pasteして新規のプロジェクトとして使用するようにしました。



C2000 LaunchPadのプログラム開発 第一歩
として各種 割り込みを試しました。
1.タイマ割り込
  サンプルプロジェクトtimed_led_blinkを参考にすると、難なくタイマ割り込みを実現できました。
  タイマ設定 TIMER_setPeriod(myTimer, 50 * 500000); の Period 値は const uint32_t になるような値だと問題ないのですが、uint16_tでおさまる値の場合キャスト(const uint32_t)が必要になるようです。
 また、ユーザーが使えるタイマはTimer0のみの1本で、プログラミングで工夫が必要となりそうです。

2.外部割り込み(GPIO)
  サンプルプロジェクトexternal_interruptを参考にすると、難なく外部割り込みを実現できました。
 外部割り込み(XINT1,XINT2)とGPIO入力Pinは1対1で、1つのピンにXINTnを割り当てると、他のPinに割り当てられないようです。つまり他のマイコンのように外部割り込みが ポート(複数のPin)に割り当てるようなことが出来ず、2本のGPIOの入力のみに外部割り込みが割り当て可能となるようです。

3.SCI(UART)割り込み
 サンプルプログラムscia_loopback_interruptsを 参考にするのですが、コーディングミスでSCI割り込みが失敗。各マニュアルをひっくり返すはめに、すると、割り込みを実現するために設定しなければならないレジスタがあまりにも多いことが解りました。
 また、TIが提供するソースコードで以下の誤りがありました。
 sci.cのSCI_setRxFifoIntLevel()の
     // clear the value
        sci->SCIFFTX &= (~SCI_SCIFFRX_IL_BITS); <=レジスタ間違い SCIFFRX 
 (RXFFIL4-0が初期値 11111のまま、で変更不可となってしまいます・・・・)
 
また FIFOがマニュアル上は16ワード(16バイト?)のはずが、4ワードが上限になっているようです。
 
 

0 件のコメント:

コメントを投稿