Например TDA7294

Форум РадиоКот • Просмотр темы - AT91SAM7X256 не стартует при переключении питания (IAR).
Форум РадиоКот
Здесь можно немножко помяукать :)

Текущее время: Чт янв 01, 2026 11:27:44

Часовой пояс: UTC + 3 часа


ПРЯМО СЕЙЧАС:



Начать новую тему Ответить на тему  [ Сообщений: 17 ] 
Автор Сообщение
Не в сети
 Заголовок сообщения: AT91SAM7X256 не стартует при переключении питания (IAR).
СообщениеДобавлено: Пт окт 30, 2020 02:12:04 
Сверлит текстолит когтями
Аватар пользователя

Карма: 11
Рейтинг сообщений: 13
Зарегистрирован: Пт июл 21, 2006 15:05:19
Сообщений: 1268
Откуда: плод воображения
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
История следующая. Дано: AT91SAM7X256 (плата от Olimex), IAR, J-link. При прошивке и входе в отладку - программа стартует и работает нормально. Но! Как при подключенном, как при отключенном отладчике программа не стартует после переключения питания или после сброса по внешнему выводу сброса. Внешний сброс в контроллере сброса включен, собакотаймер остановлен. Прошивка зашивается куда надо. Atmel'овский стартап подключен и частично переписан (исключительно для отвязки от Atmel'овских библиотек). В чем может быть подляна?

_________________
R2AIV 73!


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: AT91SAM7X256 не стартует при переключении питания (IAR).
СообщениеДобавлено: Пт окт 30, 2020 05:56:20 
Собутыльник Кота
Аватар пользователя

Карма: 18
Рейтинг сообщений: 433
Зарегистрирован: Вт май 01, 2018 19:44:47
Сообщений: 2557
Рейтинг сообщения: 0
Что значит не стартует? Контроллер находится в ресете? Он ушёл в бутлоадер? Прошивка повисла? Он стёрся? Надо в этом разобраться.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: AT91SAM7X256 не стартует при переключении питания (IAR).
СообщениеДобавлено: Пт окт 30, 2020 17:58:16 
Сверлит текстолит когтями
Аватар пользователя

Карма: 11
Рейтинг сообщений: 13
Зарегистрирован: Пт июл 21, 2006 15:05:19
Сообщений: 1268
Откуда: плод воображения
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
Что значит не стартует? Контроллер находится в ресете? Он ушёл в бутлоадер? Прошивка повисла? Он стёрся? Надо в этом разобраться.


Прошивка на месте, не в ресете точно. Дело в том, что если запускать отладку - он попадает в main() и программа работает. По ресету (внешнему), кстати, тоже проваливается неведомо куда: т.е. запущен с помощью отладчика, программа работает, жму ресет - отваливается и тишина. Запускаю снова отладку - все ок. По карте памяти программа пишется туда, куда надо. Такое ощущение, что где-то надо точку входа прописать в самом иаре, может быть в настройках линкера - ничего подобного там не нашел. В кейлом и тем-же контроллером проблем никаких нет, равно как и в иаре с другими контроллерами (STM32).

_________________
R2AIV 73!


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: AT91SAM7X256 не стартует при переключении питания (IAR).
СообщениеДобавлено: Вс ноя 01, 2020 12:16:52 
Говорящий с текстолитом

Карма: -7
Рейтинг сообщений: 188
Зарегистрирован: Вт авг 15, 2017 10:51:13
Сообщений: 1665
Рейтинг сообщения: 0
Прошивка на месте, не в ресете точно. Дело в том, что если запускать отладку - он попадает в main() и программа работает. По ресету (внешнему), кстати, тоже проваливается неведомо куда: т.е. запущен с помощью отладчика, программа работает, жму ресет - отваливается и тишина.
Не прописана или неправильно прописана таблица векторов прерываний. Или неправильно сконфигурены boot-пины или boot-биты (если таковые имеются), которые указывают откуда стартовать ПО.

Добавлено after 2 minutes 35 seconds:
В кейлом и тем-же контроллером проблем никаких нет, равно как и в иаре с другими контроллерами (STM32).
Так сравните образы прошивки от кейла от IAR, особенно область таблицы прерываний.
А STM32 - это вообще другое ядро, причём тут он?


Вернуться наверх
 
Эиком - электронные компоненты и радиодетали
Не в сети
 Заголовок сообщения: Re: AT91SAM7X256 не стартует при переключении питания (IAR).
