马虎的实验室 https://bbs.21ic.com/?494565 [收藏] [复制] [RSS] ARM学习交流。

日志

通过查询方式测量PWM波的正脉冲长

已有 658 次阅读2007-9-10 17:16 |系统分类:ARM| lpc2214, pwm, 测量

//LPC2214。通过查询p0.2管脚电平测量PWM的正脉冲长,通过查询发送串口


#include "config.h"


uint32 DUTY;


//延时
void DelayNS(uint32 dly)
{  uint32  i;
   for(; dly>0; dly--)
      for(i=0; i<5000; i++);
}


//用查询的方式测量
void PWM_Measure(void)

 T0TC = 0x00;
 while((IO0PIN&0x00000004) == 0);   //检测p0.2的电压信号
 T0TCR = 0x01;
 while((IO0PIN&0x00000004) != 0);
 T0TCR = 0x00;
 if(T0TC <30000)
 DUTY = T0TC;
}


//串口初始化
# define U0_BR 115200
void UART0_Init()
{ uint16 Div;
 U0LCR = 0x83;
 Div = (Fpclk >> 4) / U0_BR;
 U0DLL = Div & 0XFF;
 U0DLM = Div >> 8;
 U0LCR = 0x03;
}


//串口发送
void SendBuf(uint8 *pdata)
{ uint8 i;
 for (i=0; i<4; i++)
 { U0THR = *(pdata++);
  while((U0LSR & 0x20) == 0);  //判断THRE位是否为1?
 }
}


int main(void)
{ uint8 data[4];
 PINSEL0 = 0X00000005;    //设置i/o连接到UART0
 IO0DIR  = 0X00000000;
 UART0_Init();
 T0PR = 0;
 
 while(1)
 { 
  PWM_Measure();
  data[0] = DUTY >> 24;
  data[1] = DUTY >> 16;
  data[2] = DUTY >> 8;
  data[3] = DUTY;
  
  SendBuf(data);
  DelayNS(10);
 }
 return(0);
}


路过

鸡蛋

鲜花

握手

雷人

发表评论 评论 (1 个评论)

回复 malaohu 2007-9-10 17:23
为什么用这种方式,当我的pwm波的占空比改变时,测量的duty值先变化以后总是会重新回到一个固定的值?