Например TDA7294

Форум РадиоКот • Просмотр темы - Чудеса со стеком, помогите найти ошибку
Форум РадиоКот
Здесь можно немножко помяукать :)





Текущее время: Ср апр 24, 2024 13:48:00

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


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



Начать новую тему Ответить на тему  [ Сообщений: 3 ] 
Автор Сообщение
Не в сети
 Заголовок сообщения: Чудеса со стеком, помогите найти ошибку
СообщениеДобавлено: Пт янв 06, 2017 14:13:56 
Родился

Зарегистрирован: Пт янв 06, 2017 14:03:22
Сообщений: 11
Рейтинг сообщения: 0
Здравствуйте , я тут впервой , так что если что-то не там написал- не сердитесь, пожалуйста.......
И так , проблема состоит в следующем, на ASM пишу под Atmega 128 (не знаю важно это или нет) все работает , по памяти проверяю , все работает, но если я "зажигаю" светодиод несколько раз , то происходит непонятный переход по Rjmp вообще не по метке

В общем, вот мой код, (в таком виде все работает) , но если я после последнего вызова подпрограммы пишу
ldi r16, 0b11111110
out PortD,r16
то происходит что-то невероятное со стеком , ПОМОГИТЕ РАЗОБРАТЬСЯ,ПОЖАЛУЙСТА
Код:
.include "m128def.inc"
.device ATmega128

.dseg
      .equ    number = 8
      .equ    divisor = 3
      .equ   element= $FA
      .equ    EEPROM = $0
      .equ    XRAM = $1100
.org $195
RAM: .byte 256
.cseg

// initialization of STACK
ldi     r16,high(RAMEND)
 out     SPH,r16         
ldi     r16,low(RAMEND)
 out     SPL,r16

ldi r16,0b10000000
out MCUCR,r16

ldi r16, 0b11111111  ;ïîðò Ä íà âûõîä
out DDRD,R16
ldi r16, 0b11111110  ;ãîðèò äèîä 0
out PortD,r16
RCALL Mass
Rcall Write_RAM
Rcall DIVandEPROM
loop:
rjmp loop

Flash:
      //clear the page of Flash, if address of word in page=0
   cpi R30, $00
      brne clear
      ldi r16,0b00000011
      STS spmcsr, r16
      spm
   clear:   
      // write R0 and R1 in buffer
      ldi r16, 0b00000001
      sts SPMCSR, r16
       spm
      //rewrite Buffer to FLASH
      mov r16, ZL
       andi r16, 0x0F
       cpi r16, 0x0F
       brne SkipWrite
       ldi r16, 0b00000101
        sts SPMCSR, r16
       spm
    SkipWrite:
      adiw R30,2
ret

mass:
      ldi r16,number
      mov R0,r16
      mov r17,r0
      ldi r16,element
      mov R1,r16
      ldi R31,High(EndOfCode)+1;//ñòàðòîâûé àäðåñ â flash
      ldi R30,$00; //ñòàðòîâûé àäðåñ â flash
   start:
      Rjmp not
   done:
      ldi R16,$FF
      mov R1,R16
   not:
      RCall Flash
      inc R0
      dec R1
      subi r17,2
      cpi   r17,0   ;n?aaieou
      breq done
      cpi   r17,-1   ;n?aaieou
      breq done1
      cpi   r17,-2   ;n?aaieou
      breq done1
      rjmp start      
   done1:
      ldi r16, 0b00000101
        sts SPMCSR, r16
        spm   
ret

Write_RAM:
      ldi R31,High(EndOfCode)+1; no?aieoa aey caiene
      ldi R30,$00
      ldi r16,$01
      ldi r17,number
      add r17,r16
      ldi r16,$00
      ldi R28,Low(RAM)
      ldi R29, High(RAM)
   start2:
      STS SPMEN,R16
      LPM
      st Y+,r0   
      adiw r30,1
      dec r17
      cpi r17,0 ;n?aaieou
      breq RETERN
      rjmp start2
   RETERN:
