Пробовал на таком коде. Тактирование от внутреннего генератора с PLL ~42МГц. Инвертирование ноги скомпилилось в 8 инструкций. Как они могут выполнятся за ~240 тактов?
Код
int main (void)
{
PLLKEY1 = 0xAA;
PLLCON = 0x21;
PLLKEY2 = 0x55;
POWKEY1 = 0x01;
POWCON = 0;
POWKEY2= 0xF4;
GP1CON = 0x00000000;
GP1DAT = 0x01000000;
while(1)
GP1DAT ^= 0x00010000;
}
{
PLLKEY1 = 0xAA;
PLLCON = 0x21;
PLLKEY2 = 0x55;
POWKEY1 = 0x01;
POWCON = 0;
POWKEY2= 0xF4;
GP1CON = 0x00000000;
GP1DAT = 0x01000000;
while(1)
GP1DAT ^= 0x00010000;
}
Код
GP1DAT ^= 0x00010000;
00080188 480A LDR R0, [PC,#0x028]
0008018A 490A LDR R1, [PC,#0x028]
0008018C 6809 LDR R1, [R1, #0]
0008018E 2280 MOV R2, #128
00080190 0252 LSL R2, R2, #9
00080192 404A EOR R2, R1
00080194 6002 STR R2, [R0, #0]
00080196 E7F7 B 0x080188
00080188 480A LDR R0, [PC,#0x028]
0008018A 490A LDR R1, [PC,#0x028]
0008018C 6809 LDR R1, [R1, #0]
0008018E 2280 MOV R2, #128
00080190 0252 LSL R2, R2, #9
00080192 404A EOR R2, R1
00080194 6002 STR R2, [R0, #0]
00080196 E7F7 B 0x080188
Прерывания таймера работают правильно, так что частота с PLL действительно 42МГц.
Кто-нибудь сталкивался с таким?