查看: 3321|回复: 4

[原创] 【智能生活-KL25Z】FRDM_KL25Z 实验六 I/O中断实验

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

    连续签到: 1 天

    [LV.8]以坛为家I

    241

    主题

    2239

    帖子

    6

    金牌会员

    Rank: 6Rank: 6

    积分
    4473
    最后登录
    2020-4-14
    发表于 2016-9-5 14:15:46 | 显示全部楼层 |阅读模式
    本帖最后由 zhjb1 于 2016-9-5 14:23 编辑

    FRDM_KL25Z 实验六 I/O中断实验
    查FRDM KL25Z资料说明可以产生中断的I/O口有PORTA、PORTD两个口,由于D口已用了0~3作为LCD的接口,因此余下的4~7可以做实验,计划采用PORTD-5[没有别的意思,D5扣在最外边]做I/O口中断实验。看了用KL26转换过来的SDK,没有I/O中断的例程,但在MKL_GPIO.h中有关于IO口中断和清除标志的说明函数:
    #define  IO_IRQ_CONFIG(PTO, BIT, IRQ)————中断函数
    PCR(PTO,BIT) = (PCR(PTO,BIT) & (~PORT_PCR_IRQC_MASK))|PORT_PCR_IRQC(IRQ);————清中断标志
    于是参照IO口的设置在ioInit()中添加了PORTD-5的定义:
    //PORTD_5 Direct IO IRQ setting
    IO_FUN_SEL(MKL_PORTD,5,1);//PTD5=1 GPIOMODE
    GPIO_DDR_INPUT(MKL_PORTD,5);//PTD5 input
    IO_IRQ_CONFIG(MKL_PORTD,5,9);//PTD5 IRQ=9 rising edge
    参照LPTimer的中断函数
    void LPTimer_IRQHandler(void){
    LPTMR0_CSR |= LPTMR_CSR_TCF_MASK;//lptmr标志位清除
    t0++;//User Process
    }
    改成PORTD的:
    //PORTD Interupt
    void PORTD_IRQHandler(void){
    plus++;
    PCR(D,5)=(PCR(D,5)&(~PORT_PCR_IRQC_MASK))|PORT_PCR_IRQC(9);//9 is Interupt's mode
    }
    其中的plus为IO口外部信号计数器,由主程序清零并显示
    再在main中加入中断级别声明:
    NVIC_EnableIRQ(PORTD_IRQn);
    NVIC_SetPriority(PORTD_IRQn,4);//PORTD interupt level
    是pti、lptmr之后的4级中断,前者是2,3级。
    再在LCD程序中加入显示plus的数据,结果见照片。
    照片中的外部信号是从示波器上取得的1KHz3Vpp的脉冲信号作为PORTD_5的信号输入。
    以上的设计参考了KL25P80M48SF0RM.pdf这个最长的说明文档,重点是11.5.1 Pin Control Register n (PORTx_PCRn)这一节介绍的POATD_n寄存器的设置,并且在IAR中查看了寄存器的值修改设置,也受到小恩GG的提携,表示感谢。
    最后说明的是,时钟基准为6MHz,tip中断设定为0.2秒1次,主程序中测试tip的累加值为1——就是0.2秒读取IO中断的计数值,按道理应该是200个脉冲,但实际显示为380或381,非常准的两个数值。非常不理解的采样值。但没有关系,只要找到对应的修正系数就可以了。反正是实验——自我安慰吧。

    中断显示380的

    中断显示380的

    中断显示381的

    中断显示381的
    回复

    使用道具 举报

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

    连续签到: 1 天

    [LV.8]以坛为家I

    241

    主题

    2239

    帖子

    6

    金牌会员

    Rank: 6Rank: 6

    积分
    4473
    最后登录
    2020-4-14
     楼主| 发表于 2016-9-5 15:01:18 | 显示全部楼层
    突然看到照片上ADC显示为0,才想起来为了做这个IO中断实验,将ADC0注释了,打开就一切OK。自复自。Sorry
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2018-7-24 08:30
  • 签到天数: 50 天

    连续签到: 1 天

    [LV.5]常住居民I

    22

    主题

    817

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    1713
    最后登录
    2019-12-7
    发表于 2016-9-5 18:44:22 | 显示全部楼层
    看看      
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2018-7-23 21:04
  • 签到天数: 103 天

    连续签到: 1 天

    [LV.6]常住居民II

    228

    主题

    5379

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    16857
    最后登录
    1970-1-1
    发表于 2016-9-5 19:50:30 | 显示全部楼层
    多谢分享
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2016-10-27 20:36
  • 签到天数: 4 天

    连续签到: 1 天

    [LV.2]偶尔看看I

    0

    主题

    47

    帖子

    0

    注册会员

    Rank: 2

    积分
    102
    最后登录
    2016-12-4
    发表于 2016-10-20 20:17:09 | 显示全部楼层
    支持!谢谢分享!
    回复 支持 反对

    使用道具 举报

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

    本版积分规则

    关闭

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

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

    GMT+8, 2025-9-3 01:35 , Processed in 0.090743 second(s), 23 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

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