查看: 5704|回复: 2

[MPC] MPC5604的eMIOS问题【已解决】

[复制链接]

该用户从未签到

2

主题

19

帖子

0

注册会员

Rank: 2

积分
129
最后登录
1970-1-1
发表于 2016-1-4 16:46:18 | 显示全部楼层 |阅读模式
本帖最后由 hemo 于 2016-1-6 11:50 编辑

将eMIOS设置成SAOC模式下,无中断模式,主程序没有检测到匹配事件发生,即flag没有置位,找不到原因。eMIOS通道18配置如下:
  EMIOS_0.CH[18].CCR.B.BSL   =  0; //时钟选择,0-全部使用bus_ A 01-使用各自通道时钟,11-全部使用内部时钟,
                                                        //注意:只有通道0~8,16,23,24有内部时钟
  EMIOS_0.CH[18].CCR.B.EDSEL  = 1;      //设置输出比较时间为反转输出电平
  EMIOS_0.CH[18].CCR.B.UCPRE =  0;      //设置分频值为1
  EMIOS_0.CH[18].CCR.B.UCPEN =  1;      //使能分频器
  EMIOS_0.CH[18].CCR.B.FREN  =  0;      //在冻结模式下停止计数
  EMIOS_0.CH[18].CCR.B.FORCMA = 0;  //不强制与比较寄存器A一次比较
  EMIOS_0.CH[18].CCR.B.FORCMB = 0;  //不强制与比较寄存器B一次比较
  EMIOS_0.CH[18].CCR.B.MODE  =  3;    //选择输出比较SAOC模式  


  EMIOS_0.MCR.B.GPRE  = 63;        // 设置分频系数为63+1=64,分频后始终为1MHz
  EMIOS_0.MCR.B.GPREN = 1;         // 使能eMIOS时钟
  EMIOS_0.MCR.B.GTBE  = 1;         // 使能全局时基
  EMIOS_0.MCR.B.FRZ   = 0;         // 在冻结模式下停止通道

系统时钟配置采用例程:
//模式配置: 使能DRUN, RUN0, SAFE, RESET模式
  ME.MER.R = 0x0000001D;   

//初始化锁相环,
//外部晶振为16MHz,设置PLL0为64MHz  
//设置IDF=2,ODF=8,NDIV=64;
  CGM.FMPLL_CR.R = 0x06400100;

//RUN0配置: 主电压调节器打开,Data Flash处于正常模式。Code Flash处于正常模式。
//使能锁相环,锁相环输出时钟作为系统时钟。
  ME.RUN[0].R   = 0x001F0074;           

//外设运行配置0: 外设在所有模式下都工作
  ME.RUNPC[0].R = 0x000000FE;           

// SIUL: 选择 ME.RUNPC[0] 的配置  
  ME.PCTL[68].R = 0x00;                 
// eMIOS_0: 选择 ME.RUNPC[0] 的配置  
  ME.PCTL[72].R = 0x00;                 

// 设置进入RUN0模式
  ME.MCTL.R = 0x40005AF0;               //写入模式和密钥
  ME.MCTL.R = 0x4000A50F;               //写入模式和反密钥

//等待模式转换完成
  while(ME.GS.B.S_MTRANS) {};           
//验证进入了RUN0模式
  while(ME.GS.B.S_CURRENTMODE != 4) {}  



主程序:
   while(1)
   {
          if(EMIOS_0.CH[18].CSR.B.FLAG  == 1)
          {
                EMIOS_0.CH[18].CSR.B.FLAG  = 1;   //清除标志位
                //重新设定定时值
                EMIOS_0.CH[18].CADR.R=500;         
                  LED1 = ~LED1;
          }
   };

(1)原来认为是冻结模式的原因,在debug模式下冻结全部的寄存器。取消后,并没有作用。并且,例程中是使用内部时钟的,18号通道并没有内部时钟,配置成bus_ A的时钟,其来自于总线时钟+预分频后的时钟。总线时钟有了,是不是bus_ A的时钟也就有了?? 这个理解对不对。如何去查看是否产生了bus_ A的时钟。
(2) SAOC比较输出原理,将数值存于A1/A2,将A1与时钟计数相比较,然后输出。理解是否对?

请大家看看,是否有问题,在线等呢。
多谢~~~

我知道答案 目前已有2人回答
回复

使用道具 举报

该用户从未签到

2

主题

19

帖子

0

注册会员

Rank: 2

积分
129
最后登录
1970-1-1
 楼主| 发表于 2016-1-6 11:49:46 | 显示全部楼层
已经解决,需要channel#23来产生BUS_A
回复 支持 反对

使用道具 举报

该用户从未签到

8

主题

52

帖子

0

中级会员

Rank: 3Rank: 3

积分
240
最后登录
2016-10-20
发表于 2016-1-20 22:48:29 | 显示全部楼层
hemo 发表于 2016-1-6 11:49
已经解决,需要channel#23来产生BUS_A

如果
EMIOS_0.CH[18].CCR.B.BSL=3;
表示使用内部时钟.
此时还需要通过23通道来驱动Bus_A吗?
如果需要,那么此时EMIOS_0.CH[18].CCR.B.BSL到底该设置为0,还是设置为3?
另外,设置23通道的CADR的目的是什么?
如果这时候设置了23的CADR,也就指明了周期了.
如果这时候我想通道18输出周期和占空比都可变的pwm波形,怎么办?
这时候周期都在23通道的CADR寄存器里面限定死了.
该怎么弄?是不是我理解错了?
谢谢.
回复 支持 反对

使用道具 举报

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

本版积分规则

关闭

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

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

GMT+8, 2025-7-21 15:13 , Processed in 0.086618 second(s), 23 queries , MemCache On.

Powered by Discuz! X3.4

Copyright © 2001-2024, Tencent Cloud.

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