Thread 中讨论的其他器件:EK-TM4C123GXL
您好!
我正在使用 TM4C123G Launch Pad 和 Keil 开发软件。
在启动时、恰好在设置系统时钟 并初始化 GPIO 端口 F 后、我执行以下循环:
//等待 SW1或 SW2变为低电平 
执行{ 
swData = GPIO_PORTF_DATA_R 和0x11; 
} 
while (swData = 0x11); 
if ((swData & 0x01)==0){ 
我观察到、当时钟频率为40MHz 时、其工作方式与预期一致。 但如果使用80MHz 时钟、它最终将退出 while 循环、如果我中断 if 语句、swData 将设置为0x11。 如果我在环路中插入一个短延迟、它在80MHz 时也能正常工作。 我在两个单独的 LaunchPad 上试用了它、因此它不会损坏硬件。 这个芯片上是否存在已知的竞争情况、我正在运行或者是否犯了一些错误?
提前感谢
Joe Carbone
PS:这是创建的汇编代码 Keil
185://等待 SW1或 SW2变为低电平 
0x00000BD0 1D08添加了 r0、R1、#4 
0x00000BD2 6800 LDR r0、[r0、#0x00] 
0x00000BD4 F4204070 BIC r0、r0、#0xF000 
0x00000BD8 1D09添加了 R1、R1、#4 
0x00000BDA 6008 STR r0、[R1、#0x00] 
186:执行{ 
0x00000BDC BF00 NOP 
187:swData = GPIO_PORTF_DATA_R 和0x11; 
188:} 
0x00000BDE 487E LDR r0、[PC、#504];@0x00000DD8 
0x00000BE0 1F00 subs r0、r0、#4 
0x00000BE2 6800 LDR r0、[r0、#0x00] 
0x00000BE4 F0000011和 r0、r0、#0x11 
0x00000BE8 4984 LDR R1、[PC、#528];@0x00000DFC 
0x00000BEA 6008 STR r0、[R1、#0x00] 
189:while (swData = 0x11); 
190: 
191://SW2 =>录制 
0x00000BEC 4608 MOV r0、R1 
0x00000BEE 6800 LDR r0、[r0、#0x00] 
0x00000BF0 2811 CMP r0、#0x11 
0x00000BF2 D0F4 BEQ 0x00000BDE