
その前に概要
■代表的なペリフェラル
- LCDコントローラ:1024x76
- イーサーネット
- USART & UART x 4 max
- スマートカード, RS-485, IrDAサポート
- (LPC175x/6xは UARTのみ、スマートカード非対応)
- I2C x 3 (Fm+ x 1)
- モータ コントロール PWM
- エンコーダ インターフェース
- PWM 6ch x 2ブロック max
- タイマ x 5 (Max 10)
- リアルタイムクロック:独立電源ドメイン、バッテリ駆動可
- ウオッチドッグ
- ADC x 8ch (12-bit)
- DAC (10-bit)
LCDコントローラーがあるので最終的にはゲームボーイみたいなのが作りたいけどかなり難しいだろうな。無理だろうね
■LED点滅プログラム(Lチカ)
PSOCでもH8でも入門書の初めは必ずこれでした。ということでやり。
早速プログラムの主要部分が登場
----------------------------------
//ON・OFFマクロ定義
#define SET_PORT LPC_GPIO0->FIOSET = 1 << 22
#define CLR_PORT LPC_GPIO0->FIOCLR = 1 << 22
//タイマー用プロトタイプ宣言
void delay(uint32_t delay_ms);
void SysTick_Handler(void);
uint32_t timer_count = 0;
int main(void) {
SysTick_Config(SystemCoreClock / 1000);//タイマー初期化
LPC_GPIO0->FIODIR |= 1 << 22;//ポート0の22ビット目を出力設定
while(1) {
SET_PORT; //LED ON
delay(400); //WAIT 400msec
CLR_PORT; //LED OFF
delay(400); //WAIT 400msec
}
return 0 ;
}
//タイマー割り込み関数
void SysTick_Handler(void){
timer_count++; //カウントアップ
}
//ディレイ関数(ミリ秒)
void delay(uint32_t delay_ms){
uint32_t now_time = timer_count;
while(timer_count - now_time < delay_ms)
;
}
----------------------------------
SysTickタイマーを使っています。その名のとおりシステムのクロックカウントで数えて言ってある値(リロード値)になったら割り込み関数が呼び出されるというわけです。
動作としては
SysTick_Config(uint32_t ticks)ー>リロード値、初期値、コントロールレジスタの設定。割り込みの登録をしてタイマースタート。
リロード値はシステムクロック/1000。
システムクロックのタイミングでひたすらVALレジスタがインクリメントされる。で、リロード値になったら割り込み関数SysTick_Handlerが呼ばれる。
ディレイの考え方はこの割り込み関数は1msecごとに呼ばれるので空読みさせる回数を指定することで待ち時間を作ってる。
あとは基板上のLED2が0.4msec間隔で点滅する。これはマクロ定義されてるポート0の22ビット目

会社のオシロ200MHzで測ったら1msecまで正確に出ていました。usecまではやってません。忙しかったのです
次回はなにか表示出力ができればいいかな。LCDかUARTでシリアル通信か
そしたらかなり幅が広がるよね