Commit e0f2f338b83c4231b2f39c8369a8bcd23fb9a84b
receivedTue, 23. Jul 2024, 19:00:55 (by user sx)
Tue, 23 Jul 2024 17:00:55 +0000 (19:00 +0200)
authorManfred Steiner <sx@htl-kaindorf.at>
Tue, 23 Jul 2024 17:00:42 +0000 (19:00 +0200)
committerManfred Steiner <sx@htl-kaindorf.at>
Tue, 23 Jul 2024 17:00:42 +0000 (19:00 +0200)
10 files changed:
software/test_2024-07-23/.gdb_history [new file with mode: 0644]
software/test_2024-07-23/.gdbinit [new file with mode: 0644]
software/test_2024-07-23/.gitignore [new file with mode: 0644]
software/test_2024-07-23/.vscode/c_cpp_properties.json [new file with mode: 0644]
software/test_2024-07-23/.vscode/launch.json [new file with mode: 0644]
software/test_2024-07-23/.vscode/settings.json [new file with mode: 0644]
software/test_2024-07-23/.vscode/tasks.json [new file with mode: 0644]
software/test_2024-07-23/Makefile [new file with mode: 0644]
software/test_2024-07-23/README.md [new file with mode: 0644]
software/test_2024-07-23/src/main.c [new file with mode: 0644]

