Обсуждаем контроллеры компании Atmel.
Ответить

Программирование ATmega 128

Ср фев 28, 2018 10:40:10

Уважаемые форумчане есть следующий код для МК 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? В отладчике всё нормально, а смотрю на ножку при помощи осциллограаф там ничего нет ? Как такое может быть ? Подскажите пожалуйста ?

Re: Программирование ATmega 128

Ср фев 28, 2018 11:05:28

JTAG

Re: Программирование ATmega 128

Ср фев 28, 2018 12:04:45

отключить.

Re: Программирование ATmega 128

Вт апр 10, 2018 13:36:08

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

#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"); --проверяем по установлению высокого уровня что программа запущена ( а теперь доходит!!!!!)
};
}
Почему так???
Поясните пожалуйста!!!

Re: Программирование ATmega 128

Вт апр 10, 2018 13:49:19

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

Re: Программирование ATmega 128

Ср апр 11, 2018 10:50:05

Задача проста как помидор нужно написать программный 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. Можно ли дать пример написания таймера с использованием подпрограмм на ассемблере ?

Re: Программирование ATmega 128

Сб апр 14, 2018 22:50:19

Если Вам нужен программный SPI именно на ассемблере, то возьмите готовое решение от Atmel
Вложения
SOFTware SPI 8bit ASM.rar
(53.96 KiB) Скачиваний: 136

Re: Программирование ATmega 128

Вс апр 15, 2018 05:01:13

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


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