大家好!
我正在尝试使用 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();
}