diff --git a/software/test_2024-07-23/.gdb_history b/software/test_2024-07-23/.gdb_history
new file mode 100644 (file)
index 0000000..3339046
--- /dev/null
@@ -0,0 +1,9 @@
+target remote :1234
+layout split
+stepi
+quit
+target remote :1234
+layout split
+stepi
+b *main+9
+quit
diff --git a/software/test_2024-07-23/.gdbinit b/software/test_2024-07-23/.gdbinit
new file mode 100644 (file)
index 0000000..139597f
--- /dev/null
@@ -0,0 +1,2 @@
+
+
diff --git a/software/test_2024-07-23/.gitignore b/software/test_2024-07-23/.gitignore
new file mode 100644 (file)
index 0000000..a959910
--- /dev/null
@@ -0,0 +1,4 @@
+.depend
+**/build
+**/dist
+**/sim
diff --git a/software/test_2024-07-23/.vscode/c_cpp_properties.json b/software/test_2024-07-23/.vscode/c_cpp_properties.json
new file mode 100644 (file)
index 0000000..3a57c79
--- /dev/null
@@ -0,0 +1,18 @@
+{
+    "configurations": [
+        {
+            "name": "Linux AVR",
+            "includePath": [
+                "/usr/lib/avr/include/**",
+                "/usr/lib/gcc/avr/**"
+            ],
+            "defines": [],
+            "compilerPath": "/usr/bin/avr-gcc",
+            "compilerArgs": [ "-mmcu=atmega644p", "-DF_CPU=12000000", "-Os" ],
+            "cStandard": "gnu11",
+            "cppStandard": "gnu++11",
+            "intelliSenseMode": "linux-gcc-x64"
+        }
+    ],
+    "version": 4
+}
diff --git a/software/test_2024-07-23/.vscode/launch.json b/software/test_2024-07-23/.vscode/launch.json
new file mode 100644 (file)
index 0000000..f29cf2e
--- /dev/null
@@ -0,0 +1,37 @@
+{
+    // Use IntelliSense to learn about possible attributes.
+    // Hover to view descriptions of existing attributes.
+    // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
+    "version": "0.2.0",
+    "configurations": [
+        {
+            "name": "Build",
+            // "request": "launch",
+            "type": "node-terminal",
+            "preLaunchTask": "build"
+        },{
+            "name": "Flash",
+            // "request": "launch",
+            "type": "node-terminal",
+            "preLaunchTask": "flash"
+        },{
+            "name": "Clean",
+            // "request": "launch",
+            "type": "node-terminal",
+            "preLaunchTask": "clean"
+        },{
+            // es muss mit simuc --board arduino dist/programm.elf der Simulator 
+            // gestartet werden. Dessen gdb-stub öffnet auf localhost:1234 einen Port
+            "name": "Debug (simuc)",
+            "type": "cppdbg",
+            "request": "launch",
+            "program": "${workspaceFolder}/sim/atmega328p.elf",
+            "cwd": "${workspaceFolder}",
+            "externalConsole": false,
+            "MIMode": "gdb",
+            "miDebuggerPath": "/usr/bin/avr-gdb",
+            "miDebuggerServerAddress": ":1234",
+            "preLaunchTask": "build"
+        }
+    ]
+}
diff --git a/software/test_2024-07-23/.vscode/settings.json b/software/test_2024-07-23/.vscode/settings.json
new file mode 100644 (file)
index 0000000..b2e94c9
--- /dev/null
@@ -0,0 +1,26 @@
+{
+    "[c]": {
+        "editor.insertSpaces": true,
+        "editor.tabSize": 3,
+        "editor.detectIndentation": false
+    },
+    "[cpp]": {
+        "editor.insertSpaces": true,
+        "editor.tabSize": 3,
+        "editor.detectIndentation": false
+    },
+    "[h]": {
+        "editor.insertSpaces": true,
+        "editor.tabSize": 3,
+        "editor.detectIndentation": false
+    },
+    "[hpp]": {
+        "editor.insertSpaces": true,
+        "editor.tabSize": 3,
+        "editor.detectIndentation": false
+    },
+    "cSpell.words": [],
+    "cSpell.ignorePaths": [
+        "**/*.json", "**/*.c", "**/*.h", "**/*.cpp", "**/*.hpp", "**/Makefile"
+    ]
+}
diff --git a/software/test_2024-07-23/.vscode/tasks.json b/software/test_2024-07-23/.vscode/tasks.json
new file mode 100644 (file)
index 0000000..74fb1c7
--- /dev/null
@@ -0,0 +1,23 @@
+{
+    // See https://go.microsoft.com/fwlink/?LinkId=733558
+    // for the documentation about the tasks.json format
+    "version": "2.0.0",
+    "tasks": [{
+        "label": "build",
+        "type": "shell",
+        "command": "make",
+        "problemMatcher":[
+            "$gcc"
+        ]
+    },{
+        "label": "clean",
+        "type": "shell",
+        "command": "make",
+        "args": [ "clean" ],
+    },{
+        "label": "flash",
+        "type": "shell",
+        "command": "make",
+        "args": [ "flash" ],
+    }]
+}
\ No newline at end of file
diff --git a/software/test_2024-07-23/Makefile b/software/test_2024-07-23/Makefile
new file mode 100644 (file)
index 0000000..93bc697
--- /dev/null
@@ -0,0 +1,79 @@
+.PHONY: all info flash picocom clean
+$(shell mkdir -p dist >/dev/null)
+$(shell mkdir -p build >/dev/null)
+$(shell mkdir -p sim >/dev/null)
+
+NAME="test_2024-07-23_nano-644"
+SRC= $(wildcard src/*.c src/*.cpp) 
+OBJ = $(SRC:src/%.c=build/%.o)
+OBJ_SIM = $(SRC:src/%.c=sim/%.o)
+
+DEVICE=atmega644p
+
+CC= avr-gcc
+CFLAGS= -Wall -mmcu=$(DEVICE) -Os -DF_CPU=12000000 -c
+LFLAGS= -Wall -mmcu=$(DEVICE) -Os -DF_CPU=12000000
+
+CFLAGS_SIM= -Wall -mmcu=$(DEVICE) -Og -DF_CPU=12000000 -g -c
+LFLAGS_SIM= -Wall -mmcu=$(DEVICE) -Og -DF_CPU=12000000 -g
+
+
+all: dist/$(NAME).elf dist/$(NAME).s dist/$(NAME).hex sim/$(NAME).elf sim/$(NAME).s info
+       
+info:
+       @echo
+       @avr-size --mcu=$(DEVICE) --format=avr dist/$(NAME).elf
+
+.depend: $(SRC)
+       $(CC) -MM $(SRC) > .depend
+
+-include $(DEPENDFILE) 
+
+dist/$(NAME).elf: .depend $(OBJ)
+       $(CC) $(LFLAGS) -o $@ $(OBJ)
+
+dist/%.s: dist/%.elf
+       avr-objdump -d $< > $@
+
+dist/%.hex: dist/%.elf
+       avr-objcopy -O ihex $(HEX_FLASH_FLAGS) $< $@
+
+sim/$(NAME).elf: .depend $(OBJ_SIM)
+               $(CC) $(LFLAGS_SIM) -o $@ $(OBJ_SIM)
+
+
+build/%.o: src/%.c
+       $(CC) $(CFLAGS) -o $@ $<
+
+sim/%.o: src/%.c
+       $(CC) $(CFLAGS_SIM) -o $@ $<
+
+sim/%.s: sim/%.elf
+       avr-objdump -d $< > $@
+
+simuc: sim/$(NAME).elf
+       simuc --board arduino $<
+
+gdb: sim/$(NAME).elf
+       avr-gdb $<
+
+isp-flash: dist/$(NAME).elf all
+       avrdude -c usbasp -p m644p -e -U flash:w:$<
+
+flash: dist/$(NAME).elf all
+       avrdude -c arduino -p m644p -P /dev/ttyUSB0 -b 115200 -e -U flash:w:$<
+
+
+picocom:
+       # picocom sends CR for ENTER -> convert cr (\r) to lf (\n)
+       picocom -b 115200 --omap crlf /dev/ttyUSB0
+
+fuse:
+       avrdude -c usbasp -p m644p -U lfuse:w:0xEE:m -U hfuse:w:0xD9:m -U efuse:w:0xFF:m
+
+clean:
+       @rm -r dist
+       @rm -r build
+       @rm -r sim
+       @find . -type f -name ".depend" -exec rm {} \;
+       @echo "clean done"
diff --git a/software/test_2024-07-23/README.md b/software/test_2024-07-23/README.md
new file mode 100644 (file)
index 0000000..c4d5e14
--- /dev/null
@@ -0,0 +1 @@
+# Testprogramm
diff --git a/software/test_2024-07-23/src/main.c b/software/test_2024-07-23/src/main.c
new file mode 100644 (file)
index 0000000..a737afa
--- /dev/null
@@ -0,0 +1,140 @@
+#include <avr/io.h>
+#include <util/delay.h>
+#include <stdio.h>
+#include <avr/interrupt.h>
+
+int uart_putchar(char c, FILE *stream) {
+   if (c == '\n') {
+      uart_putchar('\r', stream);
+   }
+   if (stream == stdout) {
+      loop_until_bit_is_set(UCSR0A, UDRE0);
+      UDR0 = c;
+   } else if (stream == stderr) {
+      loop_until_bit_is_set(UCSR1A, UDRE1);
+      UDR1 = c;
+   }
+   return 0;
+}
+
+static FILE mystdout = FDEV_SETUP_STREAM(uart_putchar, NULL, _FDEV_SETUP_WRITE);
+static FILE mystderr = FDEV_SETUP_STREAM(uart_putchar, NULL, _FDEV_SETUP_WRITE);
+
+int main () {
+   
+   DDRC = 0x1C;
+   PORTC = 0x3C;
+
+   UCSR0A = (1 << U2X0);
+   UCSR0B = (1 << RXCIE0) | (1 << RXEN0) | (1 <<TXEN0);
+   UCSR0C = (1 << UCSZ01) | ( 1<< UCSZ00);
+   UBRR0H = 0;
+   UBRR0L = F_CPU / 8 / 115200 - 1;
+
+   UCSR1A = (1 << U2X0);
+   UCSR1B = (1 << RXCIE0) | (1 << RXEN0) | (1 <<TXEN0);
+   UCSR1C = (1 << UCSZ01) | ( 1<< UCSZ00);
+   UBRR1H = 0;
+   UBRR1L = F_CPU / 8 / 115200 - 1;
+
+   stdout = &mystdout;
+   stderr = &mystderr;
+
+   DDRD = 0xf0; // LED D4..D1
+   PORTD = 0;
+
+   DDRA = 0x00; // SW PA3..PA0
+   PORTA = 0x0f;
+
+   // DDRB = 0xff; // 7-Segment
+   // PORTB = 0xff;
+
+   DDRB = 0x07; // RGB-LED
+   PORTB = 0;
+
+   uint16_t cnt = 0;
+   while (1) {
+      _delay_ms(500);
+      PORTC ^= 0x1C;
+      printf("%04x: PINA=0x%02x  PORTD=0x%02x \n", cnt++, PINA, PORTD);
+
+      PORTD ^= 0xf0;
+      for (uint8_t i = 0; i < 4; i++) {
+         uint8_t swPressed = (PINA & (1 << i)) == 0;
+         if (swPressed) {
+            fprintf(stderr, "SW%d pressed\n", i);
+            PORTD |= (1 << (i + 4));
+         }
+      }
+
+      for (uint8_t i = 0; i < 3; i++) {
+         uint8_t swPressed = (PINA & (1 << i)) == 0;
+         if (swPressed) {
+            PORTB |= (1 << i);
+         } else {
+            PORTB &= ~(1 << i);
+         }
+      }
+
+   }
+
+   // TCCR1B = (1 << WGM12) | (1 << CS11);
+   // OCR1A = 1500;
+   // TIMSK1 = (1 << OCIE1A);
+
+   // UCSR0A = (1 << U2X0);
+   // UCSR0B = (1 << RXCIE0) | (1 << RXEN0) | (1 <<TXEN0);
+   // UCSR0C = (1 << UCSZ01) | ( 1<< UCSZ00);
+   // UBRR0H = 0;
+   // UBRR0L = F_CPU / 8 / 115200 - 1;
+
+   // UCSR1A = (1 << U2X1);
+   // UCSR1B = (1 << RXCIE1) | (1 << RXEN1) | (1 <<TXEN1);
+   // UCSR1C = (1 << UCSZ11) | ( 1<< UCSZ10);
+   // UBRR1H = 0;
+   // UBRR1L = F_CPU / 8 / 115200 - 1;
+
+   // stdout = &mystdout;
+   // stderr = &mystderr;
+   // fromUart0[0] = 0;
+   // sei();
+
+   // uint16_t cnt = 0;
+   // while (1) {
+   //    printf("%04x: Hello world%s  %12s\r",
+   //       cnt++,
+   //       fromUart0,
+   //       (PINC & (1 << PC5)) == 0 ? "SW2 pressed" : ""
+   //    );
+   //    if ((PINC & (1 << PC5)) == 0) {
+   //       PORTC &= ~(1 << PC2);
+   //    }
+   //    _delay_ms(10);
+   // }
+}
+
+// ISR (USART0_RX_vect) {
+//    PORTC ^= (1 << PC3);
+//    uint8_t b = UDR0;
+//    UDR1 = b;
+//    fromUart0[0] = ' ';
+//    fromUart0[4] = b;
+// }
+
+// ISR (USART1_RX_vect) {
+//    uint8_t b = UDR1;
+//    if (b == ' ') {
+//       PORTC |= (1 << PC2);
+//    }
+// }
+
+
+// ISR (TIMER1_COMPA_vect) {
+//    static uint16_t timer = 0;
+//    timer++;
+//    if (timer >= 1000) {
+//       PORTC ^= (1 << PC4);
+//       timer = 0;
+//    }
+// }
+