主题中讨论的其他部件:C2000WARE, SFRA
您好,
我正在为F28.0049万C改编C2000ware 3.3 SDK中的通用电机控制实验室,并需要一些有关这一问题的帮助。
按照Motor Control SDK Universal Project and Lab用户指南(spruj26)中所述修改代码后,
GPIO工作正常,但ADC和ISR工作不正常。 现在ADC和ISR工作正常,但我写了
任何输出GPIO都不会通过。 通过导出代码,我可以在gPIO_TogglePin中看到寄存器地址
未正确计算。
static inline void
GPIO_togglePin(uint32_t pin)
{
volatile uint32_t *gpioDataReg;
//
// Check the arguments.
//
ASSERT(GPIO_isPinValid(pin));
gpioDataReg = (uint32_t *)((uintptr_t)GPIODATA_BASE) + ((pin / 32U) * GPIO_DATA_REGS_STEP);
gpioDataReg[GPIO_GPxTOGGLE_INDEX] = (uint32_t)1U << (pin % 32U);
}f
变量gpioDataReg应指向0x0.0007万F00,但现在它指向0x0.0007万FB8

在另一个项目中,我可以毫无问题地向GPIO写入数据,所以我不认为这是硬件问题。
比较工作版本和非工作版本之间的拆卸显示差异,
我不清楚为什么会有不同的情况。
非工作代码的反汇编:
GPIO_togglePin(): 083edf: FE04 ADDB SP, #4 083ee0: 1E42 MOVL *-SP[2], ACC 496 gpioDataReg = (uint32_t *)((uintptr_t)GPIODATA_BASE) + ((pin / 32U) * GPIO_DATA_REGS_STEP); 083ee1: E8000003 MOVIZ R3, #0x0 083ee3: E592 ZERO R2 083ee4: E2AF0142 MOV32 R1H, *-SP[2], UNCF 083ee6: E8080103 MOVXI R3H, #0x20 083ee8: E564 SUBC4UI32 R2H, R1H, R3H 083ee9: E564 SUBC4UI32 R2H, R1H, R3H 083eea: E564 SUBC4UI32 R2H, R1H, R3H 083eeb: E564 SUBC4UI32 R2H, R1H, R3H 083eec: E564 SUBC4UI32 R2H, R1H, R3H 083eed: E564 SUBC4UI32 R2H, R1H, R3H 083eee: E564 SUBC4UI32 R2H, R1H, R3H 083eef: E564 SUBC4UI32 R2H, R1H, R3H 083ef0: 7700 NOP 083ef1: BFA90F16 MOV32 @ACC, R1H 083ef3: FF31 LSL ACC, 2 083ef4: FF30 LSL ACC, 1 083ef5: FF18007F ADD ACC, #0x7f << 8 083ef7: 1E44 MOVL *-SP[4], ACC 498 gpioDataReg[GPIO_GPxTOGGLE_INDEX] = (uint32_t)1U << (pin % 32U); 083ef8: E592 ZERO R2 083ef9: E2AF0142 MOV32 R1H, *-SP[2], UNCF 083efb: E8000003 MOVIZ R3, #0x0 083efd: E8080103 MOVXI R3H, #0x20 083eff: E564 SUBC4UI32 R2H, R1H, R3H 083f00: E564 SUBC4UI32 R2H, R1H, R3H 083f01: E564 SUBC4UI32 R2H, R1H, R3H 083f02: E564 SUBC4UI32 R2H, R1H, R3H 083f03: E564 SUBC4UI32 R2H, R1H, R3H 083f04: E564 SUBC4UI32 R2H, R1H, R3H 083f05: E564 SUBC4UI32 R2H, R1H, R3H 083f06: E564 SUBC4UI32 R2H, R1H, R3H 083f07: 8A44 MOVL XAR4, *-SP[4] 083f08: BFA90F1A MOV32 @ACC, R2H 083f0a: 2DA9 MOV T, @AL 083f0b: 0201 MOVB ACC, #1 083f0c: 563B LSLL ACC, T 083f0d: 1EF4 MOVL *+XAR4[6], ACC
工作代码的拆卸:
00fe28: FE04 ADDB SP, #4 00fe29: 1E42 MOVL *-SP[2], ACC 494 ASSERT(GPIO_isPinValid(pin)); 00fe2a: 7640FE14 LCR 0x00fe14 00fe2c: 5200 CMPB AL, #0x0 00fe2d: 6008 SB 8, NEQ 00fe2e: 8F4001EE MOVL XAR5, #0x0001ee 00fe30: 8F00ACC2 MOVL XAR4, #0x00acc2 00fe32: A0A9 MOVL @ACC, XAR5 00fe33: 7640F9AF LCR 0x00f9af 496 gpioDataReg = (uint32_t *)((uintptr_t)GPIODATA_BASE) + 00fe35: 0642 MOVL ACC, *-SP[2] 00fe36: 2901 CLRC SXM 00fe37: FF44 SFR ACC, 5 00fe38: FF31 LSL ACC, 2 00fe39: FF30 LSL ACC, 1 00fe3a: FF18007F ADD ACC, #0x7f << 8 00fe3c: 1E44 MOVL *-SP[4], ACC 499 gpioDataReg[GPIO_GPxTOGGLE_INDEX] = (uint32_t)1U << (pin % 32U); 00fe3d: 0201 MOVB ACC, #1 00fe3e: 8A44 MOVL XAR4, *-SP[4] 00fe3f: 1EA6 MOVL @XAR6, ACC 00fe40: 9242 MOV AL, *-SP[2] 00fe41: 901F ANDB AL, #0x1f 00fe42: 2DA9 MOV T, @AL 00fe43: 06A6 MOVL ACC, @XAR6 00fe44: 563B LSLL ACC, T 00fe45: 1EF4 MOVL *+XAR4[6], ACC
并且寄存器的地址计算正确:

感谢您对本报告的任何帮助。
此致,
John
