当前位置:文档之家› 飞思卡尔MC9S12XS128各模块初始化程序--超详细注释

飞思卡尔MC9S12XS128各模块初始化程序--超详细注释


f(bus)=f(osc)/2
//
=1; 系统时钟由 PLLCLK(锁相环时钟)分频
f(bus)=f(pll)/2 PLLCTL_PLLON=1;
//锁相环启动
///******************************************************//
// f(vco)=2*f(osc)*(SYNDIV+1)/(REFDIV+1)
// f(vco)=2*f(osc)*(SYNDIV+1)/(REFDIV+1)
///******************************************************//
/*CRG 时钟合成寄存器(SYNR) Bit[7:6] VCOFRQ1 VCOFRQ0 (用于确定压控振荡器
Bit[5:0]
REFDV[5:0] 确定公式中 REFDV 的值
*/ REFDV=0x80|0x (01);//此处根据需要设置
/*时钟后分频寄存器 (POSTDIV) 确定 VCOVLK 频率和 f(vco)和 PLLCLK 频率 f(pll)之间的
比率
POSTDIV=0x00; f(pll)=f(vco)
注释不详细
/*********************************************************/ 函数名称:void ATD0_init(void) 函数功能:ATD 初始化 入口参数:
出口参数:
/***********************************************************/
通道使能位。 若 PCE 位清 0,则禁用 PIT 通道 PITTF 寄存器中的相应标志位清 0
//
若 PCE 位置 1,且 PITE=1,则 16 位定时计数器将
装载初始计数值 ,初始值开始向下递减计数。
PITMUX=0x00;//定时器通道 0 使用了微定时基准 0(Base Timer 0)|=1 使用了微定时基 准 1;有效位 Bit[3:0] PMUX[3:0]定时器 3,2,1,0 通道的复用选择位,确定相应
PFLMT=1,相应的 8 位微定时器的装载寄存器值将立即装载到 8 位微定
//
时器的递减计数器。写 0 操作无效;读取
这两位总是返回 0
//
注:强制装载微定时器值会影响到使用该微定时基准的所有定时
器通道
PITCE_PCE0=1; //使能定时器通道 0|=0 禁用; Bit[3:0] PCE[3:0] PIT 定时器 3,2,1,0
{
CLKSEL_PLLSEL=0; //不使能锁相环时钟 =0;系统时钟由 OSCCLK(外部晶振)分频
f(bus)=f(osc)/2
//
=1; 系统时钟由 PLLCLK(锁相环时钟)分频
f(bus)=f(pll)/2
PLLCTL_PLLON=1;
//锁相环启动
///******************************************************//
VCO 的增益以获得频率最佳稳定性并锁定)
VCOFRQ[1:0]
VCOCLK 频率范围 MHz
00
32<=f(vco)<=48
01
48<=f(vco)<=80
10
保留
11
80<=f(vco)<=120
Bit[5:0] SYNR[5:0] 确定公式中 SYNDIV 的值 */ SYNR=0xc0|0x (04) ;//此处根据需要设置
while(!(CRGFLG_LOCK==1)) {
; }
//时钟频率已稳定,锁相环时钟锁定
CLKSEL_PLLSEL=1; //使能锁相环时钟
}
/*********************************************************
函数名称:void PLL_INT(void)
运行| 1 等待模式下,PIT 模块停止产生时钟信号,冻结 PIT 模块
//
Bit[5] PITFRZ: 冻结模式下 PIT 计数器冻结位。冻结模式下,断点调试
时,该位冻结 PIT 计数器,可有效避免中断的发生。
//
冻结模式下 0 PIT 模块正常运行 | 1PIT 模块停止计数
//
Bit[1:0]PFLMT[1:0] PIT 微定时器 1 和 0 强制装载位 。PTE=1 时,
*/ POSTDIV=0x00;
Bit[4:0] POSTDIV[4:0] 用于确定公式中 POSTDIV 的值 POSTDIV!=0 f(pll)=f(vco)/(2*POSTDIV)
//VCO_clock=PLL_clock
_asm(nop); //短暂延时等待时钟频率稳定 _asm(nop);
/*时钟参考分频寄存器(REFDV) Bit[7:6] REFFRQ1 REFFRQ0(用于配置 PLL 内部滤
波器以获得频率最佳稳定性并锁定)
REFFRQ[1: 0]
REFCLK 频率范围 MHz
00
1<ref)<=6
10
6<=f(ref)<=12
11
f(ref)>12
// ATD0CTL5=0x30;
//启动 AD 转换序列
//:对每项数据采集时,用到哪个通道采样可在相应子函数内设置某一通道(见
Sample_AD.c)
}
while(!ATD0STAT2L_CCF0);
/*********************************************************/ 函数名称:void PIT_init(void) 函数功能:初始化 PIT 设置精确定时时间 (1s) 入口参数:无 出口参数:无 说明:无
///******************************************************//
// REF_cloc f(ref)=f(osc)/(REFDIV+1)
///******************************************************//
//
中断。当中断被挂起,该位使能,PIT=1 将会立即产生
中断;为避免该中断发生,必须先清零相应的 PIT 标志位。
PITCFLMT=0x80; //使能 PIT 模块
}
/********************************************************* 函数名称:interrupt VectorNumber_Vpit0 void PIT_ISR(void) 函数功能:PIT 通道 0 中断服务子程序 入口参数: 出口参数: ***********************************************************/
样时间,有助于采样前进行开路检测
ATD0CTL2=0x40;
// 快速清零,禁止中断,禁止外部触发
ATD0CTL3=0x90;
// 右对齐,转换序列长度为 2,非 FIFO
ATD0CTL4=0x03; 期,PRS=31,F(ATDCLK)=F(BUS)/(2(PRS+1))
// 采 样 时 间 4 个 周
//定时周期=(PITMTLD0+1)*(PITLD0+1)*(1/f(BUS))=1s //置 1,重新装载该寄存器 值
PITINTE=0x01; //使能 PIT 定时器通道 0 中断|=0 禁止中断 Bit[3:0] PINTE[3:0] 定时器
3,2,1,0 中断使能位,该位使能,一旦相应 PIT 通道的 PTF(超时标志位)置位,允许相应
void ATD0_init(void)
{ ATD0DIEN=0x00;
//使用模拟输入功能 |=1;数字输入功能
// ATD0CTL0=0x07;
//Bit[3:0]WRAP[3:0] 反转通道选择位
ATD0CTL1=0x40;
// 12 位精度,采样前不放电 Bit[7]ETRIGSEL(外部触发源
///******************************************************//
/*CRG 时钟合成寄存器(SYNR) Bit[7:6] VCOFRQ1 VCOFRQ0 (用于确定压控振荡器
VCO 的增益以获得频率最佳稳定性并锁定)
VCOFRQ[1:0]
VCOCLK 频率范围 MHz
//set Bus clock
函数功能:设置总线频率为( 40 )MHz ,晶振频率为 16MHz
入口参数:无
出口参数:无
***********************************************************/
void PLL_INT (void)
{
CLKSEL_PLLSEL=0; //不使能锁相环时钟 =0;系统时钟由 OSCCLK(外部晶振)分频
函数名称:void PLL_INT(void)
//set Bus clock
函数功能:设置总线频率为( 40 )MHz ,晶振频率为 16MHz
入口参数:无
出口参数:无
***********************************************************/
void PLL_INT (void)
飞思卡尔 MC9S12XS128 各模块初始化程序-超详细注释
//**************************************************************************
相关主题