This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] TMDSCNCD263:COMP 事件 SDFM 不执行任何操作

Guru**** 2943400 points
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1232843/tmdscncd263-comp-event-sdfm-doing-nothing

器件型号:TMDSCNCD263

大家好!

我正在尝试使用 SDFM 创建一个 COMP H 事件、然后该事件应通过 Output交叉 开关输出。 数据滤波器和比较器滤波器正常工作、并返回我期望的值。 但是、永远不会生成 COMP 事件、 即使比较器数据高于阈值也是如此。  SDFM_getThresholdStatus 始终返回0、并且 OutputXBar 的引脚也始终为0。

这应该仅仅是一个代码问题、因为我已经可以读取正确的数据、所以所有的引脚都是正确的。

我希望你能帮助我,并提前感谢!

此致

TIL

下面是我的代码:

uint16_t HLT = 29150u;
uint16_t llt = 0u;

简短的 int FilterData;
uint16_t x;
uint16_t SDFM_STATUS;

void empty_main (void *args)
{

/*打开驱动程序以打开控制台的 UART 驱动程序*/
drivers_open();
Board_driversOpen();

/*输入控制单元*/

/*配置输入控制单元:调制器时钟速率=调制器数据速率*/

SDFM_setupModulatorClock (CONFIG_SDFM0_BASE_ADDR、SDFM_FILTER_4、
SDFM_dimulator_CLK_equal_data_rate);

SDFM_enableSynchronizer (CONFIG_SDFM0_BASE_ADDR、SDFM_FILTER_4、SDFM_CLOCK_SYNCER | SDFM_DATA_SYNCER);

SDFM_selectClockSource (CONFIG_SDFM0_BASE_ADDR、SDFM_FILTER_4、SDFM_CLK_SOURCE_CHANNEL_CLK);

/*比较器单元-高于和低于值的阈值设置*/

//在此处更改过滤器类型
SDFM_configEnhancedComparator (CONFIG_SDFM0_BASE_ADDR、(SDFM_FILTER_4 | SDFM_FILTER_SINC_3 | SDFM_SET_OSR (32))、SDFM_THRT (HLT、llt)、SDFM_THRESHOLD (32767.0)、0);

SDFM_selectCompEventSource (CONFIG_SDFM0_BASE_ADDR、SDFM_FILTER_4、SDFM_COMP_EVENT_1、SDFM_COMP_EVENT_SRC_COMPH1);

SDFM_CompEventFilterConfig Digital_Filter;
digital_Filter.clkPrescale=19;
digital_Filter.sampleWindow=25;
DIGITAL_FILTER.THRESHOLD=24;
SDFM_configCompEventHighFilter (CONFIG_SDFM0_BASE_ADDR、SDFM_FILTER_4、&Digital_Filter);
SDFM_initCompEventHighFilter (CONFIG_SDFM0_BASE_ADDR、SDFM_FILTER_4);


SDFM_selectCompEventSource (CONFIG_SDFM0_BASE_ADDR、SDFM_FILTER_4、SDFM_COMP_EVENT_2、SDFM_COMP_EVENT_SRC_COMPH2_L2);
/*配置比较器单元的比较器滤波器类型和比较器
OSR 值、较高阈值、下限阈值*/


/*数据过滤器单元*/

/*配置数据过滤器单元-过滤器类型、OSR 值和
启用/禁用数据过滤器*/

SDFM_configDataFilter (CONFIG_SDFM0_BASE_ADDR、(SDFM_FILTER_4 | SDFM_FILTER_SINC_3 |
SDFM_SET_OSR (32)、(SDFM_DATA_FORMAT_32_BIT | SDFM_FILTER_ENABLE |
SDFM_SHIFT_VALUE (0x0007));//Shift 值?

/*启用主滤波器位:除非该位被置位,否则没有滤波器模块
监控器。 当主滤波器可用时、所有滤波器模块
在启用单独的滤波器模块后、位被启用。*/

SDFM_enableMasterFilter (CONFIG_SDFM0_BASE_ADDR);


// CSL_REG16_WR_RAW (0x5026808a, 0xe19f );

// CSL_REG16_WR_RAW (0x5026809c,0x043f);


for (;;)
{
FilterData = SDFM_getFilterData (CONFIG_SDFM0_BASE_ADDR、SDFM_FILTER_4);
X = CSL_REG16_RD_RAW (0x50268094);//比较器值
SDFM_STATUS = SDFM_getThresholdStatus (CONFIG_SDFM0_BASE_ADDR、SDFM_FILTER_4);
ClockP_usleep (1000000L);


Board_driversClose ();
drivers_close();

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、

    根据 AM263x TRM、要使比较器滤波器模块事件触发 CPU 中断、必须启用主中断和比较器 EVENT1或事件2中断:

    此致、

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Ming:

    我不想触发中断、我想使用 CEVT1事件直接路由到 OutputXBar、如图底部的 TRM 中所示:

    此致、直至

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我想我自己解决了它,即使我不知道为什么。 我更改了 OutputXBar、然后它能够正常工作。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    嗨、

    很高兴听到它按预期工作。 您能否分享解决该问题的更新配置函数/参数?

    此致、

    扎卡里·弗莱诺

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Zackary:

    我使用 OutputXBar 15而不是 OutputXBar 5、其余部分保持不变。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    哦、我需要确保很好地使用 SDFM_initCompEventHighFilter (CONFIG_SDFM0_BASE_ADDR、SDFM_FILTER_4);在我的 for 循环中、否则在初始化所有内容时输出将保持原样

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    哦、我需要确保很好地使用 SDFM_initCompEventHighFilter (CONFIG_SDFM0_BASE_ADDR、SDFM_FILTER_4);在我的 for 循环中、否则在初始化所有内容时输出将保持原样

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、

    根据 AM263x TRM、为了复位 FLTx_FLUG_CEVT1标志位、会设置 SDIFLGCLR 寄存器中的相应位

    此致、