在线时间20 小时
UID2054640
注册时间2013-11-6
NXP金币0
该用户从未签到
注册会员

- 积分
- 129
- 最后登录
- 1970-1-1
|
本帖最后由 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与时钟计数相比较,然后输出。理解是否对?
请大家看看,是否有问题,在线等呢。
多谢~~~
|
|