реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> Сброс контроллера
ruslannd
сообщение Nov 2 2009, 20:04
Сообщение #1


Частый гость
**

Группа: Участник
Сообщений: 106
Регистрация: 4-04-06
Пользователь №: 15 783



Как програмно на С сбросить контроллер (заставить выполнить прошивку заново). Камень LPC2388.
Go to the top of the page
 
+Quote Post
GetSmart
сообщение Nov 2 2009, 20:12
Сообщение #2


.
******

Группа: Участник
Сообщений: 4 005
Регистрация: 3-05-06
Из: Россия
Пользователь №: 16 753



Вачдогом - классика. Ну или запретить все прерывания (в CPSR) и скакнуть на адрес 0. Со вторым вариантом поосторожней, криво написанная прога может неадекватно отработать такой сброс.


--------------------
Заблуждаться - Ваше законное право :-)
Go to the top of the page
 
+Quote Post
sergeeff
сообщение Nov 2 2009, 20:22
Сообщение #3


Профессионал
*****

Группа: Свой
Сообщений: 1 481
Регистрация: 10-04-05
Пользователь №: 4 007



Через watchdog reset.
Go to the top of the page
 
+Quote Post
ruslannd
сообщение Nov 2 2009, 20:31
Сообщение #4


Частый гость
**

Группа: Участник
Сообщений: 106
Регистрация: 4-04-06
Пользователь №: 15 783



Цитата(sergeeff @ Nov 2 2009, 23:22) *
Через watchdog reset.


Час от часу не легче... А нельзя как-нить просто перейти на нулевой адрес. Если можно, то как? Мне физический сброс контроллера не нужен.
Go to the top of the page
 
+Quote Post
GetSmart
сообщение Nov 2 2009, 20:46
Сообщение #5


.
******

Группа: Участник
Сообщений: 4 005
Регистрация: 3-05-06
Из: Россия
Пользователь №: 16 753



для IAR
asm("MOV R15,#0");
для GCC
volatile asm("MOV R15,#0");
Перед этой командой рекомендую поставить __disable_interrupt();


--------------------
Заблуждаться - Ваше законное право :-)
Go to the top of the page
 
+Quote Post
rezident
сообщение Nov 2 2009, 20:57
Сообщение #6


Гуру
******

Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882



Цитата(ruslannd @ Nov 3 2009, 01:31) *
Час от часу не легче... А нельзя как-нить просто перейти на нулевой адрес. Если можно, то как? Мне физический сброс контроллера не нужен.

http://electronix.ru/forum/index.php?s=&am...st&p=414993
Go to the top of the page
 
+Quote Post
ruslannd
сообщение Nov 2 2009, 21:12
Сообщение #7


Частый гость
**

Группа: Участник
Сообщений: 106
Регистрация: 4-04-06
Пользователь №: 15 783



Цитата(GetSmart @ Nov 2 2009, 23:46) *
для IAR
asm("MOV R15,#0");
для GCC
volatile asm("MOV R15,#0");
Перед этой командой рекомендую поставить __disable_interrupt();


А для Keil?
Go to the top of the page
 
+Quote Post
GetSmart
сообщение Nov 2 2009, 21:15
Сообщение #8


.
******

Группа: Участник
Сообщений: 4 005
Регистрация: 3-05-06
Из: Россия
Пользователь №: 16 753



Keil = GCC
Запрет прерываний там скорее всего по-другому как-то делается.

Сообщение отредактировал GetSmart - Nov 2 2009, 21:16


--------------------
Заблуждаться - Ваше законное право :-)
Go to the top of the page
 
+Quote Post
ruslannd
сообщение Nov 2 2009, 23:20
Сообщение #9


Частый гость
**

Группа: Участник
Сообщений: 106
Регистрация: 4-04-06
Пользователь №: 15 783



Не работает.

Так даже не компилится:
volatile asm("MOV R15,#0");

Сделал так, но что-то не пошло (не понятно куда вывалился):

U32 r15;
__asm
{
MOV r15, #0
}


Делал еще так:

register U32 foo __asm("r15");
foo = 0;

Реультат один в один, как и в предыдущем варианте.
Go to the top of the page
 
+Quote Post
rezident
сообщение Nov 2 2009, 23:24
Сообщение #10


Гуру
******

Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882



А
Код
((void (*)())0x0000)();

тоже не работает?
Go to the top of the page
 
+Quote Post
ruslannd
сообщение Nov 2 2009, 23:51
Сообщение #11


Частый гость
**

Группа: Участник
Сообщений: 106
Регистрация: 4-04-06
Пользователь №: 15 783



Работает! Спасибо.
Go to the top of the page
 
+Quote Post
S1LENCE
сообщение Apr 7 2011, 11:55
Сообщение #12


Участник
*

Группа: Участник
Сообщений: 25
Регистрация: 2-01-11
Пользователь №: 61 990



Я вот тоже попробывал, на адрес 0 переходит, но при этом виснет в этих строчках

Код
0x0000019C  E2522010  SUBS      R2,R2,#0x00000010
0x000001A0  28A10078  STMCSIA   R1!,{R3-R6}
0x000001A4  8AFFFFFC  BHI       0x0000019C
Go to the top of the page
 
+Quote Post
esaulenka
сообщение Apr 7 2011, 14:04
Сообщение #13


Профессионал
*****

Группа: Свой
Сообщений: 1 032
Регистрация: 13-03-08
Из: Маськва
Пользователь №: 35 877



Ну виснет, ну с кем не бывает...

Что за контроллер и какие предположения, что эти строки делают?
Желательно также увидеть, что там вокруг написано.


