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。
这个问题把我纠结了一上午,最后出来了,也要总结一些经验教训啦,出了问题,在查手册,检查实在发现不了误的情况下,可以把别人可行的代码按模块一步一步替代自己代码,在一步一步仿真看效果,到那里出效果啦,也就知道自己代码问题出那里了,也许看起来就是一模一样,但它也只是看起来一样而已,肯定有些许不同,那些许不同就是自己最容易犯的错误,也是自己平时最容易忽略的。当然这是最后的杀手锏啦,之前还得自己反复调试才行啦。
但是还有一个问题就是我的几乎和他的一模一样啊,怎么他的能出来,我的出不来了?再仔细分析 代码我的是rADCCON = (PRESCALE_EN | PRSCVL49 | CHANNEL0) ; 他的是rADCCON = (channel<<3) | (preScaler<<6) | (1<<14); 看了又看只有他的值直接赋给ADCCON寄存器,而我是或给它的。此刻!我完全清晰啦,肯定是ADCCON 上电初始value不是0。如果是或的话保留了其他值的其他位,这样肯定和你想要的设置不同啦。 查手册发现初始值真的不是0,而是0x3fc4。犯这个错误根本原因就是自己想当然了,没有仔细看手册,
并不是所有的寄存器初始value就是0。
这个问题把我纠结了一上午,最后出来了,也要总结一些经验教训啦,出了问题,在查手册,检查实在发现不了误的情况下,可以把别人可行的代码按模块一步一步替代自己代码,在一步一步仿真看效果,到那里出效果啦,也就知道自己代码问题出那里了,也许看起来就是一模一样,但它也只是看起来一样而已,肯定有些许不同,那些许不同就是自己最容易犯的错误,也是自己平时最容易忽略的。当然这是最后的杀手锏啦,之前还得自己反复调试才行啦。
相关文章推荐
- 总结: 0-1背包问题 --> 动态规划d…
- 黑马程序员 总结---> java中的两个运算问题
- cmake 学习之路 记录中间所遇到过的所有错误与问题的解决 <三>
- 友善官方<<Mini2440 Linux移植开发实战指南>>问题总结
- Linux 兴趣小组暑假学习--学习总结<二>
- nodeJS学习(7)--- WS开发 NodeJS 项目-节2 <安装&设置&启动 mongodb 数据库++遇到的问题>
- 总结: 数塔问题 --> dp 问题 (终…
- <转>二十六个月Android学习工作总结(2013-05-02更新)
- Hadoop学习<四>--HDFS的RPC通信原理总结
- VC++6.0&&VS2008&MFC&API学习问题总结(三)(多线程更新控件)
- cmake 学习之路 记录中间所遇到过的所有错误与问题的解决 <一>
- cmake 学习之路 记录中间所遇到过的所有错误与问题的解决 <二>
- ibatis <dynamic> 标签 update 的相关问题总结
- Win8学习总结之"给定的 System.Uri 无法转换为 Windows.Foundation.Uri"问题
- operator->重载问题总结 让一个对象表现的像一个指针
- C# 泛型List<T>学习总结
- 查找(二):二分查找----<学习总结>
- 黑马程序员 总结---> 传递问题
- cmake 学习之路 记录中间所遇到过的所有错误与问题的解决 <四>
- <<深入理解java内存模型>>学习总结