飞思卡尔MC9S12XS128功能模块驱动
来源:互联网 发布:ntfs for mac 注册码 编辑:程序博客网 时间:2024/05/08 21:34
用了一年多飞思卡尔MC9S12XS128这款处理器,现在总结下各个功能模块的驱动.
//锁相环时钟的初始化 总线频率为40MHz(总线时钟为锁相环时钟的一半)
//晶振为11.0592MHz
void PLL_init(void) //PLLCLK=2*OSCCLK*(SYNR+1)/(REFDV+1)
{ //锁相环时钟= 2*11.0592*(39+1)/(10+1)=80MHz 总线时钟为40MHz
REFDV=0x0A;
SYNR=0x67; //0110_0111 低6位的值为19,高两位的值为推荐值
while(CRGFLG_LOCK != 1);
CLKSEL_PLLSEL = 1; //选定锁相环时钟
//FCLKDIV=0x0F; //Flash Clock Divide Factor 16M/16=1M
}
//周期中断定时器的初始化-
// //周期中断通道1用于脉冲累加器的定时采样,定时周期为: 10ms=(199+1)*(1999+1)/(40M) (没有使用)
//周期中断通道0用于控制激光管的轮流发射,定时周期为: 2000us= (399+1)*(199+1)/(40M)
//2011/4/4 15:24 定时时间改为1ms
void PIT_init(void)
{
PITCFLMT_PITE = 0; // 禁止使用PIT模块 PITCFLMT :PIT 控制强制加载微计数器寄存器。
PITCE_PCE0 = 1; // 使能定时器通道0
//PITCE_PCE1 = 1; //使能定时器通道1
PITMUX = 0; //通道0,和通道1均选择8位微计数器0
//修改时间只需要改下面四行
PITMTLD0 = 199; //向8位微计数器中加载的值
PITLD0 = 199; //向16位计数器中加载的值
//PITMTLD1 = 39; //向8位微计数器中加载的值 8位,最大值不要超过255
//PITLD1 = 1999; //向16位计数器中加载的值
PITINTE |= 0x01; //使能定时器通道0的中断
PITCFLMT_PITE = 1;//使能PIT模块
}
//脉冲累加器的初始化, PT7口外接光电编码器
//最新修改: 2011/3/25 16:53
void PT7_PulAcc_Init(void)
{
DDRT &= 0x77;//设置PT7,PT3口为输入(硬件上PT7,PT3通过跳线联到了一块)
PERT |= 0x80; //使能通道7的上拉电阻
PPST &= 0x7f; //电阻设为上拉电阻
TCTL4 &= 0x3f; //禁止PT3的输入捕捉功能
PACTL = 0x50; //启动脉冲累加计数器,上升沿触发,禁止触发中断和溢出中断,主定时器禁止
}
//通道1用于控制舵机1 PWM 高电平有效,
//通道3用于控制电机1 PWM 低 电平有效,这与前两代车高电平有效有区别!!!!!
//通道7用于给上排激光管提供PWM信号 PWM高电平有效!!!!!
//通道6用于给下排激光管提供PWM信号 PWM高电平有效!!!!!
// 2011-03-17 7:56 增加了A端口的使用 新增通道6
//2011-6-9 23:03 //增加了通道4,5的联合使用,用于控制下排方向舵机
void PWM_init(void)
{
PWME = 0x00;//PWM禁止
PWMPRCLK = 0x03; // ClockA=40M/8=5M, Clock B = 40M/1=40M
PWMSCLB = 10; // Clock SB= 40/2*10= 2MHz(供电机)
PWMSCLA = 5; // SA = Clock A/2*5 = 5M/10 = 500K = SA 用于控制舵机
PWMPOL = 0xe2; //1110_0010通道7,通道6与通道1、通道5先输出高电平然后输出低电平,POLx=1先输出高电平后输出低电平; PPOLx=0先输出低电平)
PWMCAE = 0x00; // 左对齐输出(CAEx=0为左对齐,反之为中心对齐)
//PWMCLK = 0010_1010 (0 1 4 5位控制SA_1;或A_0; 2 3 6 7位控制SB_1 或B_0)
//为PWM通道1选择时钟 SA(500KHz),
//为PWM通道5选择时钟 SA(500KHz),
//为通道3选择时钟 SB(10MHz)
//为通道7选择时钟B(40MHz)
//为通道6选择时钟B(40MHz)
PWMCLK = 0x2A; //0010_1010
PWMCTL = 0x70; //0111_0000 CON45=1,把通道4,5联合使用。CON01=1,把通道0和1联合使用 CON23=1 把通道3和2联合使用
PWMPER23 = 1000; //通道周期为0.5ms 频率为2KHz
PWMDTY23 = 0; //占空比为 0%
PWMPER01 = 10000; //一个周期为 50Hz=500KHz/10000
PWMDTY01 = UPSERVOCENTER; //占空比为7.5%
PWMPER45 = 10000; //一个周期为 50Hz=500KHz/10000
PWMDTY45 = 745;//占空比为7.5%
PWMPER6 = 222;//输出频率为180Khz=40M/222
PWMDTY6 = 67;//占空比为30%
PWMPER7 = 222;//输出频率为180Khz=40M/222
PWMDTY7 = 44;//占空比为20%
PWME = 0xeA; //1110_1010使能通道1,3和7,6,5(联合后通道的使能由高通道决定)
}
/*******************************************************************
GPIO的初始化
1:为输出, 0:为输入
PB[0..7]做为输出端口,
PA[0..7]做为输出端口
PM[0..7]做为输出端口,用于控制核心板上的八个LED小灯(1灭,0亮)
PH[0..3]做为输入端口
2011-03-17 7:56 增加了A端口的使用
********************************************************************/
void GPIO_Init(void)
{
DDRA |= 0xff; //A口做为输出端口
DDRB |= 0xff; //B口做为输出端口
DDRM |= 0xff; //M口做为输出端口
DDRH &= 0xf0; //PH的低四位做为输入端口
ATD0DIENL = 0xff;
DDR1AD0 = 0X00;//PT1AD0口作为输入端口
PORTA = 0x00; //激光管不发射信号
PORTB = 0x00; //激光管不发射信号
PTM = 0xff;//初始化为全灭(新车小灯)
}
- 飞思卡尔MC9S12XS128功能模块驱动
- 飞思卡尔 mc9s12xs128 常用外设源码
- 飞思卡尔MC9S12XS128串口相关功能函数
- 飞思卡尔MC9S12XS128 SCI串口相关…
- 飞思卡尔系列MC9S12XS128的中断系统
- 飞思卡尔 mc9s12xs128芯片的ucos 移植
- 飞思卡尔单片机(MC9S12xs128)TBDML调试:There is currently no communication with the hardware.
- MC9S12XS128驱动LEDP10显示屏
- MC9S12XS128硬件底层驱动_readme.txt
- 飞思卡尔 imx6 GC0308 摄像头驱动配置调试过程
- MC9S12XS128硬件底层驱动_os_cfg.h(底层配置文件)
- MC9S12XS128硬件底层驱动_set_bus_clk.h(总线时钟设置)
- MC9S12XS128硬件底层驱动_set_bus_clk.c(总线时钟设置实现)
- 飞思卡尔
- 飞思卡尔
- 飞思卡尔感悟
- 【飞思卡尔】
- 飞思卡尔
- 解决:Can It find a usable tk.tcl in the following directories: /usr/local/tcl/lib/tcl8.4/tk8.4 /usr/l
- android解决UI阻塞问题——创建AsyncTask 子线程
- php 读取.vcf格式文件
- js冒泡排序
- 网络命令
- 飞思卡尔MC9S12XS128功能模块驱动
- ISE,modelsim环境变量设置
- session_set_cookie_params
- iperf 命令
- 写得蛮好的linux学习笔记(转)
- Android权限列表permission说明
- MapFile Extent计算
- jQuery获取Select选择的Text和Value:
- POJ1679 次小生成树