在线时间36 小时
UID423505
注册时间2013-3-27
NXP金币0
该用户从未签到
高级会员

- 积分
- 651
- 最后登录
- 2020-9-4
|
调试mqx下的adc例程出现的问题?例程似乎有误。大家看看我说的是否正确!
_mqx_int _adt_hw_channel_init(MQX_FILE_PTR f, ADT_CHANNEL_PTR adt_ch)
{
ADC_CHANNEL_BUNDLE_PTR adc_ch_bundle = (ADC_CHANNEL_BUNDLE_PTR) f->DEV_DATA_PTR;
uint_32 pdb_period;
_mqx_uint adc_num = adc_ch_bundle->adc_num;
_mqx_int ch_num;
_mqx_int status;
if ((adt_ch->g.trigger & ADC_PDB_TRIGGER) != ADC_PDB_TRIGGER)
return ADC_ERROR_HWTRIGGER; /* the channel can be run only from HW trigger */
if (pdb_internal.period != 0) {
_mqx_int N;
N = adt_ch->g.period / pdb_internal.period;
if (N * pdb_internal.period != adt_ch->g.period)
return ADC_ERROR_BAD_PARAM; /* it's only allowed to have periods as multiple of basic period */
adc_ch_bundle->periods_preset = N;
adc_ch_bundle->periods = 0;
}
else {
adc_ch_bundle->periods_preset = 1;
adc_ch_bundle->periods = 0;
status = adt_period_prescaler(adt_ch->g.period);
if (status != ADC_OK)
return status;
}
PDB0_BASE_PTR->SC |= PDB_SC_TRGSEL_SWTRIG; /* set to software trigger by default */
ch_num = adc_ch_bundle->ch_num;
pdb_period = pdb_internal.period; /* : DON'T REMOVE THIS LINE! CW 6.2 COMPILER ERROR WITH DIVIDING OCCURS OTHERWISE */
PDB0_BASE_PTR->SC |= PDB_SC_LDOK_MASK; /* write new MOD value */
if (ch_num == 0) { /* temporary, we will make running channel A not actively, first trigger will move it to area within accesible boundary */
pdb_internal.delayA[adc_num] = ((uint_64) adt_ch->g.offset * PDB0_BASE_PTR->MOD) / pdb_period;/* : we must use pdb_period */
PDB0_BASE_PTR->CH[adc_num].DLY[0] = (PDB0_BASE_PTR->MOD == PDB_MOD_MOD_MASK ? PDB_MOD_MOD_MASK : PDB0_BASE_PTR->MOD + 1); /* move ChA behind accessible boundary */
adc_ch_bundle->waste_channel = 1;
}
else
PDB0_BASE_PTR->CH[adc_num].DLY[ch_num] = ((uint_64) adt_ch->g.offset * PDB0_BASE_PTR->MOD) / pdb_period;/* : we must use pdb_period */
PDB0_BASE_PTR->SC |= PDB_SC_LDOK_MASK; /* write new DLY value */
pdb_internal.used_channel[adc_num] |= 0x01 g.samples = adt_ch->g.samples_preset;
adt_ch->b = adc_ch_bundle;
return ADC_OK;
}
如果我要使用ADC的多通道的的话,ch_num可以大于1,那么对于 PDB0_BASE_PTR->CH[adc_num].DLY[ch_num] 超出其范围了,是不是有问题呀!!!
另外,如果我设置8通道的ADC的话,程序居然跑飞了。
我只修改了mqx的两个参数。
adc_conf.h中
#define ADC_MAX_SW_CHANNELS (8)
adc_kadc_prv.h中
#ifndef ADC_CHANNELS_PER_ADC
#define ADC_CHANNELS_PER_ADC (8)
#endif
但程序跑飞了。请大侠指点一下!!!
|
|