СообщениеДобавлено: Пн ноя 02, 2020 00:02:20 
Сверлит текстолит когтями
Аватар пользователя

Карма: 11
Рейтинг сообщений: 13
Зарегистрирован: Пт июл 21, 2006 15:05:19
Сообщений: 1268
Откуда: плод воображения
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
boot-пины там отсутвуют как класс, таблица прерываний тоже в норме, она в стартап-файле прописывается. У Атмела изначально стартап кривой - его переписывать надо, что сделано. STM тут просто при том, что он работает с ИАРом "из коробки" и без нареканий, с SAM тут дурь какая-то. Есть подозрение, что кривой линкер-скрипт, который с иаром идет.

_________________
R2AIV 73!


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: AT91SAM7X256 не стартует при переключении питания (IAR).
СообщениеДобавлено: Пн ноя 02, 2020 09:06:53 
Собутыльник Кота
Аватар пользователя

Карма: 18
Рейтинг сообщений: 433
Зарегистрирован: Вт май 01, 2018 19:44:47
Сообщений: 2557
Рейтинг сообщения: 0
Есть подозрение, что кривой линкер-скрипт, который с иаром идет.
Что-то, по вашему, у всех всё кривое - у атмела стартап, у иара линкерскрипт. Как-то странно, не находите? Да и не работало бы оно под отладкой с кривым icf. Он у иар простой и надёжный как АК.

IAR startup
Спойлер
Код:
/* ----------
 *         ATMEL Microcontroller Software Support
 * ----------
 * Copyright (c) 2008, Atmel Corporation
 *
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions are met:
 *
 * - Redistributions of source code must retain the above copyright notice,
 * this list of conditions and the disclaimer below.
 *
 * Atmel's name may not be used to endorse or promote products derived from
 * this software without specific prior written permission.
 *
 * DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR
 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE
 * DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,
 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
 * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
 * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 * ----------
 */

/*
     IAR startup file for AT91SAM7X microcontrollers.
 */

        MODULE  ?cstartup

        ;; Forward declaration of sections.
        SECTION IRQ_STACK:DATA:NOROOT(2)
        SECTION CSTACK:DATA:NOROOT(3)

//----------
//         Headers
//----------

#define __ASSEMBLY__
#include "board.h"

//----------
//         Definitions
//----------

#define ARM_MODE_ABT     0x17
#define ARM_MODE_FIQ     0x11
#define ARM_MODE_IRQ     0x12
#define ARM_MODE_SVC     0x13
#define ARM_MODE_SYS     0x1F

#define I_BIT            0x80
#define F_BIT            0x40

//----------
//         Startup routine
//----------

/*
   Exception vectors
 */
        SECTION .vectors:CODE:NOROOT(2)

        PUBLIC  resetVector
        PUBLIC  irqHandler

        EXTERN  Undefined_Handler
        EXTERN  SWI_Handler
        EXTERN  Prefetch_Handler
        EXTERN  Abort_Handler
        EXTERN  FIQ_Handler

        ARM

__iar_init$$done:               ; The interrupt vector is not needed
                                ; until after copy initialization is done

resetVector:
        ; All default exception handlers (except reset) are
        ; defined as weak symbol definitions.
        ; If a handler is defined by the application it will take precedence.
        LDR     pc, =resetHandler        ; Reset
        LDR     pc, Undefined_Addr       ; Undefined instructions
        LDR     pc, SWI_Addr             ; Software interrupt (SWI/SYS)
        LDR     pc, Prefetch_Addr        ; Prefetch abort
        LDR     pc, Abort_Addr           ; Data abort
        B       .                        ; RESERVED
        LDR     pc, =irqHandler          ; IRQ
        LDR     pc, FIQ_Addr             ; FIQ

Undefined_Addr: DCD   Undefined_Handler
SWI_Addr:       DCD   SWI_Handler
Prefetch_Addr:  DCD   Prefetch_Handler
Abort_Addr:     DCD   Abort_Handler
FIQ_Addr:       DCD   FIQ_Handler
   
/*
   Handles incoming interrupt requests by branching to the corresponding
   handler, as defined in the AIC. Supports interrupt nesting.
 */
