查看: 3306|回复: 1

[S12] MC9S12Z pmf通道切换不了问题咨询

[复制链接]

该用户从未签到

1

主题

1

帖子

0

新手上路

Rank: 1

积分
18
最后登录
2016-8-13
发表于 2016-8-11 14:14:23 | 显示全部楼层 |阅读模式

下面是我遇到的S12Z的问题叙述,请帮我提供一下解决方法MF的更新貌似是通过PTU模块更新的;
const u8 MaskVal[7]   = {0x34,0x1C, 0x13,0x31, 0x0D,0x07, 0x3F};
const u8 OutCtl[7]    = {0x0C,0x30, 0x30,0x03, 0x03,0x0C, 0x00};
void InitPMF(u8 align,u16 pwm_frequency,u16 dutycycle,u8 channel_enable)
{
// Edge aligned PWM
PMFCFG0_EDGEA = align;
PMFCFG0_EDGEB = align;
PMFCFG0_EDGEC = align;
// PWM generator A generates reload event
PMFCFG2_REV0 = 1;   
PMFCFG2_REV1 = 0;
// Low MOSFETs ON while SW control (Unipolar PWM)
PMFOUTB = 0x2A;  
// Writing to value register zero also writes to value registers one to five
PMFCFG3_VLMODE = 0x01; //01
// Reload every PWM cycle
PMFFQCA = 0;
//dutycycle 常数
PMFVAL0=pwm_frequency/dutycycle;
// PWM clock = core clock / PWM_PRSCA = 25MHz / PWM_PRSCA
PMFFQCA_PRSCA = FCORE;
// Load modulo timer A
PMFMODA = pwm_frequency;
// Load dead time timer A
PMFDTMA = PWM_DEADTIME_US;
//PMFCFG2|= 0x3f;
//PMFOUTC_OUTCTL=0x3f;
PMFCFG2 = 0x40 + MaskVal[channel_enable];
PMFOUTC_OUTCTL = OutCtl[channel_enable];
// All outputs in Software mode
// PMF external global load OK signal controls reload of double buffered registers
PMFENCA_LDOKA = 1;
  // PWM restart at commutation event
PMFENCA_RSTRTA = 1;   
// PWM generator A outputs enabled
PMFENCA_PWMENA = 1;
//PMFENCB_PWMENB = 1;
// Buffered PMFOUTC, PMFOUTB, SWAPx and MSKx change on commutation event
PMFCFG1_ENCE = 1;         
// 0 = Local LDOKA controls buffered registers / 1 = external Load OK controls buffered registers
PMFENCA_GLDOKA = 1;   
PMFCNTA = 0x0000;



上面截图是我的PWM初始化,下面截图是我的PWM频率占空比,通道更新程序
void UpdatePMF(u16 pwm_frequency,u16 dutycycle,u8 channel_enable)
{
u16 delay1;
//PMFCFG1_ENCE=1;
//canrx1|=CANRXMSG.data5;
//canrx1|=(CANRXMSG.data4)<<8;
//canrx2|=CANRXMSG.data6;
test=PMFCFG0_WP;
PMFCFG2 = 0x40 + MaskVal[channel_enable];
PMFOUTC_OUTCTL = OutCtl[channel_enable];  
PMFMODA= pwm_frequency;
PMFVAL0 = pwm_frequency/dutycycle;
PTUC_PTULDOK = 1;
//PMFCFG2|= 0x00;
// DC Bus current sampling point at middle of duty cycle
// Calibration due to GDU signal delay
// Divide by 2, because number of calculated ticks is related to PWM Clock = 25MHz
// PTU is running on 12.5MHz, so it is 2 times slower
delay1 = (PWM_DEADTIME_US + ((PMFVAL0 - PWM_DEADTIME_US) >> 1) + ADC_SAMPLE_TIME_CALIBRATION) >> 1;
// Load TG0 list 0 and list 1
PTUTriggerEventList[0][0][0] = delay1;
PTUTriggerEventList[0][1][0] = delay1;
// Clear flag
PTUC_PTULDOK = 1;


问题如下:在进行PWM更新的时候,只能更改其占空比,通道无法切换,问题1:频率更改后程序运行到 PTUC_PTULDOK = 1;这条语句后会死掉,问题2:通道切换是用寄存器PMFCFG2PMFOUTC两个寄存器控制,使用调试方式的结果是,两个寄存器已经被更新程序成功改写,可是通道输出还是没有改变,请帮我分析一下问题谢谢。

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

使用道具 举报

  • TA的每日心情

    2017-1-4 08:05
  • 签到天数: 11 天

    连续签到: 1 天

    [LV.3]偶尔看看II

    85

    主题

    1629

    帖子

    1

    版主

    Rank: 7Rank: 7Rank: 7

    积分
    2569

    优秀版主

    最后登录
    2019-3-28
    发表于 2016-8-11 15:11:01 | 显示全部楼层
    帮顶!!!!!!!!!!!!!!!!
    回复

    使用道具 举报

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

    本版积分规则

    关闭

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

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

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

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

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