Switch to Timer0

This commit is contained in:
S170H
2023-11-27 19:09:24 +01:00
parent be0247a93b
commit c6080d47db
24 changed files with 1020 additions and 55 deletions

Binary file not shown.

View File

@@ -1,5 +1,5 @@
AVRASM ver. 2.2.7 C:\Users\Safak\SynologyDrive\UNI\3. Semester\53107 ARBK\Praktikumsunterlagen\ARBKVS-Praktika\P1\P1\main.asm Tue Nov 14 00:02:30 2023
AVRASM ver. 2.2.7 C:\Users\Safak\SynologyDrive\UNI\3. Semester\53107 ARBK\Praktikumsunterlagen\ARBKVS-Praktika\P1\P1\main.asm Thu Nov 23 17:48:47 2023
[builtin](2): Including file 'C:/Program Files (x86)\Atmel\Studio\7.0\Packs\atmel\ATmega_DFP\1.2.209\avrasm\inc\m328pdef.inc'
C:\Users\Safak\SynologyDrive\UNI\3. Semester\53107 ARBK\Praktikumsunterlagen\ARBKVS-Praktika\P1\P1\main.asm(8): Including file 'C:/Program Files (x86)\Atmel\Studio\7.0\Packs\atmel\ATmega_DFP\1.2.209\avrasm\inc\m328pdef.inc'

View File

@@ -1,5 +1,5 @@
AVRASM ver. 2.2.7 C:\Users\Safak\SynologyDrive\UNI\3. Semester\53107 ARBK\Praktikumsunterlagen\ARBKVS-Praktika\P1\P1\main.asm Tue Nov 14 00:02:30 2023
AVRASM ver. 2.2.7 C:\Users\Safak\SynologyDrive\UNI\3. Semester\53107 ARBK\Praktikumsunterlagen\ARBKVS-Praktika\P1\P1\main.asm Thu Nov 23 17:48:47 2023
EQU SIGNATURE_000 0000001e

BIN
P3/.vs/P3/v14/.atsuo Normal file

Binary file not shown.

8
P3/P3/.idea/.gitignore generated vendored Normal file
View File

@@ -0,0 +1,8 @@
# Default ignored files
/shelf/
/workspace.xml
# Editor-based HTTP Client requests
/httpRequests/
# Datasource local storage ignored files
/dataSources/
/dataSources.local.xml

8
P3/P3/.idea/P3.iml generated Normal file
View File

@@ -0,0 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<module type="CPP_MODULE" version="4">
<component name="NewModuleRootManager">
<content url="file://$MODULE_DIR$" />
<orderEntry type="inheritedJdk" />
<orderEntry type="sourceFolder" forTests="false" />
</component>
</module>

8
P3/P3/.idea/modules.xml generated Normal file
View File

@@ -0,0 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ProjectModuleManager">
<modules>
<module fileurl="file://$PROJECT_DIR$/.idea/P3.iml" filepath="$PROJECT_DIR$/.idea/P3.iml" />
</modules>
</component>
</project>

6
P3/P3/.idea/vcs.xml generated Normal file
View File

@@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="VcsDirectoryMappings">
<mapping directory="$PROJECT_DIR$/../.." vcs="Git" />
</component>
</project>

Binary file not shown.

127
P3/P3/Debug/Makefile Normal file
View File

