очень интересно симулирует протей
оказалось GICR всегда (!) у него читается как 0x00!
и поэтому макросы cbi(), sbi() вместо ожидаемого действия ( GICR = GICR & ~(1 << INT1); )
делали GICR = 0x00 & ~(1 << INT1);
в реальной меге8 должно работать (по естифееву значится R/W => должен нормально читаться)
можно конечно заменить макросы на GICR.7 = 0;, но это непереносимо, и неудобно - CV ругается на такую запись GICR.INT1 = 0;
проверил просто:
Код
init_chip();
rc5_init();
load_init();
заменил на
Код
init_chip();
printf("GICR: 0x%02X\r\n", GICR);
rc5_init();
printf("GICR: 0x%02X\r\n", GICR);
load_init();
printf("GICR: 0x%02X\r\n", GICR);
похожая ситуация с граф. дисплеями - читаются нули место реального значения