From 3f95f00852a85576312bf7390544f7291de25872 Mon Sep 17 00:00:00 2001 From: Alexander Heldt Date: Wed, 1 Jan 2025 12:22:09 +0100 Subject: [PATCH] Add `PORT` macro And use it in the `PIN` macro --- build/final.elf | Bin 55028 -> 55056 bytes build/final.elf.map | 40 ++--- build/gpio.S | 169 +++++++++--------- build/gpio.i | 8 +- build/gpio.o | Bin 42252 -> 42288 bytes build/main.S | 411 ++++++++++++++++++++++---------------------- build/main.i | 8 +- build/main.o | Bin 48544 -> 48580 bytes src/gpio.h | 4 +- 9 files changed, 328 insertions(+), 312 deletions(-) diff --git a/build/final.elf b/build/final.elf index e72a153aacc5ac8c29265488c6b6c9d9f949c7d1..b9785a129d8f271da41924eecd43cf9001d5c69e 100755 GIT binary patch delta 16382 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 Rn7r+p8mrG`28PohWdJ139IXHV delta 16282 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 diff --git a/build/final.elf.map b/build/final.elf.map index 97283df..5718856 100644 --- a/build/final.elf.map +++ b/build/final.elf.map @@ -52,7 +52,7 @@ Discarded input sections .debug_macro 0x00000000 0x89 build/main.o .debug_macro 0x00000000 0x4cc build/main.o .debug_macro 0x00000000 0x22 build/main.o - .debug_macro 0x00000000 0x2e build/main.o + .debug_macro 0x00000000 0x34 build/main.o .group 0x00000000 0xc build/startup.o .group 0x00000000 0xc build/startup.o .group 0x00000000 0xc build/startup.o @@ -294,7 +294,7 @@ LOAD linker stubs .debug_rnglists 0x00000053 0x19 build/timer.o -.debug_macro 0x00000000 0x3b9a +.debug_macro 0x00000000 0x3ba0 .debug_macro 0x00000000 0xb56 build/gpio.o .debug_macro 0x00000b56 0x22 build/gpio.o .debug_macro 0x00000b78 0x75 build/gpio.o @@ -309,17 +309,17 @@ LOAD linker stubs .debug_macro 0x0000108c 0x89 build/gpio.o .debug_macro 0x00001115 0x4cc build/gpio.o .debug_macro 0x000015e1 0x22 build/gpio.o - .debug_macro 0x00001603 0x2e build/gpio.o - .debug_macro 0x00001631 0xb80 build/main.o - .debug_macro 0x000021b1 0x12a build/main.o - .debug_macro 0x000022db 0x46 build/main.o - .debug_macro 0x00002321 0x2e build/main.o - .debug_macro 0x0000234f 0x22 build/main.o - .debug_macro 0x00002371 0xb02 build/startup.o - .debug_macro 0x00002e73 0x56 build/startup.o - .debug_macro 0x00002ec9 0x51 build/startup.o - .debug_macro 0x00002f1a 0xb5c build/timer.o - .debug_macro 0x00003a76 0x124 build/timer.o + .debug_macro 0x00001603 0x34 build/gpio.o + .debug_macro 0x00001637 0xb80 build/main.o + .debug_macro 0x000021b7 0x12a build/main.o + .debug_macro 0x000022e1 0x46 build/main.o + .debug_macro 0x00002327 0x2e build/main.o + .debug_macro 0x00002355 0x22 build/main.o + .debug_macro 0x00002377 0xb02 build/startup.o + .debug_macro 0x00002e79 0x56 build/startup.o + .debug_macro 0x00002ecf 0x51 build/startup.o + .debug_macro 0x00002f20 0xb5c build/timer.o + .debug_macro 0x00003a7c 0x124 build/timer.o .debug_line 0x00000000 0x4b3 .debug_line 0x00000000 0x116 build/gpio.o @@ -327,14 +327,14 @@ LOAD linker stubs .debug_line 0x000002ea 0xea build/startup.o .debug_line 0x000003d4 0xdf build/timer.o -.debug_str 0x00000000 0x5ea4 - .debug_str 0x00000000 0x535f build/gpio.o - 0x5507 (size before relaxing) - .debug_str 0x0000535f 0xab1 build/main.o - 0x5f68 (size before relaxing) - .debug_str 0x00005e10 0x88 build/startup.o +.debug_str 0x00000000 0x5eba + .debug_str 0x00000000 0x5375 build/gpio.o + 0x551d (size before relaxing) + .debug_str 0x00005375 0xab1 build/main.o + 0x5f7e (size before relaxing) + .debug_str 0x00005e26 0x88 build/startup.o 0x3cdc (size before relaxing) - .debug_str 0x00005e98 0xc build/timer.o + .debug_str 0x00005eae 0xc build/timer.o 0x5b16 (size before relaxing) .comment 0x00000000 0x45 diff --git a/build/gpio.S b/build/gpio.S index 0b828f1..499cfd0 100644 --- a/build/gpio.S +++ b/build/gpio.S @@ -188,10 +188,10 @@ gpio_write: .byte 0x4 .4byte .Ldebug_abbrev0 .uleb128 0x8 - .4byte .LASF893 - .byte 0x1d .4byte .LASF894 + .byte 0x1d .4byte .LASF895 + .4byte .LASF896 .4byte .LLRL0 .4byte 0 .4byte .Ldebug_line0 @@ -199,17 +199,17 @@ gpio_write: .uleb128 0x1 .byte 0x1 .byte 0x6 - .4byte .LASF862 + .4byte .LASF863 .uleb128 0x1 .byte 0x1 .byte 0x8 - .4byte .LASF863 + .4byte .LASF864 .uleb128 0x1 .byte 0x2 .byte 0x5 - .4byte .LASF864 + .4byte .LASF865 .uleb128 0x3 - .4byte .LASF867 + .4byte .LASF868 .byte 0x2 .byte 0x39 .byte 0x1c @@ -217,13 +217,13 @@ gpio_write: .uleb128 0x1 .byte 0x2 .byte 0x7 - .4byte .LASF865 + .4byte .LASF866 .uleb128 0x1 .byte 0x4 .byte 0x5 - .4byte .LASF866 + .4byte .LASF867 .uleb128 0x3 - .4byte .LASF868 + .4byte .LASF869 .byte 0x2 .byte 0x4f .byte 0x1b @@ -231,21 +231,21 @@ gpio_write: .uleb128 0x1 .byte 0x4 .byte 0x7 - .4byte .LASF869 - .uleb128 0x1 - .byte 0x8 - .byte 0x5 .4byte .LASF870 .uleb128 0x1 .byte 0x8 - .byte 0x7 + .byte 0x5 .4byte .LASF871 + .uleb128 0x1 + .byte 0x8 + .byte 0x7 + .4byte .LASF872 .uleb128 0x9 .byte 0x4 .byte 0x5 .ascii "int\000" .uleb128 0x3 - .4byte .LASF872 + .4byte .LASF873 .byte 0x2 .byte 0xe8 .byte 0x16 @@ -253,15 +253,15 @@ gpio_write: .uleb128 0x1 .byte 0x4 .byte 0x7 - .4byte .LASF873 - .uleb128 0x3 .4byte .LASF874 + .uleb128 0x3 + .4byte .LASF875 .byte 0x3 .byte 0x24 .byte 0x14 .4byte 0x3f .uleb128 0x3 - .4byte .LASF875 + .4byte .LASF876 .byte 0x3 .byte 0x30 .byte 0x14 @@ -269,35 +269,35 @@ gpio_write: .uleb128 0xa .4byte 0xa0 .uleb128 0x3 - .4byte .LASF876 + .4byte .LASF877 .byte 0x3 .byte 0x52 .byte 0x15 .4byte 0x81 .uleb128 0xb - .4byte .LASF892 + .4byte .LASF893 .byte 0x28 .byte 0x4 .byte 0x7 .byte 0x8 .4byte 0x139 .uleb128 0x2 - .4byte .LASF877 + .4byte .LASF878 .byte 0x8 .4byte 0xac .byte 0 .uleb128 0x2 - .4byte .LASF878 + .4byte .LASF879 .byte 0x9 .4byte 0xac .byte 0x4 .uleb128 0x2 - .4byte .LASF879 + .4byte .LASF880 .byte 0xa .4byte 0xac .byte 0x8 .uleb128 0x2 - .4byte .LASF880 + .4byte .LASF881 .byte 0xb .4byte 0xac .byte 0xc @@ -312,22 +312,22 @@ gpio_write: .4byte 0xac .byte 0x14 .uleb128 0x2 - .4byte .LASF881 + .4byte .LASF882 .byte 0xe .4byte 0xac .byte 0x18 .uleb128 0x2 - .4byte .LASF882 + .4byte .LASF883 .byte 0xf .4byte 0xac .byte 0x1c .uleb128 0x2 - .4byte .LASF883 + .4byte .LASF884 .byte 0x10 .4byte 0xac .byte 0x20 .uleb128 0x2 - .4byte .LASF884 + .4byte .LASF885 .byte 0x11 .4byte 0xac .byte 0x24 @@ -337,30 +337,30 @@ gpio_write: .byte 0x1 .4byte 0x31 .byte 0x4 - .byte 0x1f + .byte 0x21 .byte 0xe .4byte 0x160 .uleb128 0x4 - .4byte .LASF885 + .4byte .LASF886 .byte 0 .uleb128 0x4 - .4byte .LASF886 + .4byte .LASF887 .byte 0x1 .uleb128 0x4 - .4byte .LASF887 + .4byte .LASF888 .byte 0x2 .uleb128 0x4 - .4byte .LASF888 + .4byte .LASF889 .byte 0x3 .byte 0 .uleb128 0x3 - .4byte .LASF889 + .4byte .LASF890 .byte 0x4 - .byte 0x24 + .byte 0x26 .byte 0x3 .4byte 0x139 .uleb128 0xd - .4byte .LASF896 + .4byte .LASF897 .byte 0x1 .byte 0xd .byte 0x6 @@ -386,7 +386,7 @@ gpio_write: .byte 0x91 .sleb128 -19 .uleb128 0x7 - .4byte .LASF892 + .4byte .LASF893 .byte 0xe .4byte 0x1b3 .uleb128 0x2 @@ -396,12 +396,12 @@ gpio_write: .uleb128 0x1 .byte 0x1 .byte 0x2 - .4byte .LASF890 + .4byte .LASF891 .uleb128 0xe .byte 0x4 .4byte 0xbd .uleb128 0xf - .4byte .LASF897 + .4byte .LASF898 .byte 0x1 .byte 0x6 .byte 0x6 @@ -418,7 +418,7 @@ gpio_write: .byte 0x91 .sleb128 -18 .uleb128 0x10 - .4byte .LASF891 + .4byte .LASF892 .byte 0x1 .byte 0x6 .byte 0x2c @@ -427,7 +427,7 @@ gpio_write: .byte 0x91 .sleb128 -19 .uleb128 0x7 - .4byte .LASF892 + .4byte .LASF893 .byte 0x7 .4byte 0x1b3 .uleb128 0x2 @@ -3525,7 +3525,7 @@ gpio_write: .uleb128 0x32 .4byte .LASF854 .byte 0 - .section .debug_macro,"G",%progbits,wm4.gpio.h.2.ca8518d3facb6a329deaeb59004fd0a1,comdat + .section .debug_macro,"G",%progbits,wm4.gpio.h.2.3af2911851c1c29c51024d0f06788d31,comdat .Ldebug_macro15: .2byte 0x5 .byte 0 @@ -3550,6 +3550,9 @@ gpio_write: .byte 0x5 .uleb128 0x1d .4byte .LASF861 + .byte 0x5 + .uleb128 0x1f + .4byte .LASF862 .byte 0 .section .debug_line,"",%progbits .Ldebug_line0: @@ -3594,7 +3597,7 @@ gpio_write: .ascii "__PTRDIFF_MAX__ 0x7fffffff\000" .LASF541: .ascii "_LONG_DOUBLE long double\000" -.LASF892: +.LASF893: .ascii "gpio\000" .LASF591: .ascii "INT_LEAST8_MIN (-__INT_LEAST8_MAX__ - 1)\000" @@ -3602,7 +3605,7 @@ gpio_write: .ascii "_UINT32_T_DECLARED \000" .LASF90: .ascii "__INTMAX_MAX__ 0x7fffffffffffffffLL\000" -.LASF887: +.LASF888: .ascii "GPIO_MODE_AF\000" .LASF335: .ascii "__TQ_IBIT__ 0\000" @@ -3716,7 +3719,7 @@ gpio_write: .ascii "__need_wchar_t\000" .LASF199: .ascii "__FLT32_MIN_EXP__ (-125)\000" -.LASF893: +.LASF894: .ascii "GNU C2X 12.3.1 20230626 -mcpu=cortex-m4 -mthumb -mf" .ascii "loat-abi=hard -mfpu=fpv4-sp-d16 -march=armv7e-m+fp " .ascii "-g3 -ggdb -O0 -std=c2x -ffunction-sections -fdata-s" @@ -3837,7 +3840,7 @@ gpio_write: .ascii "PRId64 __PRI64(d)\000" .LASF302: .ascii "__UACCUM_IBIT__ 16\000" -.LASF866: +.LASF867: .ascii "long int\000" .LASF818: .ascii "PRIXFAST64 __PRI64FAST(X)\000" @@ -3933,7 +3936,7 @@ gpio_write: .ascii "PRIoLEAST16 __PRI16LEAST(o)\000" .LASF458: .ascii "__NEWLIB__ 4\000" -.LASF885: +.LASF886: .ascii "GPIO_MODE_INPUT\000" .LASF720: .ascii "SCNi16 __SCN16(i)\000" @@ -3943,7 +3946,7 @@ gpio_write: .ascii "__FLT_DECIMAL_DIG__ 9\000" .LASF562: .ascii "_UINT8_T_DECLARED \000" -.LASF862: +.LASF863: .ascii "signed char\000" .LASF805: .ascii "PRIuLEAST64 __PRI64LEAST(u)\000" @@ -3955,7 +3958,7 @@ gpio_write: .ascii "__ARM_FEATURE_FMA 1\000" .LASF364: .ascii "__GNUC_STDC_INLINE__ 1\000" -.LASF889: +.LASF890: .ascii "GPIO_MODE\000" .LASF256: .ascii "__FRACT_FBIT__ 15\000" @@ -3979,7 +3982,7 @@ gpio_write: .ascii "__FLT64_MAX_10_EXP__ 308\000" .LASF65: .ascii "__UINT_FAST32_TYPE__ unsigned int\000" -.LASF863: +.LASF864: .ascii "unsigned char\000" .LASF3: .ascii "__STDC_UTF_32__ 1\000" @@ -4027,13 +4030,13 @@ gpio_write: .ascii "__int_fast64_t_defined 1\000" .LASF837: .ascii "__PRIPTR(x) __STRINGIFY(x)\000" -.LASF874: +.LASF875: .ascii "uint16_t\000" .LASF417: .ascii "__thumb2__ 1\000" .LASF321: .ascii "__ULLACCUM_FBIT__ 32\000" -.LASF890: +.LASF891: .ascii "_Bool\000" .LASF366: .ascii "__STRICT_ANSI__ 1\000" @@ -4051,7 +4054,9 @@ gpio_write: .ascii "__PRAGMA_REDEFINE_EXTNAME 1\000" .LASF36: .ascii "__WCHAR_TYPE__ unsigned int\000" -.LASF886: +.LASF859: + .ascii "PORT(port) (((port) - 'A') << 8)\000" +.LASF887: .ascii "GPIO_MODE_OUTPUT\000" .LASF357: .ascii "__USA_IBIT__ 16\000" @@ -4089,7 +4094,7 @@ gpio_write: .ascii "__SCN64(x) __INT64 __STRINGIFY(x)\000" .LASF646: .ascii "_GCC_WRAP_STDINT_H \000" -.LASF867: +.LASF868: .ascii "__uint16_t\000" .LASF224: .ascii "__FLT64_EPSILON__ 2.2204460492503131e-16F64\000" @@ -4145,8 +4150,6 @@ gpio_write: .ascii "__FLT_EPSILON__ 1.1920928955078125e-7F\000" .LASF376: .ascii "__GCC_ATOMIC_SHORT_LOCK_FREE 2\000" -.LASF859: - .ascii "PIN(port,num) ((((port) - 'A') << 8) | num)\000" .LASF806: .ascii "PRIxLEAST64 __PRI64LEAST(x)\000" .LASF419: @@ -4301,7 +4304,7 @@ gpio_write: .ascii "___int8_t_defined 1\000" .LASF248: .ascii "__SFRACT_MIN__ (-0.5HR-0.5HR)\000" -.LASF869: +.LASF870: .ascii "long unsigned int\000" .LASF349: .ascii "__SA_IBIT__ 16\000" @@ -4317,7 +4320,7 @@ gpio_write: .ascii "__ARM_FP16_FORMAT_IEEE\000" .LASF48: .ascii "__UINT16_TYPE__ short unsigned int\000" -.LASF896: +.LASF897: .ascii "gpio_write\000" .LASF569: .ascii "__int32_t_defined 1\000" @@ -4361,7 +4364,7 @@ gpio_write: .ascii "SCNx8 __SCN8(x)\000" .LASF208: .ascii "__FLT32_DENORM_MIN__ 1.4012984643248171e-45F32\000" -.LASF897: +.LASF898: .ascii "gpio_set_mode\000" .LASF125: .ascii "__UINT64_C(c) c ## ULL\000" @@ -4381,7 +4384,7 @@ gpio_write: .ascii "__GCC_ATOMIC_CHAR16_T_LOCK_FREE 2\000" .LASF789: .ascii "__PRI64FAST(x) __FAST64 __STRINGIFY(x)\000" -.LASF876: +.LASF877: .ascii "uintptr_t\000" .LASF168: .ascii "__DBL_MAX_EXP__ 1024\000" @@ -4429,7 +4432,7 @@ gpio_write: .ascii "PRIX32 __PRI32(X)\000" .LASF773: .ascii "SCNxLEAST32 __SCN32LEAST(x)\000" -.LASF879: +.LASF880: .ascii "OSPEEDR\000" .LASF711: .ascii "__SCN16LEAST(x) __LEAST16 __STRINGIFY(x)\000" @@ -4459,7 +4462,7 @@ gpio_write: .ascii "__ULACCUM_MIN__ 0.0ULK\000" .LASF461: .ascii "_ATEXIT_DYNAMIC_ALLOC 1\000" -.LASF868: +.LASF869: .ascii "__uint32_t\000" .LASF188: .ascii "__LDBL_MAX__ 1.7976931348623157e+308L\000" @@ -4469,7 +4472,7 @@ gpio_write: .ascii "__FLT_RADIX__ 2\000" .LASF454: .ascii "_INTTYPES_H \000" -.LASF870: +.LASF871: .ascii "long long int\000" .LASF401: .ascii "__ARM_FEATURE_CMSE\000" @@ -4574,7 +4577,7 @@ gpio_write: .ascii "\000" .LASF582: .ascii "__int_fast16_t_defined 1\000" -.LASF877: +.LASF878: .ascii "MODER\000" .LASF482: .ascii "__FLOAT_TYPE float\000" @@ -4585,9 +4588,9 @@ gpio_write: .ascii "L)\000" .LASF607: .ascii "INT64_MAX (__INT64_MAX__)\000" -.LASF873: +.LASF874: .ascii "unsigned int\000" -.LASF872: +.LASF873: .ascii "__uintptr_t\000" .LASF459: .ascii "__NEWLIB_MINOR__ 3\000" @@ -4619,7 +4622,7 @@ gpio_write: .ascii "__CHAR_BIT__ 8\000" .LASF143: .ascii "__FLT_EVAL_METHOD__ 0\000" -.LASF864: +.LASF865: .ascii "short int\000" .LASF685: .ascii "PRIdLEAST8 __PRI8LEAST(d)\000" @@ -4757,7 +4760,7 @@ gpio_write: .ascii "SCNuFAST16 __SCN16FAST(u)\000" .LASF801: .ascii "SCNx64 __SCN64(x)\000" -.LASF861: +.LASF862: .ascii "PINPORT(pin) (pin >> 8)\000" .LASF198: .ascii "__FLT32_DIG__ 6\000" @@ -4805,7 +4808,7 @@ gpio_write: .ascii "__ORDER_LITTLE_ENDIAN__ 1234\000" .LASF155: .ascii "__FLT_NORM_MAX__ 3.4028234663852886e+38F\000" -.LASF871: +.LASF872: .ascii "long long unsigned int\000" .LASF611: .ascii "UINT_LEAST64_MAX (__UINT_LEAST64_MAX__)\000" @@ -4883,11 +4886,11 @@ gpio_write: .ascii "SCNdFAST8 __SCN8FAST(d)\000" .LASF576: .ascii "_UINTPTR_T_DECLARED \000" -.LASF884: +.LASF885: .ascii "AFRH\000" .LASF314: .ascii "__ULACCUM_MAX__ 0XFFFFFFFFFFFFFFFFP-32ULK\000" -.LASF883: +.LASF884: .ascii "AFRL\000" .LASF273: .ascii "__ULFRACT_MIN__ 0.0ULR\000" @@ -4901,7 +4904,7 @@ gpio_write: .ascii "__INT32_TYPE__ long int\000" .LASF118: .ascii "__UINT_LEAST8_MAX__ 0xff\000" -.LASF882: +.LASF883: .ascii "LCKR\000" .LASF520: .ascii "__int20__ +2\000" @@ -4915,6 +4918,8 @@ gpio_write: .ascii "__SCN32(x) __INT32 __STRINGIFY(x)\000" .LASF743: .ascii "SCNoFAST16 __SCN16FAST(o)\000" +.LASF860: + .ascii "PIN(port,num) (PORT(port) | num)\000" .LASF345: .ascii "__UTQ_IBIT__ 0\000" .LASF348: @@ -4947,7 +4952,7 @@ gpio_write: .ascii "__QQ_IBIT__ 0\000" .LASF763: .ascii "PRIdLEAST32 __PRI32LEAST(d)\000" -.LASF878: +.LASF879: .ascii "OTYPER\000" .LASF811: .ascii "SCNuLEAST64 __SCN64LEAST(u)\000" @@ -4967,7 +4972,7 @@ gpio_write: .ascii "__GNUC_MINOR__ 3\000" .LASF57: .ascii "__UINT_LEAST32_TYPE__ long unsigned int\000" -.LASF894: +.LASF895: .ascii "src/gpio.c\000" .LASF405: .ascii "__ARM_FEATURE_NUMERIC_MAXMIN\000" @@ -5041,7 +5046,7 @@ gpio_write: .ascii "__ACCUM_IBIT__ 16\000" .LASF509: .ascii "unsigned\000" -.LASF880: +.LASF881: .ascii "PUPDR\000" .LASF835: .ascii "SCNuMAX __SCNMAX(u)\000" @@ -5051,7 +5056,7 @@ gpio_write: .ascii "_ATTRIBUTE(attrs) __attribute__ (attrs)\000" .LASF359: .ascii "__UDA_IBIT__ 32\000" -.LASF891: +.LASF892: .ascii "mode\000" .LASF586: .ascii "INTPTR_MAX (__INTPTR_MAX__)\000" @@ -5065,7 +5070,7 @@ gpio_write: .ascii "__UHQ_FBIT__ 16\000" .LASF443: .ascii "__ARM_FEATURE_COPROC\000" -.LASF888: +.LASF889: .ascii "GPIO_MODE_ANALOG\000" .LASF177: .ascii "__DBL_HAS_INFINITY__ 1\000" @@ -5103,7 +5108,7 @@ gpio_write: .ascii "__FAST8 \000" .LASF496: .ascii "__XSI_VISIBLE 0\000" -.LASF881: +.LASF882: .ascii "BSRR\000" .LASF794: .ascii "PRIu64 __PRI64(u)\000" @@ -5191,7 +5196,7 @@ gpio_write: .ascii "PRIx32 __PRI32(x)\000" .LASF278: .ascii "__LLFRACT_MIN__ (-0.5LLR-0.5LLR)\000" -.LASF875: +.LASF876: .ascii "uint32_t\000" .LASF689: .ascii "PRIxLEAST8 __PRI8LEAST(x)\000" @@ -5239,13 +5244,13 @@ gpio_write: .ascii "__INT_LEAST16_TYPE__ short int\000" .LASF326: .ascii "__QQ_FBIT__ 7\000" -.LASF860: +.LASF861: .ascii "PINNUM(pin) (pin & 0b1111)\000" .LASF768: .ascii "PRIXLEAST32 __PRI32LEAST(X)\000" .LASF171: .ascii "__DBL_MAX__ ((double)1.7976931348623157e+308L)\000" -.LASF865: +.LASF866: .ascii "short unsigned int\000" .LASF276: .ascii "__LLFRACT_FBIT__ 63\000" @@ -5293,7 +5298,7 @@ gpio_write: .ascii "__SCN64LEAST(x) __LEAST64 __STRINGIFY(x)\000" .LASF280: .ascii "__LLFRACT_EPSILON__ 0x1P-63LLR\000" -.LASF895: +.LASF896: .ascii "/home/alex/code/own/stm32-falling-sand\000" .LASF249: .ascii "__SFRACT_MAX__ 0X7FP-7HR\000" diff --git a/build/gpio.i b/build/gpio.i index 348afd2..bd007eb 100644 --- a/build/gpio.i +++ b/build/gpio.i @@ -2004,7 +2004,9 @@ struct gpio { #define GPIO(port) ((struct gpio*)(uintptr_t)(GPIO_BASE_ADDR + (GPIO_PORT_OFFSET * port))) -#define PIN(port,num) ((((port) - 'A') << 8) | num) +#define PORT(port) (((port) - 'A') << 8) + +#define PIN(port,num) (PORT(port) | num) #define PINNUM(pin) (pin & 0b1111) @@ -2019,9 +2021,9 @@ typedef enum { void gpio_set_mode(uint16_t pin, GPIO_MODE mode); void gpio_write(uint16_t pin, -# 39 "src/gpio.h" 3 4 +# 41 "src/gpio.h" 3 4 _Bool -# 39 "src/gpio.h" +# 41 "src/gpio.h" val); # 5 "src/gpio.c" 2 diff --git a/build/gpio.o b/build/gpio.o index 3483ab30e4fcccecb037b8edf334d7dd19e928c3..59a40c38ef5bd5c7518dfee6594ea1f883da4751 100644 GIT binary patch delta 6063 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 YU82s|GkGbPJiA1lwPz*+12f1R0IS^HL;wH) delta 6064 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 8)\000" .LASF198: .ascii "__FLT32_DIG__ 6\000" @@ -5694,13 +5697,13 @@ main: .ascii "__GCC_HAVE_SYNC_COMPARE_AND_SWAP_4 1\000" .LASF733: .ascii "SCNuLEAST16 __SCN16LEAST(u)\000" -.LASF953: +.LASF954: .ascii "APB1RSTR\000" .LASF298: .ascii "__ACCUM_MIN__ (-0X1P15K-0X1P15K)\000" .LASF393: .ascii "__ARM_FEATURE_CRYPTO\000" -.LASF959: +.LASF960: .ascii "APB1ENR\000" .LASF741: .ascii "SCNdFAST16 __SCN16FAST(d)\000" @@ -5730,7 +5733,7 @@ main: .ascii ")\000" .LASF155: .ascii "__FLT_NORM_MAX__ 3.4028234663852886e+38F\000" -.LASF944: +.LASF945: .ascii "long long unsigned int\000" .LASF611: .ascii "UINT_LEAST64_MAX (__UINT_LEAST64_MAX__)\000" @@ -5777,11 +5780,11 @@ main: .ascii " RCC_PLLCFGR_PLLN_BIT)\000" .LASF56: .ascii "__UINT_LEAST16_TYPE__ short unsigned int\000" -.LASF925: +.LASF926: .ascii "PWR_SCALE3 (0b11)\000" .LASF573: .ascii "_INTMAX_T_DECLARED \000" -.LASF987: +.LASF988: .ascii "CCER\000" .LASF40: .ascii "__CHAR16_TYPE__ short unsigned int\000" @@ -5839,18 +5842,20 @@ main: .ascii "__int20__ +2\000" .LASF654: .ascii "_WCHAR_T_ \000" -.LASF983: +.LASF984: .ascii "SMCR\000" .LASF828: .ascii "PRIoMAX __PRIMAX(o)\000" .LASF747: .ascii "__SCN32(x) __INT32 __STRINGIFY(x)\000" -.LASF920: +.LASF921: .ascii "FLASH_ACR_LATENCY_MASK (0b1111)\000" -.LASF973: +.LASF974: .ascii "GPIO_MODE_INPUT\000" .LASF743: .ascii "SCNoFAST16 __SCN16FAST(o)\000" +.LASF909: + .ascii "PIN(port,num) (PORT(port) | num)\000" .LASF345: .ascii "__UTQ_IBIT__ 0\000" .LASF348: @@ -5913,7 +5918,7 @@ main: .ascii "__ARM_ARCH_7EM__ 1\000" .LASF428: .ascii "__ARM_FEATURE_FP16_SCALAR_ARITHMETIC\000" -.LASF956: +.LASF957: .ascii "AHB1ENR\000" .LASF295: .ascii "__USACCUM_EPSILON__ 0x1P-8UHK\000" @@ -5953,7 +5958,7 @@ main: .ascii "__DBL_DIG__ 15\000" .LASF275: .ascii "__ULFRACT_EPSILON__ 0x1P-32ULR\000" -.LASF951: +.LASF952: .ascii "AHB2RSTR\000" .LASF671: .ascii "__SCN8(x) __INT8 __STRINGIFY(x)\000" @@ -5977,13 +5982,13 @@ main: .ascii "__LDBL_MIN__ 2.2250738585072014e-308L\000" .LASF445: .ascii "__ARM_FEATURE_CDE\000" -.LASF979: +.LASF980: .ascii "KEYR\000" .LASF509: .ascii "unsigned\000" .LASF381: .ascii "__GCC_DESTRUCTIVE_SIZE 64\000" -.LASF937: +.LASF938: .ascii "short int\000" .LASF835: .ascii "SCNuMAX __SCNMAX(u)\000" @@ -6007,11 +6012,11 @@ main: .ascii "_ATTRIBUTE(attrs) __attribute__ (attrs)\000" .LASF443: .ascii "__ARM_FEATURE_COPROC\000" -.LASF976: +.LASF977: .ascii "GPIO_MODE_ANALOG\000" .LASF177: .ascii "__DBL_HAS_INFINITY__ 1\000" -.LASF931: +.LASF932: .ascii "TIM4 ((struct timer *) TIM4_BASE_ADDR)\000" .LASF95: .ascii "__SIG_ATOMIC_MAX__ 0x7fffffff\000" @@ -6019,7 +6024,7 @@ main: .ascii "UINT64_MAX (__UINT64_MAX__)\000" .LASF471: .ascii "_RETARGETABLE_LOCKING 1\000" -.LASF914: +.LASF915: .ascii "FLASH_ACR_DCEN_BIT 10\000" .LASF453: .ascii "__USES_INITFINI__ 1\000" @@ -6091,11 +6096,11 @@ main: .ascii "__LDBL_DECIMAL_DIG__ 17\000" .LASF701: .ascii "PRIXFAST8 __PRI8FAST(X)\000" -.LASF1000: +.LASF1001: .ascii "led_on\000" .LASF308: .ascii "__LACCUM_MIN__ (-0X1P31LK-0X1P31LK)\000" -.LASF1002: +.LASF1003: .ascii "src/main.c\000" .LASF126: .ascii "__INT_FAST8_MAX__ 0x7fffffff\000" @@ -6133,13 +6138,13 @@ main: .ascii "__ULLFRACT_MIN__ 0.0ULLR\000" .LASF651: .ascii "_T_WCHAR_ \000" -.LASF992: +.LASF993: .ascii "BDTR\000" .LASF382: .ascii "__GCC_CONSTRUCTIVE_SIZE 64\000" .LASF664: .ascii "_BSD_WCHAR_T_\000" -.LASF971: +.LASF972: .ascii "PLLI2SCFGR\000" .LASF277: .ascii "__LLFRACT_IBIT__ 0\000" @@ -6147,9 +6152,9 @@ main: .ascii "UINT16_C(x) __UINT16_C(x)\000" .LASF756: .ascii "PRIx32 __PRI32(x)\000" -.LASF998: +.LASF999: .ascii "tim4_init\000" -.LASF947: +.LASF948: .ascii "uint32_t\000" .LASF878: .ascii "RCC_PLLCFGR_PLLN_BIT 6\000" @@ -6157,13 +6162,13 @@ main: .ascii "PRIxLEAST8 __PRI8LEAST(x)\000" .LASF506: .ascii "_SYS__INTSUP_H \000" -.LASF981: +.LASF982: .ascii "OPTCR\000" .LASF290: .ascii "__SACCUM_EPSILON__ 0x1P-7HK\000" .LASF415: .ascii "__GCC_ASM_FLAG_OUTPUTS__ 1\000" -.LASF912: +.LASF913: .ascii "FLASH_BASE_ADDR (0x40023C00U)\000" .LASF745: .ascii "SCNxFAST16 __SCN16FAST(x)\000" @@ -6209,13 +6214,13 @@ main: .ascii "__PRI16(x) __INT16 __STRINGIFY(x)\000" .LASF159: .ascii "__FLT_HAS_DENORM__ 1\000" -.LASF909: +.LASF910: .ascii "PINNUM(pin) (pin & 0b1111)\000" .LASF768: .ascii "PRIXLEAST32 __PRI32LEAST(X)\000" .LASF171: .ascii "__DBL_MAX__ ((double)1.7976931348623157e+308L)\000" -.LASF938: +.LASF939: .ascii "short unsigned int\000" .LASF276: .ascii "__LLFRACT_FBIT__ 63\000" @@ -6242,7 +6247,7 @@ main: .ascii "__SIZE_MAX__ 0xffffffffU\000" .LASF818: .ascii "PRIXFAST64 __PRI64FAST(X)\000" -.LASF911: +.LASF912: .ascii "FLASH_H_ \000" .LASF412: .ascii "__ARM_ARCH\000" @@ -6260,7 +6265,7 @@ main: .ascii "SCNuFAST32 __SCN32FAST(u)\000" .LASF522: .ascii "long +4\000" -.LASF950: +.LASF951: .ascii "AHB1RSTR\000" .LASF723: .ascii "SCNx16 __SCN16(x)\000" @@ -6270,7 +6275,7 @@ main: .ascii "__SCN64LEAST(x) __LEAST64 __STRINGIFY(x)\000" .LASF340: .ascii "__USQ_FBIT__ 32\000" -.LASF1003: +.LASF1004: .ascii "/home/alex/code/own/stm32-falling-sand\000" .LASF796: .ascii "PRIX64 __PRI64(X)\000" @@ -6334,7 +6339,7 @@ main: .ascii "__INT_LEAST64_TYPE__ long long int\000" .LASF103: .ascii "__UINT16_MAX__ 0xffff\000" -.LASF923: +.LASF924: .ascii "PWR_BASE_ADDR (0x40007000U)\000" .LASF446: .ascii "__ARM_FEATURE_CDE_COPROC\000" diff --git a/build/main.i b/build/main.i index 8d199f6..f00220b 100644 --- a/build/main.i +++ b/build/main.i @@ -2128,7 +2128,9 @@ struct gpio { #define GPIO(port) ((struct gpio*)(uintptr_t)(GPIO_BASE_ADDR + (GPIO_PORT_OFFSET * port))) -#define PIN(port,num) ((((port) - 'A') << 8) | num) +#define PORT(port) (((port) - 'A') << 8) + +#define PIN(port,num) (PORT(port) | num) #define PINNUM(pin) (pin & 0b1111) @@ -2143,9 +2145,9 @@ typedef enum { void gpio_set_mode(uint16_t pin, GPIO_MODE mode); void gpio_write(uint16_t pin, -# 39 "src/gpio.h" 3 4 +# 41 "src/gpio.h" 3 4 _Bool -# 39 "src/gpio.h" +# 41 "src/gpio.h" val); # 6 "src/main.c" 2 # 1 "src/flash.h" 1 diff --git a/build/main.o b/build/main.o index 3cf9db8751e687e08f043681ca243941e9f72c99..e3c37326480d10889f48acf64526565426730ab7 100644 GIT binary patch delta 7229 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