@@ -0,0 +1,127 @@
################################################################################
# Automatically-generated file. Do not edit!
################################################################################
SHELL := cmd.exe
RM := rm -rf
USER_OBJS :=
LIBS :=
PROJ :=
O_SRCS :=
C_SRCS :=
S_SRCS :=
S_UPPER_SRCS :=
OBJ_SRCS :=
ASM_SRCS :=
PREPROCESSING_SRCS :=
OBJS :=
OBJS_AS_ARGS :=
C_DEPS :=
C_DEPS_AS_ARGS :=
EXECUTABLES :=
OUTPUT_FILE_PATH :=
OUTPUT_FILE_PATH_AS_ARGS :=
AVR_APP_PATH :=$$$AVR_APP_PATH$$$
QUOTE := "
ADDITIONAL_DEPENDENCIES:=
OUTPUT_FILE_DEP:=
LIB_DEP:=
LINKER_SCRIPT_DEP:=
# Every subdirectory with source files must be described here
SUBDIRS :=
# Add inputs and outputs from these tool invocations to the build variables
C_SRCS += \
../main.c
PREPROCESSING_SRCS +=
ASM_SRCS +=
OBJS += \
main.o
OBJS_AS_ARGS += \
main.o
C_DEPS += \
main.d
C_DEPS_AS_ARGS += \
main.d
OUTPUT_FILE_PATH +=P3.elf
OUTPUT_FILE_PATH_AS_ARGS +=P3.elf
ADDITIONAL_DEPENDENCIES:=
OUTPUT_FILE_DEP:= ./makedep.mk
LIB_DEP+=
LINKER_SCRIPT_DEP+=
# AVR32/GNU C Compiler
./main.o: .././main.c
@echo Building file: $<
@echo Invoking: AVR/GNU C Compiler : 5.4.0
$(QUOTE)C:\Program Files (x86)\Atmel\Studio\7.0\toolchain\avr8\avr8-gnu-toolchain\bin\avr-gcc.exe$(QUOTE) -x c -funsigned-char -funsigned-bitfields -DDEBUG -I"C:\Program Files (x86)\Atmel\Studio\7.0\Packs\atmel\ATmega_DFP\1.2.209\include" -O1 -ffunction-sections -fdata-sections -fpack-struct -fshort-enums -g2 -Wall -mmcu=atmega328p -B "C:\Program Files (x86)\Atmel\Studio\7.0\Packs\atmel\ATmega_DFP\1.2.209\gcc\dev\atmega328p" -c -std=gnu99 -MD -MP -MF "$(@:%.o=%.d)" -MT"$(@:%.o=%.d)" -MT"$(@:%.o=%.o)" -o "$@" "$<"
@echo Finished building: $<
# AVR32/GNU Preprocessing Assembler
# AVR32/GNU Assembler
ifneq ($(MAKECMDGOALS),clean)
ifneq ($(strip $(C_DEPS)),)
-include $(C_DEPS)
endif
endif
# Add inputs and outputs from these tool invocations to the build variables
# All Target
all: $(OUTPUT_FILE_PATH) $(ADDITIONAL_DEPENDENCIES)
$(OUTPUT_FILE_PATH): $(OBJS) $(USER_OBJS) $(OUTPUT_FILE_DEP) $(LIB_DEP) $(LINKER_SCRIPT_DEP)
@echo Building target: $@
@echo Invoking: AVR/GNU Linker : 5.4.0
$(QUOTE)C:\Program Files (x86)\Atmel\Studio\7.0\toolchain\avr8\avr8-gnu-toolchain\bin\avr-gcc.exe$(QUOTE) -o$(OUTPUT_FILE_PATH_AS_ARGS) $(OBJS_AS_ARGS) $(USER_OBJS) $(LIBS) -Wl,-Map="P3.map" -Wl,--start-group -Wl,-lm -Wl,--end-group -Wl,--gc-sections -mmcu=atmega328p -B "C:\Program Files (x86)\Atmel\Studio\7.0\Packs\atmel\ATmega_DFP\1.2.209\gcc\dev\atmega328p"
@echo Finished building target: $@
"C:\Program Files (x86)\Atmel\Studio\7.0\toolchain\avr8\avr8-gnu-toolchain\bin\avr-objcopy.exe" -O ihex -R .eeprom -R .fuse -R .lock -R .signature -R .user_signatures "P3.elf" "P3.hex"
"C:\Program Files (x86)\Atmel\Studio\7.0\toolchain\avr8\avr8-gnu-toolchain\bin\avr-objcopy.exe" -j .eeprom --set-section-flags=.eeprom=alloc,load --change-section-lma .eeprom=0 --no-change-warnings -O ihex "P3.elf" "P3.eep" || exit 0
"C:\Program Files (x86)\Atmel\Studio\7.0\toolchain\avr8\avr8-gnu-toolchain\bin\avr-objdump.exe" -h -S "P3.elf" > "P3.lss"
"C:\Program Files (x86)\Atmel\Studio\7.0\toolchain\avr8\avr8-gnu-toolchain\bin\avr-objcopy.exe" -O srec -R .eeprom -R .fuse -R .lock -R .signature -R .user_signatures "P3.elf" "P3.srec"
"C:\Program Files (x86)\Atmel\Studio\7.0\toolchain\avr8\avr8-gnu-toolchain\bin\avr-size.exe" "P3.elf"
# Other Targets
clean:
-$(RM) $(OBJS_AS_ARGS) $(EXECUTABLES)
-$(RM) $(C_DEPS_AS_ARGS)
rm -rf "P3.elf" "P3.a" "P3.hex" "P3.lss" "P3.eep" "P3.map" "P3.srec" "P3.usersignatures"

1
P3/P3/Debug/P3.eep Normal file
View File

@@ -0,0 +1 @@
:00000001FF

BIN
P3/P3/Debug/P3.elf Normal file

Binary file not shown.

27
P3/P3/Debug/P3.hex Normal file
View File

@@ -0,0 +1,27 @@
:100000000C9434000C9446000C9446000C9446006A
:100010000C9446000C9446000C9446000C94460048
:100020000C9446000C9446000C9446000C94460038
:100030000C9446000C9446000C9456000C94460018
:100040000C9446000C9446000C9446000C94460018
:100050000C9446000C9446000C9446000C94460008
:100060000C9446000C94460011241FBECFEFD8E03C
:10007000DEBFCDBF21E0A0E0B1E001C01D92A43001
:10008000B207E1F70E94B2000C94C8000C94000083
:1000900084B5826084BD85B5836085BD89EF87BDE9
:1000A000EEE6F0E080818260808308951F920F92D7
:1000B0000FB60F9211248F939F93AF93BF938091AC
:1000C000000190910101A0910201B09103010196FC
:1000D000A11DB11D8093000190930101A093020125
:1000E000B0930301BF91AF919F918F910F900FBE7D
:1000F0000F901F9018950F931F930091000110917E
:1001000001012091020130910301AB01BC01400FBC
:10011000511F621F731F8091000190910101A091F6
:100120000201B091030184179507A607B70798F35A
:100130001F910F910895AB01BC0180910001909136
:100140000101A0910201B091030184179507A60750
:10015000B70798F30895509A08959BB181E08927D5
:100160008BB908950E94AB000E944800789464EF18
:1001700071E080E090E00E949B000E94AD0064EF7F
:1001800071E080E090E00E947B000E94AD00F7CF1C
:04019000F894FFCF11
:00000001FF

254
P3/P3/Debug/P3.lss Normal file
View File

