查看: 3958|回复: 4

[原创] 【疯狂的四驱车】实验五 GPIO中断计数

[复制链接]
  • TA的每日心情
    开心
    2019-2-14 16:49
  • 签到天数: 296 天

    连续签到: 1 天

    [LV.8]以坛为家I

    241

    主题

    2239

    帖子

    6

    金牌会员

    Rank: 6Rank: 6

    积分
    4473
    最后登录
    2020-4-14
    发表于 2016-7-24 09:31:43 | 显示全部楼层 |阅读模式
    本帖最后由 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 中断计数

    PTC3 中断计数
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2020-1-12 00:23
  • 签到天数: 745 天

    连续签到: 1 天

    [LV.9]以坛为家II

    27

    主题

    1万

    帖子

    26

    金牌会员

    Rank: 6Rank: 6

    积分
    6868
    最后登录
    2020-7-15
    发表于 2016-7-24 20:45:47 | 显示全部楼层
    赞一个!
    该会员没有填写今日想说内容.
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2019-2-14 16:49
  • 签到天数: 296 天

    连续签到: 1 天

    [LV.8]以坛为家I

    241

    主题

    2239

    帖子

    6

    金牌会员

    Rank: 6Rank: 6

    积分
    4473
    最后登录
    2020-4-14
     楼主| 发表于 2016-7-24 21:58:20 | 显示全部楼层

    谢谢你的鼓励
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    2

    主题

    10

    帖子

    0

    新手上路

    Rank: 1

    积分
    26
    最后登录
    2018-10-2
    发表于 2018-9-22 19:59:43 | 显示全部楼层
    你好,我想问一下K64F的io口速度能达到多少呢?我实验发现它的中断响应速度才1M左右,而我需要3M,他的IO口能不能配置成快速模式(就是快一点的),我没找到相关配置。谢谢路过大佬!
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2019-2-14 16:49
  • 签到天数: 296 天

    连续签到: 1 天

    [LV.8]以坛为家I

    241

    主题

    2239

    帖子

    6

    金牌会员

    Rank: 6Rank: 6

    积分
    4473
    最后登录
    2020-4-14
     楼主| 发表于 2018-10-23 15:54:51 | 显示全部楼层
    wmes 发表于 2018-9-22 19:59
    你好,我想问一下K64F的io口速度能达到多少呢?我实验发现它的中断响应速度才1M左右,而我需要3M,他的IO口 ...

    好像不止1MHz速率,关键是中断处理程序必须短。如果仅仅是控制一个IO口的反转,会发现很快的,用于计数也是能到到数十MHz的,试试看
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /3 下一条

    Archiver|手机版|小黑屋|恩智浦技术社区

    GMT+8, 2025-7-18 18:25 , Processed in 0.090650 second(s), 24 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

    快速回复 返回顶部 返回列表