freetech

HCS08系列单片机定时器比较输出的一点弯路

0
阅读(3292)

一个波形发生器项目中要做两路有相位差的波形,我想到了HCS08的定时器比较输出功能。于是测试之,写了如下代码:

TPM2C0V = 30;

TPM2C0SC=0x14;//通道0中断禁止,比较输出模式,通道引脚状态取反

TPM2C1V = 10;

TPM2MOD = 40;

TPM2C1SC=0x14;//通道1中断禁止,比较输出模式,通道引脚状态取反

TPM2SC=0x08;//TPM1时钟源为总线时钟;分频系数为1;溢出中断禁止

TPM2CNTH=0;

效果如下:

image

本应是当计数到70时通道0翻转,计到20时通道1翻转。但结果是2个通道同时翻转,肯定是有问题。后来换了个型号,波形又好了,如下:

image

难道是这个型号有BUG?官网找erretasheet,没找到相关问题。又换了个型号试仍是不正常的波形。看来得仔细研究一下了,于是观察TPM2C0V和TPM2C1V 都是0,肯定是值没赋进去。调整下上面代码的顺序如下:

TPM2C0SC=0x14;//通道0中断禁止,比较输出模式,通道引脚状态取反

TPM2C0V = 30;

TPM2MOD = 40;

TPM2C1SC=0x14;//通道1中断禁止,比较输出模式,通道引脚状态取反

TPM2C1V = 10;

TPM2SC=0x08;//TPM1时钟源为总线时钟;分频系数为1;溢出中断禁止

TPM2CNTH=0;

再测试,一切正常。

结论是:要在TPM2CnSC赋值后再对TPMxCnV赋值,否则TPMxCnV有可能赋不上。