LPCXpressoとLPC800-MAXでマイコンを学ぶ(番外編:提供されているコードについて)

LPCXpressoを触っていて、気になったことがあるので書いておきます。LPC812にはARMのCortex-M0+のコアとNXPの周辺モジュールの2つが合わさったマイコンです。ブロック図はユーザーズマニュアルp7にあります。

f:id:tomo_watanabe:20131013235759p:plain

サンプルプログラムを見てて思ったのは「あれっ?これ品質的に全然ダメなんじゃね・・?」という箇所がパラパラと見かけられたことです。例えば前エントリのMRTは0チャンネルしか実装が無く、引数にチャンネル番号増やすだけでいいはずなのになんでだろう?と思って見ていったら、MRTのコードの先頭に以下の記述を発見!

/****************************************************************************
 *   $Id:: lpc8xx_mrt.c 5543 2012-10-31 02:19:19Z usb00423                     $
 *   Project: NXP LPC8xx multi-rate timer(MRT) example
 *
 *   Description:
 *     This file contains MRT timer code example which include timer 
 *     initialization, timer interrupt handler, and related APIs for 
 *     timer setup.
 *
 ****************************************************************************

"exmaple"・・・えっ!?仮にも公式で"lpc_driver_lib"っていうプロジェクトファイルなのに?ちょっとマテ、他のコードもか?と思って調べてみました。exampleという記述があるドライバは以下の通り(exmapleとはいえ、そこそこ品質のいいのもあるかも。調べてないけど)

  • MRT(lpc8xx_mrt.c)
  • Clock Configuration(lpc8xx_clkconfig.c)
  • CMP(lpc8xx_comp.c)
  • CRC(lpc8xx_crc.c)
  • GPIO(lpc8xx_gpio.c)
  • NMI(lpc8xx_nmi.c)
  • PMU(lpc8xx_pmu.c)
  • WDT(lpc8xx_wdt.c)
  • WKT(lpc8xx_wkt.c)

正式にサポートされているコードは

  • I2C(lpc8xx_i2c.c)
  • UART(lpc8xx_uart.c)
  • SPI(lpc8xx_spi.c)

ARMコアのCortex-M0+側のコードについては正式にサポートされているようです。というわけでLPC側のコードのほとんどはサンプルドライバということになります。まぁ確かにドライバはそれぞれの事情に合わせて作りこむ必要がある部分ではありますが、もう少し頑張って欲しい感じがします...(;´Д`) まぁレジスタマクロがあるだけマシなのかも...

これは、誰かがライブラリを作成して公開するなどしていかないと、なかなか流行らないかもしれませんね...ただでさえ、組み込みエンジニアは外に出てこないのでノウハウの共有ができないです(´ε`;)ウーン…