中级会员
- 积分
- 206
- 威望
- 176
- 贡献
- 20
- 兑换币
- 0
- 注册时间
- 2011-2-26
- 在线时间
- 5 小时
|
1贡献
为什么ATD为输入就有2v void ATDInit(void)
{
ATD0STAT0_SCF = 1; // 该位等于1表示转换完成。向该位写1则对该位清零。
ATD0STAT0_ETORF = 1; // 当外部发生边沿触发时该位为1。同样向该位写1则对该位清零。
ATD0STAT0_FIFOR = 1; // Clear the FIFO Over run flag 同样向该位写1则对该位清零。
ATD0CTL0_WRAP = 0; //
ATD0CTL1_SRES = 0; //SRES[6:5]赋值0时: 8位数值 , 1时: 10位分辨率, 2时: 12 bit resolution, 3 : reserved
ATD0CTL1_ETRIGSEL = 0; //该位只考虑赋值为0
ATD0CTL1_ETRIGCH = 0; //ETRIGCH[3:0] 对应通道。 128MAL 112引脚的对应16个通道 128MAA80引脚的只对应8个通道
ATD0CTL2_AFFC = 1; //为1打开AD转换,为0关闭AD转换
ATD0CTL2_ICLKSTP = 0; //为0停止模式下AD也停止工作。为1时停止模式下AD继续工作。
ATD0CTL2_ETRIGLE = 0; //ETRIGLE和ETRIGP共同作用
ATD0CTL2_ETRIGP = 0; // 0 0 下降沿触发
// 0 1 上升沿触发
// 1 0 低电平触发
// 1 1 高电平触发
ATD0CTL2_ETRIGE =0; //外部触发使能。该位为1时在第7脚上可以接收外部触发信号。
ATD0CTL2_ASCIE = 0; //转换结束中断使能。 1开中断,0关中断
ATD0CTL2_ACMPIE = 0; //比较中断使能位
ATD0CTL3_DJM = 1; //1 : 右对齐 0:左对齐 因为结果寄存器是16位的,而转换精度是8、10、12位所以要选对齐方式。
ATD0CTL3_S8C = 0;
ATD0CTL3_S4C = 0;
ATD0CTL3_S2C = 0;
ATD0CTL3_S1C = 1; // SxC是设置转换序列。默认为4个序列。此处设置为1.
ATD0CTL3_FIFO = 0; // 结果寄存器先进先出模式位。
ATD0CTL3_FRZ0 = 0; // FRZ1和FRZ0是调试使能位, 在调试中用,如果遇到断点进行如下处理。
ATD0CTL3_FRZ1 = 0; //00 继续转换 01 保留 10 完成当前转换,再冻结 ,11 立即冻结
ATD0CTL4_SMP = 1; // SMP[2:0]是采样时钟选择位,如下表所示,可以选择采样时钟为N个ATD时钟周期。
/* SMP2 SMP1 SMP0
0 0 0 4 个ATDClock
0 0 1 6 个ATDClock
0 1 0 8 个ATDClock
0 1 1 10个ATDClock
1 0 0 12个ATDClock
1 0 1 16个ATDClock
1 1 0 20个ATDClock */
ATD0CTL4_PRS = 4; // ATDClock = BusClock / (PRS + 1) / 2, NOW ATDClock = 60M/(4+1)/2 = 1MHz
ATD0CTL5_SCAN = 1; // 0 :只进行一次ATD转换序列; 1 : 连续执行;
ATD0CTL5_MULT = 0; // 0 : 单通道采样
ATD0CTL5_SC = 0; //0 关闭特殊通道转换,1 对特殊通道进行转换
ATD0CTL5_Cx = 0; // 0-16 : Sample channel
ATD0DIEN = 0x00; // 禁止数字输入
}
uchar ATDChannelxSample(uchar Channel)
{ uchar Result;
ATD0CTL5_Cx = Channel;
while(!ATD0STAT0_SCF);
switch(Channel)
{
case 0 : Result = ATD0DR0L;break;
case 1 : Result = ATD0DR0L;break;
case 3 : Result = ATD0DR0L;break;
case 4 : Result = ATD0DR0L;break;
default:break;
}
return Result;
} |
|