英飞凌
直播中

王桂兰

7年用户 1192经验值
私信 关注

求助,关于PSoC 6上的ADC中断问题求解

项目布局细节:
在我的项目中,我使用 PSoC 6: CY8C62xA,在闪存中存储了 2 个相同的图像(每个图像 1MB)。 这让我能够更轻松地升级图像并在它们之间切换。 我在 CM4 内核上使用 RTOS,而 CM0p 是裸机。
计划:
我想在映像的开头放置一个应用程序引导加载器,以处理一些额外的逻辑,并在将来使用它使应用程序的其余部分成为独立于位置的代码。 应用程序引导加载程序仍在闪存中,并从通常映像的起始位置开始。 我修改了链接器,使应用程序映像按引导加载程序的大小移动,并添加了从引导加载程序到应用程序的跳转逻辑:
1. 禁用 IRQ 并清除待处理 IRQ
关闭 NVIC 中所有已启用的中断
3. 关闭所有可能产生中断的已启用外设
4. 禁用 Systick 及其异常挂起位
正确退出__set_MSP、__set_CONTROL 和__set_PSP 函数
使用函数指针跳转到应用程序,并直接转到 cm0p 内核的 Vtable 地址
这将跳转到应用程序的 CM0p 代码,其中 Cy_SysEnableCM4(m4_addr) 也将启动 cm4 内核。 RTOS 任务运行正常,除 adc 外一切正常。
问题:
我把问题缩小到应用程序 cm4 侧的 cyhal_adc_read() 函数上。 Adc init 正常,但程序在执行该功能时停止。 中断没有启动,但我不确定是 adc 中断还是 IPC 中断出了问题。
当我停止 CPU 运行时,通过 JLink 可以看到没有硬故障,电脑也没有卡在一个地方。 检查地图时,一切正常,矢量表在应该在的位置。

我检查了地图,一切正常,矢量表在应该在的位置,填充正确。
有谁知道需要注意什么,可能出了什么问题?
如果您有问题或需要我提供更多细节,请告诉我。

回帖(1)

刘悌耀

2024-5-29 16:44:38
在您的项目中,您计划在PSoC 6(CY8C62xA)上使用两个相同的图像(每个图像1MB)来实现更轻松的升级和切换。您的项目布局包括一个应用程序引导加载器,它位于映像的开头,并处理一些额外的逻辑。引导加载器仍在闪存中,并从通常映像的起始位置开始。您还修改了链接器,使应用程序映像按引导加载程序的大小移动,并添加了从引导加载程序到应用程序的跳转逻辑。

关于ADC中断问题,您需要确保在PSoC 6上正确配置和使用ADC中断。以下是一些建议和步骤:

1. 配置ADC:在PSoC Creator中,选择所需的ADC组件并配置其参数,如分辨率、采样率等。

2. 配置中断:在PSoC Creator中,选择所需的中断组件(如CM4的中断或CM0p的中断),并将其连接到ADC的中断输出。

3. 编写中断服务例程(ISR):在您的代码中,编写一个中断服务例程来处理ADC中断。在这个例程中,您可以读取ADC值、执行所需的处理,并在必要时更新应用程序状态。

4. 配置中断优先级:根据您的应用程序需求,配置中断优先级以确保中断能够正确地处理。

5. 启用中断:在引导加载器和应用程序代码中,确保在适当的时候启用中断。

6. 测试和调试:在实际硬件上测试您的应用程序,确保ADC中断能够正确触发并处理。

7. 优化性能:根据您的应用程序需求,优化ADC中断处理以提高性能和响应速度。

通过遵循这些步骤,您应该能够在PSoC 6上成功地实现和使用ADC中断。如果您在实现过程中遇到任何问题,请随时提问,我会尽力帮助您。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分