hal_pwm.c

来自「epson公司的一个关于s1d13706的低层驱动程序」· C语言 代码 · 共 97 行

C
97
字号
/*
**===========================================================================
** HAL_PWM.C
**---------------------------------------------------------------------------
** Copyright (c) 2000, 2001 Epson Research and Development, Inc.
** All Rights Reserved.
**===========================================================================
*/

#include "hal.h"
#include "nonsefns.h"

/*-------------------------------------------------------------------------*/

static const char Revision[] = "HAL_PWM.C=$Revision: 3 $";

/*-------------------------------------------------------------------------*/

void sePwmEnable(int enable)
   {
   int reg;

   reg = seReadRegByte(REG_PWM_CV_CLOCK_CONTROL);

   if (enable)
      seWriteRegByte(REG_PWM_CV_CLOCK_CONTROL, reg | 0x10);
   else
      seWriteRegByte(REG_PWM_CV_CLOCK_CONTROL, reg & ~0x10);
   }

/*-------------------------------------------------------------------------*/

void seCvEnable(int enable)
   {
   int reg;

   reg = seReadRegByte(REG_PWM_CV_CLOCK_CONTROL);

   if (enable)
      seWriteRegByte(REG_PWM_CV_CLOCK_CONTROL, reg | 0x01);
   else
      seWriteRegByte(REG_PWM_CV_CLOCK_CONTROL, reg & ~0x01);
   }

/*-------------------------------------------------------------------------*/
//
// ClkSource: CLKI or CLKI2
// ClkDivide: 0x00 to 0x0c (clock divide is 2^ClkDivide)
// DutyCycle: 0 to 255
//
void sePwmControl(CLOCKSELECT ClkSource, int ClkDivide, int DutyCycle)
   {
   BYTE reg;

   if (ClkSource == CLKI2)
      reg = 0x01;
   else
      reg = 0x00;

   reg |= ((ClkDivide << 4) & 0xf0);

   seWriteRegByte(REG_PWM_CV_CLOCK_CONFIG, reg);

   seWriteRegByte(REG_PWM_CLOCK_DUTY_CYCLE, (BYTE) DutyCycle);
   }

/*-------------------------------------------------------------------------*/

//
// ClkSource:   CLKI or CLKI2
// ClkDivide:   0x00 to 0x0c (clock divide is 2^ClkDivide)
// BurstLength: 1 to 256
//
void seCvControl(CLOCKSELECT ClkSource, int ClkDivide, int BurstLength)
   {
   BYTE reg;

   if (ClkSource == CLKI2)
      reg = 0x01;
   else
      reg = 0x00;

   reg |= ((ClkDivide << 4) & 0xf0);

   seWriteRegByte(REG_PWM_CV_CLOCK_CONFIG, reg);

   if (BurstLength < 1)
      BurstLength = 1;
   else if (BurstLength > 256)
      BurstLength = 256;

   seWriteRegByte(REG_CV_CLOCK_BURST_LENGTH, BurstLength - 1);
   }

/*-------------------------------------------------------------------------*/

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?