⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 upsd_pwm.c

📁 uPSD Device Driver Files
💻 C
字号:
/*------------------------------------------------------------------------------
uPSD_PWM.C

uPSD PWM Device Driver Functions
06/2002 Ver 0.1 - Initial Version

Copyright 2002 STMicroelectrons Inc.

This example demo code is provided as is and has no warranty,
implied or otherwise.  You are free to use/modify any of the provided
code at your own risk in your applications with the expressed limitation
of liability (see below) so long as your product using the code contains
at least one uPSD products (device).

LIMITATION OF LIABILITY:   NEITHER STMicroelectronics NOR ITS VENDORS OR 
AGENTS SHALL BE LIABLE FOR ANY LOSS OF PROFITS, LOSS OF USE, LOSS OF DATA,
INTERRUPTION OF BUSINESS, NOR FOR INDIRECT, SPECIAL, INCIDENTAL OR
CONSEQUENTIAL DAMAGES OF ANY KIND WHETHER UNDER THIS AGREEMENT OR
OTHERWISE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
------------------------------------------------------------------------------*/

#pragma optimize(8,size)
#include "upsd_pwm.h"
#include "upsd_hardware.h"
#include "upsd3200.h"



/*------------------------------------------------------------------------------------
Setup 8-bit PWM IP  
PWM_channel_no= specify PWM channel (0-3)
Duty_Cyl= Specify duty cycle (0-0xff), 0x7F being 50% duty cycle
-------------------------------------------------------------------------------------*/
void uPSD_PWM_Channel_8bit(unsigned char PWM_channel_no, unsigned char Duty_Cyl)
{
   switch (PWM_channel_no) {        // Output duty cycle
       case 0:
        	 {
			 PWM0 = Duty_Cyl;
			 break;
			 }
	   case 1:
        	 {
			 PWM1 = Duty_Cyl;
			 break;
			 }
	   case 2:
        	 {
			 PWM2 = Duty_Cyl;
			 break;
			 }
	   case 3:
        	 {
			 PWM3 = Duty_Cyl;
			 break;
			 }
	   default:
		   	 break;
   }

	//Enable PWM IP

	PWMCON |= 0x20;				  //PWME = 1
	
}

void uPSD_PWM_Variable_8bit(unsigned char PWM_Period, unsigned char PWM_PulseWidth)
{
    P4SFS  |= 0x80;               // Turn ON I/O port for the variable PWM channel
    PWMVP  |= PWM_Period;         // Load period value
    PWMVPW |= PWM_PulseWidth;     // Load pulse width value
    PWMCON |= 0x10;				  // Set variable PWM to push-pull
    PWMCON |= 0x20;				  // Enable variable PWM, PWME = 1
}

/*---------------------------------------------------------------------------------
Initialize PWM IP.  
Setup Prescaler value and I/O ports for the select channel of the 8-bit PWM.
PWMCON_value = PWMCON[7,3:0].  CFG[3:0], 0=open drain, 1=push-pull; [7] polarity
Channel_No = PWM channel from 0 to 3
PWM_freq8 = Requested prescaler freq input to PWM unit
----------------------------------------------------------------------------------*/
void uPSD_PWM_Init_8bit(unsigned char PWM_channel_no, unsigned int PWM_freq8, unsigned char PWMCON_value)
{
  unsigned int PWM_prescaler;
  unsigned char output_polarity_mode;

  output_polarity_mode = PWMCON_value & 0x8F;		// bit[7],bit[3:0]} are used to define PWM output mode
  PWMCON = (PWMCON & 0x70) | output_polarity_mode;	// 0--open drain; 1-- push pull 

  P4SFS = (unsigned char) (0x08 << PWM_channel_no); // turn on I/O port bit for PWM

   // set up 8bit PWM prescaler for requested freq

   	PWM_prescaler = (unsigned int) ( (((unsigned int) FREQ_OSC) / 2) / PWM_freq8);
    if (PWM_prescaler != 0) PWM_prescaler--;     // subtract 1 if not zero
	PSCL0L = PWM_prescaler & 0x00ff;
	PSCL0H = (PWM_prescaler >> 8);
	PSCL1L = PWM_prescaler & 0x00ff;
	PSCL1H = (PWM_prescaler >> 8);
}

/*---------------------------------------------------------------------------------
Disable PWM IP
----------------------------------------------------------------------------------*/
void uPSD_PWM_Disable(void)
{
	   PWMCON &= 0xDF;				//PWME = 0
//       P4SFS  &= 0x07;              //Clear P4[7:3] I/O pins 
}

⌨️ 快捷键说明

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