Например TDA7294

Форум РадиоКот :: Просмотр темы - Atmega128l массив на асме
Форум РадиоКот
https://radiokot.ru/forum/

Atmega128l массив на асме
https://radiokot.ru/forum/viewtopic.php?f=57&t=140652
Страница 1 из 1

Автор:  VanyaSV [ Сб янв 14, 2017 14:17:50 ]
Заголовок сообщения:  Atmega128l массив на асме

Всем привет! Возникла необходимость реализовать загрузку из флеша мк байты данных и пихать их в шим. Проблема в том, что контроллер читает только первое значение массива и на этом всё заканчивается. Похожая прога работала на тини2313 и маге8, а в в меге128 пахать отказывается :cry:
Подозреваю, что чего-то в коде не хватает... Подскажите, в чем я болван :)))

псы: файл что-то не загрузился :(


Выяснялось, что контроллер попадает в подпрограмму и не хочет выходить из неё... Стек уже по-всякому указывал


.include "m128def.inc"


.def Counter_1 =r18
.def Counter_2 =r19


jmp RESET ; Reset Handler
jmp EXT_INT0 ; IRQ0 Handler
jmp EXT_INT1 ; IRQ1 Handler
jmp EXT_INT2 ; IRQ2 Handler
jmp EXT_INT3 ; IRQ3 Handler
jmp EXT_INT4 ; IRQ4 Handler
jmp EXT_INT5 ; IRQ5 Handler
jmp EXT_INT6 ; IRQ6 Handler
jmp EXT_INT7 ; IRQ7 Handler
jmp TIM2_COMP ; Timer2 Compare Handler
jmp TIM2_OVF ; Timer2 Overflow Handler
jmp TIM1_CAPT ; Timer1 Capture Handler
jmp TIM1_COMPA; Timer1 CompareA Handler
jmp TIM1_COMPB; Timer1 CompareB Handler
jmp TIM1_OVF ; Timer1 Overflow Handler
jmp TIM0_COMP ; Timer0 Compare Handler
jmp TIM0_OVF ; Timer0 Overflow Handler
jmp SPI_STC ; SPI Transfer Complete Handler
jmp USART0_RXC; USART0 RX Complete Handler
jmp USART0_DRE; USART0,UDR Empty Handler
jmp USART0_TXC; USART0 TX Complete Handler
jmp ADCC ; ADC Conversion Complete Handler
jmp EE_RDY ; EEPROM Ready Handler
jmp ANA_COMP ; Analog Comparator Handler
jmp TIM1_COMPC; Timer1 CompareC Handler
jmp TIM3_CAPT ; Timer3 Capture Handler
jmp TIM3_COMPA; Timer3 CompareA Handler
jmp TIM3_COMPB; Timer3 CompareB Handler
jmp TIM3_COMPC; Timer3 CompareC Handler
jmp TIM3_OVF ; Timer3 Overflow Handler
jmp USART1_RXC; USART1 RX Complete Handler
jmp USART1_DRE; USART1,UDR Empty Handler
jmp USART1_TXC; USART1 TX Complete Handler
jmp TWI ; Two-wire Serial Interface Interrupt Handler
jmp SPM_RDY ; SPM Ready Handler



RESET: ; Reset Handler
EXT_INT0: ; IRQ0 Handler
EXT_INT1: ; IRQ1 Handler
EXT_INT2: ; IRQ2 Handler
EXT_INT3: ; IRQ3 Handler
EXT_INT4: ; IRQ4 Handler
EXT_INT5: ; IRQ5 Handler
EXT_INT6: ; IRQ6 Handler
EXT_INT7: ; IRQ7 Handler
TIM2_COMP: ; Timer2 Compare Handler
TIM2_OVF: ; Timer2 Overflow Handler
TIM1_CAPT: ; Timer1 Capture Handler
TIM1_COMPA:; Timer1 CompareA Handler
TIM1_COMPB:; Timer1 CompareB Handler
TIM1_OVF: ; Timer1 Overflow Handler
TIM0_COMP: ; Timer0 Compare Handler
TIM0_OVF: ; Timer0 Overflow Handler
SPI_STC: ; SPI Transfer Complete Handler
USART0_RXC:; USART0 RX Complete Handler
USART0_DRE:; USART0,UDR Empty Handler
USART0_TXC:; USART0 TX Complete Handler
ADCC: ; ADC Conversion Complete Handler
EE_RDY: ; EEPROM Ready Handler
ANA_COMP: ; Analog Comparator Handler
TIM1_COMPC:; Timer1 CompareC Handler
TIM3_CAPT: ; Timer3 Capture Handler
TIM3_COMPA:; Timer3 CompareA Handler
TIM3_COMPB:; Timer3 CompareB Handler
TIM3_COMPC:; Timer3 CompareC Handler
TIM3_OVF: ; Timer3 Overflow Handler
USART1_RXC:; USART1 RX Complete Handler
USART1_DRE:; USART1,UDR Empty Handler
USART1_TXC:; USART1 TX Complete Handler
TWI: ; Two-wire Serial Interface Interrupt Handler
SPM_RDY: ; SPM Ready Handler





ldi R16,low(RAMEND)
sts SPL,R16
ldi R16,high(RAMEND)
sts SPH,R16

ldi r16,0x00
out DDRA,r16

ldi r16,0x00
out PORTA,r16

ldi r16,0x10
out DDRB,r16

ldi r16,0x00
out PORTB,r16

ldi r16,0x00
out DDRC,r16

ldi r16,0x00
out PORTC,r16

ldi r16,0x00
out DDRD,r16

ldi r16,0x00
out PORTD,r16

ldi r16,0x00
out DDRE,r16

ldi r16,0x00
out PORTE,r16

ldi r16,0x00
sts DDRF,r16

ldi r16,0x00
sts PORTF,r16

ldi r16,0x00
sts DDRG,r16

ldi r16,0x00
sts PORTG,r16


clr counter_1
clr counter_2


ldi r16,0x69
out TCCR0,r16


ldi r16,0x01
out OCR0,r16

;***************************************

cycle: rcall ReadArray
rcall Delay
jmp cycle

;***************************************

ReadArray: ldi ZH,High(MyArray*2)
ldi ZL,Low(MyArray*2)

add ZL,Counter_1
adc ZH,CoUnter_2

lpm

mov r16,R0

out OCR0,r16
inc counter_1
cpi counter_1,10
brne esc
clr Counter_1


esc: ret

;***************************************

Delay: clr r20
clr r21
ldi r22,2

_10: dec r20
brne _10

dec r21
brne _10

dec r22
brne _10

ret

;***************************************

MyArray:

.db 0xf0,0x20,0x30,0x40,0x50,0x60,0x70,0x80,0x90,0xf0

Автор:  akl [ Сб янв 14, 2017 14:46:51 ]
Заголовок сообщения:  Re: Atmega128l массив на асме

Стек не установлен. Внимательнее применяйте команды обращения к портам.
Код:
;ldi R16,low(RAMEND)
;sts SPL,R16
;ldi R16,high(RAMEND)
;sts SPH,R16
ldi R16,low(RAMEND)
      out SPL,R16
ldi R16,high(RAMEND)
   out SPH,R16

Код:
lpm

mov r16,R0

OUT OCR0,r16
;sts OCR0,r16

Автор:  Jack_A [ Сб янв 14, 2017 20:42:14 ]
Заголовок сообщения:  Re: Atmega128l массив на асме

Чисто oптимизационно :
зачем при инициализации портов какждый раз
Код:
  ldi  r16,0
  out ......
  ldi  r16,0
  out ......

когда можно :
Код:
  ldi  r16,0
  out ...... 
  out ......

Автор:  krash_artem [ Вс янв 15, 2017 08:41:49 ]
Заголовок сообщения:  Re: Atmega128l массив на асме

Попробуй вызов call, вместо rcall

Автор:  BOB51 [ Вс янв 15, 2017 15:10:35 ]
Заголовок сообщения:  Re: Atmega128l массив на асме

Код:
ReadArray:
 push r16
  cpi zl,(Low(MyArray*2))+11
   brbs SREG_Z,no_rewrit
   ldi ZH,High(MyArray*2)
        ldi ZL,Low(MyArray*2)
no_rewrit:
      lpm r16,z+
       out OCR0,r16
     pop r16
   ret

:dont_know:
И внимательно просмотреть адресное пространство РСФ - у 128-й свое размещение, отличное от 2313 - часть РСФ адресуется только как память - через LD/ST (смотреть даташит влом).
8)

Автор:  VanyaSV [ Вс янв 15, 2017 18:49:24 ]
Заголовок сообщения:  Re: Atmega128l массив на асме

По моей незнанке, забыл снять гальку во фьюзах совместимости с мега103. Расходимся))

Автор:  akl [ Пн янв 16, 2017 06:55:10 ]
Заголовок сообщения:  Re: Atmega128l массив на асме

VanyaSV писал(а):
... забыл снять гальку во фьюзах совместимости с мега103.
Сняли галку совместимости и указатель стека чудесным образом установился. :shock: Ню ню!

Автор:  BOB51 [ Пн янв 16, 2017 08:45:57 ]
Заголовок сообщения:  Re: Atmega128l массив на асме

Скорее адресное поле РСФ для остальной части программы пришло в "стандартное соответствие" с примененными способами адресации из прожек-прототипов.
8)

Автор:  Z_h_e [ Пн янв 16, 2017 09:57:44 ]
Заголовок сообщения:  Re: Atmega128l массив на асме

Код:
sts SPL,R16
sts SPH,R16
Это запись R16 в регистры EEDR и EEARL

Страница 1 из 1 Часовой пояс: UTC + 3 часа
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/