irqHandler:
        /* Save interrupt context on the stack to allow nesting */
        SUB     lr, lr, #4
        STMFD   sp!, {lr}
        MRS     lr, SPSR
        STMFD   sp!, {r0, lr}

        /* Write in the IVR to support Protect Mode */
        LDR     lr, =AT91C_BASE_AIC
        LDR     r0, [r14, #AIC_IVR]
        STR     lr, [r14, #AIC_IVR]

        /* Branch to interrupt handler in Supervisor mode */
        MSR     CPSR_c, #ARM_MODE_SYS
        STMFD   sp!, {r1-r3, r4, r12, lr}
        MOV     lr, pc
        BX      r0
        LDMIA   sp!, {r1-r3, r4, r12, lr}
        MSR     CPSR_c, #ARM_MODE_IRQ | I_BIT

        /* Acknowledge interrupt */
        LDR     lr, =AT91C_BASE_AIC
        STR     lr, [r14, #AIC_EOICR]

        /* Restore interrupt context and branch back to calling code */
        LDMIA   sp!, {r0, lr}
        MSR     SPSR_cxsf, lr
        LDMIA   sp!, {pc}^


/*
   After a reset, execution starts here, the mode is ARM, supervisor
   with interrupts disabled.
   Initializes the chip and branches to the main() function.
 */
        SECTION .cstartup:CODE:NOROOT(2)

        PUBLIC  resetHandler
        EXTERN  LowLevelInit
        EXTERN  ?main
        REQUIRE resetVector
        ARM

resetHandler:

        /* Set pc to actual code location (i.e. not in remap zone) */
       LDR     pc, =label

        /* Perform low-level initialization of the chip using LowLevelInit() */
label:
       LDR     r0, =LowLevelInit
        LDR     r4, =SFE(CSTACK)
        MOV     sp, r4
        MOV     lr, pc
        BX      r0

        /* Set up the interrupt stack pointer. */
        MSR     cpsr_c, #ARM_MODE_IRQ | I_BIT | F_BIT      ; Change the mode
        LDR     sp, =SFE(IRQ_STACK)

        /* Set up the SYS stack pointer. */
        MSR     cpsr_c, #ARM_MODE_SYS | F_BIT              ; Change the mode
        LDR     sp, =SFE(CSTACK)

        /* Branch to main() */
        LDR     r0, =?main
        MOV     lr, pc
        BX      r0

        /* Loop indefinitely when program is finished */
loop4:
        B       loop4

        END
IAR icf
Спойлер
Код:
/*###ICF### Section handled by ICF editor, don't touch! ****/
/*-Editor annotation file-*/
/* IcfEditorFile="$TOOLKIT_DIR$\config\ide\IcfEditor\a_v1_0.xml" */
/*-Memory Regions-*/
define symbol __ICFEDIT_region_ROM_start__   = 0x100000;
define symbol __ICFEDIT_region_ROM_end__     = 0x13FFFF;
define symbol __ICFEDIT_region_RAM_start__   = 0x200000;
define symbol __ICFEDIT_region_RAM_end__     = 0x20FFFF;
/*-Sizes-*/
define symbol __ICFEDIT_size_startup__  = 0x100;
define symbol __ICFEDIT_size_vectors__  = 0x100;
define symbol __ICFEDIT_size_cstack__   = 0x1000;
define symbol __ICFEDIT_size_svcstack__ = 0x60;
define symbol __ICFEDIT_size_irqstack__ = 0x60;
define symbol __ICFEDIT_size_heap__     = 0x0;
/*-Exports-*/
export symbol __ICFEDIT_region_ROM_start__;
export symbol __ICFEDIT_region_ROM_end__;
export symbol __ICFEDIT_region_RAM_start__;
export symbol __ICFEDIT_region_RAM_end__;
export symbol __ICFEDIT_size_startup__;
export symbol __ICFEDIT_size_vectors__;
export symbol __ICFEDIT_size_cstack__;
export symbol __ICFEDIT_size_svcstack__;
export symbol __ICFEDIT_size_irqstack__;
export symbol __ICFEDIT_size_heap__;
/**** End of ICF editor section. ###ICF###*/

define memory mem with size = 4G;
define region STA_region = mem:[from __ICFEDIT_region_ROM_start__ size __ICFEDIT_size_startup__];
define region ROM_region = mem:[from __ICFEDIT_region_ROM_start__+__ICFEDIT_size_startup__ to __ICFEDIT_region_ROM_end__];
define region VEC_region = mem:[from __ICFEDIT_region_RAM_start__ size __ICFEDIT_size_vectors__];
define region RAM_region = mem:[from __ICFEDIT_region_RAM_start__+__ICFEDIT_size_vectors__ to __ICFEDIT_region_RAM_end__];

define block CSTACK    with alignment = 8, size = __ICFEDIT_size_cstack__   { };
define block SVC_STACK with alignment = 8, size = __ICFEDIT_size_svcstack__ { };
define block IRQ_STACK with alignment = 8, size = __ICFEDIT_size_irqstack__ { };
define block HEAP      with alignment = 8, size = __ICFEDIT_size_heap__     { };

initialize by copy { readwrite };
initialize by copy { section .vectors };


place in STA_region { section .cstartup };
place in ROM_region { readonly };
place in VEC_region { section .vectors };
place in RAM_region { readwrite, block IRQ_STACK, block SVC_STACK, block CSTACK, block HEAP };
Что тут кривого?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: AT91SAM7X256 не стартует при переключении питания (IAR).
СообщениеДобавлено: Пн ноя 02, 2020 13:26:28 
Сверлит текстолит когтями
Аватар пользователя

Карма: 11
Рейтинг сообщений: 13
Зарегистрирован: Пт июл 21, 2006 15:05:19
Сообщений: 1268
Откуда: плод воображения
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
Привязка к board.h хотя бы. Там это сделано ради адресов регистра контроллера прерываний, что мешало прописать их в самом стартапе? ) Зачем тянуть c собой board.h и атмеловскую либу, если этого не надо, а надо просто писать в регистры МК и все, как по аналогии с CMSIS. Просто, может я чего-то не догоняю (скорее всего), но как тогда можно создать "пустой" проект со стартапом, что он при прошивке во флеш нормально проваливался в main() и работал?

_________________
R2AIV 73!


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: AT91SAM7X256 не стартует при переключении питания (IAR).
СообщениеДобавлено: Пн ноя 02, 2020 13:41:42 
Собутыльник Кота
Аватар пользователя

Карма: 18
Рейтинг сообщений: 433
Зарегистрирован: Вт май 01, 2018 19:44:47
Сообщений: 2557
Рейтинг сообщения: 0
Привязка к board.h хотя бы. Там это сделано ради адресов регистра контроллера прерываний, что мешало прописать их в самом стартапе? )
То есть, поставить // перед #include "board.h" и добавить одну константу это и есть "надо переписывать"?
Просто, может я чего-то не догоняю (скорее всего), но как тогда можно создать "пустой" проект со стартапом, что он при прошивке во флеш нормально проваливался в main() и работал?
Что-то мешает ему сейчас добраться до main? Отчётливо наблюдаю в нём
Код:
        /* Branch to main() */
        LDR     r0, =?main
        MOV     lr, pc
        BX      r0


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: AT91SAM7X256 не стартует при переключении питания (IAR).
СообщениеДобавлено: Пн ноя 02, 2020 13:46:31 
Сверлит текстолит когтями
Аватар пользователя

Карма: 11
Рейтинг сообщений: 13
Зарегистрирован: Пт июл 21, 2006 15:05:19
Сообщений: 1268
Откуда: плод воображения
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
Да добраться до main() ему ничего не мешает. Еще раз опишу проблему. При прошивке и отладки (когда жмешь Debug в IARе) - все ок. Если отключить питание, а потом подключить - никаких телодвижений. Прошивка попадает туда, куда надо (по карте адресов), т.е. во флеш. Вот в этом то и заключается непонятка )

