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.
您好,
我的客户使用 C28346。
使用 EMIF 访问 CPLD 时出现问题。
问题是 /WR 信号与数据总线不同步。
它希望将0x37写入 CPLD。
但实际上,它会将旧数据0x27写入 CPLD。
将"NOP"添加到故障代码后、结果是正确的。
问题1:导致/WR 信号与数据总线不同步的原因是什么?
问题2: 正确的解决方案是什么?
谢谢、
此致、
Simen
------ ----------------------------------------------------
寄存器 sPWM_CTL buy_PWM_CTL;
寄存器 sPWM_COUNTER buy_PWM_CNT;
int PWM_CNT;
buff _pwm_CTL.word = CpldRegs.PWM_CTL.word;
缓冲器_pwm_CTL.Bits。CNT_HOLD = 1;
CpldRegs.PWM_CTL.word = buw_PWM_CTL.word; <--写入 保持=1到位于0x20000E 地址的 CPLD
buff _pwm_cnt.word = CpldRegs.pwm_counter.word;
PWM_CNT =缓冲器_pwm_CNT.Bits、PWM_CNTR;
缓冲器_PWM_CTL.Bits。CNT_HOLD = 0;
CpldRegs.PWM_CTL.word =缓冲器_pwm_CTL.word;
--------------------------------------------------
故障代码波形:(保持未成功,寄存器0x0E WR 0x37)
------ ----------------------------------------------------
寄存器 sPWM_CTL buy_PWM_CTL;
寄存器 sPWM_COUNTER buy_PWM_CNT;
int PWM_CNT;
buff _pwm_CTL.word = CpldRegs.PWM_CTL.word;
缓冲器_pwm_CTL.Bits。CNT_HOLD = 1;
CpldRegs.PWM_CTL.word =缓冲器_pwm_CTL.word;
asm (" NOP");
CpldRegs.PWM_CTL.word = buw_PWM_CTL.word; <--写入 保持=1到位于0x20000E 地址的 CPLD,并且它成功
asm (" NOP");
asm (" NOP");
asm (" NOP");
buff _pwm_cnt.word = CpldRegs.pwm_counter.word;
PWM_CNT =缓冲器_pwm_CNT.Bits、PWM_CNTR;
缓冲器_PWM_CTL.Bits。CNT_HOLD = 0;
CpldRegs.PWM_CTL.word =缓冲器_pwm_CTL.word;
asm (" NOP");
CpldRegs.PWM_CTL.word =缓冲器_pwm_CTL.word;
您好、Vivek、
以下是工作代码和非工作代码的汇编说明:
FAIL1-编码和波形
红色文本1:将 HOLD=1写入位于0x20000E 地址的 CPLD
@文本2:数据应为0x37 μ s (reg 14)、 而不是0x27。
故障2 -代码和波形
红色文本1:添加 一个"NOP"、然后将 HOLD=1写入0x20000E 地址处的 CPLD
@文本2:数据应为0x37 μ s (reg 14)、 而不是0x27。
通过代码和波形
红色文本1: 然后将 HOLD=1 写入两次、地址为0x20000E
红色文本2:首次写入 μ@(reg 14)数据为0x27。
红色文本3:等待 "NOP",然后再次向@(reg 14)写入"0x37",并通过测试。
此致、
Simen
你(们)好、Vivek
添加客户其他信息、
1.故障3代码写入/读取时序错误。
预期代码: WRITE reg 14=> Read reg 19=> WRITE reg 14=> Read reg 10。
波形 结果: 读取寄存器19 =>写入 寄存器14 =>写入 寄存器14 =>读取寄存器10
故障4代码对写入和等待16个"NOP"延迟无效。
但它可以在写入两次时工作。
--------------------------------------------------
故障3 -编码和波形
故障4 -代码和波形
此致、
Simen
您好、Simen、
很抱歉耽误你的回答。 预期结果来自 FAIL-3代码。 Reg14和 Reg19是不同的地址、因此由于 CPU 流水线的原因、运行顺序会发生变化。 在 CPU 流水线 WR 是最后一个相位、因此即使 WR 之后有 RD、RD 也可以在 WR 之前执行。 以下是 CPU 流水线(有关更多详细信息、请参阅 CPU 用户指南) -
关于其他问题,我们仍然不知道为什么会发生这种情况。
您是否可以提供此问题的 CCS 示例工程、我可以使用它在此处复制此问题?
您还在使用任何编译器优化吗? 是否可以禁用优化并查看它是否可以在没有优化的情况下工作?
其他要尝试的是对 reg14执行写操作后,是否还可以向 reg14添加"读" 以查看您得到的值是多少?
此致、
Vivek Singh
您好、Vivek、
由于 CPU 流水线=>、预计会产生 FAIL-3代码的结果
1.如何遵循某些规则来避免这种结果?
因为我们通常需要按特定顺序使用 r/w XINTF、但是操作序列的变化会产生很大的麻烦。
2.按管道更改的操作序列仅发生在 XINTF 中? 内部存储器访问是否正常?
谢谢