www.pudn.com > arm_PWM.rar > TEST.C


/****************************************Copyright (c)************************************************** 
**                               广州周立功单片机发展有限公司 
**                                     研    究    所 
**                                        产品一部  
** 
**                                 http://www.zlgmcu.com 
** 
**--------------文件信息-------------------------------------------------------------------------------- 
**文   件   名: test.c 
**创   建   人: 陈明计 
**最后修改日期: 2003年7月8日 
**描        述: μCOS-II上的LPC2114的通用PWM使用的例子,在EasyArm2100开发实验板上调试通过。 
**              使用PWM6输出PWM信号,通过滤波电实现DAC转换。由KEY1控制PWM的占空比,每按一次按键将会改变一次PWM的 
**              占空比。 
**--------------历史版本信息---------------------------------------------------------------------------- 
** 创建人: 陈明计 
** 版  本: v1.0 
** 日 期: 2003年7月8日 
** 描 述: 原始版本 
** 
**------------------------------------------------------------------------------------------------------ 
** 修改人: 陈明计 
** 版  本: v1.3 
** 日 期: 2003年7月21日 
** 描 述: 根据正式文档更改寄存器名 
** 
**--------------当前版本修订------------------------------------------------------------------------------ 
** 修改人: 黄绍斌  
** 日 期: 2004年3月25日 
** 描 述: 针对EasyARM2100开发实验板进行修改(KEY1的定义及PINSEL0/1设置)。 
** 说  明: 将跳线器JP11短接,使用示波器观察测试点PWM和PWMDAC。 
**------------------------------------------------------------------------------------------------------ 
********************************************************************************************************/ 
 
#include "config.h" 
 
#define  TASK_STK_SIZE                  64 
OS_STK        TaskStartStk[TASK_STK_SIZE]; 
 
#define	  KEY1	(1 << 16)             	/* P0.16为KEY1 */ 
 
 
void  TaskStart(void *data); 
void  Task(void *data); 
/********************************************************************************************************* 
** 函数名称: main 
** 功能描述: c语言的主函数,由它启动多任务环境 
** 输 入: 无 
** 输 出: 无 
** 全局变量: 无 
** 调用模块: OSInit,OSTaskCreate,OSStart 
** 
** 作 者: 陈明计 
** 日 期: 2003年7月8日 
**------------------------------------------------------------------------------------------------------- 
** 修改人:  
** 日 期:  
**------------------------------------------------------------------------------------------------------ 
********************************************************************************************************/ 
        int main (void) 
{ 
    OSInit(); 
 
    OSTaskCreate(TaskStart, (void *)0, &TaskStartStk[TASK_STK_SIZE - 1], 0); 
    OSStart(); 
    return 0; 
} 
 
/********************************************************************************************************* 
** 函数名称: ChangePWM 
** 功能描述: 改变PWM占空比 
** 输 入: 无 
** 输 出: 无 
** 全局变量: 无 
** 调用模块:  
** 
** 作 者: 陈明计 
** 日 期: 2003年7月8日 
**------------------------------------------------------------------------------------------------------- 
** 修改人: 陈明计 
** 日 期: 2003年7月21日 
**------------------------------------------------------------------------------------------------------ 
********************************************************************************************************/ 
 
        void  ChangePWM(void) 
{ 
    static uint32 PWMData = (Fpclk + 500) / 2000; 
     
    PWMMR0 = (Fpclk + 500) / 1000;       /* 设置PWM周期为1毫秒       */ 
    PWMMR6 = PWMData;			         /* 设置PWM占空比            */ 
    PWMLER = 0x41;				         /* MR0、MR6锁存,更新PWM占空比 */ 
    PWMData += (Fpclk + 500) / 20000; 
    if(PWMData >= ((Fpclk + 500) / 1000)) 
    { 
        PWMData = 0; 
    } 
} 
 
 
/********************************************************************************************************* 
** 函数名称: TaskStart 
** 功能描述: μCOS-II的第一个任务,通常由它初始化目标板和建立其它任务 
** 输 入: 无 
** 输 出: 无 
** 全局变量: 无 
** 调用模块:  
** 
** 作 者: 陈明计 
** 日 期: 2003年7月8日 
**------------------------------------------------------------------------------------------------------- 
** 修改人: 陈明计 
** 日 期: 2003年7月21日 
**------------------------------------------------------------------------------------------------------ 
********************************************************************************************************/ 
 
        void  TaskStart(void *pdata) 
{ 
    pdata = pdata;                                  /* 避免编译警告 */ 
 
    TargetInit();                                   /* 目标板初始化 */ 
    IO0DIR &= ~KEY1;                                /* 设置KEY1为输入*/ 
    PINSEL0 = (PINSEL0 & 0xcff3ffff) | 0x00080000;  /* 管教选择模块初始化 */ 
     
 
    PWMPR = 0x00;                                   /* 不分频,计数频率为Fpclk  */ 
    PWMMCR = 0x02;                                  /* 设置MR0匹配时复位TC      */ 
    PWMMR0 = (Fpclk + 500) / 1000;                  /* 设置PWM周期为1毫秒       */ 
    PWMMR6 = (Fpclk + 500) / 2000;                  /* 设置PWM占空比为50%       */ 
    PWMLER = 1 | (1 << 6);                          /* MR0、MR6锁存            */ 
    PWMPCR = 1 << 14;                               /* 允许PWM6输出,单边PWM    */ 
    PWMTCR = 1 | (1 << 3);                          /* 启动定时器,PWM使能      */ 
 
    for (;;) 
    { 
        OSTimeDly(OS_TICKS_PER_SEC / 50);           /* 延时20毫秒 */ 
        if ((IO0PIN & KEY1) != 0) 
        { 
            continue; 
        } 
        OSTimeDly(OS_TICKS_PER_SEC / 50);           /* 延时20毫秒 */ 
        if ((IO0PIN & KEY1) != 0) 
        { 
            continue; 
        } 
        ChangePWM(); 
        while ((IO0PIN & KEY1) == 0) 
        { 
            OSTimeDly(OS_TICKS_PER_SEC / 50);       /* 延时20毫秒 */ 
        } 
    } 
} 
 
/********************************************************************************************************* 
**                            End Of File 
********************************************************************************************************/