?? drives.c
字號:
//*************************************************************************
//* *
//* **********************驅(qū)動程序************************* *
//* *
//*************************************************************************
#include "includes.h"
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
//系統(tǒng)時間。
unsigned long ul_SystemTime=0;
//*************************************************************************
//* *************************IO口初始化************************ *
//*************************************************************************
void vIOPortInit(void)
{
DDRA=0xFF; //PROT A 鍵盤輸入
PORTA=0xFF;
DDRB=0xFF;
PORTB=0x55;
}
//*************************************************************************
//* *************************鎖相環(huán)初始化*********************** *
//*************************************************************************
void vPLLInit(void)
{ //BUS-CLOCK=PLL-CLOCK/2=32M
REFDV = 1; // set the REFDV register 16M*2*(3+1)/(1+1)=64M
SYNR =3; // set the SYNR register to give us a 64 MHz PLL-clock.
asm nop // nops required for PLL stability.
asm nop
asm nop
asm nop
while ((CRGFLG&0x08)==0); // wait here till the PLL is locked.
CLKSEL|=0x80; // switch the bus clock to the PLL.
}
//*************************************************************************
//* *************************定時器初始化*********************** *
//*************************************************************************
void vECTInit(void)
{
TIOS =0x00; //設(shè)為輸入捕捉
TSCR1=0x80; //定時器使能
TSCR2=0x83; //允許定時器溢出中斷,定時器時鐘32M/(2^3)=4M
TCTL4=0xAA; //觸發(fā)電平:下降沿
TIE =0x07; //開中斷
TFLG1=0xFF; //清除中斷標(biāo)志
}
//*************************************************************************
//* ***************************AD轉(zhuǎn)換初始化程序**************** *
//*************************************************************************
void vADInit(void)
{
//********************************ATD0設(shè)置*********************************
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<控制寄存器2>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
//上電,標(biāo)志位快速清零,忽略外部觸發(fā),執(zhí)行一次停止,中斷禁止。
ATD0CTL2 = (ATD0CTL2_AFFC_MASK | ATD0CTL2_ADPU_MASK);
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<控制寄存器3>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
//轉(zhuǎn)換序列長度為1,F(xiàn)IFO模式,F(xiàn)reeze模式下繼續(xù)轉(zhuǎn)換。|ATD0CTL3_FIFO_MASK
ATD0CTL3 = (ATD0CTL3_S1C_MASK);
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<控制寄存器4>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
//8位精度,2AD采樣周期,采樣長度8。
//ATDClock=[BusClock*0.5]/[PRS+1] ; PRS=15, divider=32
ATD0CTL4 =(ATD0CTL4_SRES8_MASK|ATD0CTL4_PRS0_MASK);
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<控制寄存器5>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
//右對齊無符號,掃描模式連續(xù)采樣,單通道采樣//多通道采樣|ATD0CTL5_MULT_MASK。
ATD0CTL5 = (ATD0CTL5_DJM_MASK|ATD0CTL5_SCAN_MASK);
//<<<<<<<<<<<<<<<<<<<<<<<<<<禁止數(shù)字輸入緩沖>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
ATD0DIEN=0x00;
//********************************ATD1設(shè)置*********************************
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<控制寄存器2>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
//上電,標(biāo)志位快速清零,忽略外部觸發(fā),執(zhí)行一次停止,中斷禁止。
ATD1CTL2 = (ATD1CTL2_AFFC_MASK | ATD1CTL2_ADPU_MASK);
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<控制寄存器3>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
//轉(zhuǎn)換序列長度為1,F(xiàn)IFO模式,F(xiàn)reeze模式下繼續(xù)轉(zhuǎn)換。|ATD0CTL3_FIFO_MASK
ATD1CTL3 = (ATD1CTL3_S1C_MASK);
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<控制寄存器4>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
//8位精度,2AD采樣周期,采樣長度8。
//ATDClock=[BusClock*0.5]/[PRS+1] ; PRS=15, divider=32
ATD1CTL4 =(ATD1CTL4_SRES8_MASK|ATD1CTL4_PRS0_MASK);
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<控制寄存器5>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
//右對齊無符號,掃描模式連續(xù)采樣,單通道采樣//多通道采樣|ATD0CTL5_MULT_MASK。
ATD1CTL5 = (ATD1CTL5_DJM_MASK|ATD1CTL5_SCAN_MASK);
//<<<<<<<<<<<<<<<<<<<<<<<<<<禁止數(shù)字輸入緩沖>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
ATD1DIEN=0x00;
}
//*************************************************************************
//* *************************PWM初始化************************* *
//*************************************************************************
void vPWMInit(void)
{
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
//禁止PWM輸出
PWME=0x00;
//<<<<<<<<<<<<<<<<<<<<<<<<<<PWM控制寄存器>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
//01,23,45通道級聯(lián)
PWMCTL=PWMCTL_CON01_MASK|PWMCTL_CON23_MASK|PWMCTL_CON45_MASK;
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<輸出極性>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
//通道01的輸出極性為正極性,23的輸出極性為正極性,45的輸出極性為負極性
PWMPOL=PWMPOL_PPOL1_MASK|PWMPOL_PPOL3_MASK;
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<對齊方式>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
//左對齊
PWMCAE=0x00;
//<<<<<<<<<<<<<<<<<<<<<<<<<<PWM時鐘設(shè)置>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
//時鐘源為:CLOCKA,CLOCKB
PWMCLK=0x00;
//PWM時鐘CLOCKA,CLOCKB頻率均為:32MHz/8=4MHz
PWMPRCLK=0x33;
//<<<<<<<<<<<<<<<<<<<<<<直流電機的周期和占空比設(shè)定>>>>>>>>>>>>>>>>>>>>>>>>
MOTOR_PER1=MOTOR_PERIOD; //4MHz/MOTOR_PERIOD=200
MOTOR_DTY1=MOTOR_DTY_CENTER; //MOTOR_DTY_CENTER/MOTOR_PERIOD=50%
MOTOR_PER2=MOTOR_PERIOD; //4MHz/MOTOR_PERIOD=200
MOTOR_DTY2=MOTOR_DTY_CENTER; //MOTOR_DTY_CENTER/MOTOR_PERIOD=50%
//<<<<<<<<<<<<<<<<<<<<<<舵機的周期和占空比設(shè)定>>>>>>>>>>>>>>>>>>>>>>>>>>>>
STEER_PER=STEER_PERIOD; //4MHz/STEER_PERIOD=100
STEER_DTY=STEER_DTY_CENTER;//STEER_DTY_CENTER/STEPMOTOR_PERIOD=7.5%
}
//*************************************************************************
//* *************************系統(tǒng)初始化************************ *
//*************************************************************************
void vInitialize(void)
{
DisableInterrupts;
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<IO口初始化>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
vIOPortInit();
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<鎖相環(huán)初始化>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
vPLLInit();
//<<<<<<<<<<<<<<<<<<<<<<<<<<定時器初始化>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
vECTInit();
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<串口初始化>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
vUARTInit();
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<AD初始化>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
vADInit();
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<PWM初始化>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
vPWMInit();
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<開中斷宏定義>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
EnableInterrupts;
uc_CarState=STATE_START;
vCarStart();
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<輸出初始化信息>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
printp("\nInitialize is successful!");
}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -