|
#include "include.h"
/*------------------pwm功能初始化-------------------*/
void PWM_GO(void)
{
PWMCFG &= 0xBF; //將CBTADC位置0,即PWM計(jì)數(shù)器歸零時(shí)不觸發(fā)ADC轉(zhuǎn)換
PWMIF &= 0xBF; //將CBIF位置0,PWM計(jì)數(shù)器歸零中斷標(biāo)志位,需軟件清零
P_SW2 |= 0x80; //將EAXSFR位置1,以訪問PWM在擴(kuò)展RAM區(qū)的特殊功能寄存器
//對(duì)PWM波形發(fā)生器時(shí)鐘源進(jìn)行初始化
PWMCKS &= 0xef; //使用分頻后時(shí)鐘作為pwm發(fā)生器時(shí)鐘源,11.0592/11,1.00538微秒。
PWMCKS |= 0xa; //11倍分頻
PWMC = 19892l; //PWM計(jì)數(shù)器賦值(同時(shí)對(duì)PWMCH和PWMCL進(jìn)行了賦值)
P_SW2 &= 0x7F;
//PWM外部異常控制寄存器的操作
PWMFDCR &= 0xDF; //將ENFD位置0,關(guān)閉PWM外部異常檢測(cè)功能
PWMFDCR &= 0xF7; //將ENDI位置0,關(guān)閉PWM異常檢測(cè)中斷
PWMFDCR &= 0xFB; //將FDCMP位置0,比較器與PWM無(wú)關(guān)
PWMFDCR &= 0xFD; //將FDIO位置0,P2.4的狀態(tài)與PWM無(wú)關(guān)
PWMFDCR &= 0xFE; //將FDIF位置0,PWM異常檢測(cè)中斷標(biāo)志位,需軟件清零
IP2 |= 0x40; //將PPWM位置1,使能PWM中斷為最高優(yōu)先級(jí)中斷
//使能PWM波形發(fā)生器
PWMCR |= 0x80; //將ENPWM位置1,使能PWM波形發(fā)生器,PWM計(jì)數(shù)器開始計(jì)數(shù)
PWMCR &= 0xBF; //將ECBI位置0,禁止PWM計(jì)數(shù)器歸零中斷
}
/*------------------pwm2初始化-------------------*/
void PWM2_init(void)
{
P_SW2 |= 0x80;
//對(duì)PWM2的初始化部分
PWM2CR |= 0x08; //將PWM2_PS位置1,選擇PWM2的輸出引腳是P2.7
PWMCR |= 0x01; //將ENC2O位置1,PWM2的端口為PWM輸出口,受PWM波形發(fā)生器控制
PWMCFG &= 0xFE; //將C2INI位置0,設(shè)置PWM2輸出端口的初始電平為低電平
PWMIF &= 0xFE; //將C2IF位置0,PWM2中斷標(biāo)志位,需軟件清零
PWM2CR |= 0x04; //將EPWM2I位置1,使能PWM2中斷
PWM2CR &= 0xFD; //將EC2T2SI位置0,關(guān)閉T2翻轉(zhuǎn)時(shí)中斷
PWM2CR &= 0xFE; //將EC2T1SI位置0,關(guān)閉T1翻轉(zhuǎn)時(shí)中斷
//對(duì)PWM2翻轉(zhuǎn)計(jì)數(shù)器賦初值
PWM2T1 =1; //賦值PWM2第一次翻轉(zhuǎn)計(jì)數(shù)器值
PWM2T2 = 0x00; //賦值PWM2第二次翻轉(zhuǎn)計(jì)數(shù)器值
P_SW2 &= 0x7F;
}
/*------------------pwm3初始化-------------------*/
void PWM3_init(void)
{
P_SW2 |= 0x80;
//對(duì)PWM3的初始化部分
PWM3CR |= 0x08; //將PWM3_PS位置1,選擇PWM3的輸出引腳是P4.5
PWMCR |= 0x02; //將ENC3O位置1,PWM3的端口為PWM輸出口,受PWM波形發(fā)生器控制
PWMCFG &= 0xFD; //將C3INI位置0,設(shè)置PWM3輸出端口的初始電平為低電平
PWMIF &= 0xFD; //將C3IF位置0,PWM3中斷標(biāo)志位,需軟件清零
PWM3CR |= 0x04; //將EPWM3I位置1,使能PWM3中斷
PWM3CR &= 0xFD; //將EC3T2SI位置0,關(guān)閉T2翻轉(zhuǎn)時(shí)中斷
PWM3CR &= 0xFE; //將EC3T1SI位置0,關(guān)閉T1翻轉(zhuǎn)時(shí)中斷
//對(duì)PWM3翻轉(zhuǎn)計(jì)數(shù)器賦初值
PWM3T1 =1; //賦值PWM3第一次翻轉(zhuǎn)計(jì)數(shù)器值
PWM3T2 = 0x00; //賦值PWM3第二次翻轉(zhuǎn)計(jì)數(shù)器值
P_SW2 &= 0x7F;
}
//
//
//
///*------------------pwm4初始化-------------------*/
//void PWM4_init(void)
//{
// P_SW2 |= 0x80;
// PWM4CR |= 0x08; //將PWM4_PS位置1,選擇PWM4的輸出引腳是P4.4
// PWMCR |= 0x04; //將ENC4O位置1,PWM4的端口為PWM輸出口,受PWM波形發(fā)生器控制
// PWMCFG &= 0xFB; //將C4INI位置0,設(shè)置PWM4輸出端口的初始電平為低電平
// PWMIF &= 0xFB; //將C4IF位置0,PWM4中斷標(biāo)志位,需軟件清零
// PWM4CR |= 0x04; //將EPWM4I位置1,使能PWM4中斷
// PWM4CR &= 0xFD; //將EC4T2SI位置0,關(guān)閉T2翻轉(zhuǎn)時(shí)中斷
// PWM4CR &= 0xFE; //將EC4T1SI位置0,關(guān)閉T1翻轉(zhuǎn)時(shí)中斷
//
// //對(duì)PWM4翻轉(zhuǎn)計(jì)數(shù)器賦初值
// PWM4T1 =1; //賦值PWM4第一次翻轉(zhuǎn)計(jì)數(shù)器值
// PWM4T2 = 0x00FA; //賦值PWM4第二次翻轉(zhuǎn)計(jì)數(shù)器值
// P_SW2 &= 0x7F;
//}
//
///*------------------pwm5初始化-------------------*/
//void PWM5_init(void)
//{
// P_SW2 |= 0x80;
// //對(duì)PWM5的初始化部分
// PWM5CR |= 0x08; //將PWM5_PS位置1,選擇PWM5的輸出引腳是P4.2
// PWMCR |= 0x08; //將ENC5O位置1,PWM5的端口為PWM輸出口,受PWM波形發(fā)生器控制
// PWMCFG &= 0xF7; //將C5INI位置0,設(shè)置PWM5輸出端口的初始電平為低電平
// PWMIF &= 0xF7; //將C5IF位置0,PWM5中斷標(biāo)志位,需軟件清零
// PWM5CR |= 0x04; //將EPWM5I位置1,使能PWM5中斷
// PWM5CR &= 0xFD; //將EC5T2SI位置0,關(guān)閉T2翻轉(zhuǎn)時(shí)中斷
// PWM5CR &= 0xFE; //將EC5T1SI位置0,關(guān)閉T1翻轉(zhuǎn)時(shí)中斷
//
// //對(duì)PWM5翻轉(zhuǎn)計(jì)數(shù)器賦初值
// PWM5T1 =1; //賦值PWM5第一次翻轉(zhuǎn)計(jì)數(shù)器值
// PWM5T2 = 0x00FA; //賦值PWM5第二次翻轉(zhuǎn)計(jì)數(shù)器值
// P_SW2 &= 0x7F;
//}
/*------------------pwm控制函數(shù)(cycle:周期 wide:占空比控制 wide/cycle)-------------------*/
void PWM2_control(long cycle,long wide)
{
P_SW2 |= 0x80;
PWMC=cycle;
PWM2T1 = wide; //賦值PWM2第一次翻轉(zhuǎn)計(jì)數(shù)器值(不斷變化值)
PWM2T2 = 0x0; //賦值PWM2第二次翻轉(zhuǎn)計(jì)數(shù)器值(定值)
P_SW2 &= 0x7F;
}
void PWM3_control(long cycle,long wide)
{
P_SW2 |= 0x80;
PWMC=cycle;
PWM3T1 = wide; //賦值PWM2第一次翻轉(zhuǎn)計(jì)數(shù)器值(不斷變化值)
PWM3T2 = 0x0; //賦值PWM2第二次翻轉(zhuǎn)計(jì)數(shù)器值(定值)
P_SW2 &= 0x7F;
}
//void PWM4_control(long cycle,long wide)
//{
// P_SW2 |= 0x80;
// PWMC=cycle;
// PWM4T1 = wide; //賦值PWM2第一次翻轉(zhuǎn)計(jì)數(shù)器值(不斷變化值)
// PWM4T2 = 0x0; //賦值PWM2第二次翻轉(zhuǎn)計(jì)數(shù)器值(定值)
// P_SW2 &= 0x7F;
//}
//void PWM5_control(long cycle,long wide)
//{
// P_SW2 |= 0x80;
// PWMC=cycle;
// PWM5T1 = wide; //賦值PWM2第一次翻轉(zhuǎn)計(jì)數(shù)器值(不斷變化值)
// PWM5T2 = 0x0; //賦值PWM2第二次翻轉(zhuǎn)計(jì)數(shù)器值(定值)
// P_SW2 &= 0x7F;
//}
/*------------------pwm中斷服務(wù)函數(shù)-------------------*/
void PWM(void) interrupt PWM_VECTOR using 1
{
PWMIF &= 0xBF; //將CBIF位置0,PWM計(jì)數(shù)器歸零中斷標(biāo)志位,需軟件清零
PWMIF &= 0xFE; //將C2IF位置0,PWM2中斷標(biāo)志位,需軟件清零
PWMIF &= 0xFD; //將C3IF位置0,PWM3中斷標(biāo)志位,需軟件清零
}
|
評(píng)分
-
查看全部評(píng)分
|