智能车制作

 找回密码
 注册

扫一扫,访问微社区

查看: 13134|回复: 33
打印 上一主题 下一主题

关于PIT模块同时使用两个中断实现两灯互闪的问题

  [复制链接]

4

主题

48

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
411
威望
285
贡献
72
兑换币
0
注册时间
2010-10-2
在线时间
27 小时
跳转到指定楼层
1#
发表于 2010-10-5 23:39:44 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我是个初学者,最近在实验的过程中想到同时使用PIT模块的0,1定时通道,实现两盏LED灯实现2比1频率的闪动。
程序代码如下:




#include <hidef.h>      /* common defines and macros */
#include "derivative.h"      /* derivative-specific definitions */
#define unsigned int uint
#define BUS_CLOCK 24000000
uint i=0;
uint j=0;
byte shuma[20]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,       //0~9对应的段码
                0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef};
void INIT_PLL(void)
{
    CLKSEL &= 0x7f;       //set OSCCLK as sysclk
    PLLCTL &= 0x8F;       //Disable PLL circuit
    CRGINT &= 0xDF;
   
    #if(BUS_CLOCK == 40000000)
      SYNR = 0x44;
    #elif(BUS_CLOCK == 32000000)
      SYNR = 0x43;     
    #elif(BUS_CLOCK == 24000000)
      SYNR = 0x42;
    #endif
    REFDV = 0x81;         //PLLCLK=2×OSCCLK×(SYNR+1)/(REFDV+1)=64MHz ,fbus=32M
    PLLCTL =PLLCTL|0x70;  //Enable PLL circuit
    asm NOP;
    asm NOP;
    while(!(CRGFLG&0x08)); //PLLCLK is Locked already
    CLKSEL |= 0x80;        //set PLLCLK as sysclk
}
void PitInit(void){
  PITCFLMT_PITE = 1; //使能PIT模块
  PITCE = 0X00;      //通道0,1 PIT模块禁止
  PITINTE = 0x03;    //通道0,1中断使能
  PITMUX = 0x00;      //16位定时通道0使用0号8位微计数器,16位定时器1使用1号微计数器
  PITLD0 = 240-1;
  PITMTLD0 = 100-1;
  PITLD1 = 120-1;
  PITCE = 0X03;      //通道0,1 PIT模块使能
}
void InitPortb(void){
  DDRB = 0XFF;
  PORTB = 0XFF;
}
void main(void) {
  INIT_PLL();    //设置锁相环
  PitInit();     
  InitPortb();
EnableInterrupts;

  for(;;) {
   
  } /* loop forever */
  /* please make sure that you never leave main */
}
#pragma CODE_SEG __NEAR_SEG NON_BANKED
interrupt 66 void PIT0(void){
    PITTF_PTF0 = 1;
    i++;
    if(i==1000){
    i = 0;  
    PORTB_PB0 = ~PORTB_PB0;
    }
}
interrupt 67 void PIT1(void){
    PITTF_PTF1 = 1;
    j++;
    if(j==1000){
    j = 0;
    PORTB_PB1 = ~PORTB_PB1;
    }
}


但是我实际运行发现,两盏灯居然同频率闪,我之前已经设置了PITLD0,PITLD1一个是240-1,一个是120-1,两个通道同时使用0微计数器,数值为100-1,中断向量也对了,感觉也没什么问题,大惑不解。我感觉两个中断都进入了,那么我就试着改了一下PITLD,把他们都改成同一个数值240-1,结果一运行,晕死我了,这回只有一盏灯在闪(亮一秒灭一秒),PIT通道2中断感觉是进不去了,非常疑惑。
请高手赐教到底什么原因。

1

主题

71

帖子

0

精华

高级会员

Rank: 4

积分
652
QQ
威望
363
贡献
87
兑换币
34
注册时间
2009-12-30
在线时间
101 小时
2#
发表于 2010-10-10 13:45:12 | 只看该作者
两个中断同时发生,cpu响应优先级高的那个,优先级低的中断忽略了
回复 支持 反对

使用道具 举报

4

主题

48

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
411
威望
285
贡献
72
兑换币
0
注册时间
2010-10-2
在线时间
27 小时
3#
 楼主| 发表于 2010-10-11 07:20:40 | 只看该作者
但是我在设定的时候,两个中断没有同时发生吧,一个是1ms发生一次,一个是0.5ms发生一次,而我觉得中断程序运行也就是微秒级的时间,不会有冲突,再说了一个中断发生时总中断应该是自动关闭的,需要手动打开的,不会有优先级的问题吧。希望有大师们复制下程序到自己的单片机试试看
回复 支持 反对

使用道具 举报

0

主题

9

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
219
威望
179
贡献
30
兑换币
0
注册时间
2010-10-6
在线时间
5 小时
4#
发表于 2010-10-15 20:30:04 | 只看该作者
你将中断服务程序中的PITTF_PTF0 = 1;改为PITCE_PCE0=0ITCE_PCE0=1;这两句,还有1通道的也改下应该就好了,试试看行不行
回复 支持 反对

使用道具 举报

4

主题

48

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
411
威望
285
贡献
72
兑换币
0
注册时间
2010-10-2
在线时间
27 小时
5#
 楼主| 发表于 2010-10-19 17:59:59 | 只看该作者
成功了!谢谢这位同学了,但是你能告诉我这个什么道理吗?
回复 支持 反对

使用道具 举报

0

主题

9

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
219
威望
179
贡献
30
兑换币
0
注册时间
2010-10-6
在线时间
5 小时
6#
发表于 2010-10-21 10:11:32 | 只看该作者
我调试时看了下   用这PITTF_PTF0 = 1好像清除不了标志位,翻了下数据手册看到If flag clearing by writing a one and flag setting happen in the same bus clock cycle, the flag remains set. The flag bits are cleared if the PIT module is disabled or if the corresponding timer channel is disabled.我想应该是这个问题吧   我也是新手,看到你发的这个程序我才去学习了下这个模块  呵呵
回复 支持 反对

使用道具 举报

4

主题

48

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
411
威望
285
贡献
72
兑换币
0
注册时间
2010-10-2
在线时间
27 小时
7#
 楼主| 发表于 2010-10-23 14:48:08 | 只看该作者
恍然大悟,哎,还是你比较认真,DATASHEET这部分我之前也看了,没在意,当时没有做实验,原来是这么回事,还是多做实验好啊,记得牢。
回复 支持 反对

使用道具 举报

2

主题

203

帖子

0

精华

高级会员

Rank: 4

积分
741
QQ
威望
434
贡献
249
兑换币
0
注册时间
2010-11-1
在线时间
29 小时
8#
发表于 2010-11-29 09:45:56 | 只看该作者
学习
回复 支持 反对

使用道具 举报

2

主题

203

帖子

0

精华

高级会员

Rank: 4

积分
741
QQ
威望
434
贡献
249
兑换币
0
注册时间
2010-11-1
在线时间
29 小时
9#
发表于 2010-11-29 15:24:19 | 只看该作者
很实用
回复 支持 反对

使用道具 举报

2

主题

28

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
434
QQ
威望
255
贡献
165
兑换币
0
注册时间
2011-2-13
在线时间
7 小时
10#
发表于 2011-3-7 10:28:37 | 只看该作者
其实我也能回答出来
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-12-27 00:43 , Processed in 0.168867 second(s), 30 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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