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

📄 init.c

📁 飞思卡尔智能汽车大赛的小车程序
💻 C
字号:
#include <hidef.h>      /* common defines and macros */
#include <mc9s12dg128.h>     /* derivative information */
#pragma LINK_INFO DERIVATIVE "mc9s12dg128b"

#define SERVO_MID 4500
extern void iic_write(byte sub_address,byte write_record);
extern void delay_ms(unsigned int time);

//初始化锁相环、系统总线时钟24MHz
void init_PLL(void){
  SYNR=2;
  REFDV=1;
  while(!(CRGFLG_LOCK));
  CLKSEL=0x80;
}

//CMOS传感器设定函数
void init_CMOS(void){
  iic_write(0x12,0x80);   //reset
  delay_ms(3);            //delay 3ms
  iic_write(0x71,0x40);   //Gated PCLK
  delay_ms(3);
  iic_write(0x14,0x24);   //320*240
  delay_ms(3);
  iic_write(0x28,0x00);   //black/white
  iic_write(0x20,0x01);   //驱动能力增强P39
  //亮度控制
  //iic_write(0x2D,0x91);   //关闭自动亮度控制P43
  //开窗
  /*
  //开窗参数1 横竖各隔4采1
  iic_write(0x17,0x56);   //HS=0x3C
  iic_write(0x18,0xCE);   //HE=0xC8
  iic_write(0x19,0x5D);		//VS81
  iic_write(0x1A,0x98);		//VEBC
  */
  //开窗参数2 横隔4采1 竖隔8采1
  iic_write(0x17,0x5a);   //HS		5a
  iic_write(0x18,0xb4);   //HE		b4
  iic_write(0x19,0x38);		//VS 20
  iic_write(0x1A,0x98);		//VE

  //iic_write(0x24,0x20);   //白色比例
  //iic_write(0x25,0x2d);   //黑色比例
}


//PWM模块初始化
void init_PWM(void){
  PWME=0;
  /*舵机使用PWM45级联*/
  PWMCTL_CON45=1;   //级联PWM45
  PWMCLK_PCLK5=1;   //PWM5选择SA为时钟源
  PWMPRCLK_PCKA=0;  //A时钟预分频0;分频4
  PWMSCLA=4;        //即1/3us
  PWMPOL_PPOL5=1;   //PWM5输出先高后低
  PWMPER45=30000;		//100Hz
  PWMDTY45=SERVO_MID;		//舵机中心位置1.5ms高电平
  PWME_PWME5=1;     //启动PWM5
  
  /*驱动电机使用PWM2和PWM3,目前仅使用PWM3*/
  PWMCLK_PCLK2=1;   //PWM2使用SB时钟
  PWMCLK_PCLK3=1;   //PWM3使用SB时钟
  PWMPRCLK_PCKB=0;  //B=Bus
  PWMSCLB=128;       //SB=B/64=384K 即4us
  PWMPOL_PPOL2=1;   //P2先低后低
  PWMPOL_PPOL3=1;	  //P3先高后低
  PWMPER2=0xff;
  PWMPER3=0xff;
  PWMDTY2=0x60;
  PWMDTY3=0x00;
  PWME+=0x0c;       //同时使能PWM23
}

//ECT模块初始化
void init_ECT(void){
  TIOS_IOS0=0;      //PT0 PT1口进行输入捕捉
  TIOS_IOS1=0;
  TIOS_IOS2=1;      //PT2进行输出比较,产生定时中断
  TSCR2_PR=7;       //M_clock分频128
  
  PBCTL_PBEN=0;     //PAC0\PAC1不级联
  DLYCT=0x01;       //延迟256个bus周期@24M=10us
  
  TCTL4_EDG0A=0;    //PT0口计采集行数
  TCTL4_EDG0B=1;		//PT0口检测下跳沿(HREF当前行结束后开始读数据)
  PACN0=0;          //清零
  
  TCTL4_EDG1A=0;		//PT1口测速
  TCTL4_EDG1B=1;	  //PT1口检测下降沿
  PACN1=0;          //清零
  ICPAR_PA1EN=1;    //打开脉冲累加器
  
  /*每650ms产生定时中断,取得车速信息*/
  TC2=6553; 				//xxms
  TIE_C2I=1;        //允许PT4产生中断
  TSCR1_TEN=0;      //启动定时器
  
}

//初始化PortB
//PortB口管脚用途分布如下
//0:    VSYN输入    <<
//1|2:  驱动板控制输出
//3:    V_en视频使能输出
//4:    LED_en光电管使能
//5:    EF  fifo空信号输入  <<
//6:    R_en  fifo读时钟输出
//7:    FIFO_Reset  fifo复位信号输出
void init_PB(void){
  DDRB=0xff;
  DDRB_BIT0=0;    //VSYN输入
  DDRB_BIT5=0;		//EF input
  
  PORTB_BIT1=0;
  PORTB_BIT2=0;   //关闭电机 
  PORTB_BIT3=0;   //V_en关闭
  PORTB_BIT4=0;   //光电管关闭
  PORTB_BIT6=1;   //读fifo时钟维持高
  PORTB_BIT7=1;   //复位维持高

}

//初始化PortA
//PortA口 视频信号输入口  FIFO>>>MCU
void init_PA(void){
  DDRA=0x00;
}

//初始化PortAD
//PortAD口 光电管数字量输入口
void init_PAD(void){
  //ATD0DIEN=0xff;  //把AD口作为数字输入使用
  
}

//空余io口组合成一个8位拨码开关,供输入参数使用
//从低到高分别为PP0-PP1 IOC2-IOC7
//PP7口作为输出口 控制LED
void init_IO(void){
  //PP0 PP1为输入引脚
  DDRP_DDRP0=0;
  DDRP_DDRP1=0;
  
  //IOC2-7为输入引脚
  DDRT=0x00;
  
  //PP7为输出引脚
  DDRP_DDRP7=1;
}

⌨️ 快捷键说明

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