查看: 4060|回复: 7

[已解决] MKL25Z128输出比较问题(已解决)

[复制链接]

该用户从未签到

6

主题

17

帖子

0

新手上路

Rank: 1

积分
36
最后登录
1970-1-1
发表于 2013-7-4 16:37:02 | 显示全部楼层 |阅读模式
 
我用MKL25Z128输出比较功能,想用翻转做一个方波。这是我的程序
void  Output_Compare_Init(void)
{
 SIM_SCGC6 |= SIM_SCGC6_TPM2_MASK ;
 SIM_SOPT2 |= SIM_SOPT2_PLLFLLSEL_MASK | SIM_SOPT2_TPMSRC(1);    //´ò¿ªÊ±ÖÓÃÅ
 TPM2_SC   = TPM_SC_CMOD(1) | TPM_SC_PS(3) | TPM_SC_TOIE_MASK;   //8·ÖƵ
 TPM2_CNT = 0;
 TPM2_MOD =3000;
 NVIC_EnableIRQ(TPM2_IRQn);
  NVIC_SetPriority(TPM2_IRQn,3);                                         
}
 
void Output_Compare_Open(void)
{
 SIM_SCGC5 |= SIM_SCGC5_PORTE_MASK;
 TPM2_C0SC &= ~(TPM_CnSC_MSA_MASK |TPM_CnSC_MSB_MASK|TPM_CnSC_ELSA_MASK|TPM_CnSC_ELSB_MASK);
 TPM2_C0SC |= TPM_CnSC_MSA_MASK | TPM_CnSC_ELSB_MASK;
 TPM2_C0V = 1500;
 PORTE_PCR22 = ( 0 | PORT_PCR_MUX(3));
 
}
怎么TIM2_CNT = 1500 的时候不翻转,到3000的时候才翻转呢,求大神指教
 
我知道答案 目前已有6人回答
回复

使用道具 举报

该用户从未签到

124

主题

3600

帖子

0

金牌会员

Rank: 6Rank: 6

积分
5781
最后登录
1970-1-1
发表于 2013-7-4 17:33:27 | 显示全部楼层

回复:MKL25Z128输出比较问题

请问这是你工程所有的程序代码吗?
回复 支持 反对

使用道具 举报

该用户从未签到

6

主题

17

帖子

0

新手上路

Rank: 1

积分
36
最后登录
1970-1-1
 楼主| 发表于 2013-7-4 21:27:31 | 显示全部楼层

回复:MKL25Z128输出比较问题

回复第 2 楼 于2013-07-04 17:33:27发表:
请问这是你工程所有的程序代码吗?
 
不是,这只是关于输出比较这一快的代码
回复 支持 反对

使用道具 举报

该用户从未签到

124

主题

3600

帖子

0

金牌会员

Rank: 6Rank: 6

积分
5781
最后登录
1970-1-1
发表于 2013-7-5 09:37:48 | 显示全部楼层

回复:MKL25Z128输出比较问题

现在工程也能实现方波输出,但是方波边沿的变化发生在CNT=3000时,是吗?能将你的工程全部放上去吗,帮你看一看。
回复 支持 反对

使用道具 举报

该用户从未签到

6

主题

17

帖子

0

新手上路

Rank: 1

积分
36
最后登录
1970-1-1
 楼主| 发表于 2013-7-5 09:48:11 | 显示全部楼层

回复:MKL25Z128输出比较问题

回复第 4 楼 于2013-07-05 09:37:48发表:
现在工程也能实现方波输出,但是方波边沿的变化发生在CNT=3000时,是吗?能将你的工程全部放上去吗,帮你看一看。
 

 
void  Output_Compare_Init(void)
{
 SIM_SCGC6 |= SIM_SCGC6_TPM2_MASK ;
 SIM_SOPT2 |= SIM_SOPT2_PLLFLLSEL_MASK | SIM_SOPT2_TPMSRC(1);    //´ò¿ªÊ±ÖÓÃÅ
 TPM2_SC   = TPM_SC_CMOD(1) | TPM_SC_PS(3) | TPM_SC_TOIE_MASK;   //8·ÖƵ
 TPM2_CNT = 0;
 TPM2_MOD =3000;
 NVIC_EnableIRQ(TPM2_IRQn);
  NVIC_SetPriority(TPM2_IRQn,3);                                             /* Óû§×Ô¼º¶¨Òå         */  
}
void Output_Compare_Open(void)
{
 SIM_SCGC5 |= SIM_SCGC5_PORTE_MASK;
 TPM2_C0SC &= ~(TPM_CnSC_MSA_MASK |TPM_CnSC_MSB_MASK|TPM_CnSC_ELSA_MASK|TPM_CnSC_ELSB_MASK);
 TPM2_C0SC |= TPM_CnSC_MSA_MASK | TPM_CnSC_ELSA_MASK;
 TPM2_C0V = 1500;
 PORTE_PCR22 = ( 0 | PORT_PCR_MUX(3));
 
}