_________________
R2AIV 73!


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: AT91SAM7X256 не стартует при переключении питания (IAR).
СообщениеДобавлено: Пн ноя 02, 2020 14:02:09 
Собутыльник Кота
Аватар пользователя

Карма: 18
Рейтинг сообщений: 433
Зарегистрирован: Вт май 01, 2018 19:44:47
Сообщений: 2557
Рейтинг сообщения: 0
никаких телодвижений
Я не знаю такого состояния процессора. Он при подаче питания либо в ресете, либо исполняет какой-то код.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: AT91SAM7X256 не стартует при переключении питания (IAR).
СообщениеДобавлено: Пн ноя 02, 2020 14:14:47 
Сверлит текстолит когтями
Аватар пользователя

Карма: 11
Рейтинг сообщений: 13
Зарегистрирован: Пт июл 21, 2006 15:05:19
Сообщений: 1268
Откуда: плод воображения
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
никаких телодвижений
Я не знаю такого состояния процессора. Он при подаче питания либо в ресете, либо исполняет какой-то код.


Наверное исполняет, только вот какой, и что в этот момент в регистре PC - непонятно, ибо при входе в отладчик он сбрасывается "куда надо".

_________________
R2AIV 73!


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: AT91SAM7X256 не стартует при переключении питания (IAR).
СообщениеДобавлено: Пн ноя 02, 2020 14:53:01 
Собутыльник Кота
Аватар пользователя

