打印
[8/16-bit MCU]

MC9S08PA4 ADC FIFO 失败

[复制链接]
2193|13
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
bjart|  楼主 | 2015-3-22 23:19 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
文档版本:
Document Number: MC9S08PA4RM
Rev 3, 08/2014

第320页
有个ADC使用FIFO的例子,可是经过测试结果不正确
======初始化代码======
Example: 15.5.2.1.1 FIFO ADC initialization routine
void ADC_init(void)
{
/* The following code segment demonstrates how to initialize ADC by low-power mode, long
sample time, bus frequency, hardware triggered from AD1, AD3, AD5, and AD7 external pins
with 4-level FIFO enabled */
ADC_APCTL1 = ADC_APCTL1_ADPC6_MASK | ADC_APCTL1_ADPC5_MASK | ADC_APCTL1_ADPC3_MASK |
ADC_APCTL1_ADPC1_MASK;
ADC_SC3 = ADC_SC3_ADLPC_MASK | ADC_SC3_ADLSMP_MASK | ADC_SC3_MODE1_MASK;
// setting hardware trigger
ADC_SC2 = ADC_SC2_ADTRG_MASK ;
//4-Level FIFO
ADC_SC4 = ADC_SC4_AFDEP1_MASK | ADC_SC4_AFDEP0_MASK;
// dummy the 1st channel
ADC_SC1 = ADC_SC1_ADCH0_MASK;
// dummy the 2nd channel
ADC_SC1 = ADC_SC1_ADCH1_MASK | ADC_SC1_ADCH0_MASK;
// dummy the 3rd channel
ADC_SC1 = ADC_SC1_ADCH2_MASK | ADC_SC1_ADCH0_MASK;
// dummy the 4th channel and ADC starts conversion
ADC_SC1 = ADC_SC1_AIEN_MASK | ADC_SC1_ADCH2_MASK | ADC_SC1_ADCH1_MASK | ADC_SC1_ADCH0_MASK;
}

======中断程序======
Example: 15.5.2.1.2 FIFO ADC interrupt service routine
unsigned short buffer[4];
interrupt VectorNumber_Vadc void ADC_isr(void)
{
/* The following code segment demonstrates read AD result FIFO */
// read conversion result of channel 1 and COCO bit is cleared
buffer[0] = ADC_R;
// read conversion result of channel 3
buffer[1] = ADC_R;
// read conversion result of channel 5
buffer[2] = ADC_R;
// read conversion result of channel 7
buffer[3] = ADC_R;
}

按手册上说的buffer[0]-buffer[4]结果应该是 1、3、5、7 通道的值,可结果是buffer[0]-buffer[4]全是通道 1 的结果

求指点,求真像

相关帖子

沙发
bjart|  楼主 | 2015-3-24 19:22 | 只看该作者
为什么没人关注类,自己给自己加油,期待结果

使用特权

评论回复
板凳
ZG11211| | 2015-3-24 21:45 | 只看该作者
一次就将转换数据保存到4个变量中,结果肯定是一样的啦

使用特权

评论回复
地板
bjart|  楼主 | 2015-3-25 07:01 | 只看该作者
//4-Level FIFO
ADC_SC4 = ADC_SC4_AFDEP1_MASK | ADC_SC4_AFDEP0_MASK;
如果没有这句啃定是一样的,有这句就不应该一样了。


// dummy the 1st channel
ADC_SC1 = ADC_SC1_ADCH0_MASK;
// dummy the 2nd channel
ADC_SC1 = ADC_SC1_ADCH1_MASK | ADC_SC1_ADCH0_MASK;
// dummy the 3rd channel
ADC_SC1 = ADC_SC1_ADCH2_MASK | ADC_SC1_ADCH0_MASK;
// dummy the 4th channel and ADC starts conversion
ADC_SC1 = ADC_SC1_AIEN_MASK | ADC_SC1_ADCH2_MASK | ADC_SC1_ADCH1_MASK | ADC_SC1_ADCH0_MASK;
如果结果不能得到4通道的修,那手册上为什么这样写呀。难道是傻

使用特权

评论回复
5
FSL_TICS_Robin| | 2015-3-25 09:12 | 只看该作者
bjart 发表于 2015-3-24 19:22
为什么没人关注类,自己给自己加油,期待结果

楼主你好
请问你的芯片maskset编号是多少?
是否有查看过芯片maskset对应的勘误表S08P: 8位5V EEPROM,带TSI MCU

使用特权

评论回复
6
FSL_TICS_Robin| | 2015-3-25 14:18 | 只看该作者
FSL_TICS_Robin 发表于 2015-3-25 09:12
楼主你好
请问你的芯片maskset编号是多少?
是否有查看过芯片maskset对应的勘误表S08P: 8位5V EEPROM,带 ...

看了一下几个勘误表,大多包含ADC FIFO 的勘误。
你可以根据芯片表面刻的maskset看下自己芯片是否也属于这种问题。

使用特权

评论回复
7
bjart|  楼主 | 2015-3-25 20:02 | 只看该作者
问题解决了,FSL_TICS_Robin

还请英文好的翻译一下勘误表上的这句话,反正但凡我这种水平的是理解不了,反正实际上是bus clock必须大于或等于 ADC clock 的两陪

e6657: ADC: ADC FIFO not working when the bus clock is slower than ADC clock
divided by 2

使用特权

评论回复
8
FSL_TICS_Robin| | 2015-3-26 08:55 | 只看该作者
bjart 发表于 2015-3-25 20:02
问题解决了,FSL_TICS_Robin

还请英文好的翻译一下勘误表上的这句话,反正但凡我这种水平的是理解不了,反 ...

就是这个意思
以后使用单片机记得看对应勘误表,否则很可能被一个小问题困扰很久呢。

使用特权

评论回复
9
FSL_TICS_Robin| | 2015-3-26 08:57 | 只看该作者
非常感谢你关于8bit单片机的技术问题。如果你没有其他问题,我们将此帖默认为已解决。

使用特权

评论回复
10
bjart|  楼主 | 2015-3-28 13:14 | 只看该作者
结贴吧,大结局,完美,谢谢 Robin

Best Regards

使用特权

评论回复
11
598330983| | 2015-3-28 17:37 | 只看该作者
好复杂的,不过我真看不懂。

使用特权

评论回复
12
598330983| | 2015-3-29 00:06 | 只看该作者
怎么搞定的

使用特权

评论回复
13
FSL_TICS_ZJJ| | 2015-4-2 14:26 | 只看该作者
非常感谢你关于8位单片机的技术问题。如果你没有其他问题,我们将此帖默认为已解决.

使用特权

评论回复
14
ousoouso| | 2015-8-28 17:30 | 只看该作者
我现在遇到FIFO ADC,读取的AD值不与ADCH FIFO相对应,而是乱的顺序

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

4

主题

101

帖子

1

粉丝