RET

EPROMM:
      out EEARL, YL   ;caa?oceou aa?an EEPROM
      out EEARH, YH   ;caa?oceou aa?an EEPROM
      out EEDR, R16   ;caa?oceou aaiiua EEPROM
      sbi EECR, EEMWE
      sbi EECR, EEWE   ;ia?eiaai ienaou EEPROM
   wait11:   sbic  EECR, EEWE   ;iieiue ainooi e EEPROM?                                                  ; ii?in oeaaa ieii?aiey i?a?aaiie caiene
      rjmp   wait11   

Ret

DIVandEPROM:
      
      ldi R20,number
      ldi R26,Low(RAM)
      ldi R27, High(RAM)
      ldi R28,Low(EEPROM)
      ldi R29, High(EEPROM)
      ldi R30,Low(XRAM)
      ldi R31, High(XRAM)
      ldi R18,divisor
      adiw r26,1 //ïðîïóñòèëè ðàçìåð ìàññèâà
   start3:
      ld r16,X+
      Rcall DIVV
      st Z,R16
      Rcall EPROMM
      adiw R30,1
      adiw R30,number
      adiw R28,1
      adiw R28,number
      mov R16,r17
      st Z,R16
      Rcall EPROMM
      sbiw R28,number
      sbiw R30,number
      dec r20
      cpi r20,0 ;n?aaieou
      breq RETERN1
      rjmp start3
   RETERN1:
ret

DIVV:
   div8u:   sub   r17,r17   
      ldi   R19,9   
   d8u_1:   rol   r16   
      dec   R19
      brne   d8u_2
RET   
   d8u_2:   rol   r17
      sub   r17,R18   
      brcc   d8u_3   
      add   r17,R18
      clc   
      rjmp   d8u_1   
   d8u_3: sec   
      rjmp   d8u_1




EndOfCode:


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Чудеса со стеком, помогите найти ошибку
СообщениеДобавлено: Пт янв 06, 2017 16:02:23 
Собутыльник Кота
Аватар пользователя

Карма: 29
Рейтинг сообщений: 645
Зарегистрирован: Сб май 14, 2011 21:16:04
Сообщений: 2694
Откуда: г. Чайковский
Рейтинг сообщения: 3
Медали: 1
Получил миской по аватаре (1)
kvadrats писал(а):
так что если что-то не там написал
Написать то Вы там написали, вот только не то. Кто же так вопросы задает?
Какой светодиод? Какой rjmp? Какая метка? Какие чудеса со стеком? После какого последнего вызова? В чем отлаживаете?

По шагам выполняли свою программу в симуляции вашей среды программирования или через отладочный порт в железе?

_________________
Изображение
Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Чудеса со стеком, помогите найти ошибку
СообщениеДобавлено: Сб янв 07, 2017 21:26:38 
Друг Кота
Аватар пользователя

Карма: 93
Рейтинг сообщений: 1351
Зарегистрирован: Вт мар 16, 2010 22:02:27
Сообщений: 14062
Откуда: ДОНЕЦК
Рейтинг сообщения: 3
А какого хвоста в коде
SPM
выполняют? Тем более, без всякой предварительной подготовки?
Запись в программную память весьма "тонкий" вопрос (и жестко привязан к конкретному МК).
Тем более,что этот процесс не мгновенный и также может сопровождаться соответствующими прерываниями.
:dont_know:


Вернуться наверх
 
PCBWay - всего $5 за 10 печатных плат, первый заказ для новых клиентов БЕСПЛАТЕН

Сборка печатных плат от $30 + БЕСПЛАТНАЯ доставка по всему миру + трафарет

Онлайн просмотровщик Gerber-файлов от PCBWay + Услуги 3D печати
Показать сообщения за:  Сортировать по:  Вернуться наверх
Начать новую тему Ответить на тему  [ Сообщений: 3 ] 

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


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

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


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

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


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