Насчёт платы, переразводили несколько раз, пока положительного эффекта не добились. Плата четырёхслойная со сквозными переходными отверстиями. Под антенной 4 слоя земли отведённой специально для приёмника и антенны. Единственно, что контроллер достаточно близко расположен с противоположной стороны антенны (наползает углом) и рядом с ним есть область переходных отверстий. Возможно, стоит попробовать шесть слоёв и сильнее заэкранировать антенну. Реально помогает только увеличение расстояния между микроконтроллером и самой антенной. Если взять плату, на которой расположен приёмник и GPS антенна (не обязательно нашу, любую) и запитать её от отдельного источника. И взять одну из проблемных плат (с подключенным по минимуму микроконтроллером), то при сближении сигнал на контрольной резко ухудшается. Попробую подключить контроллер навесным монтажом вне платы, посмотрю результат.
Однако в описанном выше случае плата перестаёт фонить (стабильно) и хотелось бы понять причины такого поведения.
Насчёт кода, я наверно не удачно оставил название функции (наводит на мысли о SPI), однако код следует воспринимать буквально. После входа происходит зацикливание без всяких действий, ничего не настраивается. Более нормальный вид:
void main (void)
{
pio_open(); // просто настройка портов (для светодиодов, без всяких альтернативных функций)
asm("BLX %0"::"r"(&at45f_init));
__NOP();
// Остальной код
}
int at45f_init(void)
{
while(1) {;}
// Остальной код
}