UP
割り込みを使う
外部割り込みの使用例としてUSERボタン(青ボタン)が押されると
LCDに表示される数値が1ずつ増えていくというプログラムを書く。
前回のプロジェクトmlcdからスタートしこれに手を入れていく。
プログラム概要
変数itmp、bpを用意し割り込みが発生するとitmp++、bp=1とし、
main.cのwhile(1)ループではbpを監視しておきbpがセットされて
いればitmpの値を表示しbpを0にリセットする。
使用ライブラリ
外部割り込みのルーチンのライブラリstm8l15x_exti.h/cを使うのでstm8l15x_conf.hの
stm8l15x_exti.hをインクルードする行のコメントを外す。従って
#include "stm8l15x_clk.h"
#include "stm8l15x_exti.h"
#include "stm8l15x_gpio.h"
#include "stm8l15x_lcd.h"
となる。stm8l15x_exti.h/cをプロジェクトに加える。
stm8l15x_it.h/c
割り込みルーチンを宣言し書くstm8l15x_it.h/cをプロジェクトProject_template
からコピーしてきてプロジェクトに加える。
stm8l15x_it.cは空の割り込みルーチンを集めたものなので、そのうち
Pin1(USERボタンはPC1つまりGPIOCのPin1につながっている)の割り込みルーチン
INTERRUPT_HANDLER(EXTI1_IRQHandler, 9)に処理を書き加える:
/**
* @brief External IT PIN1 Interrupt routine.
* @param None
* @retval None
*/
INTERRUPT_HANDLER(EXTI1_IRQHandler, 9)
{
/* In order to detect unexpected events during development,
it is recommended to set a breakpoint on the following instruction.
*/
itmp++; bp=1;
EXTI_ClearITPendingBit(EXTI_IT_Pin1);
}
また外部変数宣言もしておく:
extern uint16_t itmp;
extern uint8_t bp;
main.c
(GPIOC)Pin1の割り込み設定、初期化、割り込み許可をする:
EXTI_SetPinSensitivity(GPIO_Pin_1, EXTI_Trigger_Falling);
GPIO_Init(GPIOC,GPIO_Pin_1, GPIO_Mode_In_FL_IT);
enableInterrupts();
while(1)ループは
while (1)
{
if(bp)
{
bp=0;
mint2char(itmp,tab);
LCD_GLASS_DisplayStrDeci(tab);
}
}
mint2charは整数値を16bitの”文字列”に変換する関数でmain.cの
中に書いてある。16bitなのはLCD_GLASS_DisplayStrDeciが受け取る
配列の型に合わせてあるからだが、下位8bitは普通の文字コード、
上位8bitはその文字の後ろに「:」や「.」等を付けたいときに
セットする(いらないときは0)。
プロジェクト一式(zipファイル)mit.zip
2012.02
mm@ils.uec.ac.jp