@@ -0,0 +1,254 @@
P3.elf: file format elf32-avr
Sections:
Idx Name Size VMA LMA File off Algn
0 .data 00000000 00800100 00800100 00000208 2**0
CONTENTS, ALLOC, LOAD, DATA
1 .text 00000194 00000000 00000000 00000074 2**1
CONTENTS, ALLOC, LOAD, READONLY, CODE
2 .bss 00000004 00800100 00800100 00000208 2**0
ALLOC
3 .comment 00000030 00000000 00000000 00000208 2**0
CONTENTS, READONLY
4 .note.gnu.avr.deviceinfo 00000040 00000000 00000000 00000238 2**2
CONTENTS, READONLY
5 .debug_aranges 00000050 00000000 00000000 00000278 2**0
CONTENTS, READONLY, DEBUGGING
6 .debug_info 000007d8 00000000 00000000 000002c8 2**0
CONTENTS, READONLY, DEBUGGING
7 .debug_abbrev 000006b6 00000000 00000000 00000aa0 2**0
CONTENTS, READONLY, DEBUGGING
8 .debug_line 000002b4 00000000 00000000 00001156 2**0
CONTENTS, READONLY, DEBUGGING
9 .debug_frame 000000b0 00000000 00000000 0000140c 2**2
CONTENTS, READONLY, DEBUGGING
10 .debug_str 000003c7 00000000 00000000 000014bc 2**0
CONTENTS, READONLY, DEBUGGING
11 .debug_loc 00000092 00000000 00000000 00001883 2**0
CONTENTS, READONLY, DEBUGGING
12 .debug_ranges 00000040 00000000 00000000 00001915 2**0
CONTENTS, READONLY, DEBUGGING
Disassembly of section .text:
00000000 <__vectors>:
0: 0c 94 34 00 jmp 0x68 ; 0x68 <__ctors_end>
4: 0c 94 46 00 jmp 0x8c ; 0x8c <__bad_interrupt>
8: 0c 94 46 00 jmp 0x8c ; 0x8c <__bad_interrupt>
c: 0c 94 46 00 jmp 0x8c ; 0x8c <__bad_interrupt>
10: 0c 94 46 00 jmp 0x8c ; 0x8c <__bad_interrupt>
14: 0c 94 46 00 jmp 0x8c ; 0x8c <__bad_interrupt>
18: 0c 94 46 00 jmp 0x8c ; 0x8c <__bad_interrupt>
1c: 0c 94 46 00 jmp 0x8c ; 0x8c <__bad_interrupt>
20: 0c 94 46 00 jmp 0x8c ; 0x8c <__bad_interrupt>
24: 0c 94 46 00 jmp 0x8c ; 0x8c <__bad_interrupt>
28: 0c 94 46 00 jmp 0x8c ; 0x8c <__bad_interrupt>
2c: 0c 94 46 00 jmp 0x8c ; 0x8c <__bad_interrupt>
30: 0c 94 46 00 jmp 0x8c ; 0x8c <__bad_interrupt>
34: 0c 94 46 00 jmp 0x8c ; 0x8c <__bad_interrupt>
38: 0c 94 56 00 jmp 0xac ; 0xac <__vector_14>
3c: 0c 94 46 00 jmp 0x8c ; 0x8c <__bad_interrupt>
40: 0c 94 46 00 jmp 0x8c ; 0x8c <__bad_interrupt>
44: 0c 94 46 00 jmp 0x8c ; 0x8c <__bad_interrupt>
48: 0c 94 46 00 jmp 0x8c ; 0x8c <__bad_interrupt>
4c: 0c 94 46 00 jmp 0x8c ; 0x8c <__bad_interrupt>
50: 0c 94 46 00 jmp 0x8c ; 0x8c <__bad_interrupt>
54: 0c 94 46 00 jmp 0x8c ; 0x8c <__bad_interrupt>
58: 0c 94 46 00 jmp 0x8c ; 0x8c <__bad_interrupt>
5c: 0c 94 46 00 jmp 0x8c ; 0x8c <__bad_interrupt>
60: 0c 94 46 00 jmp 0x8c ; 0x8c <__bad_interrupt>
64: 0c 94 46 00 jmp 0x8c ; 0x8c <__bad_interrupt>
00000068 <__ctors_end>:
68: 11 24 eor r1, r1
6a: 1f be out 0x3f, r1 ; 63
6c: cf ef ldi r28, 0xFF ; 255
6e: d8 e0 ldi r29, 0x08 ; 8
70: de bf out 0x3e, r29 ; 62
72: cd bf out 0x3d, r28 ; 61
00000074 <__do_clear_bss>:
74: 21 e0 ldi r18, 0x01 ; 1
76: a0 e0 ldi r26, 0x00 ; 0
78: b1 e0 ldi r27, 0x01 ; 1
7a: 01 c0 rjmp .+2 ; 0x7e <.do_clear_bss_start>
0000007c <.do_clear_bss_loop>:
7c: 1d 92 st X+, r1
0000007e <.do_clear_bss_start>:
7e: a4 30 cpi r26, 0x04 ; 4
80: b2 07 cpc r27, r18
82: e1 f7 brne .-8 ; 0x7c <.do_clear_bss_loop>
84: 0e 94 b2 00 call 0x164 ; 0x164 <main>
88: 0c 94 c8 00 jmp 0x190 ; 0x190 <_exit>
0000008c <__bad_interrupt>:
8c: 0c 94 00 00 jmp 0 ; 0x0 <__vectors>
00000090 <setupTimer0>:
volatile uint32_t systemClock = 0;
void setupTimer0() {
// Configure Timer0 for CTC mode
TCCR0A |= (1 << WGM01); // Set Waveform Generation Mode bits for CTC
90: 84 b5 in r24, 0x24 ; 36
92: 82 60 ori r24, 0x02 ; 2
94: 84 bd out 0x24, r24 ; 36
TCCR0B |= (1 << CS01) | (1 << CS00); // Set prescaler to 64
96: 85 b5 in r24, 0x25 ; 37
98: 83 60 ori r24, 0x03 ; 3
9a: 85 bd out 0x25, r24 ; 37
OCR0A = 249; // Set Output Compare Register to 249 for ~1ms interrupt
9c: 89 ef ldi r24, 0xF9 ; 249
9e: 87 bd out 0x27, r24 ; 39
TIMSK0 |= (1 << OCIE0A); // Enable Timer0 Output Compare A Match interrupt
a0: ee e6 ldi r30, 0x6E ; 110
a2: f0 e0 ldi r31, 0x00 ; 0
a4: 80 81 ld r24, Z
a6: 82 60 ori r24, 0x02 ; 2
a8: 80 83 st Z, r24
aa: 08 95 ret
000000ac <__vector_14>:
}
// Timer0 Output Compare A Match Interrupt Service Routine
ISR(TIMER0_COMPA_vect) {
ac: 1f 92 push r1
ae: 0f 92 push r0
b0: 0f b6 in r0, 0x3f ; 63
b2: 0f 92 push r0
b4: 11 24 eor r1, r1
b6: 8f 93 push r24
b8: 9f 93 push r25
ba: af 93 push r26
bc: bf 93 push r27
systemClock++; // Increment the milliseconds counter
be: 80 91 00 01 lds r24, 0x0100 ; 0x800100 <_edata>
c2: 90 91 01 01 lds r25, 0x0101 ; 0x800101 <_edata+0x1>
c6: a0 91 02 01 lds r26, 0x0102 ; 0x800102 <_edata+0x2>
ca: b0 91 03 01 lds r27, 0x0103 ; 0x800103 <_edata+0x3>
ce: 01 96 adiw r24, 0x01 ; 1
d0: a1 1d adc r26, r1
d2: b1 1d adc r27, r1
d4: 80 93 00 01 sts 0x0100, r24 ; 0x800100 <_edata>
d8: 90 93 01 01 sts 0x0101, r25 ; 0x800101 <_edata+0x1>
dc: a0 93 02 01 sts 0x0102, r26 ; 0x800102 <_edata+0x2>
e0: b0 93 03 01 sts 0x0103, r27 ; 0x800103 <_edata+0x3>
}
e4: bf 91 pop r27
e6: af 91 pop r26
e8: 9f 91 pop r25
ea: 8f 91 pop r24
ec: 0f 90 pop r0
ee: 0f be out 0x3f, r0 ; 63
f0: 0f 90 pop r0
f2: 1f 90 pop r1
f4: 18 95 reti
000000f6 <waitFor>:
void waitFor(uint32_t ms) {
f6: 0f 93 push r16
f8: 1f 93 push r17
uint32_t endTime = systemClock + ms;
fa: 00 91 00 01 lds r16, 0x0100 ; 0x800100 <_edata>
fe: 10 91 01 01 lds r17, 0x0101 ; 0x800101 <_edata+0x1>
102: 20 91 02 01 lds r18, 0x0102 ; 0x800102 <_edata+0x2>
106: 30 91 03 01 lds r19, 0x0103 ; 0x800103 <_edata+0x3>
10a: ab 01 movw r20, r22
10c: bc 01 movw r22, r24
10e: 40 0f add r20, r16
110: 51 1f adc r21, r17
112: 62 1f adc r22, r18
114: 73 1f adc r23, r19
while (systemClock < endTime);
116: 80 91 00 01 lds r24, 0x0100 ; 0x800100 <_edata>
11a: 90 91 01 01 lds r25, 0x0101 ; 0x800101 <_edata+0x1>
11e: a0 91 02 01 lds r26, 0x0102 ; 0x800102 <_edata+0x2>
122: b0 91 03 01 lds r27, 0x0103 ; 0x800103 <_edata+0x3>
126: 84 17 cp r24, r20
128: 95 07 cpc r25, r21
12a: a6 07 cpc r26, r22
12c: b7 07 cpc r27, r23
12e: 98 f3 brcs .-26 ; 0x116 <waitFor+0x20>
}
130: 1f 91 pop r17
132: 0f 91 pop r16
134: 08 95 ret
00000136 <waitUntil>:
void waitUntil(uint32_t ms) {
136: ab 01 movw r20, r22
138: bc 01 movw r22, r24
while (systemClock < ms);
13a: 80 91 00 01 lds r24, 0x0100 ; 0x800100 <_edata>
13e: 90 91 01 01 lds r25, 0x0101 ; 0x800101 <_edata+0x1>
142: a0 91 02 01 lds r26, 0x0102 ; 0x800102 <_edata+0x2>
146: b0 91 03 01 lds r27, 0x0103 ; 0x800103 <_edata+0x3>
14a: 84 17 cp r24, r20
14c: 95 07 cpc r25, r21
14e: a6 07 cpc r26, r22
150: b7 07 cpc r27, r23
152: 98 f3 brcs .-26 ; 0x13a <waitUntil+0x4>
}
154: 08 95 ret
00000156 <initializeLED>:
void initializeLED() {
DDRD |= (1 << LED_PIN); // Set LED_PIN as an output
156: 50 9a sbi 0x0a, 0 ; 10
158: 08 95 ret
0000015a <toggleLED>:
}
void toggleLED() {
PORTD ^= (1 << LED_PIN); // Toggle the LED
15a: 9b b1 in r25, 0x0b ; 11
15c: 81 e0 ldi r24, 0x01 ; 1
15e: 89 27 eor r24, r25
160: 8b b9 out 0x0b, r24 ; 11
162: 08 95 ret
00000164 <main>:
}
int main(void) {
initializeLED(); // Initialize the LED pin
164: 0e 94 ab 00 call 0x156 ; 0x156 <initializeLED>
setupTimer0(); // Setup Timer0
168: 0e 94 48 00 call 0x90 ; 0x90 <setupTimer0>
sei(); // Enable global interrupts
16c: 78 94 sei
waitUntil(500); // Wait until 500 ms have passed
16e: 64 ef ldi r22, 0xF4 ; 244
170: 71 e0 ldi r23, 0x01 ; 1
172: 80 e0 ldi r24, 0x00 ; 0
174: 90 e0 ldi r25, 0x00 ; 0
176: 0e 94 9b 00 call 0x136 ; 0x136 <waitUntil>
toggleLED(); // Toggle the LED to turn it on
17a: 0e 94 ad 00 call 0x15a ; 0x15a <toggleLED>
while (1) {
waitFor(500); // Wait for 500 ms
17e: 64 ef ldi r22, 0xF4 ; 244
180: 71 e0 ldi r23, 0x01 ; 1
182: 80 e0 ldi r24, 0x00 ; 0
184: 90 e0 ldi r25, 0x00 ; 0
186: 0e 94 7b 00 call 0xf6 ; 0xf6 <waitFor>
toggleLED(); // Toggle the LED
18a: 0e 94 ad 00 call 0x15a ; 0x15a <toggleLED>
18e: f7 cf rjmp .-18 ; 0x17e <main+0x1a>
00000190 <_exit>:
190: f8 94 cli
00000192 <__stop_program>:
192: ff cf rjmp .-2 ; 0x192 <__stop_program>

457
P3/P3/Debug/P3.map Normal file
View File

@@ -0,0 +1,457 @@
Archive member included to satisfy reference by file (symbol)
c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avr5\libgcc.a(_exit.o)
C:/Program Files (x86)/Atmel/Studio/7.0/Packs/atmel/ATmega_DFP/1.2.209/gcc/dev/atmega328p/avr5/crtatmega328p.o (exit)
c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avr5\libgcc.a(_clear_bss.o)
main.o (__do_clear_bss)
Discarded input sections
.data 0x00000000 0x0 C:/Program Files (x86)/Atmel/Studio/7.0/Packs/atmel/ATmega_DFP/1.2.209/gcc/dev/atmega328p/avr5/crtatmega328p.o
.bss 0x00000000 0x0 C:/Program Files (x86)/Atmel/Studio/7.0/Packs/atmel/ATmega_DFP/1.2.209/gcc/dev/atmega328p/avr5/crtatmega328p.o
.text 0x00000000 0x0 main.o
.data 0x00000000 0x0 main.o
.bss 0x00000000 0x0 main.o
.text 0x00000000 0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avr5\libgcc.a(_exit.o)
.data 0x00000000 0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avr5\libgcc.a(_exit.o)
.bss 0x00000000 0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avr5\libgcc.a(_exit.o)
.text.libgcc.mul
0x00000000 0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avr5\libgcc.a(_exit.o)
.text.libgcc.div
0x00000000 0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avr5\libgcc.a(_exit.o)
.text.libgcc 0x00000000 0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avr5\libgcc.a(_exit.o)
.text.libgcc.prologue
0x00000000 0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avr5\libgcc.a(_exit.o)
.text.libgcc.builtins
0x00000000 0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avr5\libgcc.a(_exit.o)
.text.libgcc.fmul
0x00000000 0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avr5\libgcc.a(_exit.o)
.text.libgcc.fixed
0x00000000 0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avr5\libgcc.a(_exit.o)
.text 0x00000000 0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avr5\libgcc.a(_clear_bss.o)
.data 0x00000000 0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avr5\libgcc.a(_clear_bss.o)
.bss 0x00000000 0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avr5\libgcc.a(_clear_bss.o)
.text.libgcc.mul
0x00000000 0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avr5\libgcc.a(_clear_bss.o)
.text.libgcc.div
0x00000000 0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avr5\libgcc.a(_clear_bss.o)
.text.libgcc 0x00000000 0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avr5\libgcc.a(_clear_bss.o)
.text.libgcc.prologue
0x00000000 0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avr5\libgcc.a(_clear_bss.o)
.text.libgcc.builtins
0x00000000 0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avr5\libgcc.a(_clear_bss.o)
.text.libgcc.fmul
0x00000000 0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avr5\libgcc.a(_clear_bss.o)
.text.libgcc.fixed
0x00000000 0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avr5\libgcc.a(_clear_bss.o)
Memory Configuration
Name Origin Length Attributes
text 0x00000000 0x00020000 xr
data 0x00800060 0x0000ffa0 rw !x
eeprom 0x00810000 0x00010000 rw !x
fuse 0x00820000 0x00000003 rw !x
lock 0x00830000 0x00000400 rw !x
signature 0x00840000 0x00000400 rw !x
user_signatures 0x00850000 0x00000400 rw !x
*default* 0x00000000 0xffffffff
Linker script and memory map
Address of section .data set to 0x800100
LOAD C:/Program Files (x86)/Atmel/Studio/7.0/Packs/atmel/ATmega_DFP/1.2.209/gcc/dev/atmega328p/avr5/crtatmega328p.o
LOAD main.o
START GROUP
LOAD c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avr5\libm.a
END GROUP
START GROUP
LOAD c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avr5\libgcc.a
LOAD c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avr5\libm.a
LOAD c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avr5\libc.a
LOAD C:/Program Files (x86)/Atmel/Studio/7.0/Packs/atmel/ATmega_DFP/1.2.209/gcc/dev/atmega328p/avr5\libatmega328p.a
END GROUP
0x00020000 __TEXT_REGION_LENGTH__ = DEFINED (__TEXT_REGION_LENGTH__)?__TEXT_REGION_LENGTH__:0x20000
0x0000ffa0 __DATA_REGION_LENGTH__ = DEFINED (__DATA_REGION_LENGTH__)?__DATA_REGION_LENGTH__:0xffa0
0x00010000 __EEPROM_REGION_LENGTH__ = DEFINED (__EEPROM_REGION_LENGTH__)?__EEPROM_REGION_LENGTH__:0x10000
[0x00000003] __FUSE_REGION_LENGTH__ = DEFINED (__FUSE_REGION_LENGTH__)?__FUSE_REGION_LENGTH__:0x400
0x00000400 __LOCK_REGION_LENGTH__ = DEFINED (__LOCK_REGION_LENGTH__)?__LOCK_REGION_LENGTH__:0x400
0x00000400 __SIGNATURE_REGION_LENGTH__ = DEFINED (__SIGNATURE_REGION_LENGTH__)?__SIGNATURE_REGION_LENGTH__:0x400
0x00000400 __USER_SIGNATURE_REGION_LENGTH__ = DEFINED (__USER_SIGNATURE_REGION_LENGTH__)?__USER_SIGNATURE_REGION_LENGTH__:0x400
.hash
*(.hash)
.dynsym
*(.dynsym)
.dynstr
*(.dynstr)
.gnu.version
*(.gnu.version)
.gnu.version_d
*(.gnu.version_d)
.gnu.version_r
*(.gnu.version_r)
.rel.init
*(.rel.init)
.rela.init
*(.rela.init)
.rel.text
*(.rel.text)
*(.rel.text.*)
*(.rel.gnu.linkonce.t*)
.rela.text
*(.rela.text)
*(.rela.text.*)
*(.rela.gnu.linkonce.t*)
.rel.fini
*(.rel.fini)
.rela.fini
*(.rela.fini)
.rel.rodata
*(.rel.rodata)
*(.rel.rodata.*)
*(.rel.gnu.linkonce.r*)
.rela.rodata
*(.rela.rodata)
*(.rela.rodata.*)
*(.rela.gnu.linkonce.r*)
.rel.data
*(.rel.data)
*(.rel.data.*)
*(.rel.gnu.linkonce.d*)
.rela.data
*(.rela.data)
*(.rela.data.*)
*(.rela.gnu.linkonce.d*)
.rel.ctors
*(.rel.ctors)
.rela.ctors
*(.rela.ctors)
.rel.dtors
*(.rel.dtors)
.rela.dtors
*(.rela.dtors)
.rel.got
*(.rel.got)
.rela.got
*(.rela.got)
.rel.bss
*(.rel.bss)
.rela.bss
*(.rela.bss)
.rel.plt
*(.rel.plt)
.rela.plt
*(.rela.plt)
.text 0x00000000 0x194
*(.vectors)
.vectors 0x00000000 0x68 C:/Program Files (x86)/Atmel/Studio/7.0/Packs/atmel/ATmega_DFP/1.2.209/gcc/dev/atmega328p/avr5/crtatmega328p.o
0x00000000 __vector_default
0x00000000 __vectors
*(.vectors)
*(.progmem.gcc*)
0x00000068 . = ALIGN (0x2)
0x00000068 __trampolines_start = .
*(.trampolines)
.trampolines 0x00000068 0x0 linker stubs
*(.trampolines*)
0x00000068 __trampolines_end = .
*libprintf_flt.a:*(.progmem.data)
*libc.a:*(.progmem.data)
*(.progmem*)
0x00000068 . = ALIGN (0x2)
*(.jumptables)
*(.jumptables*)
*(.lowtext)
*(.lowtext*)
0x00000068 __ctors_start = .
*(.ctors)
0x00000068 __ctors_end = .
0x00000068 __dtors_start = .
*(.dtors)
0x00000068 __dtors_end = .
SORT(*)(.ctors)
SORT(*)(.dtors)
*(.init0)
.init0 0x00000068 0x0 C:/Program Files (x86)/Atmel/Studio/7.0/Packs/atmel/ATmega_DFP/1.2.209/gcc/dev/atmega328p/avr5/crtatmega328p.o
0x00000068 __init
*(.init0)
*(.init1)
*(.init1)
*(.init2)
.init2 0x00000068 0xc C:/Program Files (x86)/Atmel/Studio/7.0/Packs/atmel/ATmega_DFP/1.2.209/gcc/dev/atmega328p/avr5/crtatmega328p.o
*(.init2)
*(.init3)
*(.init3)
*(.init4)
.init4 0x00000074 0x10 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avr5\libgcc.a(_clear_bss.o)
0x00000074 __do_clear_bss
*(.init4)
*(.init5)
*(.init5)
*(.init6)
*(.init6)
*(.init7)
*(.init7)
*(.init8)
*(.init8)
*(.init9)
.init9 0x00000084 0x8 C:/Program Files (x86)/Atmel/Studio/7.0/Packs/atmel/ATmega_DFP/1.2.209/gcc/dev/atmega328p/avr5/crtatmega328p.o
*(.init9)
*(.text)
.text 0x0000008c 0x4 C:/Program Files (x86)/Atmel/Studio/7.0/Packs/atmel/ATmega_DFP/1.2.209/gcc/dev/atmega328p/avr5/crtatmega328p.o
0x0000008c __vector_22
0x0000008c __vector_1
0x0000008c __vector_24
0x0000008c __vector_12
0x0000008c __bad_interrupt
0x0000008c __vector_6
0x0000008c __vector_3
0x0000008c __vector_23
0x0000008c __vector_25
0x0000008c __vector_11
0x0000008c __vector_13
0x0000008c __vector_17
0x0000008c __vector_19
0x0000008c __vector_7
0x0000008c __vector_5
0x0000008c __vector_4
0x0000008c __vector_9
0x0000008c __vector_2
0x0000008c __vector_21
0x0000008c __vector_15
0x0000008c __vector_8
0x0000008c __vector_10
0x0000008c __vector_16
0x0000008c __vector_18
0x0000008c __vector_20
0x00000090 . = ALIGN (0x2)
*(.text.*)
.text.setupTimer0
0x00000090 0x1c main.o
0x00000090 setupTimer0
.text.__vector_14
0x000000ac 0x4a main.o
0x000000ac __vector_14
.text.waitFor 0x000000f6 0x40 main.o
0x000000f6 waitFor
.text.waitUntil
0x00000136 0x20 main.o
0x00000136 waitUntil
.text.initializeLED
0x00000156 0x4 main.o
0x00000156 initializeLED
.text.toggleLED
0x0000015a 0xa main.o
0x0000015a toggleLED
.text.main 0x00000164 0x2c main.o
0x00000164 main
0x00000190 . = ALIGN (0x2)
*(.fini9)
.fini9 0x00000190 0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avr5\libgcc.a(_exit.o)
0x00000190 _exit
0x00000190 exit
*(.fini9)
*(.fini8)
*(.fini8)
*(.fini7)
*(.fini7)
*(.fini6)
*(.fini6)
*(.fini5)
*(.fini5)
*(.fini4)
*(.fini4)
*(.fini3)
*(.fini3)
*(.fini2)
*(.fini2)
*(.fini1)
*(.fini1)
*(.fini0)
.fini0 0x00000190 0x4 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avr5\libgcc.a(_exit.o)
*(.fini0)
0x00000194 _etext = .
.data 0x00800100 0x0 load address 0x00000194
[!provide] PROVIDE (__data_start, .)
*(.data)
*(.data*)
*(.gnu.linkonce.d*)
*(.rodata)
*(.rodata*)
*(.gnu.linkonce.r*)
0x00800100 . = ALIGN (0x2)
0x00800100 _edata = .
[!provide] PROVIDE (__data_end, .)
.bss 0x00800100 0x4
0x00800100 PROVIDE (__bss_start, .)
*(.bss)
*(.bss*)
.bss.systemClock
0x00800100 0x4 main.o
0x00800100 systemClock
*(COMMON)
0x00800104 PROVIDE (__bss_end, .)
0x00000194 __data_load_start = LOADADDR (.data)
0x00000194 __data_load_end = (__data_load_start + SIZEOF (.data))
.noinit 0x00800104 0x0
[!provide] PROVIDE (__noinit_start, .)
*(.noinit*)
[!provide] PROVIDE (__noinit_end, .)
0x00800104 _end = .
[!provide] PROVIDE (__heap_start, .)
.eeprom 0x00810000 0x0
*(.eeprom*)
0x00810000 __eeprom_end = .
.fuse
*(.fuse)
*(.lfuse)
*(.hfuse)
*(.efuse)
.lock
*(.lock*)
.signature
*(.signature*)
.user_signatures
*(.user_signatures*)
.stab
*(.stab)
.stabstr
*(.stabstr)
.stab.excl
*(.stab.excl)
.stab.exclstr
*(.stab.exclstr)
.stab.index
*(.stab.index)
.stab.indexstr
*(.stab.indexstr)
.comment 0x00000000 0x30
*(.comment)
.comment 0x00000000 0x30 main.o
0x31 (size before relaxing)
.note.gnu.avr.deviceinfo
0x00000000 0x40
.note.gnu.avr.deviceinfo
0x00000000 0x40 C:/Program Files (x86)/Atmel/Studio/7.0/Packs/atmel/ATmega_DFP/1.2.209/gcc/dev/atmega328p/avr5/crtatmega328p.o
.note.gnu.build-id
*(.note.gnu.build-id)
.debug
*(.debug)
.line
*(.line)
.debug_srcinfo
*(.debug_srcinfo)
.debug_sfnames
*(.debug_sfnames)
.debug_aranges 0x00000000 0x50
*(.debug_aranges)
.debug_aranges
0x00000000 0x50 main.o
.debug_pubnames
*(.debug_pubnames)
.debug_info 0x00000000 0x7d8
*(.debug_info .gnu.linkonce.wi.*)
.debug_info 0x00000000 0x5f4 C:/Program Files (x86)/Atmel/Studio/7.0/Packs/atmel/ATmega_DFP/1.2.209/gcc/dev/atmega328p/avr5/crtatmega328p.o
.debug_info 0x000005f4 0x1e4 main.o
.debug_abbrev 0x00000000 0x6b6
*(.debug_abbrev)
.debug_abbrev 0x00000000 0x5a2 C:/Program Files (x86)/Atmel/Studio/7.0/Packs/atmel/ATmega_DFP/1.2.209/gcc/dev/atmega328p/avr5/crtatmega328p.o
.debug_abbrev 0x000005a2 0x114 main.o
.debug_line 0x00000000 0x2b4
*(.debug_line .debug_line.* .debug_line_end)
.debug_line 0x00000000 0x133 C:/Program Files (x86)/Atmel/Studio/7.0/Packs/atmel/ATmega_DFP/1.2.209/gcc/dev/atmega328p/avr5/crtatmega328p.o
.debug_line 0x00000133 0x181 main.o
.debug_frame 0x00000000 0xb0
*(.debug_frame)
.debug_frame 0x00000000 0xb0 main.o
.debug_str 0x00000000 0x3c7
*(.debug_str)
.debug_str 0x00000000 0x208 C:/Program Files (x86)/Atmel/Studio/7.0/Packs/atmel/ATmega_DFP/1.2.209/gcc/dev/atmega328p/avr5/crtatmega328p.o
.debug_str 0x00000208 0x1bf main.o
0x1f3 (size before relaxing)
.debug_loc 0x00000000 0x92
*(.debug_loc)
.debug_loc 0x00000000 0x92 main.o
.debug_macinfo
*(.debug_macinfo)
.debug_weaknames
*(.debug_weaknames)
.debug_funcnames
*(.debug_funcnames)
.debug_typenames
*(.debug_typenames)
.debug_varnames
*(.debug_varnames)
.debug_pubtypes
*(.debug_pubtypes)
.debug_ranges 0x00000000 0x40
*(.debug_ranges)
.debug_ranges 0x00000000 0x40 main.o
.debug_macro
*(.debug_macro)
OUTPUT(P3.elf elf32-avr)
LOAD linker stubs

28
P3/P3/Debug/P3.srec Normal file
View File

@@ -0,0 +1,28 @@
S00A000050332E7372656397
S11300000C9434000C9446000C9446000C94460066
S11300100C9446000C9446000C9446000C94460044
S11300200C9446000C9446000C9446000C94460034
S11300300C9446000C9446000C9456000C94460014
S11300400C9446000C9446000C9446000C94460014
S11300500C9446000C9446000C9446000C94460004
S11300600C9446000C94460011241FBECFEFD8E038
S1130070DEBFCDBF21E0A0E0B1E001C01D92A430FD
S1130080B207E1F70E94B2000C94C8000C9400007F
S113009084B5826084BD85B5836085BD89EF87BDE5
S11300A0EEE6F0E080818260808308951F920F92D3
S11300B00FB60F9211248F939F93AF93BF938091A8
S11300C0000190910101A0910201B09103010196F8
S11300D0A11DB11D8093000190930101A093020121
S11300E0B0930301BF91AF919F918F910F900FBE79
S11300F00F901F9018950F931F930091000110917A
S113010001012091020130910301AB01BC01400FB8
S1130110511F621F731F8091000190910101A091F2
S11301200201B091030184179507A607B70798F356
S11301301F910F910895AB01BC0180910001909132
S11301400101A0910201B091030184179507A6074C
S1130150B70798F30895509A08959BB181E08927D1
S11301608BB908950E94AB000E944800789464EF14
S113017071E080E090E00E949B000E94AD0064EF7B
S113018071E080E090E00E947B000E94AD00F7CF18
S1070190F894FFCF0D
S9030000FC

37
P3/P3/Debug/main.d Normal file
View File

@@ -0,0 +1,37 @@
main.d main.o: .././main.c \
c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\avr\io.h \
c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\avr\sfr_defs.h \
c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\inttypes.h \
c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\lib\gcc\avr\5.4.0\include\stdint.h \
c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\stdint.h \
C:\Program\ Files\ (x86)\Atmel\Studio\7.0\Packs\atmel\ATmega_DFP\1.2.209\include/avr/iom328p.h \
c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\avr\portpins.h \
c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\avr\common.h \
c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\avr\version.h \
c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\avr\fuse.h \
c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\avr\lock.h \
c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\avr\interrupt.h
c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\avr\io.h:
c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\avr\sfr_defs.h:
c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\inttypes.h:
c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\lib\gcc\avr\5.4.0\include\stdint.h:
c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\stdint.h:
C:\Program\ Files\ (x86)\Atmel\Studio\7.0\Packs\atmel\ATmega_DFP\1.2.209\include/avr/iom328p.h:
c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\avr\portpins.h:
c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\avr\common.h:
c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\avr\version.h:
c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\avr\fuse.h:
c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\avr\lock.h:
c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\avr\interrupt.h:

BIN
P3/P3/Debug/main.o Normal file

Binary file not shown.

6
P3/P3/Debug/makedep.mk Normal file
View File

@@ -0,0 +1,6 @@
################################################################################
# Automatically-generated file. Do not edit or delete the file
################################################################################
main.c

View File

@@ -1,53 +0,0 @@
/*
* P3.c
*
* Created: 22.11.2023 18:20:05
* Author : Safak
*/
#define F_CPU 16000000UL
#include <avr/interrupt.h>
#define LED PIND0
volatile uint32_t systemClk = 0;
void setUp_Timer0() {
TCCR0A = (1 << WGM01); // enable CTC mode of Timer/Counter 0 Control Register A
TCCR0B |= (1 << CS01) | (1 << CS00); // set Prescaler 64
OCR0A = 249; // set up Output Comparison Register A for Timer0 to generate an interrupt when timer counter and OCR0A are equals
// F_TimerInterrupt = F_clk / ( (prescaler) x (OCR + 1) )
// => OCR = F_clk / (F_TimerInterrupt x prescaler) - 1 = ( 16MHz/(1000Hz x 64) ) - 1 = 249
TIMSK0 = (1 << OCIE0A); // enable interrupt
}
ISR(TIMER0_COMPA_vect) {
systemClk++;
}
void waitFor(uint32_t ms) {
uint32_t currentTime = systemClk + ms;
while (systemClk < currentTime) {}
}
void waitUntil(uint32_t ms) {
while (systemClk <= ms) {}
}
int main(void) {
/* Replace with your application code */
DDRD = 0xff; // Data direction register D (D0) as output
PORTD = 0x00;
setUp_Timer0();
sei(); // set global interrupt enable
waitUntil(5000); // wait until 5s from the beginning then turn on LED
PORTD |= (1 << LED); // setting bit for LED
while (1) {
waitFor(200); // wait for 0.2s then toggle LED
PORTD ^= (1 << LED); // toggling LED
}
}

51
P3/P3/main.c Normal file
View File

@@ -0,0 +1,51 @@
#include <avr/io.h>
#include <avr/interrupt.h>
#define F_CPU 16000000UL // 16MHz clock frequency
#define LED_PIN PD0 // LED is connected to Pin D0
volatile uint32_t systemClock = 0;
void setupTimer0() {
// Configure Timer0 for CTC mode
TCCR0A |= (1 << WGM01); // Set Waveform Generation Mode bits for CTC
TCCR0B |= (1 << CS01) | (1 << CS00); // Set prescaler to 64
OCR0A = 249; // Set Output Compare Register to 249 for ~1ms interrupt
TIMSK0 |= (1 << OCIE0A); // Enable Timer0 Output Compare A Match interrupt
}
// Timer0 Output Compare A Match Interrupt Service Routine
ISR(TIMER0_COMPA_vect) {
systemClock++; // Increment the milliseconds counter
}
void waitFor(uint32_t ms) {
uint32_t endTime = systemClock + ms;
while (systemClock < endTime);
}
void waitUntil(uint32_t ms) {
while (systemClock < ms);
}
void initializeLED() {
DDRD |= (1 << LED_PIN); // Set LED_PIN as an output
}
void toggleLED() {
PORTD ^= (1 << LED_PIN); // Toggle the LED
}
int main(void) {
initializeLED(); // Initialize the LED pin
setupTimer0(); // Setup Timer0
sei(); // Enable global interrupts
waitUntil(500); // Wait until 500 ms have passed
toggleLED(); // Toggle the LED to turn it on
while (1) {
waitFor(500); // Wait for 500 ms
toggleLED(); // Toggle the LED
}
}