Если порт объявлен как регистр специального назначения и volatile
(обычно так и делается в заголовочных файлах контроллера), то вроде
всё перекопали. С автоповтором в вашем коде не разобрался, но по
сути выбора режима - всё нормально, должно было работать. Учитывая большой опыт работы с компилятором, не исключено, что баг последнего, а не первого.