LPC810M021FN8 (18) -- アナログ・コンパレータ (3)
1 月 29 日付けの記事で使用した LPC810 プログラムのソース・リストと、コンパイル結果のオブジェクトの HEX ファイルを掲載します。
今回はリストの掲載だけで、詳しい説明については次回以降に回します。
LPC810M021FN8 を「単体」コンパレータとして使うための初期設定を済ませたあと、「スリープ・モード」に移行して、それ以降のプログラム実行は休止します。
/************************************************/ /* acmp_810 : Configure analog comarator (only) */ /* */ /* 2014/01/21 Crated by pcm1723 */ /************************************************/ #include "chip.h" // placeholder __attribute__((weak)) void SystemInit( void ) { } // void SystemInit() void LPC8xx_acmp_setup(ACMP_POS_INPUT_T vp_sel, // pos in ACMP_NEG_INPUT_T vm_sel, // neg in int lad_sel) // ladder value { // initailize (power ON, bus clock ON and reset) LPC_SYSCTL->PDRUNCFG &= (~SYSCTL_SLPWAKE_ACMP_PD); Chip_Clock_EnablePeriphClock(SYSCTL_CLOCK_ACOMP); Chip_SYSCTL_PeriphReset(RESET_ACMP); // Analog Comparator control register LPC_CMP->CTRL = ( ACMP_EDGESEL_FALLING // EDGESEL = fall | vp_sel // +input select | vm_sel // -input select | ACMP_HYS_5MV // hysteresis = 5 mV ); // setup voltage laddr if used if ((ACMP_POSIN_VLO == vp_sel) || (ACMP_NEGIN_VLO == vm_sel)) { LPC_CMP->LAD = ( ACMP_LADENAB_BIT // ladder enable | (ACMP_LADSEL_MASK & (lad_sel << 1)) // ladder value ); } // if (lad_sel) } // void LPC8xx_acmp_setup() void LPC8xx_pin_setup( void ) { Chip_Clock_EnablePeriphClock(SYSCTL_CLOCK_IOCON); Chip_Clock_EnablePeriphClock(SYSCTL_CLOCK_SWM); // disable pull-up/pull-down on ACMP_I1 (P0_0) LPC_IOCON->PIO0[IOCON_PIO0] &= ~PIN_MODE_MASK; // disable pull-up/pull-down on ACMP_I2 (P0_1) LPC_IOCON->PIO0[IOCON_PIO1] &= ~PIN_MODE_MASK; // enable ACMP_I1 on P0_0 (pin8 of DIP8, fixed assign) Chip_SWM_EnableFixedPin(SWM_FIXED_ACMP_I1); // enable ACMP_I2 on P0_1 (pin5 of DIP8, fixed assign) Chip_SWM_EnableFixedPin(SWM_FIXED_ACMP_I2); // enable ACMP_O on P0_4 (pin2 of DIP8) Chip_SWM_MovablePinAssign(SWM_ACMP_O_O, 4); } // void LPC8xx_pin_setup() void LPC8xx_periph_setup( void ) { LPC8xx_acmp_setup(ACMP_POSIN_ACMP_I1, ACMP_NEGIN_ACMP_I2, 0); LPC8xx_pin_setup(); } int main( void ) { LPC8xx_periph_setup(); __WFI(); // sleep } // int main()
インクルード・ファイル/ライブラリとして LPCOpen V2.01 の「chip.h」からインクルードされるファイル群と、スイッチ・マトリクス・モジュールのライブラリ「swm_8xx.c」を使っています。
Keil/ARM uVision V4.53 のコンパイラでコンパイルしたオブジェクトの HEX ファイルを下に示します。
フラッシュ・サイズは 768 バイトです。
:020000040000FA :10000000600200104D0100005D010000550100007C :1000100000000000000000000000000000000000E0 :100020000000000000000000000000005701000078 :100030000000000000000000590100005B0100000A :100040005D0100005D010000000000005D01000096 :100050005D0100005D0100000000000000000000E4 :100060005D0100005D0100005D0100005D01000018 :100070005D0100005D010000000000005D01000066 :100080000000000000000000000000000000000070 :100090000000000000000000000000000000000060 :1000A0005D0100005D0100005D0100005D010000D8 :1000B0005D0100005D0100005D0100005D010000C8 :1000C00000F002F800F032F80CA030C8083824180C :1000D0002D18A246671EAB4654465D46AC4201D180 :1000E00000F024F87E460F3E0FCCB6460126334280 :1000F00000D0FB1AA246AB4633431847F00100007C :10010000000200000023002400250026103A01D33D :1001100078C1FBD8520700D330C100D50B607047BF :100120001FB5C046C0461FBD10B510BD00F02BF86E :100130001146FFF7F5FF00F0D2F800F043F803B4E2 :10014000FFF7F2FF03BC00F047F8000007488047C4 :1001500007480047FEE7FEE7FEE7FEE7FEE7000090 :1001600004480549034A054B70470000DD020000C2 :10017000C10000006000001060020010600000106C :10018000704770477047754600F022F8AE4605008C :1001900069465346C008C000854618B020B5FFF731 :1001A000DFFF60BC00274908B6460026C0C5C0C5B1 :1001B000C0C5C0C5C0C5C0C5C0C5C0C5403D49005B :1001C0008D4670470446C046C0462046FFF7B7FF3D :1001D000004870470000001001491820ABBEFEE740 :1001E000260002007047000003490A68012383408B :1001F0001A430A60704700008080044003490A687F :10020000012383409A430A6070470000C0C1004048 :10021000020700098300064810B5520E1B18186823 :10022000FF249440A04391400143196010BD000099 :1002300000C0004070B5044611480D46816B16465B :100240000122D203914381631320FFF7CDFF0D48B4 :100250004268012109038A43426042680A434260BE :10026000204628434903411807480160002C01D06B :10027000002D03D1F106890E491C416070BD0000BC :10028000008204400080044000400240012110B57B :10029000090300220811FFF7CDFF00F001F810BD9F :1002A00010B51220FFF7A0FF0720FFF79DFF0A49B6 :1002B0004A68182082434A6007494039CA6A824323 :1002C000CA620020FFF79AFF0120FFF797FF042181 :1002D0008120FFF79DFF10BD40400440704710B5DE :1002E000FFF7D4FF30BF002010BD00000003000066 :1002F000000000106002000004010000FFFFFFFF8B :040000050000014DA9 :00000001FF
この HEX ファイルを「FlashMagic」などで書き込めば、
- 8 番ピン - 非反転入力 (+ 入力)
- 5 番ピン - 反転入力 (- 入力)
- 2 番ピン - 出力
として機能する「単体」コンパレータになります。
ただし、電源投入/リセット時に 5 番ピンが低インピーダンスのロジック「L」レベルになっていると、シリアル ISP が強制起動してしまい、ユーザプログラムが実行されないことに注意する必要があります。
SWD 接続するための 3 番ピン、4 番ピンは空いているので、SWD 経由でのフラッシュ書き込み/デバッグも可能です。 (デバッグは wfi 命令を実行後は不可)