您的位置:首页 > 其它

ARM学习总结1->寄存器初始值问题

2011-10-19 14:35 211 查看
今天调了一上午ADC实验都没出效果,调试发现一直停留在while(rADCCON & ADC_START);总是出不来。开始以为是ADC_Convert转换函数不对,仔细检查没发现问题,再考虑可能是初始化函数不对, 所以AD转换不能真正开始,但是自己核对和别人可行的代码,查书,也没有发现有什么错误,无奈之下,只能把别人可行的代码一段一段替代我的代码,再运行看效果,把JustDo的初始化函数 替代我的初始化函数Init_ADC,发现效果出来了,太Happy了,锁定问题就一定出在Init_ADC函数啦。
但是还有一个问题就是我的几乎和他的一模一样啊,怎么他的能出来,我的出不来了?再仔细分析 代码我的是rADCCON = (PRESCALE_EN | PRSCVL49 | CHANNEL0) ; 他的是rADCCON = (channel<<3) | (preScaler<<6) | (1<<14); 看了又看只有他的值直接赋给ADCCON寄存器,而我是或给它的。此刻!我完全清晰啦,肯定是ADCCON 上电初始value不是0。如果是或的话保留了其他值的其他位,这样肯定和你想要的设置不同啦。 查手册发现初始值真的不是0,而是0x3fc4。犯这个错误根本原因就是自己想当然了,没有仔细看手册,
并不是所有的寄存器初始value就是0。

这个问题把我纠结了一上午,最后出来了,也要总结一些经验教训啦,出了问题,在查手册,检查实在发现不了误的情况下,可以把别人可行的代码按模块一步一步替代自己代码,在一步一步仿真看效果,到那里出效果啦,也就知道自己代码问题出那里了,也许看起来就是一模一样,但它也只是看起来一样而已,肯定有些许不同,那些许不同就是自己最容易犯的错误,也是自己平时最容易忽略的。当然这是最后的杀手锏啦,之前还得自己反复调试才行啦。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: