Сб ноя 13, 2021 16:39:41
Сб ноя 13, 2021 18:33:58
Сб ноя 13, 2021 18:44:46
Карбофос писал(а):Вроде как, в Atmega324pa и так 2 шт. USART на борту.
Alexeytm писал(а):на Atmega324pa оба порта заняты
Alexeytm писал(а):на втором Atmega328p пишу сам
Карбофос писал(а):Ничего не понятно.
Сб ноя 13, 2021 19:12:23
BOOTLOADER_ADDRESS = 1800
LDFLAGS += -Wl,--section-start=.text=$(BOOTLOADER_ADDRESS)
#define BOOTLOADER_INIT \
PORTB = 0xff; \
DDRB = 0; \
PORTC = 0xff; \
DDRC = 0; \
PORTD = 0xfa; \
DDRD = 0x02;
#define BOOTLOADER_CONDITION ((PINC & (1 << PC2)) == 0)
void (*jump_to_app)(void) = 0x0000;
void leaveBootloader() {
cli();
boot_rww_enable();
GICR = (1 << IVCE); /* enable change of interrupt vectors */
GICR = (0 << IVSEL); /* move interrupts to application flash section */
jump_to_app();
}
int main(void)
{
/* initialize hardware */
BOOTLOADER_INIT;
/* jump to application if jumper is set */
if (!BOOTLOADER_CONDITION) {
leaveBootloader();
}
// сюда пихать
return 0;
}
Сб ноя 13, 2021 20:14:33
Alexeytm писал(а):И, мне совершенно не понятно, почему вся эта шняга должна находиться в области бутлодера???
Сб ноя 13, 2021 20:38:07
Cycle:
BST PIND,0 ;Rx0
BLD PORTB,1 ;Tx1
BST PINB,0 ;Rx1
BLD PORTD,1 ;Tx0
rjmp Cycle
Вс ноя 14, 2021 10:15:55
Вс ноя 14, 2021 19:45:47
Вс ноя 14, 2021 20:50:24
//Rx Uart
DDRD |= 1 << 0;//сконфигурировать линию 0 порта D как выход
PORTD |= 1 << 0;//установить 1 на линии 0 потра D
//Rx
DDRB |= 1 << 4;//сконфигурировать линию 4 порта В как выход
PORTB |= 1 << 4;//установить 1 на линии 4 потра В
Вс ноя 14, 2021 21:17:09
Вс ноя 14, 2021 21:26:48
PIND |= _BV(PIND4);
Вс ноя 14, 2021 22:06:56
Карбофос писал(а):Не нужно линии Rx настраивать на выход.
Это входные линии.
Этот код надо исключить.
Вс ноя 14, 2021 22:12:59
ISR(TIMER1_COMPA_vect, ISR_NAKED)
{
PIND |= _BV(PIND4);
reti();
}
Вс ноя 14, 2021 22:37:22
Пн ноя 15, 2021 01:04:40
Пн ноя 15, 2021 16:53:57
#include <avr/io.h>
#include <avr/interrupt.h>
ISR(TIMER1_COMPA_vect, ISR_NAKED)//
{
PIND |= _BV(PIND4);
reti();
}
static void (*jump_to_app)(void) = 0x0000;
int main (void) {
DDRD |= 1 << 3;
PORTD |= 1<<3;
asm("NOP");
if (!(PIND & (1 << PIND3))){//нажата кнопка
MCUCR = (1<<IVCE);
MCUCR = (1<<IVSEL);
cli();
TCCR1A = 0;
TCCR1B = 0;
OCR1A = 9999;
TCCR1B |= (1 << WGM12);
TCCR1B |= (1 << CS10);
TCCR1B |= (1 << CS12);
TIMSK1 |= (1 << OCIE1A);
sei();
DDRD |= 1 << 4;//светодиод
PORTD |= 1 << 4; //установить "1" на линии 4 порта D
//Tx Uart
DDRD |= 1 << 1;//сконфигурировать линию 1 порта D как выход
//Tx
DDRB |= 1 << 3;//сконфигурировать линию 3 порта В как выход
while(1){
if (!(PIND & (1 << PIND0)))//проверить "0" на линии 0 порта D
PORTB &= ~(1 << 3);//установить 0 на линии 3 порта В
else PORTB |= 1 << 3;//установить 1 на линии 3 порта В
//Tx
if (!(PINB & (1 << PINB4)))//проверить "0" на линии 4 порта B
PORTD &= ~(1 << 1);//установить 0 на линии 1 порта D
else PORTD |= 1 << 1;//установить 1 на линии 1 порта D
}
}
else jump_to_app();
}