Карма: 18
Рейтинг сообщений: 433
Зарегистрирован: Вт май 01, 2018 19:44:47
Сообщений: 2557
Рейтинг сообщения: 0
Прямо начиная с resetHandler начинайте "зажигать диод" при прохождении контрольной точки.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: AT91SAM7X256 не стартует при переключении питания (IAR).
СообщениеДобавлено: Вт ноя 03, 2020 15:28:33 
Говорящий с текстолитом

Карма: -7
Рейтинг сообщений: 188
Зарегистрирован: Вт авг 15, 2017 10:51:13
Сообщений: 1665
Рейтинг сообщения: 0
Наверное исполняет, только вот какой, и что в этот момент в регистре PC - непонятно, ибо при входе в отладчик он сбрасывается "куда надо".
Видимо где-то как-то нужно указать - куда нужно передавать управление после выхода из RESET-а (или из boot-ROM). Даже если нет boot-пинов, то возможно есть boot-биты в регистрах конфигурации/флеши. Которые вы неправильно установили.
В 99.9% случаев проблема заключается в прокладке, а не в МК. :dont_know:

PS: Ещё можно попробовать подключиться под отладчиком к работающему МК (без сброса) и посмотреть - где же он бродит?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: AT91SAM7X256 не стартует при переключении питания (IAR).
СообщениеДобавлено: Вт ноя 03, 2020 15:38:48 
Собутыльник Кота
Аватар пользователя

Карма: 18
Рейтинг сообщений: 433
Зарегистрирован: Вт май 01, 2018 19:44:47
Сообщений: 2557
Рейтинг сообщения: 0
Да блин, 1-минутное прочтение даташита с поиском по слову boot даёт ответ.
Цитата:
A general purpose NVM (GPNVM) bit is used to boot either on the ROM (default) or from the
Flash.

This GPNVM bit can be cleared or set respectively through the commands “Clear General-purpose
NVM Bit” and “Set General-purpose NVM Bit” of the EFC User Interface.

Setting the GPNVM Bit 2 selects the boot from the Flash. Asserting ERASE clears the GPNVM
Bit 2 and thus selects the boot from the ROM by default.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: AT91SAM7X256 не стартует при переключении питания (IAR).
СообщениеДобавлено: Вт ноя 03, 2020 15:54:58 
Говорящий с текстолитом

Карма: -7
Рейтинг сообщений: 188
Зарегистрирован: Вт авг 15, 2017 10:51:13
Сообщений: 1665
Рейтинг сообщения: 0
VladislavS писал(а):
Да блин, 1-минутное прочтение даташита с поиском по слову boot даёт ответ.
Ну вот - оказали медвежью услугу. А я хотел подтолкнуть ТС-а к самостоятельному открытию мануала. Намекал и намекал... :)))


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: AT91SAM7X256 не стартует при переключении питания (IAR).
СообщениеДобавлено: Вт ноя 03, 2020 15:59:03 
Собутыльник Кота
Аватар пользователя

Карма: 18
Рейтинг сообщений: 433
Зарегистрирован: Вт май 01, 2018 19:44:47
Сообщений: 2557
Рейтинг сообщения: 0
Да у меня всё это время тоже была надежда, что ТС поймёт, что в SAM-BA висит.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: AT91SAM7X256 не стартует при переключении питания (IAR).
СообщениеДобавлено: Вт ноя 03, 2020 19:48:43 
Сверлит текстолит когтями
Аватар пользователя

Карма: 11
Рейтинг сообщений: 13
Зарегистрирован: Пт июл 21, 2006 15:05:19
Сообщений: 1268
Откуда: плод воображения
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
Едрить-колотить! jcxz, VladislavS, спасибо огромное! Я же перекапывал всякие атмеловские lowlevel_init и прочие примеры, а до сути так и не докопался. :dont_know:

_________________
R2AIV 73!


Вернуться наверх
 
Показать сообщения за:  Сортировать по:  Вернуться наверх
Начать новую тему Ответить на тему  [ Сообщений: 17 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 25


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y