void TPM2_IRQHandler(void)
{
 TPM2_CNT = 0;
 printf("interrupt");
}
 
 
 
int  main (void)
{
  int i = 0;
    SystemCoreClockUpdate();                                            /* ʱÖÓÅäÖà                    */
  delay_init(48);
    PORT_ENABLE_CLK(MKL_PORTA);                                         /* GPIOʱÖÓʹÄÜ                 */
    PORT_ENABLE_CLK(MKL_PORTB);
    PORT_ENABLE_CLK(MKL_PORTC);
    PORT_ENABLE_CLK(MKL_PORTD);
    PORT_ENABLE_CLK(MKL_PORTE);
   
    uart1Init(9600,0,0,8,1);                                            /* UART1³õʼ»¯                 */
  printf("systemclock = %d\n\r",SystemCoreClock); 
  // PWM_Init(24,38000);
  // PMW_OPEN(100);
  Output_Compare_Init();
  Output_Compare_Open();
    while(1){
  // i++;
  // delay_ms(10000);
  // PWM_Chinge(500);
  // printf("hello world");
   
  // if(i == 950) i = 0;
  // printf("i = %d\n\r",i);   */
  // Output_Compare_Open();
  
    }   
}
 
 
这就是我全部的代码了。谢谢你哦
回复 支持 反对

使用道具 举报

该用户从未签到

35

主题

508

帖子

0

金牌会员

Rank: 6Rank: 6

积分
2167
最后登录
1970-1-1
发表于 2013-7-5 11:41:42 | 显示全部楼层

回复:MKL25Z128输出比较问题(正解)

请参考下图,如果你MOD选择为3000,则输出比较翻转会以3000*TPM clock为间隔来翻转。
另外,你使能了TPM溢出(overflow)中断,在你的中断服务程序里,没有清除溢出中断标志,这样会造成中断不能正常退出,NVIC会一直进入TPM溢出中断服务程序。
与非网.jpg
回复 支持 反对

使用道具 举报

该用户从未签到

6

主题

17

帖子

0

新手上路

Rank: 1

积分
36
最后登录
1970-1-1
 楼主| 发表于 2013-7-5 13:56:40 | 显示全部楼层

RE:MKL25Z128输出比较问题

首先谢谢你,我开始是想错了。我有有个问题呢。我是想翻转的时刻会产生中断,然后我把计数器里面的值清零,再给比较的数值更新。他会不会产生不同时间的高低信号呢。如果是解决我的问题,是不是用定时器中断更简单呢。我就是想每次输出不定时间的高低电平。你方便留下你的qq号吗?我有些东西向请教
回复 支持 反对

使用道具 举报

该用户从未签到

124

主题

3600

帖子

0

金牌会员

Rank: 6Rank: 6

积分
5781
最后登录
1970-1-1
发表于 2013-7-5 14:09:05 | 显示全部楼层

回复:MKL25Z128输出比较问题

回复第 7 楼 于2013-07-05 13:56:40发表:
首先谢谢你,我开始是想错了。我有有个问题呢。我是想翻转的时刻会产生中断,然后我把计数器里面的值清零,再给比较的数值更新。他会不会产生不同时间的高低信号呢。如果是解决我的问题,是不是用定时器中断更简单呢。我就是想每次输出不定时间的高低电平。你方便留下你的qq号吗?我有些东西向请教 

设置翻转的时刻产生中断时可以的,TPM模块(Timer/PWM module)是产生PWM的功能还是很强大的,我建议你可以仔细查看MKL25的数据手册的TPM章节,里面对TPM的Out Compare模式有比较详细的介绍,后面有什么设计的问题,欢迎在论坛中提出。
回复 支持 反对

使用道具 举报

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

本版积分规则

关闭

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

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

GMT+8, 2024-4-20 12:57 , Processed in 0.144562 second(s), 28 queries , MemCache On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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