Форум РадиоКот 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 пахать отказывается ![]() Подозреваю, что чего-то в коде не хватает... Подскажите, в чем я болван ![]() псы: файл что-то не загрузился ![]() Выяснялось, что контроллер попадает в подпрограмму и не хочет выходить из неё... Стек уже по-всякому указывал .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 ![]() И внимательно просмотреть адресное пространство РСФ - у 128-й свое размещение, отличное от 2313 - часть РСФ адресуется только как память - через LD/ST (смотреть даташит влом). ![]() |
Автор: | VanyaSV [ Вс янв 15, 2017 18:49:24 ] |
Заголовок сообщения: | Re: Atmega128l массив на асме |
По моей незнанке, забыл снять гальку во фьюзах совместимости с мега103. Расходимся)) |
Автор: | akl [ Пн янв 16, 2017 06:55:10 ] |
Заголовок сообщения: | Re: Atmega128l массив на асме |
VanyaSV писал(а): ... забыл снять гальку во фьюзах совместимости с мега103. Сняли галку совместимости и указатель стека чудесным образом установился. ![]() |
Автор: | BOB51 [ Пн янв 16, 2017 08:45:57 ] |
Заголовок сообщения: | Re: Atmega128l массив на асме |
Скорее адресное поле РСФ для остальной части программы пришло в "стандартное соответствие" с примененными способами адресации из прожек-прототипов. ![]() |
Автор: | Z_h_e [ Пн янв 16, 2017 09:57:44 ] |
Заголовок сообщения: | Re: Atmega128l массив на асме |
Код: sts SPL,R16 Это запись R16 в регистры EEDR и EEARL
sts SPH,R16 |
Страница 1 из 1 | Часовой пояс: UTC + 3 часа |
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |