同样的程序,在另一块板子上执行,不会有问题。但在我新做的板子上执行时,总是会死在ADC_cal()处。如果屏蔽掉这条语句,一切正常。但是工程中需要做ADC转换。
应该是硬件有问题,想知道问题出在哪里?
启动引导已经固定上拉入下:
受不了,我找到问题。写了一大串思路,经过网页直接奔溃了。一句话,电源问题。仅供参考。
rym rym:
已经找到问题。虽然这个论坛很多问题都有始无终,但我还是想写下自己的思路,供他人借鉴:
我程序中使用了ADC,同时还使用了时间中断函数(基于150MHz的时钟速率)。我的板子使用的是30MHz的外部时钟,因此需要PLL(10,2)到150MHz。外部电源使用TPS75005,而问题就在这里。
屏蔽ADC_cal(),能够流畅运行程序,包括进入中断。
我将时钟改到100MHZ,发现可以运行ADC_cal(),但是无法进入中断函数。
因此,很明显,问题就出现在了运行的时钟上面。但是我的时钟不应该有问题。因此,查阅数据手册,发现100Mhz和150MHz描述区别,最终发现如下:
而电源芯片TPS75005通过引脚设置,可以选择1.8V和1.9v.而我这次选择的是1.8V。至此,问题原因找到了,就在这里。
怪自己不够仔细,以前一直用的1.9V,所有没出现过这种问题。
总的来说,有问题还是要看数据手册。还有,我的解决办法不一定适应于其他人,但可供参考。
同样的程序,在另一块板子上执行,不会有问题。但在我新做的板子上执行时,总是会死在ADC_cal()处。如果屏蔽掉这条语句,一切正常。但是工程中需要做ADC转换。
应该是硬件有问题,想知道问题出在哪里?
启动引导已经固定上拉入下:
受不了,我找到问题。写了一大串思路,经过网页直接奔溃了。一句话,电源问题。仅供参考。
Seven Han:
回复 rym rym:
感谢您这么详细的讲述!