F9222 TM00 PWM写数据与实际PWM宽不成比例,有时正确,有时不正确.
配置如下:
void TM00_Init(void)
{
TMC00 = 0x00;
/* TM00 PPG output */
PRM00 = 0x00;/* fXP/2^8 */
TOC00 = 0x1B; //0x12
CR000 = 20; //Cycle
CR010 = 8; //Dute
TMIF000 = 0; // 清中断标志位
TMMK000 = 1; // 屏蔽中断
/* Set TO00 pin */
PM3 &= 0xFD;
P3 &= 0xFD;
CRC00 = 0;
TMC00 |= 0x0C;/* clear & start occurs on match between TM00 and CR000 */
}
下面实现的功能是用串口控制PWM的比例,W ,S控制PWM比例,可以在控制的过程中CR010的实际数值与P31口,输出PWM比例有时突然跳变不成比例,
是否在CR010寄存器改变后,需要其他的操作?...........
#pragma vector = INTSR6_vect
__interrupt void MD_INTSR6(void)
{
UCHAR rx_data,c;
// UCHAR err_type;
// err_type = (UCHAR)(ASIS6 & 0x07);
rx_data = RXB6;
gUart6RxLen++;
//OSPT00 = 1;
if (gUart6RxLen > 0)
{
//TMC00 = 0x00;
c= TOC00;
TOC00=0;
switch(rx_data)
{
case 'W'://++
case 'w':
if(CR010 < (CR000-1)) CR010++; else CR010=0; break;
case 'S'://--
case 's':
if(CR010 > 0) CR010--; else CR010=(CR000-1); break;
}
TOC00=c;
// while(TM00);
// CR010=CR010;
// while(TM00);
}
} |