智能车制作

 找回密码
 注册

扫一扫,访问微社区

查看: 5603|回复: 4
打印 上一主题 下一主题

[编程类] K60 PIT模块

[复制链接]

1

主题

4

帖子

0

精华

注册会员

Rank: 2

积分
45
威望
26
贡献
11
兑换币
13
注册时间
2013-1-21
在线时间
4 小时
毕业学校
山东大学
跳转到指定楼层
1#
发表于 2013-1-21 22:35:40 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
1贡献
我写了个PIT计数出发中断的程序,发现,计数器只进一次中断,但是在ISR中,重新加载计数值就正常了,请问是什么原因?
文档上不是讲pit工作方式是计数到0产生一个中断并且重新加载计数值,又开始计数的吗?

1

主题

4

帖子

0

精华

注册会员

Rank: 2

积分
45
威望
26
贡献
11
兑换币
13
注册时间
2013-1-21
在线时间
4 小时
毕业学校
山东大学
2#
 楼主| 发表于 2013-1-22 12:30:08 | 只看该作者
求回复啊
回复

使用道具 举报

14

主题

99

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1242
威望
760
贡献
412
兑换币
156
注册时间
2011-11-10
在线时间
35 小时
3#
发表于 2013-1-23 09:33:57 | 只看该作者
进入PIT中断服务函数后要清除中断标志位才能再次进入中端
回复

使用道具 举报

1

主题

4

帖子

0

精华

注册会员

Rank: 2

积分
45
威望
26
贡献
11
兑换币
13
注册时间
2013-1-21
在线时间
4 小时
毕业学校
山东大学
4#
 楼主| 发表于 2013-1-23 13:21:56 | 只看该作者
GordonFreeman 发表于 2013-1-23 09:33
进入PIT中断服务函数后要清除中断标志位才能再次进入中端

谢谢您的回复我在中断服务子程序里清过中断了,以下是我PIT初始化程序和ISR程序,请您帮我看一下:
初始化程序:
void pit_init(PITn pitn, u32 cnt)
{

    //PIT 用的是 Bus Clock 总线频率
    //溢出计数 = 总线频率 * 时间

    /* 开启时钟*/
    SIM_SCGC6       |= SIM_SCGC6_PIT_MASK;                            //使能PIT时钟

    /* PIT模块控制 PIT Module Control Register (PIT_MCR) */
    PIT_MCR         &= ~(PIT_MCR_MDIS_MASK | PIT_MCR_FRZ_MASK );      //使能PIT定时器时钟 ,调试模式下继续

    switch(pitn)
    {
    case PIT0:   
              {
                PIT_LDVAL0  = cnt;                                         //设置溢出中断时间
                PIT_TFLG0=0x1;                                             //清中断标志位
                PIT_TCTRL0 |= ( PIT_TCTRL_TEN_MASK | PIT_TCTRL_TIE_MASK ); //使能 PITn定时器,并开PITn中断
                enable_irq(0 + 68);                                        //开接收引脚的IRQ中断
              }

      break;
      case PIT1:
              {
                PIT_LDVAL1  = cnt;                                         //设置溢出中断时间
                PIT_TFLG1=0x1;                                             //清中断标志位
                PIT_TCTRL1 |= ( PIT_TCTRL_TEN_MASK | PIT_TCTRL_TIE_MASK ); //使能 PITn定时器,并开PITn中断
                enable_irq(1 + 68);                                        //开接收引脚的IRQ中断
              }


      break;
      case PIT2:  
              {
                PIT_LDVAL2  = cnt;                                         //设置溢出中断时间
                PIT_TFLG2=0x1;                                             //清中断标志位
                PIT_TCTRL2 |= ( PIT_TCTRL_TEN_MASK | PIT_TCTRL_TIE_MASK ); //使能 PITn定时器,并开PITn中断
                enable_irq(2 + 68);                                        //开接收引脚的IRQ中断
              }

      break;
      case PIT3:
              {
                PIT_LDVAL3  = cnt;                                         //设置溢出中断时间
                PIT_TFLG3=0x1;                                             //清中断标志位
                PIT_TCTRL3 |= ( PIT_TCTRL_TEN_MASK | PIT_TCTRL_TIE_MASK ); //使能 PITn定时器,并开PITn中断
                enable_irq(3 + 68);                                        //开接收引脚的IRQ中断
              }

      break;

      }
}

ISR程序:
void pit0_isr(void)
{
  PIT_TFLG0=0x1;                                  //Clear the flag  
  GPIOA_PCOR|=GPIO_PCOR_PTCO(GPIO_PIN(28));       //Lighten yellow,E2
  delay();
  GPIOA_PCOR|=GPIO_PCOR_PTCO(GPIO_PIN(29));       //Lighten green,E3
  delay();
  j++;

}

回复

使用道具 举报

13

主题

47

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
462
威望
259
贡献
127
兑换币
140
注册时间
2015-8-12
在线时间
38 小时
毕业学校
滁大
5#
发表于 2016-1-17 20:29:27 | 只看该作者
需要使能中断优先级
回复

使用道具 举报

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

本版积分规则

关于我们|联系我们|小黑屋|智能车制作 ( 黑ICP备2022002344号

GMT+8, 2024-11-1 14:40 , Processed in 0.052911 second(s), 34 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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