在线时间613 小时
UID252169
注册时间2010-12-5
NXP金币0
TA的每日心情 | 开心 2019-2-14 16:49 |
---|
签到天数: 296 天 连续签到: 1 天 [LV.8]以坛为家I
金牌会员
 
- 积分
- 4473
- 最后登录
- 2020-4-14
|
本帖最后由 zhjb1 于 2016-7-24 11:05 编辑
IO口中断计数是很有用的,本实验解决端口计数。
在K64F案例中已有I/O中断例程:gpio_input_interrupt。此历程利用PTA4——NMI中断实现功能。本实验更换IO口,利用PTC3口实现,改动非常简单,直接利用原来的RED_LED显示计数结果,改动如下:
在pin_mux.c中添加:
//Affects PORTC_PCR3 register
port_pin_config_t config = {0};
config.pullSelect = kPORT_PullUp;
config.mux = kPORT_MuxAsGpio;
PORT_SetPinConfig(PORTC, 3U, &config);//仅此句改了
在board.h中改了:
#define BOARD_SW3_GPIO GPIOC//改了
#define BOARD_SW3_PORT PORTC//改了
#define BOARD_SW3_GPIO_PIN 3U//改了
#define BOARD_SW3_IRQ PORTC_IRQn//改了
#define BOARD_SW3_IRQ_HANDLER PORTC_IRQHandler//改了
#define BOARD_SW3_NAME "SW3"
余不动
主函数中添加:
//Exten Plus Counter PTC3
void BOARD_SW_IRQ_HANDLER(void){
//Clear external interrupt flag.
GPIO_ClearPinsInterruptFlags(BOARD_SW_GPIO, 1U << BOARD_SW_GPIO_PIN);
//Change state of button.
//g_ButtonPress = true;
//Toggle LED.
GPIO_TogglePinsOutput(BOARD_LED_GPIO, 1U << BOARD_LED_GPIO_PIN);
t++;
}
添加初始化PTC3计数诊断功能:
//Plus Counter Initial
void plusCounInit(void){
//Define the init structure for the input switch pin
gpio_pin_config_t sw_config={kGPIO_DigitalInput,0,};
//Define the init structure for the output LED pin
gpio_pin_config_t led_config={kGPIO_DigitalOutput,0,};
//Init input switch GPIO.
PORT_SetPinInterruptConfig(BOARD_SW_PORT, BOARD_SW_GPIO_PIN, kPORT_InterruptFallingEdge);
EnableIRQ(BOARD_SW_IRQ);
GPIO_PinInit(BOARD_SW_GPIO, BOARD_SW_GPIO_PIN, &sw_config);
//Init output LED GPIO.
GPIO_PinInit(BOARD_LED_GPIO, BOARD_LED_GPIO_PIN, &led_config);
}
更改pit中中断函数:
//PIT Interupt
void PIT_LED_HANDLER(void){
//Clear interrupt flag.
PIT_ClearStatusFlags(PIT,kPIT_Chnl_0,PIT_TFLG_TIF_MASK);
js++;//Programs Counter
speed=t;
t=0;
pitIsrFlag=true;//Set Pit INT Flag
}
由于设定PIT10mS中断一次,而PWM为1000Hz,因此计数显示的speed=00010=10次/每10毫秒
结果见照片【照片还是从PTA4输入PWM脉冲】,实际上已改过来了,从PTC3中断计数。实际上,已经将PTC3,5,7,8都做成IO中断,还可以更多点,但算算可能已经够用了。
|
-
PTC3 中断计数
|