Например TDA7294

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

Программирование ATmega 128
https://radiokot.ru/forum/viewtopic.php?f=57&t=152980
Страница 1 из 1

Автор:  PaleyAlex [ Ср фев 28, 2018 10:40:10 ]
Заголовок сообщения:  Программирование ATmega 128

Уважаемые форумчане есть следующий код для МК ATmega 128:

/*
* DC_Voltmetr_Prog.cpp
*
* Created: 28.02.2018 11:19:19
* Author : LAN_Admin
*/
#include <avr/io.h>
void Prb()
{
asm("sbi 0x1B,2");
asm("nop");
asm("cbi 0x1B,2");
asm("nop");
};
void Drrb()
{
asm("sbi 0x15,0");
asm("nop");
asm("cbi 0x15,0");
asm("nop");
}
int main(void)
{
DDRA=0xFF;
DDRC=0xFF;
/* Replace with your application code */
while (1)
{
Drrb();
Prb();
}
}

По непонятной причине не выполняется функция Prb? В отладчике всё нормально, а смотрю на ножку при помощи осциллограаф там ничего нет ? Как такое может быть ? Подскажите пожалуйста ?

Автор:  city77 [ Ср фев 28, 2018 11:05:28 ]
Заголовок сообщения:  Re: Программирование ATmega 128

JTAG

Автор:  pyzhman [ Ср фев 28, 2018 12:04:45 ]
Заголовок сообщения:  Re: Программирование ATmega 128

отключить.

Автор:  PaleyAlex [ Вт апр 10, 2018 13:36:08 ]
Заголовок сообщения:  Re: Программирование ATmega 128

Я с программатором всё правильно делаю. Это уже неоднократно проверялось. А глюки при залипании функции всё равно остаются. Например вот такой код не будет работать:

#define CS_ASM_Arg0 "sbi 0x1B,2"
#define CS_ASM_Arg1 "cbi 0x1B,2"
//----------
#include <avr/io.h>
//----------
void Proba()
{
asm(CS_ASM_Arg0);
asm(CS_ASM_Arg1);
};


//----------
int main(void)
{
/* Replace with your application code */
DDRA=0xff;
PORTA=0x00;
while (1)
{
Proba();
asm("sbi 0x1B,0"); --проверяем по установлению высокого уровня что программа запущена (до сюда не доходит!!!!!)
};
}

А вот такой уже будет:

#define CS_ASM_Arg0 "sbi 0x1B,2"
#define CS_ASM_Arg1 "cbi 0x1B,2"
//----------
#include <avr/io.h>
//----------
void Proba(uint8_t sr)
{
asm(CS_ASM_Arg0);
asm(CS_ASM_Arg1);
};


//----------
int main(void)
{
/* Replace with your application code */
DDRA=0xff;
PORTA=0x00;
while (1)
{
Proba(1);
asm("sbi 0x1B,0"); --проверяем по установлению высокого уровня что программа запущена ( а теперь доходит!!!!!)
};
}
Почему так???
Поясните пожалуйста!!!

Автор:  ARV [ Вт апр 10, 2018 13:49:19 ]
Заголовок сообщения:  Re: Программирование ATmega 128

изучите, как надо в avr-gcc оформлять ассемблерные вставки.
но лучше - ответьте на вопрос, зачем вы это делаете? у вас Си в руках, зачем в него вставки делать бессмысленные?!

Автор:  PaleyAlex [ Ср апр 11, 2018 10:50:05 ]
Заголовок сообщения:  Re: Программирование ATmega 128

Задача проста как помидор нужно написать программный SPI. Собственно говоря посмотрел вчера внимательно дизасемблированный код.
Для первого варианта:
SER R24
Out 0x1A,R24
out 0x1B,R1
SBI 0x1B,2
CBI 0x1B,2
SBI 0x1B,0
RJMP PC-3
тут всё работает как нужно видны импульсы практически меандр Tполки=2uS период - 8uS

Для второго варианта:
основной цикл:
SER R24
Out 0x1A,R24
out 0x1B,R1
RCALL PC-6

в подпрограмме
SBI 0x1B,2
CBI 0x1B,2
RET

продолжение основного цикла:
SBI 0x1B,0
RJMP PC-2

а здесь работает уже не так как нужно видны импульсы Tполки=11uS период - 1.8mS

Я полагаю, что проблема именно в вызове.
rcall и ret. Стек инициализирован правильно!
Повторял данные коды в качестве отдельных проектов на ассемблере. Всё точно также.
Вопросы следующие:
1. В чём собственно проблема?
2. Можно ли дать пример написания таймера с использованием подпрограмм на ассемблере ?

Автор:  Feruz [ Сб апр 14, 2018 22:50:19 ]
Заголовок сообщения:  Re: Программирование ATmega 128

Если Вам нужен программный SPI именно на ассемблере, то возьмите готовое решение от Atmel

Вложения:
SOFTware SPI 8bit ASM.rar [53.96 KiB]
Скачиваний: 151

Автор:  akl [ Вс апр 15, 2018 05:01:13 ]
Заголовок сообщения:  Re: Программирование ATmega 128

Код:
RCALL PC-6
Или компилятор цэ бредит или вами что-то не досказано...

Спойлер
Код:
   LDI   XH,HIGH(RAMEND)
   LDI   XL,LOW(RAMEND)
   OUT   SPH,XH
   OUT   SPL,XL

   CLR   R1

   SER R24
   Out 0x1A,R24   ; DDRA
   out 0x1B,R1      ;PORTA
   RCALL PROG_SCLK
   SBI 0x1B,0
   RJMP PC-2
PROG_SCLK:
   SBI 0x1B,2
   CBI 0x1B,2
   RET

Цитата:
...Королева ходит куда угодно.
Куда угодно кому?..

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