--------------------
Тут обсуждается творческий порыв, а не соответствие каким-либо стандартам ©
Go to the top of the page
 
+Quote Post
S1LENCE
сообщение Apr 11 2011, 06:22
Сообщение #14


Участник
*

Группа: Участник
Сообщений: 25
Регистрация: 2-01-11
Пользователь №: 61 990



LPC2148

Сам сброс:
Код
    54:         ((void (*)())0x0000)();
    55:  
0x00000512  F000      BL        __ARM_common_call_via_r0(0x000011FC) - Part #1
0x00000514  FE73      BL        __ARM_common_call_via_r0(0x000011FC) - Part #2

...

                 __ARM_common_call_via_r0:
0x000011FC  4700      BX        R0
                 __ARM_common_call_via_r2:
0x000011FE  4710      BX        R2

//Тут вроде правильно доходит до вектора ресета

   239: Vectors         LDR     PC, Reset_Addr          
0x00000000  E59FF018  LDR       PC,[PC,#0x0018]


Далее идет Setup VPBDIV, Setup PLL, Configure and Enable PLL, Wait until PLL Locked, Switch to PLL Clock, Setup MAM, Setup Stack for each mode, Enter Undefined Instruction Mode and set its Stack Pointer (также Abort, FIQ, IRQ, Supervisor, User mode)

и дальше повисает
Код
; Enter the C code

                IMPORT  __main
                LDR     R0, =__main
                BX      R0

//asm:

   416:                 IMPORT  __main
0x00000100  E24DAB01  SUB       R10,R13,#0x00000400
   417:                 LDR     R0, =__main
0x00000104  E59F0010  LDR       R0,[PC,#0x0010]
   418:                 BX      R0
   419:  
   420:  
   421:                 IF      :DEF:__MICROLIB
   422:  
   423:                 EXPORT  __heap_base
   424:                 EXPORT  __heap_limit
   425:  
   426:                 ELSE
   427:; User Initial Stack & Heap
   428:                 AREA    |.text|, CODE, READONLY
   429:  
   430:                 IMPORT  __use_two_region_memory
   431:                 EXPORT  __user_initial_stackheap
   432: __user_initial_stackheap
   433:  
0x00000108  E12FFF10  BX        R0
0x0000010C  E01FC100  DD        0xE01FC100
0x00000110  E01FC080  DD        0xE01FC080
0x00000114  E01FC000  DD        0xE01FC000
0x00000118  40000550  DD        0x40000550
0x0000011C  00000120  DD        0x00000120
                 __main:
0x00000120  EB000000  BL        __scatterload_rt2(0x00000128)
0x00000124  EB00002F  BL        __rt_entry_sh(0x000001E8)
                 __scatterload_rt2:
0x00000128  E28F002C  ADD       R0,PC,#0x0000002C
0x0000012C  E8900C00  LDMIA     R0,{R10-R11}
0x00000130  E08AA000  ADD       R10,R10,R0
0x00000134  E08BB000  ADD       R11,R11,R0
0x00000138  E24A7001  SUB       R7,R10,#0x00000001
                 __scatterload_null:
0x0000013C  E15A000B  CMP       R10,R11
0x00000140  1A000000  BNE       0x00000148
0x00000144  EB000027  BL        __rt_entry_sh(0x000001E8)
0x00000148  E8BA000F  LDMIA     R10!,{R0-R3}
0x0000014C  E24FE018  SUB       R14,PC,#0x00000018
0x00000150  E3130001  TST       R3,#0x00000001
0x00000154  1047F003  SUBNE     PC,R7,R3
0x00000158  E12FFF13  BX        R3
0x0000015C  00001188  DD        0x00001188
0x00000160  000011A8  DD        0x000011A8
                 __scatterload_copy:
0x00000164  E2522010  SUBS      R2,R2,#0x00000010
0x00000168  28B00078  LDMCSIA   R0!,{R3-R6}
0x0000016C  28A10078  STMCSIA   R1!,{R3-R6}
0x00000170  8AFFFFFB  BHI       __scatterload_copy(0x00000164)
0x00000174  E1B02E82  MOVS      R2,R2,LSL #29
0x00000178  28B00030  LDMCSIA   R0!,{R4-R5}
0x0000017C  28A10030  STMCSIA   R1!,{R4-R5}
0x00000180  45904000  LDRMI     R4,[R0]
0x00000184  45814000  STRMI     R4,[R1]
0x00000188  E12FFF1E  BX        R14
                 __scatterload_zeroinit:
0x0000018C  E3B03000  MOVS      R3,#0x00000000
0x00000190  E3B04000  MOVS      R4,#0x00000000
0x00000194  E3B05000  MOVS      R5,#0x00000000
0x00000198  E3B06000  MOVS      R6,#0x00000000
0x0000019C  E2522010  SUBS      R2,R2,#0x00000010        //и вот
0x000001A0  28A10078  STMCSIA   R1!,{R3-R6}                //тут
0x000001A4  8AFFFFFC  BHI       0x0000019C                  //крутится
0x000001A8  E1B02E82  MOVS      R2,R2,LSL #29
0x000001AC  28A10030  STMCSIA   R1!,{R4-R5}
0x000001B0  45813000  STRMI     R3,[R1]
0x000001B4  E12FFF1E  BX        R14


Сообщение отредактировал S1LENCE - Apr 11 2011, 06:23
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 21st July 2025 - 23:40
Рейтинг@Mail.ru


Страница сгенерированна за 0.0149 секунд с 7
ELECTRONIX ©2004-2016