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

📄 drives.c

📁 主要使用codewarrier开发
💻 C
字号:
//*************************************************************************
//*																								                        *
//*        **********************驱动程序*************************        *
//*																								                        *
//*************************************************************************
#include "includes.h"

//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
//系统时间。
unsigned long ul_SystemTime=0;

//*************************************************************************
//*			 *************************IO口初始化************************		  *
//*************************************************************************
void vIOPortInit(void) 
{
  DDRA=0xFF;     //PROT A 键盘输入
  PORTA=0xFF;
  
  DDRB=0xFF;
  PORTB=0x55;  
}


//*************************************************************************
//*			 *************************锁相环初始化***********************		  *
//*************************************************************************
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;    //设为输入捕捉
  TSCR1=0x80;    //定时器使能
  TSCR2=0x83;    //允许定时器溢出中断,定时器时钟32M/(2^3)=4M
  TCTL4=0xAA;    //触发电平:下降沿
  TIE  =0x07;    //开中断
  TFLG1=0xFF;    //清除中断标志
}

//*************************************************************************
//*			 ***************************AD转换初始化程序****************		  *
//*************************************************************************
void vADInit(void)
{
//********************************ATD0设置*********************************
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<控制寄存器2>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
//上电,标志位快速清零,忽略外部触发,执行一次停止,中断禁止。
  ATD0CTL2  = (ATD0CTL2_AFFC_MASK | ATD0CTL2_ADPU_MASK);
      
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<控制寄存器3>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
//转换序列长度为1,FIFO模式,Freeze模式下继续转换。|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>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
//右对齐无符号,扫描模式连续采样,单通道采样//多通道采样|ATD0CTL5_MULT_MASK。
  ATD0CTL5  = (ATD0CTL5_DJM_MASK|ATD0CTL5_SCAN_MASK);
	
//<<<<<<<<<<<<<<<<<<<<<<<<<<禁止数字输入缓冲>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
	ATD0DIEN=0x00;
	
//********************************ATD1设置*********************************
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<控制寄存器2>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
//上电,标志位快速清零,忽略外部触发,执行一次停止,中断禁止。
  ATD1CTL2  = (ATD1CTL2_AFFC_MASK | ATD1CTL2_ADPU_MASK);
      
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<控制寄存器3>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
//转换序列长度为1,FIFO模式,Freeze模式下继续转换。|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>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
//右对齐无符号,扫描模式连续采样,单通道采样//多通道采样|ATD0CTL5_MULT_MASK。
  ATD1CTL5  = (ATD1CTL5_DJM_MASK|ATD1CTL5_SCAN_MASK);
	
//<<<<<<<<<<<<<<<<<<<<<<<<<<禁止数字输入缓冲>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
	ATD1DIEN=0x00;
}


//*************************************************************************
//*			 *************************PWM初始化*************************		  *
//*************************************************************************
void vPWMInit(void)
{   
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
//禁止PWM输出
  PWME=0x00;
  
//<<<<<<<<<<<<<<<<<<<<<<<<<<PWM控制寄存器>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
//01,23,45通道级联
  PWMCTL=PWMCTL_CON01_MASK|PWMCTL_CON23_MASK|PWMCTL_CON45_MASK;
  
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<输出极性>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
//通道01的输出极性为正极性,23的输出极性为正极性,45的输出极性为负极性
  PWMPOL=PWMPOL_PPOL1_MASK|PWMPOL_PPOL3_MASK;
  
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<对齐方式>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
//左对齐
  PWMCAE=0x00;
  
//<<<<<<<<<<<<<<<<<<<<<<<<<<PWM时钟设置>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
//时钟源为:CLOCKA,CLOCKB
  PWMCLK=0x00;
  
//PWM时钟CLOCKA,CLOCKB频率均为:32MHz/8=4MHz  
  PWMPRCLK=0x33;

//<<<<<<<<<<<<<<<<<<<<<<直流电机的周期和占空比设定>>>>>>>>>>>>>>>>>>>>>>>>
  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%

//<<<<<<<<<<<<<<<<<<<<<<舵机的周期和占空比设定>>>>>>>>>>>>>>>>>>>>>>>>>>>>
  STEER_PER=STEER_PERIOD;  //4MHz/STEER_PERIOD=100
  STEER_DTY=STEER_DTY_CENTER;//STEER_DTY_CENTER/STEPMOTOR_PERIOD=7.5%
}

//*************************************************************************
//*			 *************************系统初始化************************		  *
//*************************************************************************
void vInitialize(void)
{
  DisableInterrupts;
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<IO口初始化>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>       
  vIOPortInit();
  
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<锁相环初始化>>>>>>>>>>>>>>>>>>>>>>>>>>>>>       
  vPLLInit();
  
//<<<<<<<<<<<<<<<<<<<<<<<<<<定时器初始化>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>    
  vECTInit();
  
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<串口初始化>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 
  vUARTInit();
  
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<AD初始化>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>     
  vADInit();
  
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<PWM初始化>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>     
  vPWMInit();
  
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<开中断宏定义>>>>>>>>>>>>>>>>>>>>>>>>>>>>>       
  EnableInterrupts;

  uc_CarState=STATE_START;
  
  vCarStart();   

//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<输出初始化信息>>>>>>>>>>>>>>>>>>>>>>>>>>>>>        
  printp("\nInitialize is successful!");
  
}

⌨️ 快捷键说明

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