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

📄 sampwmc.c

📁 At91sam7s64+ucosII+pid温度控制
💻 C
字号:
#include "AT91SAM7S128.h"
#include "..\app\Pid.h"
#include "SAMpwmc.h"
extern pid *pp;
void PWMCinit()
{
  // clock
 AT91C_BASE_PMC->PMC_PCER=(1<<AT91C_ID_PWMC); // PWC0
  // pin
// AT91C_BASE_PIOA->PIO_PDR=(1<<7);
// AT91C_BASE_PIOA->PIO_BSR=(1<<7);  // PWM3(PA7)
 
 AT91C_BASE_PIOA->PIO_PDR=SSR_SETOUT;
 AT91C_BASE_PIOA->PIO_BSR=SSR_SETOUT;  // pa11 12 13 14
 AT91C_BASE_PWMC->PWMC_DIS=0x0f;		//disable pwm 
 //AT91C_BASE_PWMC->PWMC_MR=(0x0A<<8)|(30); // diva = 1 is 46800 Hz
 //clk is select  clka .46800/30 = 1560.  cprd is 65536,so pwm cycle is 42sec
 
 
 //AT91C_BASE_PWMC->PWMC_MR=(0x08<<8)|(1); //pwm时钟选择clka。频率是mck/256=47923200/256=187200
 //pwm周期是350mS
AT91C_BASE_PWMC->PWMC_MR=(0x0a<<0x08)|(1);  //350 * 2 ms
 AT91C_BASE_PWMC->PWMC_IDR=0x0F;		//中断禁止
 
  AT91C_BASE_PWMC_CH0->PWMC_CMR=0x020b;	//select clka 高电平起始
 AT91C_BASE_PWMC_CH0->PWMC_CDTYR=0x0000;	//duty is about 50ms
 AT91C_BASE_PWMC_CH0->PWMC_CPRDR=0xffff; 	//pwmc cycle is 100ms
 
  AT91C_BASE_PWMC_CH1->PWMC_CMR=0x020b;	//select clka
 AT91C_BASE_PWMC_CH1->PWMC_CDTYR=0x0000;
 AT91C_BASE_PWMC_CH1->PWMC_CPRDR=0xffff; 
 
  AT91C_BASE_PWMC_CH2->PWMC_CMR=0x020b;	//select clka
 AT91C_BASE_PWMC_CH2->PWMC_CDTYR=0x0000;
 AT91C_BASE_PWMC_CH2->PWMC_CPRDR=0xffff; 
 
 
 AT91C_BASE_PWMC_CH3->PWMC_CMR=0x020b;	//select clka
 AT91C_BASE_PWMC_CH3->PWMC_CDTYR=0x0000;
 AT91C_BASE_PWMC_CH3->PWMC_CPRDR=0xffff; 
 
 
 //AT91C_BASE_PWMC->PWMC_IER=AT91C_PWMC_CHID2; 
}

void PWMCISR(void)
{
	if(AT91C_BASE_PWMC->PWMC_ISR & AT91C_PWMC_CHID2)		//pwm2 isr
	{
		{
			PWMCduty(AT91C_PWMC_CHID2,(short) pp->ut); 
		}
	}
}

void PWMCduty(int n,int val)
{
	switch(n)
	{
		case AT91C_PWMC_CHID0:
			AT91C_BASE_PWMC_CH0->PWMC_CUPDR = val;
		break;
		case AT91C_PWMC_CHID1:
			AT91C_BASE_PWMC_CH1->PWMC_CUPDR = val;
		break;
		case AT91C_PWMC_CHID2:
			AT91C_BASE_PWMC_CH2->PWMC_CUPDR = val;
		break;
		case AT91C_PWMC_CHID3:
			AT91C_BASE_PWMC_CH3->PWMC_CUPDR = val;
		break;
		default:
		break;
	}
}
void PWMCIsrEn(char val)		//pwm interrupt enable
{
	AT91C_BASE_PWMC->PWMC_IER=val; 
}
void PWMCIsrDis(char val)
{
	AT91C_BASE_PWMC->PWMC_IDR=val; 
}
void PWMCon(char val)		//使能通道val的pwm控制器。val为:1,2,4,8,控制pwm0,1,2,3
{
//	 AT91C_BASE_PWMC_CH2->PWMC_CMR=0x020b;
	 AT91C_BASE_PWMC->PWMC_ENA=val;
}
void PWMCoff(char val)		//关闭通道val的pwm控制器。val为:1,2,4,8
{
	 
	 AT91C_BASE_PWMC->PWMC_DIS=val;
//	 AT91C_BASE_PWMC_CH2->PWMC_CMR=0x020b;

}

⌨️ 快捷键说明

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