完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
我们正在使用带有 CM7 协处理器的 iMX8MN 板。
我们有一个无线电芯片连接到 GPT Input Capture 1 引脚, 来自无线电芯片的信号是频率未知且可变的脉冲波。 我们需要处理信号以获得一个数组,其中包含每个 0 和 1 转换的持续时间 我的想法是在输入捕获模式下使用 GPT 1,配置为触发上升沿和下降沿的中断,并在中断中获取位 (0/1) 的持续时间并将其存储在数组中。(应该稍后用 DMA 制作..) 但我有一些问题: 1.如果我们配置GPT在上升沿/下降沿触发中断,如何知道中断是由下降沿还是上升沿触发?(SR寄存器只包含“Input capture 1 Flag”) 2. 当 GPT 配置为重启模式时,触发“输入捕获事件”时计数器不重启是否正常?(所以为了测量一个位的持续时间,我们需要存储之前的值?) 3. 有人知道在哪里定义/设置 kCLOCK_IpgClk 频率吗?我有类似 66666666Hz 的东西,我不知道这个值在哪里设置。 这里有一些代码示例: /* Freescale includes. */ #include \"board.h\" #include \"clock_config.h\" #include \"fsl_debug_console.h\" #include \"fsl_device_registers.h\" #include \"fsl_gpio.h\" #include \"fsl_clock.h\" #include \"fsl_gpt.h\" #include \"pin_mux.h\" volatile bool gptIsrFlag = false; void GPT1_IRQHandler(void) { /* Clear interrupt flag.*/ GPT_ClearStatusFlags(GPT1, kGPT_InputCapture1Flag); gptIsrFlag = true; /* Add for ARM errata 838869, affects Cortex-M4, Cortex-M4F, Cortex-M7, Cortex-M7F Store immediate overlapping exception return operation might vector to incorrect interrupt */ #if defined __CORTEX_M && (__CORTEX_M == 4U || __CORTEX_M == 7U) __DSB(); #endif } void main(void) { /* Init board hardware. */ /* M7 has its local cache and enabled by default, * need to set smart subsystems (0x28000000 ~ 0x3FFFFFFF) * non-cacheable before accessing this address region */ BOARD_InitMemory(); /* Board specific RDC settings */ BOARD_RdcInit(); BOARD_InitBootPins(); BOARD_BootClockRUN(); BOARD_InitDebugConsole(); uint32_t previousCapture = 0; uint32_t captureVal = 0; uint32_t currentCount = 0; gpt_config_t gptConfig; gptConfig.divider = 4095; GPT_GetDefaultConfig(&gptConfig); GPT_Init(GPT1, &gptConfig); GPT_SetInputOperationMode(GPT1, kGPT_InputCapture_Channel1, kGPT_InputOperation_BothEdge); GPT_EnableInterrupts(GPT1, kGPT_InputCapture1InterruptEnable); EnableIRQ(GPT1_IRQn); GPT_StartTimer(GPT1); PRINTF(\"kCLOCK_IpgClk = %d Hz\\n\", CLOCK_GetFreq(kCLOCK_IpgClk)); PRINTF(\"kCLOCK_PerClk = %d Hz\\n\", CLOCK_GetFreq(kCLOCK_PerClk)); while (true) { /* Check whether occur interupt */ if (true == gptIsrFlag) { captureVal = GPT_GetInputCaptureValue(GPT1, kGPT_InputCapture_Channel1); currentCount = GPT_GetCurrentTimerCount(GPT1); PRINTF(\"Capture value = %d, currentCount = %d, difference: %d\\n\", captureVal, currentCount, captureVal - previousCapture); previousCapture = captureVal; gptIsrFlag = false; } else { __WFI(); } } } |
|
相关推荐
|
|
只有小组成员才能发言,加入小组>>
1938个成员聚集在这个小组
加入小组我的项目我做主,使用GN+Ninja来完成构建系统(VSCode开发RT106X)
36445 浏览 0 评论
NXP IMX8应用处理器快速入门必备:技巧、使用、设计指南
5180 浏览 1 评论
6134 浏览 1 评论
6829 浏览 0 评论
NXP i.MX6UL开发板(linux系统烧录+规格+硬件+模块移植)使用手册
4263 浏览 0 评论
658浏览 2评论
求助,S32G上Core M启动后如何让Core A在Flash指定位置加载uboot?
647浏览 2评论
ESP32-WROVER-IE + LAN8720以太网,GPIO0电压只有1.6v,无法正常进入spi flash boot模式如何解决?
651浏览 2评论
求分享适用于PN7160 Android的NFC工厂测试应用程序
743浏览 2评论
863浏览 2评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-1-3 03:37 , Processed in 1.268867 second(s), Total 74, Slave 58 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号