您好!
当 HLC 中断恰好从开始重新启动时、我要复位 CLB、如何执行该复位? 如果我这样操作、设置全局加载寄存器0、然后再次启用 CLB、正确吗?
EALLOW;
HWREG (CLB1_BASE + CLB_LOGICCTL + CLB_O_LOAD_EN)= 0;
EDIS;
CLB_enableCLB (CLB1_base);
谢谢。
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.
您好!
当 HLC 中断恰好从开始重新启动时、我要复位 CLB、如何执行该复位? 如果我这样操作、设置全局加载寄存器0、然后再次启用 CLB、正确吗?
EALLOW;
HWREG (CLB1_BASE + CLB_LOGICCTL + CLB_O_LOAD_EN)= 0;
EDIS;
CLB_enableCLB (CLB1_base);
谢谢。
您好、Hamidreza:
当 HLC 中断恰好从开始重新启动时、我想重置我的 CLB、如何重置?
为什么要在 CLB 中断期间复位整个 CLB? 我要警告您、在 ISR 中重置外设不是一个好主意、此外设负责处理来自同一外设的中断。 如果操作不当、可能会产生意外行为。 妥善做法是在主例程中使用某些其他触发器或某些条件来禁用和复位 CLB、而同时不被任何其他东西使用。
如果我这样做是为了设置全局加载寄存器0,然后再次启用 CLB,是不是正确?
请阅读 CLB 参考手册中的寄存器、您正在清除的 LOAD_EN 信号不会禁用 CLB:
您正在使用 driverlib 函数来启用 CLB、如果您在调用使能 CLB 之前使用禁用 CLB 函数、这从根本上会复位外设、但您为什么需要复位整个 CLB 呢? 我对类似这样的用例很好奇。
您好、Hamidreza:
我想从 bsc 编码器读取数据,我正在使用 CLB 生成时钟,而且我想当从传感器读取整个数据时,重置计数器和状态以启动新的循环。
我认为、先使用 CLB_disableCLB 函数调用、然后使用 CLB_enableCLB 函数将 不能满足您的需求。 如果您尝试复位 CLB 的计数器、则不会通过 GLOBAL_EN 位进行复位。 最好的方法是具有一个额外的输入(如果可能)、该输入可 用作所有已使用计数器的复位信号。 我建议使用 GPREG 位、这样您就可以在 ISR 内将数据写入软件中的寄存器。 如果您能够做到这一点、或者 CLB 没有任何其他可用输入、请告诉我。