使用辅助 ADC 组

公告

大中华汽车电子生态圈社区并入开发者社区- 更多资讯点击此

Tip / 登入 to post questions, reply, level up, and achieve exciting badges. Know more

cross mob
Translation_Bot
Community Manager
Community Manager
Community Manager

你好,

最近我正在尝试让辅助ADC正常工作,但没能做到。

到目前为止,我已经设法用几个 ADC 初始化了 0 到 3 的组,然后通过 ifxevadc_adc_getResult () 读取值。

次级组 8 的初始化已构建,但我得到的值并不能反映在 “硬件” 中测量的电压电平。 例如,看来其中一个次要频道的测量(几乎)与组3中的一个频道完全相同。

是否有明显的重叠或配置错误可能导致这种情况?

 

这是初始化例程:

 

/* Function to initialize the EVADC group */
void _init_EVADC_sec_groups(void)
{
    /* Initialize the group */
    IfxEvadc_Adc_GroupConfig adcGroupConf; /* Define a configuration structure         */
    IfxEvadc_Adc_initGroupConfig(&adcGroupConf, &g_evadc); /* Refill with default values              */

    /* Enable queue 0 source */
    adcGroupConf.arbiter.requestSlotQueue0Enabled = TRUE;

    /* Set the group 8 as master group */
    adcGroupConf.master = IfxEvadc_GroupId_8;

    adcGroupConf.queueRequest[0].triggerConfig.gatingMode = IfxEvadc_GatingMode_always;

    /* Initialize the used groups */
    adcGroupConf.groupId = IfxEvadc_GroupId_8; // Offset of 8 for first secondary group

    IfxEvadc_Adc_initGroup(&g_evadcGroup_sec[0], &adcGroupConf);
}


/* Function to initialize the used EVADC channels */
void _init_EVADC_sec_channels(void)
{
    IfxEvadc_Adc_ChannelConfig adcChannelConf; /* Configuration structure                          */

    for (uint8_t ch = 0; ch < SEC_CHANNELS_NUM; ch++) /* The channels included in g_chn are initialized   */
    {
        /* Fill the configuration with default values */
        IfxEvadc_Adc_initChannelConfig(&adcChannelConf, &g_evadcGroup_sec[0]); //Change 0, if more than 1 secondary group is involved

        /* Set the channel ID and the corresponding result register */
        adcChannelConf.channelId = g_chn_sec[ch].analogInput->channelId;
        adcChannelConf.resultRegister = g_chn_sec[ch].resultRegister; //g_chn_sec[ch].analogInput->channelId; //

        /* Apply the channel configuration */
        IfxEvadc_Adc_initChannel(&g_evadcChannel_sec[ch], &adcChannelConf);

        /* Add channel to queue with refill option enabled */
        IfxEvadc_Adc_addToQueue(&g_evadcChannel_sec[ch], IfxEvadc_RequestSource_queue0, IFXEVADC_QUEUE_REFILL);

    }
}

 

我还不完全明白为不同的频道选择/相同的结果寄存器会有什么影响。 你能给我一个提示吗? 对于主/辅助频道,它们是否需要有所不同? 小学需要年满 < 8岁,中学需要年<满16岁吗?

最诚挚的问候
beamk

smartconx_target@Q!w2e3r4t5y6u7i8o9p0||/t5/AURIX/Using-Secondary-ADC-Group/td-p/627726

0 点赞
4 回复数
Translation_Bot
Community Manager
Community Manager
Community Manager

@beamk

 

你能否告诉我 RESTGT 的价值,即你是将结果存储在全局寄存器还是组特定的结果寄存器中? 你能否也参阅第 32.10 节来详细了解结果处理?

 

最诚挚的问候,
Anupama。

0 点赞
Translation_Bot
Community Manager
Community Manager
Community Manager

你好 Anupama,

谢谢你的提示。 我将再次阅读该部分,看看那里是否有新的输入。

 

目前,所有频道都使用以下设置进行初始化:

.globalResultUsage = 假

 

初始化主组 0 到 3 时使用组 0 作为主组,初始化组 8 使用组 8 作为主组,这是正确的吗?

 

我现在发现,当我只初始化辅助 ADC 时,CPU 就会进入调试陷阱。
会不会有更基本的问题,比如未初始化的时钟?

 

 

如果有帮助的话,这将是 adc 频道配置表之一...

 

 

adc_channel_config g_chn_sec[SEC_CHANNELS_NUM] =
    {
    /* GROUP 8 */
        {
                &IfxEvadc_G8CH7_P40_9_IN,
                (IfxEvadc_ChannelResult)1,
                IfxEvadc_DataModificationMode_standardDataReduction,
                IfxEvadc_DataReductionControlMode_0,
                DIV_FACTOR_NORM }, /* AN39: ... pin  */
        {
                &IfxEvadc_G8CH12_AN44_IN,
                (IfxEvadc_ChannelResult)2,
                IfxEvadc_DataModificationMode_standardDataReduction,
                IfxEvadc_DataReductionControlMode_0,
                DIV_FACTOR_NORM }, /* AN44: ... pin  */
        {
                &IfxEvadc_G8CH14_AN46_IN,
                (IfxEvadc_ChannelResult)3,
                IfxEvadc_DataModificationMode_standardDataReduction,
                IfxEvadc_DataReductionControlMode_0,
                DIV_FACTOR_NORM }, /* AN46: ... pin  */
    };

 

 

还有初始化例程:

 

 

    _initEVADCModule(); /* Initialize the EVADC module              */
    _init_EVADC_prim_groups(); /* Initialize the EVADC group               */
    _init_EVADC_prim_channels(); /* Initialize the used channels           */

    _init_EVADC_sec_groups();
    _init_EVADC_sec_channels();

    /* Start the scan */
    _start_EVADC_sec();
    _start_EVADC_prim();

 

 

开始扫描...

 

/* Function to start the scan */
void _start_EVADC_prim(void)
{
    /* Start the queue */
    for (uint8 grp = 0; grp < PRIM_GROUPS_NUM; grp++)
    {
        /* Start the queue */
        IfxEvadc_Adc_startQueue(&g_evadcGroup_prim[grp], IfxEvadc_RequestSource_queue0);
    }
}

/* Function to start the scan */
void _start_EVADC_sec(void)
{
    for (uint8 grp = 0; grp < SEC_GROUPS_NUM; grp++)
    {
        /* Start the queue */
        IfxEvadc_Adc_startQueue(&g_evadcGroup_sec[grp], IfxEvadc_RequestSource_queue0);
    }
}

 

 

最好的问候

0 点赞
Translation_Bot
Community Manager
Community Manager
Community Manager

关于这个话题还有其他想法吗? 你可能有一些代码初始化主 ADC 和辅助 ADC 来检查差异吗?

0 点赞
Translation_Bot
Community Manager
Community Manager
Community Manager

@beamk

 

你能告诉我你遇到的陷阱细节吗?


最诚挚的问候,

Anupama。

0 点赞