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