发新帖本帖赏金 2.00元(功能说明)我要提问
返回列表
打印
[Kinetis]

ADC触发机制

[复制链接]
2695|16
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
laoxianccc|  楼主 | 2015-12-3 10:20 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
沙发
FSL_TICS_Robin| | 2015-12-3 10:45 | 只看该作者
楼主你好
建议下载K02的参考手册Kinetis K02: 100MHz Cortex-M4F 64/128KB Flash 32-64pin (REV 1),在第84页可以看到另外的那些触发源选项。

使用特权

评论回复
板凳
strong161| | 2015-12-3 11:29 | 只看该作者
选就是自己定义触发机制,可选用定义的内容楼上已经有拉,看datasheet吧!

使用特权

评论回复
地板
laoxianccc|  楼主 | 2015-12-3 12:24 | 只看该作者
FSL_TICS_Robin 发表于 2015-12-3 10:45
楼主你好
建议下载K02的参考手册Kinetis K02: 100MHz Cortex-M4F 64/128KB Flash 32-64pin (REV 1),在第84 ...

是按照这个配置的寄存器,但是读取寄存器发现没有进行相应的转化,不知道是什么原因,希望指导一下,谢谢!

使用特权

评论回复
5
laoxianccc|  楼主 | 2015-12-3 12:32 | 只看该作者
strong161 发表于 2015-12-3 11:29
选就是自己定义触发机制,可选用定义的内容楼上已经有拉,看datasheet吧!


是按照这个配置的寄存器,但是读取寄存器发现没有进行相应的转化,不知道是什么原因,希望指导一下,谢谢!
用了PDB,PIT都不进行AD转化。

使用特权

评论回复
6
FSL_TICS_Robin| | 2015-12-3 14:29 | 只看该作者
本帖最后由 FSL_TICS_Robin 于 2015-12-3 15:11 编辑
laoxianccc 发表于 2015-12-3 12:24
是按照这个配置的寄存器,但是读取寄存器发现没有进行相应的转化,不知道是什么原因,希望指导一下,谢谢 ...

请问你使用PE自动生成的,还是基于KSDK修改,或者是直接操作寄存器方式实现的呢?如果是PE生成的,可以把程序压缩放上来让大家看一下。如果是参考的KSDK工程或官方例程,可以告诉一下是哪个例程方便我去看看。

使用特权

评论回复
7
laoxianccc|  楼主 | 2015-12-3 15:24 | 只看该作者
FSL_TICS_Robin 发表于 2015-12-3 14:29
请问你使用PE自动生成的,还是基于KSDK修改,或者是直接操作寄存器方式实现的呢?如果是PE生成的,可以把 ...

自己写寄存器操作的:
代码如下:
#include "MK02F12810.h"
#include "system_MK02F12810.h"
#include "adc.h"
#include "uart.h"

uint32_t flag=0;
uint32_t ADCshuchu=0;
//#define CLOCK_SETUP  1

int main(void)
{
        SystemCoreClockUpdate ();
       
        SIM_SCGC6 |=SIM_SCGC6_PIT_MASK //PIT晶振使能
                  |SIM_SCGC6_ADC0_MASK //ADC晶振使能
                  |SIM_SCGC6_PDB_MASK; //PDB晶振使能
        SIM_SOPT7 |=SIM_SOPT7_ADC0TRGSEL(4);//ADC 用PDB触发
        SIM_SCGC4 |=SIM_SCGC4_VREF_MASK;//外部基准电压
        SIM_SCGC5 |=SIM_SCGC5_PORTB_MASK;//B口晶振使能
       
        PORTB_PCR(1)|=PORT_PCR_MUX(0); //ADC0_SEL9
               
        ADC0_CFG1 |=ADC_CFG1_ADIV(2)//4分频
                   |ADC_CFG1_MODE(3);//0x0000004c//16位ADC
        ADC0_CFG2 |=0x00000000;//
        ADC0_SC1A=0x00;
        ADC0_SC1A  //|=ADC_SC1_AIEN_MASK  //ADC中断使能
                    |=ADC_SC1_ADCH(9);//ADC引脚
        ADC0_SC2 |=ADC_SC2_ADTRG_MASK;//硬件触发
        ADC0_SC3 |=ADC_SC3_ADCO_MASK  //连续转化
                  |ADC_SC3_AVGE_MASK  
                  |ADC_SC3_AVGS(3);
       
                PDB0_SC |=PDB_SC_CONT_MASK  //PDB连续转换
                              |PDB_SC_PDBEN_MASK  //使能PDB
                             //|PDB_SC_PDBIE_MASK  //允许中断
                                |PDB_SC_PRESCALER(0X5) //预分频
                                |PDB_SC_TRGSEL(0Xf) //软件触发
                                |PDB_SC_MULT(0X2); //分频因子20
        PDB0_IDLY =0X0000; //计数器
        PDB0_MOD =0X6789; //PDB周期
        PDB0_CH0C1 |=PDB_C1_EN(0X01)
                     |PDB_C1_TOS(0X01)
                     |PDB_C1_EN(0X02) //
                     |PDB_C1_TOS(0X02); //
        PDB0_CH0DLY0 = 0x1234;
        PDB0_CH0DLY1 = 0x4567; //

  PDB0_SC =  PDB_SC_CONT_MASK        // Contintuous, rather than one-shot, mode
            | PDB_SC_PDBEN_MASK       // PDB enabled
            //| PDB_SC_PDBIE_MASK       // PDB Interrupt Enable
            | PDB_SC_PRESCALER(0x5)   // Slow down the period of the PDB for testing
            | PDB_SC_TRGSEL(0xf)      // Trigger source is Software Trigger to be invoked in this file
            | PDB_SC_MULT(2)          // Multiplication factor 20 for the prescale divider for the counter clock
            | PDB_SC_LDOK_MASK;

                                               
        PIT_MCR=0x00;
        PIT_LDVAL0 =0x0003E2FF;
        PIT_TCTRL0 =PIT_TCTRL_TIE_MASK
                   |PIT_TCTRL_TEN_MASK;
                                                 //|PIT_TCTRL_CHN_MASK;
                                                 //enable_irq(57);
                                                 //IRQn(39);
        while(1)
                {
                        if(ADC0_SC1A&0x00000080)
                        {
                          ADCshuchu=ADC0_RA;
                                flag=0;
                        }
                }
}

