Пытаюсь собрать хоть что-то рабочее под SAME70. До него с LPC (M4+M0) все завелось с полутыка, а с этим чудом полнейший атас, ковыряние с родной студией результатов не дало, решил попытаться с IAR... Почему не вышло с atmel studio вдаваться в детали не буду - то что описано ниже там работает, но цель разумеется намного более крупная, и возникли проблемы в другом месте.
Код библиотек и примеров скачан с атмеловского сайта - там файлы примеров под все платформы.
Собираю тривиальнейший код на основе примеров Atmel - просто посылка в последовательный порт UART0. В "сыром виде" с дефолтовой таблицей векторов и без подключения startup_same70 и system_same70, минималистической инициализацией структур и посылкой посредством UART0->UART_THR = '*' - на выходе hex файл ничтожного размера, все работает.
Подключаю startup_same70 и system_same70 - не пашет, два кило hex, в порту тишина. Прыгал с бубном два дня, стал смотреть дизассемблером - что за черт ?!
Вызов __iar_program_start внутри Reset_Handler идет куда-то налево. Заменяю внутри Reset_Handler вызов __iar_program_start на вызов main() - звездочки в порту пошли. Зачем сделана такая четырехэтажная конструкция с вызовами внутри - так и не понял, потому как внутри кроме вложенного вызова следующей функции инициализации ничего нет.
Но: при любой попытке перейти на работу по прерыванию все аналогично перестает работать. То есть если вместо UART0->UART_THR = '*'; сделать обработчик Uart0_Handler и далее подключить уже многократно проверенный код с очередями - тишина...
Если у кого есть рабочий шаблон проекта под E70... или хотя бы понять, что за чудеса. Родных примеров IAR под данный проц нет. Прошу прощения, оказалось я уже раньше эту тему открывал.
Сообщение отредактировал АлексейН - Mar 16 2016, 14:11
|