主题中讨论的其他器件:ADC3643、 SysConfig
1) iAM 在下降沿和上升沿触发 am243的 GPIO (iAM 使用 r5f 内核)
2) 2)当我将 GPIO 的输入频率设置为1MHz 时、2MHz ISR 正常工作
3)但我将其设置为3MHz、但它不工作
为什么我能够看到这种行为?ISR 支持的最小频率和最大频率是多少? 当具有相同优先级的中断(相同 的中断再次发生)中断 r5f 内核时会发生什么 情况?
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.
1) iAM 在下降沿和上升沿触发 am243的 GPIO (iAM 使用 r5f 内核)
2) 2)当我将 GPIO 的输入频率设置为1MHz 时、2MHz ISR 正常工作
3)但我将其设置为3MHz、但它不工作
为什么我能够看到这种行为?ISR 支持的最小频率和最大频率是多少? 当具有相同优先级的中断(相同 的中断再次发生)中断 r5f 内核时会发生什么 情况?
您好、Manoj、
您使用的是 SDK 的哪个版本?
[引用 userid="547541" URL"~/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1189641/lp-am243-interrput-handler-r5f-core "]为什么我能够看到此行为?我准备好您使用的是 AM243x LaunchPad。 如何生成 LP 的 GPIO 输入? 您能否与此行为共享示例代码?
[引用 userid="547541" URL"~/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1189641/lp-am243-interrput-handler-r5f-core "]当具有相同优先级的中断(相同 的中断再次发生)中断 r5f 内核 时会发生什么情况?请参阅 TRM:
当一个中断从挂起状态变为活动状态时、该中断被载入相应的活动寄存器、并且所有优先级相等或较低的中断都被屏蔽("屏蔽关闭"表示它们被屏蔽、不受优先级仲裁的影响、从而中断当前活动的中断)。
这意味着即使中断嵌套被启用、同一中断也不能中断当前 ISR。
ISR 清除 VIM 和中断源上的中断。 通常、在清除(确认)现有中断之前、中断源不会生成新中断。 清除的顺序取决于中断是脉冲还是电平。 请参阅: \sources\kernel\nortos\DPL\R5\Hwip_armv7r_handlers_nortos.c\Hwip_IRQ_handler_c
然后、源可以生成另一个中断、VIM 将作为一个新中断进行处理。 如果这是最高优先级的挂起中断、VIM 将把这个中断发送到 R5F。
此致、
弗兰克
静态空 GPIO_bankIsrFxn (void *args){
//uintptr_t oldIntState;
//oldIntState = Hwip_disable();
//如果遇到第一个下降沿,则返回
if (status=0 && Getdata (gpioBaseAddr、7)=1){
返回;
}
if (status=0){
//ISR 在上升沿执行(iam 获取 MSB)
temp=Getdata (gpioBaseAddr、6、0);
STATUS=1;
}如果(count <=samples && status=1)则为{
//ISR 在下降沿执行(iam 获取 lsb)
temp=(temp<<7)|Getdata (gpioBaseAddr、6、0);
STATUS=0;
ESDRAM[count]=温度;
count++;
}
//Hwip_restore (oldIntState);
}
实际上、我正在尝试从 adc3643 (CMOS 接口)捕获数据、因此我会在下降沿和上升沿触发 ISR、并根据来自数字源的 Dclk (映射到 GPIO1_7)和触发 ISR 来收集数据、在0.5MHZ 时、我将获得准确的数据、 1MHz 至2.5MHz ISR 正在执行、ESDRAM 的值正在变化、但数据不准确、超过3MHz 时、当我在 ccs..ca的表达式选项卡中添加 esdram 值时、无法读取这些值。请帮我。 为什么我能够看到这种行为
您好、Manoj、
我认为您正在使用 SOC GPIO 对 ADC 输出接口进行位拆裂。
DCLK 是来自 ADC 的输出时钟? 这连接到 GPIO1_7?
该接口配置为双倍数据速率模式、即 ADC 在每个 DCLK 边沿(低到高和高到低)驱动输出数据? 数据引脚是否连接到其他 SOC GPIO?
您的代码在两个 DCLK (GPIO1_7)边沿上采用 GPIO 组 ISR?
ISR 从连接的 GPIO 读取 ADC 数据引脚?
IRQ 调度程序在寄存的 ISR 函数执行前后执行。 我猜是调度时间加上注册的 ISR 时间需要超过1微秒。 因此、ISR 并不总是在正确的时间对数据位进行采样。
您能否使用 PMU 测量 ISR 之间的时间? 请参阅 https://software-dl.ti.com/mcu-plus-sdk/esd/AM243X/08_05_00_24/exports/docs/api_guide_am243x/KERNEL_DPL_CYCLE_COUNTER_PAGE.html
此致、
弗兰克
是的
是的
[引用 userid="16636" URL"~/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1189641/lp-am243-interrput-handler-r5f-core/4484663 #4484663"] ISR 从连接的 GPIO 读取 ADC 数据引脚?[/quot]是的
我将对此进行检查
我的 ISR 是否无法在3MHz 下处理、因为我无法看到 ESDRAM 的值在3MHz 下发生变化...如何检查 ISR 的最大中断频率是多少?
您好、Manoj、
[引用 userid="547541" URL"~/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1189641/lp-am243-interrput-handler-r5f-core/4486242 #4486242"]如何检查 ISR 的最大中断频率是多少?[/quot]我建议使用周期计数器(PMU)测量 ISR 之间的时间:请参阅 https://software-dl.ti.com/mcu-plus-sdk/esd/AM243X/08_05_00_24/exports/docs/api_guide_am243x/KERNEL_DPL_CYCLE_COUNTER_PAGE.html
这将告诉您 ISR 之间消耗的 R5F 时钟周期数(@ 800MHz)。
您可以尝试的另一件事是驱动 ISR 内部的 GPIO 输出(例如、ISR 入口为高电平、ISR 出口为低电平)。 然后查看示波器或逻辑分析仪上的 GPIO 输出时序。
从起始的 ISR 频率(0.5MHz)开始、然后逐渐增加 ISR 频率、直到您的 ADC 采样停止工作。
请告诉我它是怎么发生的。
此致、
弗兰克
1)
没有内存传输的 ISR (如果包含块传输 DMA (UDMA),则至少需要2.4us):-1.2*2= 2.4us
带有内存传输的 ISR (不带 UDMA):-1.3*2= 2.6us
Dclck:-2.5MHz 0.4us
是否可以使用 pdma 直接从 GPIO 中读取并在没有 ISR 的情况下存储在存储器中?
2)
是否可以增加 r5f 内核的输入时钟频率?
您好、Manoj、
[引用 userid="547541" URL"~/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1189641/lp-am243-interrput-handler-r5f-core/4498999 #4498999"]是否可以使用 pdma 直接从 GPIO 读取并在没有 ISR 的情况下存储在内存中?请参阅 AM243x TRM 版本 E、表11-626。 跨设备域的 PDMA 分配。 该表显示了 PDMA 处理的外设。 GPIO 未包含在列表中。
[引用 userid="547541" URL"~/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1189641/lp-am243-interrput-handler-r5f-core/4498999 #4498999"]是否可以提高 r5f 内核的输入时钟频率?最大 R5F 时钟频率为800MHz。 默认情况下、R5F 内核配置为此频率。
[引用 userid="547541" URL"~/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1189641/lp-am243-interrput-handler-r5f-core/4498999 #449999"]没有内存传输的 ISR (如果包含块传输 DMA (UDMA),则至少需要2.4us):-1.2*2= 2.4us
带有内存传输的 ISR (不带 UDMA):-1.3*2= 2.6us
Dclck:-2.5MHz 0.4us
请详细说明一下吗? 您是指使用/不使用 uDMA 的 GPIO ISR 从 GPIO 传输到存储器吗?
此致、
弗兰克
即使 R5F 的输入时钟频率最高可达800MHz、但在 SysConfig 中、我们将其设置为25MHz、因为它来自25MHz LVCMOS 振荡器、是否有任何方法可以将频率提高至800MHz
[引用 userid="16636" URL"~/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1189641/lp-am243-interrput-handler-r5f-core/4500487 #4500487")您能详细说明吗? 您是指使用/不使用 uDMA 的 GPIO ISR 从 GPIO 传输到存储器吗?是的、如果我使用 UDMA 在 GPIO 的一个采样后使用 ISR 将数据传输到存储器中、则没有使用
您好、Manoj、
[引用 userid="547541" URL"~/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1189641/lp-am243-interrput-handler-r5f-core/4500959 #4500959"]即使 R5F 的输入时钟频率最大为800MHz、但在 SysConfig 中、我们将其设置为25MHz、因为它来自25MHz LVCMOS 振荡器、是否有任何方法可以将频率提高到800MHzR5F 的最大频率为800MHz。
请参阅 TRM:
好的、在我看来、DMA 对时序的影响很小(200ns)。
关键问题不是从 GPIO 读取数据所需的时间、而是为 GPIO ISR 提供服务所需的时间。 因此、需要优化 GPIO ISR 响应时间。
您是否在"发布"模式下构建代码?
您是否考虑使用 PRU IO 而不是 GPIO 来连接 ADC?
此致、
弗兰克
我现在就这么做了