这样用中断和不用中断都不行,软硬件触发都试过了也不行,仿真看寄存器显示没有进行ADC转化,估计是触发机制没工作。不知道什么原因,希望帮忙解决一下,谢谢!
调试器是pe-micro,开发环境为keil5.11

使用特权

评论回复
8
laoxianccc|  楼主 | 2015-12-3 15:38 | 只看该作者
FSL_TICS_Robin 发表于 2015-12-3 14:29
请问你使用PE自动生成的,还是基于KSDK修改,或者是直接操作寄存器方式实现的呢?如果是PE生成的,可以把 ...

我用pe生成的时候没有mk02系列的啊

使用特权

评论回复
9
FSL_TICS_Robin| | 2015-12-3 16:12 | 只看该作者
laoxianccc 发表于 2015-12-3 15:24
自己写寄存器操作的:
代码如下:
#include "MK02F12810.h"

如果想要PIT触发ADC启动采样,试一下SIM_SOPT7寄存器的ADC0ALTTRGEN位置1后再选择PIT trigger 0。
PIT是否工作可以看看PIT_CVALn寄存器是否在变化,PIT还需要注意PIT_MCR寄存器的FRZ位配置。


使用特权

评论回复
10
laoxianccc|  楼主 | 2015-12-3 16:27 | 只看该作者
FSL_TICS_Robin 发表于 2015-12-3 16:12
如果想要PIT触发ADC启动采样,试一下SIM_SOPT7寄存器的ADC0ALTTRGEN位置1后再选择PIT trigger 0。
PIT是 ...

如果用PDB触发呢,这个触发机制是怎么实现的。还有软件触发是怎么实现的,这几个都试过了没反应,您刚才说的我先试试。谢谢

使用特权

评论回复
11
laoxianccc|  楼主 | 2015-12-3 16:46 | 只看该作者
FSL_TICS_Robin 发表于 2015-12-3 16:12
如果想要PIT触发ADC启动采样,试一下SIM_SOPT7寄存器的ADC0ALTTRGEN位置1后再选择PIT trigger 0。
PIT是 ...

改过来,PIT的已经ok了,谢谢啊,不过如果用PDB 的话能帮我看看有什么问题么,目前就是没有ADC转化,不知道PDB触发机制是不是有问题,但是找不到问题所在。

使用特权

评论回复
12
21ic小管家| | 2015-12-3 17:02 | 只看该作者
此打赏为十大热门打赏哦~

使用特权

评论回复
13
laoxianccc|  楼主 | 2015-12-3 17:09 | 只看该作者
21ic小管家 发表于 2015-12-3 17:02
此打赏为十大热门打赏哦~

非常感谢,谢谢支持。:D

使用特权

评论回复
14
FSL_TICS_Robin| | 2015-12-3 17:11 | 只看该作者
laoxianccc 发表于 2015-12-3 16:46
改过来,PIT的已经ok了,谢谢啊,不过如果用PDB 的话能帮我看看有什么问题么,目前就是没有ADC转化,不知 ...

PDB触发ADC你可以看一下这篇:手把手学习官方例程六Kinetis100MHz ADC 的第4页PDB代码和触发图。
正好是直接操作寄存器方式的PDB触发ADC应用。

再结合附件文档,应该就能对ADC触发机制有个大致了解了。 飞思卡尔Kinetis K60 高速ADC应用.pdf (2.55 MB)

使用特权

评论回复
15
奥德赛| | 2015-12-3 20:01 | 只看该作者
adc的触发我还是头回知道,有这方面的资料吗

使用特权

评论回复
16
laoxianccc|  楼主 | 2015-12-4 10:17 | 只看该作者
FSL_TICS_Robin 发表于 2015-12-3 17:11
PDB触发ADC你可以看一下这篇:手把手学习官方例程六Kinetis100MHz ADC 的第4页PDB代码和触发图。
正好是 ...

非常感谢,这几个文档我都看过了。不过目前还是没试出来,需要继续努力了,哈哈。后续有问题再问问你,谢谢啊。

使用特权

评论回复
17
laoxianccc|  楼主 | 2015-12-4 10:17 | 只看该作者
奥德赛 发表于 2015-12-3 20:01
adc的触发我还是头回知道,有这方面的资料吗

你可以看看楼上的一些回复,讲的很详细,Datasheet也讲了。

使用特权

评论回复
发新帖 本帖赏金 2.00元(功能说明)我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

12

主题

107

帖子

1

粉丝