这432的板子用了几天发现些问题,特意来此吐槽。
首先官方例程的注释有明显的笔误,我遇到的就是一个IO口比如明明是用的P1.2,然后注释的时候写成P3.5。这个由于当时也不太在意,所以也忘了具体是那一个例程了,就不贴图了。
这个不影响使用也就算了,但是后来又发现它的例程文件又有个非常明显的错误。比如这个文件
错误代码为:
- void adc14IsrHandler(void)
- {
- /* Clear ADC14 IFG */
- ADC14CLRIFGR0 = CLRADC14IFG20;
- }
复制代码 这个程序明明读取的是mem0的数据,却把mem20的中断标志位清零,导致中断 根本没有清除,程序一直停留在中断服务程序里面,后面的代码也就不起作用了,现象什么的肯定也是错的了。
这个错误仔细看看也能发现,我就继续忍了。但是我后来发现它的驱动函数居然也有错的!!我发现的错误的驱动函数为adc的转换读取结果读取函数,在adc14.c里面。如下:
- uint_fast16_t ADC14_getResult(uint32_t memorySelect)
- {
- return *((uint16_t*) (_ctlRegs[_getIndexForMemRegister(memorySelect)] + 0x80));
- }
复制代码 这个函数其实就是读取ADC14MEMx(x为0~31)的值然后返回。_ctlRegs[_getIndexForMemRegister(memorySelect)是ADC14MCTLx的地址,ADC14MEMx的地址与其固定相差0x80,所以它加了一个0x80。但是ADC14MCTLx是一个32位的寄存器啊,你直接把指向这个寄存器的指针加上0x80就相当于把地址加上了0x80*4,结果读出来的数据不用想也是错的了,所以正确的做法应该是加上一个0x20。所以它的各种读取结果的函数估计都出错了......驱动函数目的就是为了简化开发流程,很多人估计都会使用,部分人还会直接使用库文件连源文件也不添加,但是出现了这种错误调试时应该很难查出来。我怀疑ti有没有对这个驱动函数库进行过认真的测试。
发现的错误暂时就是这么多了,但是还有些槽点要吐一下,msp432也许过于看重和msp430的兼容了,结果很多外设控制寄存器还是16位的,比如定时器的计数器和重装载寄存器,其实我觉得做成32位的应该会比较方便,16位的计数值有些时候有点小了。当然432也有32位的定时器,但是只具备周期计数的功能,比较和输入捕获也没。另外这个芯片的adc是一大亮点,但是例程实在是有点少了,最主要的是使用DMA对转换数据进行传输的一个都没有,摸索起来也有点不方便。
唉,不知道大家发现什么错误。吐了这么久的槽,真有点累了
|