d0a268f6ea21001e16fea2237907c44c

来自「自己编写的PWM模块」· 代码 · 共 54 行

TXT
54
字号
#include "altera_avalon_pwm_routines.h"


int altera_avalon_pwm_init(unsigned int address, unsigned int clock_divider, unsigned int duty_cycle)
{
	if(duty_cycle > clock_divider)  //duty cycle reg must be less than or equal to clock divider
	{
		return ALTERA_AVALON_PWM_DUTY_CYCLE_GREATER_THAN_CLOCK_CYCLE_ERROR;
	}
	else
	{
		IOWR_ALTERA_AVALON_PWM_CLOCK_DIVIDER(address, clock_divider - 1);
		IOWR_ALTERA_AVALON_PWM_DUTY_CYCLE(address, duty_cycle);
	}
	 return ALTERA_AVALON_PWM_OK;
}

int altera_avalon_pwm_enable(unsigned int address)
{
  IOWR_ALTERA_AVALON_PWM_ENABLE(address, ALTERA_AVALON_PWM_ENABLE_MSK);
  
  if(IORD_ALTERA_AVALON_PWM_ENABLE(address) != ALTERA_AVALON_PWM_ENABLED) //Confirm PWM is enabled
  {
  	return ALTERA_AVALON_PWM_ENABLED_CONFIRMATION_ERROR;
  }
  return ALTERA_AVALON_PWM_OK;
}

int altera_avalon_pwm_disable(unsigned int address)
{
  IOWR_ALTERA_AVALON_PWM_ENABLE(address, ~ALTERA_AVALON_PWM_ENABLE_MSK);

  if(IORD_ALTERA_AVALON_PWM_ENABLE(address) != ALTERA_AVALON_PWM_DISABLED)  //Confirm PWM is disabled 
  {
  	return ALTERA_AVALON_PWM_DISABLED_CONFIRMATION_ERROR;
  }
  return ALTERA_AVALON_PWM_OK;
}


int altera_avalon_pwm_change_duty_cycle(unsigned int address, unsigned int duty_cycle)
{
	if(duty_cycle > IORD_ALTERA_AVALON_PWM_CLOCK_DIVIDER(address))  //duty cycle reg must be less than or equal to clock divider
	{
		return ALTERA_AVALON_PWM_DUTY_CYCLE_GREATER_THAN_CLOCK_CYCLE_ERROR;
	}
	else
	{
    IOWR_ALTERA_AVALON_PWM_DUTY_CYCLE(address, duty_cycle);
	}
  return ALTERA_AVALON_PWM_OK;
}

⌨️ 快捷键说明

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