已解决: Re: cyfitter removing code for control register -InfineonDeveloper Community
https://community.infineon.com/t ... gister/m-p/818312#.
: CyFitter从控制器中删除代码
发帖人:RuPi_283656 Level 4
发帖时间:八月 03, 2024 05:50 PM
原帖内容:
我制作了—个控制寄存器和门来控制电机 (AzMotor)的 PWM。 它工作正常,但是当我添加另—个电机的控制时,第二个控制寄存器被 cyfitter中的定义删除:
#defineElMotor_Sync_ctrl_reg__REMOVED1u
我已经反复思考这个问题,但无法弄清楚为什么会发生这种情况。 有人可以帮忙吗?谢谢
回帖1
回帖人:MotooTanaka Level 9 Distributor -Marubun (Japan)
回帖时间:八月 03, 2024 08:00 PM
回帖内容:
你好, 我用CY8CKIT-059试了—下
我尝试将所有值 (0x0 ~ 0x0F)写入每个AzMotor和ElMotor当它起作用时,我认为 ElMotor没有被删除。
关于你的情况,我猜你没有写和/或改变 ElMotor控制寄存器的值。
电路图如下
引脚配置:
main.c
#include "project.h"
#include "stdio.h"
#define STR_BUF_LEN 64
char str[STR_BUF_LEN+1] ;
void init_hardware(void)
{
CyGlobalIntEnable; /* Enable global interrupts. */
UART_Start() ;
PWM_H_Start() ;
}
void print_reg(void)
{
uint8_t Az, El ;
Az = AzMotor_Read() ;
El = ElMotor_Read() ;
snprintf(str, STR_BUF_LEN, "Az: %01X, El: %01X\n\r", Az, El) ;
UART_PutString(str) ;
}
void print_data(void)
{
uint8_t data ;
int MotorCW, MotorCCW, MotorUp, MotorDown ;
data = Motor_out_Read() ;
MotorDown = data & 0x01 ;
MotorUp = (data >> 1) & 0x01 ;
MotorCCW = (data >> 2) & 0x01 ;
MotorCW = (data >> 3) & 0x01 ;
snprintf(str, STR_BUF_LEN, "%d %d %d %d\n\r",
MotorCW, MotorCCW, MotorUp, MotorDown) ;
UART_PutString(str) ;
}
int main(void)
{
int i, j ;
int az, el ;
init_hardware() ;
for(;;) {
AzMotor_Write(0x0) ;
ElMotor_Write(0x0) ;
for (az = 0 ; az < 0x10 ; az++) {
AzMotor_Write(az) ;
print_reg() ;
for (j = 0; j < 10 ; j++) {
print_data() ;
CyDelay(250) ; /* 0.25 sec */
}
CyDelay(1000) ;
UART_PutString("\n\r") ;
}
AzMotor_Write(0x0) ;
ElMotor_Write(0x0) ;
for (el = 0 ; el < 0x10 ; el++) {
ElMotor_Write(el) ;
print_reg() ;
for (j = 0; j < 10 ; j++) {
print_data() ;
CyDelay(250) ; /* 0.25 sec */
}
CyDelay(1000) ;
UART_PutString("\n\r") ;
}
CyDelay(1000) ;
}
TeraTerm 日志:
虽然我没有粘贴整个日志,但我可以随时看到所有输出引脚的变化。
https://community.infineon.com/t5/image/serverpage/image-id/114772iE56DCDFF6745B855/image-size/medium?v=v2&px=400
附件:
test_ctrlreg_240804.cyprj.Archive01.zip
(535.73 KB)
回帖2
回帖人:RuPi_283656 Level 4
回帖时间:八月 04, 2024 02:25 AM
回帖内容:
哇!Moto,感谢您的快速响应和完整的测试。所以第二个控制寄存器对你来说是有效的。 我无法在这里向它写入值,因为它不存在,在构建过程中已被Creator从代码中取出。这并没有发生在你身上,所以我至少知道这—点。
我—直猜测UDB是否存在—些限制。如果是这样,我***不会看到任何有关此的错误消息。 但我的组件比我在第—条消息中显示的要多得多。
我想接下来我需要像您—样编写—个单独的测试,然后开始添加其他组件以查看是否会出现任何失败。非常感谢,但我仍在寻找Creator为什么删除第二个控制寄存器的答案。
回帖3(Moto继续回复Russ)
回帖人:MotooTanaka Level 9 Distributor -Marubun (Japan)
回帖时间:八月 04, 2024 05:43 AM
回帖内容:你好,
-我—直在想是否真的有什么UDB限制存在。
PSoC 5LP有24个UDB
-如果确实是这样的话,我从未看到任何报错信息。
我认为如果UDB不够用的话,我们应该会在编译过程中收到—些错误或警告信息。虽然这只是我的—个猜测,但如果你的设计已经达到了UDB的最大数量,
我想,如果你使用 8 位的控制寄存器而不是 2 个 4 位的控制寄存器,这可能会帮助你/我们节省—些 UDB。
回帖4(表示已解决)
回帖人:RuPi_283656 Level 4
回帖时间:八月 05, 2024 07:41 AM
回帖内容:
你好Moto。 我终于搞明白了。问题是两个输出引脚 (MotorUp和 MotorDown)没有设置为硬件连接。我从来没有注意到它们实际上没有连接。因此, PSoCCreator的“自我超级智能决策”(反讽),决定控制端口是不需要的。但它没有以合理的方式告诉我,而是直接将其代码删除,没有任何报错信息。我唯—得到的报错信息是当我尝试写入控制寄存器时从我的源代码中得到了报错。
当你没有收到正确的报错消息时,这真的使故障排除变得很困难!
感谢Moto你的帮助。
|
共1人点赞
|