From ea5f1d9842c0f34d12dc829eb79359795c3a7397 Mon Sep 17 00:00:00 2001 From: Paul Molloy Date: Sat, 22 Jul 2017 23:58:16 -0500 Subject: [PATCH] Creation of pinport abstraction layer to make firmware more generic to the underlying hardware/mcu. Created avr_gpio.h to define AVR pin registers in a struct fashion similar to what's common with ARM code. Doing that makes things much easier to abstract in pin macro 'functions'. Added define to Makefiles that flags pinport_al.h which board is targetted for build. Tested and able to turn on/off and pull-up LED on all 3 builds. --- firmware/Make_avr | 2 +- firmware/Make_stm | 8 +- firmware/avr_kazzo.elf | Bin 12248 -> 0 bytes firmware/avr_kazzo.hex | 96 ------- firmware/build_avr/avr_kazzo.elf | Bin 12248 -> 12256 bytes firmware/build_avr/avr_kazzo.hex | 12 +- firmware/build_stm/inlretro_stm.bin | Bin 1332 -> 1368 bytes firmware/build_stm/inlretro_stm.elf | Bin 78492 -> 78532 bytes firmware/build_stm/inlretro_stm.hex | 60 ++-- firmware/build_stm/inlretro_stm.map | 128 ++++----- firmware/include_stm/stm32f070x6.h | 2 +- firmware/source/avr_gpio.h | 32 +++ firmware/source/main.c | 8 + firmware/source/pinport_al.h | 421 ++++++++++++++++++++++++++++ firmware/source/usb.c | 1 + firmware/source/usb.h | 2 + host/source/{ => old}/pindef.h | 0 17 files changed, 571 insertions(+), 201 deletions(-) delete mode 100644 firmware/avr_kazzo.elf delete mode 100644 firmware/avr_kazzo.hex create mode 100644 firmware/source/avr_gpio.h create mode 100644 firmware/source/pinport_al.h rename host/source/{ => old}/pindef.h (100%) diff --git a/firmware/Make_avr b/firmware/Make_avr index 8b386d1..e3e1d2a 100644 --- a/firmware/Make_avr +++ b/firmware/Make_avr @@ -14,7 +14,7 @@ BUILD = build_avr #SOURCES=$(wildcard source/**/*.c source/*.c) SOURCES=$(wildcard source/*.c) -CFLAGS = -Iusbdrv_Vusb -Isource -DDEBUG_LEVEL=0 -DAVR_CORE +CFLAGS = -Iusbdrv_Vusb -Isource -DDEBUG_LEVEL=0 -DAVR_CORE -DAVR_KAZZO USBOBJ = usbdrv_Vusb/usbdrv.o usbdrv_Vusb/usbdrvasm.o usbdrv_Vusb/oddebug.o OBJECTS=$(patsubst %.c,%.o,$(SOURCES)) $(USBOBJ) diff --git a/firmware/Make_stm b/firmware/Make_stm index b5c3338..235ad5e 100644 --- a/firmware/Make_stm +++ b/firmware/Make_stm @@ -49,11 +49,11 @@ LDSCRIPTS=-L. -L$(BASE)/include_stm -T nokeep.ld LFLAGS=$(USE_NANO) $(USE_NOHOST) $(LDSCRIPTS) $(GC) $(MAP) DEFINE+=\ - -DSTM32F070xB \ + -DSTM32F070x6 \ -DF_CPU=16000000 \ - -DSTM_CORE -#128KB version of all packages (LQFP-48,64,100) - + -DSTM_CORE \ + -DSTM_ADAPTER #stm32 to kazzo adapter board +# -DSTM_INL6 #inlretro 6connector # -DSTM32F072x8 \ #64KB version of all packages (LQFP-48,64,100) # -DSTM32F070xB \ #128KB version of both packages (LQFP-48,64) # -DSTM32F070x6 \ #32KB version of both packages (TSSOP-20,LQFP-48) diff --git a/firmware/avr_kazzo.elf b/firmware/avr_kazzo.elf deleted file mode 100644 index dffad8db9215922ee28658058966ed86d31d078d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12248 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 diff --git a/firmware/build_avr/avr_kazzo.hex b/firmware/build_avr/avr_kazzo.hex index a0b2e2f..ca083ee 100644 --- a/firmware/build_avr/avr_kazzo.hex +++ b/firmware/build_avr/avr_kazzo.hex @@ -13,10 +13,10 @@ :1000C00049006E00660069006E00690074006500FA :1000D0004E00650073004C006900760065007300F7 :1000E0002E0063006F006D000403090411241FBE7D -:1000F000CFEFD4E0DEBFCDBF11E0A0E0B1E0E8ED8E +:1000F000CFEFD4E0DEBFCDBF11E0A0E0B1E0ECED8A :10010000F5E002C005900D92A230B107D9F721E0C9 :10011000A2E0B1E001C01D92AD32B207E1F70E944A -:10012000CC020C94EA020C94000080E0089580E078 +:10012000CC020C94EC020C94000080E0089580E076 :100130000895CF93DF9360911301635067FD91C0E1 :1001400080911001CCE0D0E0C81BD109C95EDE4F20 :1001500080910F018D3209F0CFC0683009F07FC067 @@ -89,8 +89,8 @@ :1005800000611AB11B7E402F4B7E54E05A95F1F763 :100590000BB91AB94BB97FCF9EE088E10FB6F8943A :1005A000A895809360000FBE909360000E94980110 -:1005B000549A80E0815031F454987894A8950E9420 -:1005C0009900FCCFA895EFE9FFE03197F1F700C063 -:0805D0000000F0CFF894FFCF0A -:0205D800FF5AC8 +:1005B000549A80E0815041F4549878945198599A13 +:1005C000A8950E949900FCCFA895EFE9FFE031972C +:0C05D000F1F700C00000EECFF894FFCF60 +:0205DC00FF5AC4 :00000001FF diff --git a/firmware/build_stm/inlretro_stm.bin b/firmware/build_stm/inlretro_stm.bin index f3eb682fb2d41e51c7e195bb8a96d2c924b6d9f7..a1981450e3bfd4e0f70ec5f7083de6dbf30aede2 100644 GIT binary patch delta 217 zcmdnOb%Sfd3&x0zFWs4xHnA{p2rw`xG&KJI-@pI={{=w)5gpPi1zfSCGnPa+XSNP`a5Z#KPr#D=}#slZvdDgWAP@8Q+D@7uzrPGunV? z21QAqhwYjTlD>LC%weY2(4Z#aTgIr@AnvQt@UUInL)??2p+Q01lYxyRp+WIN|49Z$ zpgs{#5ih}p2BpYMA!aV;s6-)eAy26cE(fUupq&{Umq3;#{ChsxfyIP_frG*0|NsBL JCzr4s003>@Mv?#k delta 199 zcmcb?wS{ZK3r3TTFWs4x`dAn^1Q-|;8XEuq@8AFbe+`ho0Em|Wu@*A}!w;6pLCiMn zI^IIek{Je*r!qU#D@tW^IZGusDBZ{uVqtQ=m6)`RNkPopLG@O@s85sgt@c~}j20l8 zK}pEtP`grtkdG=5bC{|&G^h&t2*A9BLQv6z~#kXiyaJ;$#y{Xi&P@e~Ez$ qsE^l+*ITOL-}3`*3<69JOfd`&0YJj3s(wgE2fnVr&WfCEuvRG#g_cqc@#Sy-uee5}%|wMRTjnm|NwCWK?Ht zYt&_D`$aw|BiiF}ot0``Ck@}H4qeHrooh>uOU0WTqW;;GJN~G4wr@6tYJtq_Y?|*2 z8qRo#rdAm;48J4Zg^*#7mm2eZ_Ii6vGYpSC#w=Q^;eD5yW*}c)EUzKQFnmWlbUCZ` zSexFc$6W1MQCBPFY}ek4q^-Zd@Th|A8q-*PI-UM$URE$+HFxGf1)iBTI-W?GiY(vj zu5OWn=3*Y|k*#EC5@RwfW8hTl(7QD#~*Pdac(qKbWVpafI=mje+@@{kiHx~OZ=O2JtL zAE>OVJZheHLYDa%H{x`fIqpUh7&4uOcq4DJQo_28w(H6b`KELS1HBG2+lOyJ3tuV1 z_oO&Z7q_JEIiYCdKR!WRv{3oGUq&d}Nk9W^hW>(!s|&x_cdP&R=T$mK7?u)*LnLS81hn6FU0r04U( z2>ep6i|->uKR+L#h($Np<2B<*gp9ZOE0WQ~7X*y(4HXDTZXd6#AkSBRoT$319PGua F=MNoUz0v>x delta 849 zcmYjPT}TvB6u#fg?7G^n%}lwui@H0jKmg za>6Kg)HxWdOSVq7;x6iDKjM%S8dI1{Wh`hVv)R=1Z1yJcX_6U|YMHTL3O^>JA#Zz| zF8g{Sd{Rbi(C}X@X!M`6LT@kViqx1n+x0{WdfQ@VCRLQU)tDK{q);!Ah4hxWk&vY) zOcK{F)3Qu0aS5iSCJbwCL~T{$nq?VkJm0BxTA_ETMOHv@p17yYZ~a|PH#1d=NvB!t z2#J$~b+Q=mR}i%CC`h{}#ufXN1_$ua?$Gf-lB9sWu?Q{L0Ou?ila)M|#Jjxcb~m&T zcNa;F<)7q>UhFLkU^in7Q>4%96Z!xS(p&94-$!qI+ZO1MRv6!3jD7A=a+Twu6`8q4 z`R!s{m8ds=ieX}gm-`UKG;jC8)I|rY+~i!~eM1d&$Yb`X533d8l#`T}4iHlJw>-HUlVr&F- zz!vBh{KP5)6ZT&@_RKnO$g$HZte--*%otCZ(6oV^pe8b3=Z{Pb8ltu}=e69Twp>2V zk5-CBihfxj(mJ4{q>i6+SrI`@1h6PT1aR_?_e$jX*3d zjfB6BU=#0+pdR)7egt8H1p%G>2Z7_223E?AD9WWzn|X5-mC|P)?;}JHpNx`Ynm;3O ubeDpq*RuVNLPZ7l)RKD00PE*T@smU?RO!3HJ8CI-o(~JNRs;5QHR>O-X}fj+ diff --git a/firmware/build_stm/inlretro_stm.hex b/firmware/build_stm/inlretro_stm.hex index fa9c049..17bc170 100644 --- a/firmware/build_stm/inlretro_stm.hex +++ b/firmware/build_stm/inlretro_stm.hex @@ -13,7 +13,7 @@ :1000B000FD000008FD000008FD000008BD0100086B :1000C00009490A4A0A4B9B1A03DD043BC858D05021 :1000D000FBDC0849084A0020521A02DD043A885025 -:1000E000FCDC00F053F9000034050008000000209B +:1000E000FCDC00F053F90000580500080000002077 :1000F000000000200000002014000020FEE7C046A1 :10010000224B10B51968224B224C1A885208520013 :10011000505A214A10801A88023292B21A8052082C @@ -50,38 +50,40 @@ :10030000DED080210B431C490B8000231370D7E7FC :10031000005C00408F0F000000000020486000409B :100320000C000020060000200A0000200800002029 -:100330008E040008100000208081FFFF8FBFFFFFA8 -:100340007C040008A0040008A40400082A0300009C -:10035000F80400081E030000040000205060004064 +:10033000B2040008100000208081FFFF8FBFFFFF84 +:10034000A0040008C4040008C80400082A03000030 +:100350001C0500081E03000004000020506000403F :100360008F8EFFFF8080FFFF02600040BFBFFFFF56 :1003700030300000065C00404C5C00402032000041 -:10038000066000400F8FFFFFFEE7000090222C4B1D -:100390001203196830B50A431A6080229202196864 +:10038000066000400F8FFFFFFEE700009022334B16 +:100390001203196870B50A431A6080229202196824 :1003A0001142FCD0012259680A435A6080225968E0 :1003B00052020A435A6080225968D2020A435A60A4 :1003C0008022196852040A431A6080229204196834 -:1003D0001142FCD080211A6B0A431A638022D8692B -:1003E00012040243DA6162B60220164B4025DA8F0E -:1003F000154C8243DA87DA8F01388243DA8700228C -:100400001248C2872280124C2580124C0835258064 -:100410008025114C6D012580104C2180C287104928 -:10042000104A11808021104A090611608022D98F5C -:10043000D2000A43DA870D4A0D4B1A80FEE7C04608 -:1004400000100240025C0040505C0040065C00402E -:100450000060004004600040066000404C5C0040CA -:1004600020320000005C004000E100E00080FFFF5F -:10047000585C0040F8B5C046F8B5C0460902120005 -:100480000101008032090400000000000000120198 -:100490000002FF000008C016DC0500020102000196 -:1004A000040309042A0349006E00660069006E0017 -:1004B0006900740065004E00650073004C0069001F -:1004C0007600650073002E0063006F006D00000071 -:1004D000000000000000000000000000000000001C -:1004E000000000000000000000000000000000000C -:1004F00000000000000000001E0349004E004C00F8 -:10050000200052006500740072006F002D00500042 -:1005100072006F0067000000000000000000000093 -:1005200000000000000000000000000000000000CB -:0405300000000000C7 +:1003D0001142FCD080201A6B02431A638022D96933 +:1003E00012040A43DA6162B602241D4A4026D18F04 +:1003F0001C4DA143D187D18F013CA143D18700215E +:10040000194CE1872980194D2E80194D08362E8010 +:100410008026184D76012E80174D2880E1871748D9 +:100420001749088080201749000608608021D08F76 +:10043000C9000143D1871449144A118080225969A7 +:1004400012030A435A61124B12491A680A401A6091 +:100450008022D968D2040A43DA60FEE70010024025 +:10046000025C0040505C0040065C004000600040C0 +:1004700004600040066000404C5C004020320000F8 +:10048000005C004000E100E00080FFFF585C00409D +:1004900000080048FFFFFFFBF8B5C046F8B5C046AE +:1004A000090212000101008032090400000000006E +:1004B000000012010002FF000008C016DC05000267 +:1004C00001020001040309042A0349006E006600CA +:1004D00069006E006900740065004E0065007300DD +:1004E0004C0069007600650073002E0063006F0009 +:1004F0006D0000000000000000000000000000008F +:1005000000000000000000000000000000000000EB +:100510000000000000000000000000001E03490071 +:100520004E004C00200052006500740072006F0005 +:100530002D00500072006F006700000000000000F6 +:1005400000000000000000000000000000000000AB +:080550000000000000000000A3 :04000005080000C12E :00000001FF diff --git a/firmware/build_stm/inlretro_stm.map b/firmware/build_stm/inlretro_stm.map index 8741337..99091e0 100644 --- a/firmware/build_stm/inlretro_stm.map +++ b/firmware/build_stm/inlretro_stm.map @@ -45,12 +45,12 @@ Discarded input sections .ARM.exidx 0x00000000 0x8 c:/program files (x86)/gnu tools arm embedded/6.2 2016q4/bin/../lib/gcc/arm-none-eabi/6.2.1/../../../../arm-none-eabi/lib/thumb/v6-m/crt0.o .ARM.attributes 0x00000000 0x1b c:/program files (x86)/gnu tools arm embedded/6.2 2016q4/bin/../lib/gcc/arm-none-eabi/6.2.1/../../../../arm-none-eabi/lib/thumb/v6-m/crt0.o - .data 0x00000000 0x0 C:\Users\Paul\AppData\Local\Temp\ccUpdoNL.o - .bss 0x00000000 0x0 C:\Users\Paul\AppData\Local\Temp\ccUpdoNL.o + .data 0x00000000 0x0 C:\Users\Paul\AppData\Local\Temp\cc6oNvuz.o + .bss 0x00000000 0x0 C:\Users\Paul\AppData\Local\Temp\cc6oNvuz.o .text 0x00000000 0x0 source/main.o (symbol from plugin) - .text 0x00000000 0x0 C:\Users\Paul\AppData\Local\Temp\ccBQWscb.ltrans0.ltrans.o - .data 0x00000000 0x0 C:\Users\Paul\AppData\Local\Temp\ccBQWscb.ltrans0.ltrans.o - .bss 0x00000000 0x0 C:\Users\Paul\AppData\Local\Temp\ccBQWscb.ltrans0.ltrans.o + .text 0x00000000 0x0 C:\Users\Paul\AppData\Local\Temp\ccxBHZ68.ltrans0.ltrans.o + .data 0x00000000 0x0 C:\Users\Paul\AppData\Local\Temp\ccxBHZ68.ltrans0.ltrans.o + .bss 0x00000000 0x0 C:\Users\Paul\AppData\Local\Temp\ccxBHZ68.ltrans0.ltrans.o .text 0x00000000 0x0 source/usb.o (symbol from plugin) .text 0x00000000 0x0 source_stm_only/stm_init.o (symbol from plugin) .text 0x00000000 0x0 source_stm_only/usbstm.o (symbol from plugin) @@ -156,9 +156,9 @@ Linker script and memory map LOAD c:/program files (x86)/gnu tools arm embedded/6.2 2016q4/bin/../lib/gcc/arm-none-eabi/6.2.1/thumb/v6-m/crti.o LOAD c:/program files (x86)/gnu tools arm embedded/6.2 2016q4/bin/../lib/gcc/arm-none-eabi/6.2.1/thumb/v6-m/crtbegin.o LOAD c:/program files (x86)/gnu tools arm embedded/6.2 2016q4/bin/../lib/gcc/arm-none-eabi/6.2.1/../../../../arm-none-eabi/lib/thumb/v6-m/crt0.o -LOAD C:\Users\Paul\AppData\Local\Temp\ccUpdoNL.o +LOAD C:\Users\Paul\AppData\Local\Temp\cc6oNvuz.o LOAD source/main.o -LOAD C:\Users\Paul\AppData\Local\Temp\ccBQWscb.ltrans0.ltrans.o +LOAD C:\Users\Paul\AppData\Local\Temp\ccxBHZ68.ltrans0.ltrans.o LOAD source/usb.o LOAD source_stm_only/stm_init.o LOAD source_stm_only/usbstm.o @@ -175,12 +175,12 @@ END GROUP LOAD c:/program files (x86)/gnu tools arm embedded/6.2 2016q4/bin/../lib/gcc/arm-none-eabi/6.2.1/thumb/v6-m/crtend.o LOAD c:/program files (x86)/gnu tools arm embedded/6.2 2016q4/bin/../lib/gcc/arm-none-eabi/6.2.1/thumb/v6-m/crtn.o -.text 0x08000000 0x534 +.text 0x08000000 0x558 *(.isr_vector) - .isr_vector 0x08000000 0xc0 C:\Users\Paul\AppData\Local\Temp\ccUpdoNL.o + .isr_vector 0x08000000 0xc0 C:\Users\Paul\AppData\Local\Temp\cc6oNvuz.o 0x08000000 __isr_vector *(.text*) - .text 0x080000c0 0x40 C:\Users\Paul\AppData\Local\Temp\ccUpdoNL.o + .text 0x080000c0 0x40 C:\Users\Paul\AppData\Local\Temp\cc6oNvuz.o 0x080000c0 Reset_Handler 0x080000fc TSC_IRQHandler 0x080000fc ADC1_COMP_IRQHandler @@ -220,23 +220,23 @@ LOAD c:/program files (x86)/gnu tools arm embedded/6.2 2016q4/bin/../lib/gcc/arm 0x080000fc USART1_IRQHandler 0x080000fc TIM1_BRK_UP_TRG_COM_IRQHandler .text.control_xfr_in - 0x08000100 0xbc C:\Users\Paul\AppData\Local\Temp\ccBQWscb.ltrans0.ltrans.o + 0x08000100 0xbc C:\Users\Paul\AppData\Local\Temp\ccxBHZ68.ltrans0.ltrans.o .text.USB_IRQHandler - 0x080001bc 0x1cc C:\Users\Paul\AppData\Local\Temp\ccBQWscb.ltrans0.ltrans.o + 0x080001bc 0x1cc C:\Users\Paul\AppData\Local\Temp\ccxBHZ68.ltrans0.ltrans.o 0x080001bc USB_IRQHandler .text.HardFault_Handler - 0x08000388 0x2 C:\Users\Paul\AppData\Local\Temp\ccBQWscb.ltrans0.ltrans.o + 0x08000388 0x2 C:\Users\Paul\AppData\Local\Temp\ccxBHZ68.ltrans0.ltrans.o 0x08000388 HardFault_Handler *fill* 0x0800038a 0x2 .text.startup.main - 0x0800038c 0xe8 C:\Users\Paul\AppData\Local\Temp\ccBQWscb.ltrans0.ltrans.o + 0x0800038c 0x10c C:\Users\Paul\AppData\Local\Temp\ccxBHZ68.ltrans0.ltrans.o 0x0800038c main *(.init) - .init 0x08000474 0x4 c:/program files (x86)/gnu tools arm embedded/6.2 2016q4/bin/../lib/gcc/arm-none-eabi/6.2.1/thumb/v6-m/crti.o - 0x08000474 _init + .init 0x08000498 0x4 c:/program files (x86)/gnu tools arm embedded/6.2 2016q4/bin/../lib/gcc/arm-none-eabi/6.2.1/thumb/v6-m/crti.o + 0x08000498 _init *(.fini) - .fini 0x08000478 0x4 c:/program files (x86)/gnu tools arm embedded/6.2 2016q4/bin/../lib/gcc/arm-none-eabi/6.2.1/thumb/v6-m/crti.o - 0x08000478 _fini + .fini 0x0800049c 0x4 c:/program files (x86)/gnu tools arm embedded/6.2 2016q4/bin/../lib/gcc/arm-none-eabi/6.2.1/thumb/v6-m/crti.o + 0x0800049c _fini *crtbegin.o(.ctors) *crtbegin?.o(.ctors) *(EXCLUDE_FILE(*crtend.o *crtend?.o) .ctors) @@ -249,45 +249,45 @@ LOAD c:/program files (x86)/gnu tools arm embedded/6.2 2016q4/bin/../lib/gcc/arm *(.dtors) *(.rodata*) .rodata.config_desc - 0x0800047c 0x12 C:\Users\Paul\AppData\Local\Temp\ccBQWscb.ltrans0.ltrans.o + 0x080004a0 0x12 C:\Users\Paul\AppData\Local\Temp\ccxBHZ68.ltrans0.ltrans.o .rodata.device_desc - 0x0800048e 0x12 C:\Users\Paul\AppData\Local\Temp\ccBQWscb.ltrans0.ltrans.o + 0x080004b2 0x12 C:\Users\Paul\AppData\Local\Temp\ccxBHZ68.ltrans0.ltrans.o .rodata.string0_desc - 0x080004a0 0x4 C:\Users\Paul\AppData\Local\Temp\ccBQWscb.ltrans0.ltrans.o + 0x080004c4 0x4 C:\Users\Paul\AppData\Local\Temp\ccxBHZ68.ltrans0.ltrans.o .rodata.string1_desc - 0x080004a4 0x54 C:\Users\Paul\AppData\Local\Temp\ccBQWscb.ltrans0.ltrans.o + 0x080004c8 0x54 C:\Users\Paul\AppData\Local\Temp\ccxBHZ68.ltrans0.ltrans.o .rodata.string2_desc - 0x080004f8 0x3c C:\Users\Paul\AppData\Local\Temp\ccBQWscb.ltrans0.ltrans.o + 0x0800051c 0x3c C:\Users\Paul\AppData\Local\Temp\ccxBHZ68.ltrans0.ltrans.o *(.eh_frame*) -.glue_7 0x08000534 0x0 - .glue_7 0x08000534 0x0 linker stubs +.glue_7 0x08000558 0x0 + .glue_7 0x08000558 0x0 linker stubs -.glue_7t 0x08000534 0x0 - .glue_7t 0x08000534 0x0 linker stubs +.glue_7t 0x08000558 0x0 + .glue_7t 0x08000558 0x0 linker stubs -.vfp11_veneer 0x08000534 0x0 - .vfp11_veneer 0x08000534 0x0 linker stubs +.vfp11_veneer 0x08000558 0x0 + .vfp11_veneer 0x08000558 0x0 linker stubs -.v4_bx 0x08000534 0x0 - .v4_bx 0x08000534 0x0 linker stubs +.v4_bx 0x08000558 0x0 + .v4_bx 0x08000558 0x0 linker stubs -.iplt 0x08000534 0x0 - .iplt 0x08000534 0x0 c:/program files (x86)/gnu tools arm embedded/6.2 2016q4/bin/../lib/gcc/arm-none-eabi/6.2.1/thumb/v6-m/crtbegin.o +.iplt 0x08000558 0x0 + .iplt 0x08000558 0x0 c:/program files (x86)/gnu tools arm embedded/6.2 2016q4/bin/../lib/gcc/arm-none-eabi/6.2.1/thumb/v6-m/crtbegin.o -.rel.dyn 0x08000534 0x0 - .rel.iplt 0x08000534 0x0 c:/program files (x86)/gnu tools arm embedded/6.2 2016q4/bin/../lib/gcc/arm-none-eabi/6.2.1/thumb/v6-m/crtbegin.o +.rel.dyn 0x08000558 0x0 + .rel.iplt 0x08000558 0x0 c:/program files (x86)/gnu tools arm embedded/6.2 2016q4/bin/../lib/gcc/arm-none-eabi/6.2.1/thumb/v6-m/crtbegin.o .ARM.extab *(.ARM.extab* .gnu.linkonce.armextab.*) - 0x08000534 __exidx_start = . + 0x08000558 __exidx_start = . .ARM.exidx *(.ARM.exidx* .gnu.linkonce.armexidx.*) - 0x08000534 __exidx_end = . - 0x08000534 __etext = ALIGN (0x4) + 0x08000558 __exidx_end = . + 0x08000558 __etext = ALIGN (0x4) -.data 0x20000000 0x0 load address 0x08000534 +.data 0x20000000 0x0 load address 0x08000558 0x20000000 __data_start__ = . *(vtable) *(.data*) @@ -316,20 +316,20 @@ LOAD c:/program files (x86)/gnu tools arm embedded/6.2 2016q4/bin/../lib/gcc/arm 0x20000000 . = ALIGN (0x4) 0x20000000 __bss_start__ = . *(.bss*) - .bss.log 0x20000000 0x4 C:\Users\Paul\AppData\Local\Temp\ccBQWscb.ltrans0.ltrans.o + .bss.log 0x20000000 0x4 C:\Users\Paul\AppData\Local\Temp\ccxBHZ68.ltrans0.ltrans.o .bss.new_address - 0x20000004 0x1 C:\Users\Paul\AppData\Local\Temp\ccBQWscb.ltrans0.ltrans.o + 0x20000004 0x1 C:\Users\Paul\AppData\Local\Temp\ccxBHZ68.ltrans0.ltrans.o *fill* 0x20000005 0x1 .bss.num_bytes_req - 0x20000006 0x2 C:\Users\Paul\AppData\Local\Temp\ccBQWscb.ltrans0.ltrans.o + 0x20000006 0x2 C:\Users\Paul\AppData\Local\Temp\ccxBHZ68.ltrans0.ltrans.o .bss.num_bytes_sending - 0x20000008 0x2 C:\Users\Paul\AppData\Local\Temp\ccBQWscb.ltrans0.ltrans.o + 0x20000008 0x2 C:\Users\Paul\AppData\Local\Temp\ccxBHZ68.ltrans0.ltrans.o .bss.num_bytes_xfrd - 0x2000000a 0x2 C:\Users\Paul\AppData\Local\Temp\ccBQWscb.ltrans0.ltrans.o - .bss.req_dir 0x2000000c 0x1 C:\Users\Paul\AppData\Local\Temp\ccBQWscb.ltrans0.ltrans.o + 0x2000000a 0x2 C:\Users\Paul\AppData\Local\Temp\ccxBHZ68.ltrans0.ltrans.o + .bss.req_dir 0x2000000c 0x1 C:\Users\Paul\AppData\Local\Temp\ccxBHZ68.ltrans0.ltrans.o *fill* 0x2000000d 0x3 .bss.usbMsgPtr - 0x20000010 0x4 C:\Users\Paul\AppData\Local\Temp\ccBQWscb.ltrans0.ltrans.o + 0x20000010 0x4 C:\Users\Paul\AppData\Local\Temp\ccxBHZ68.ltrans0.ltrans.o *(COMMON) 0x20000014 . = ALIGN (0x4) 0x20000014 __bss_end__ = . @@ -338,12 +338,12 @@ LOAD c:/program files (x86)/gnu tools arm embedded/6.2 2016q4/bin/../lib/gcc/arm 0x20000018 __end__ = . [!provide] PROVIDE (end, .) *(.heap*) - .heap 0x20000018 0x0 C:\Users\Paul\AppData\Local\Temp\ccUpdoNL.o + .heap 0x20000018 0x0 C:\Users\Paul\AppData\Local\Temp\cc6oNvuz.o 0x20000018 __HeapLimit = . .stack_dummy 0x20000018 0xc00 *(.stack*) - .stack 0x20000018 0xc00 C:\Users\Paul\AppData\Local\Temp\ccUpdoNL.o + .stack 0x20000018 0xc00 C:\Users\Paul\AppData\Local\Temp\cc6oNvuz.o 0x20001800 __StackTop = (ORIGIN (RAM) + LENGTH (RAM)) 0x20000c00 __StackLimit = (__StackTop - SIZEOF (.stack_dummy)) 0x20001800 PROVIDE (__stack, __StackTop) @@ -355,41 +355,41 @@ OUTPUT(build_stm/inlretro_stm.elf elf32-littlearm) .ARM.attributes 0x00000000 0x1e c:/program files (x86)/gnu tools arm embedded/6.2 2016q4/bin/../lib/gcc/arm-none-eabi/6.2.1/thumb/v6-m/crti.o .ARM.attributes - 0x0000001e 0x1b C:\Users\Paul\AppData\Local\Temp\ccUpdoNL.o + 0x0000001e 0x1b C:\Users\Paul\AppData\Local\Temp\cc6oNvuz.o .ARM.attributes - 0x00000039 0x2f C:\Users\Paul\AppData\Local\Temp\ccBQWscb.ltrans0.ltrans.o + 0x00000039 0x2f C:\Users\Paul\AppData\Local\Temp\ccxBHZ68.ltrans0.ltrans.o .comment 0x00000000 0x6e - .comment 0x00000000 0x6e C:\Users\Paul\AppData\Local\Temp\ccBQWscb.ltrans0.ltrans.o + .comment 0x00000000 0x6e C:\Users\Paul\AppData\Local\Temp\ccxBHZ68.ltrans0.ltrans.o 0x6f (size before relaxing) -.debug_line 0x00000000 0x31d - .debug_line 0x00000000 0x6f C:\Users\Paul\AppData\Local\Temp\ccUpdoNL.o - .debug_line 0x0000006f 0x2ae C:\Users\Paul\AppData\Local\Temp\ccBQWscb.ltrans0.ltrans.o +.debug_line 0x00000000 0x324 + .debug_line 0x00000000 0x6f C:\Users\Paul\AppData\Local\Temp\cc6oNvuz.o + .debug_line 0x0000006f 0x2b5 C:\Users\Paul\AppData\Local\Temp\ccxBHZ68.ltrans0.ltrans.o .debug_info 0x00000000 0x501 - .debug_info 0x00000000 0x83 C:\Users\Paul\AppData\Local\Temp\ccUpdoNL.o - .debug_info 0x00000083 0x47e C:\Users\Paul\AppData\Local\Temp\ccBQWscb.ltrans0.ltrans.o + .debug_info 0x00000000 0x83 C:\Users\Paul\AppData\Local\Temp\cc6oNvuz.o + .debug_info 0x00000083 0x47e C:\Users\Paul\AppData\Local\Temp\ccxBHZ68.ltrans0.ltrans.o .debug_abbrev 0x00000000 0x277 - .debug_abbrev 0x00000000 0x14 C:\Users\Paul\AppData\Local\Temp\ccUpdoNL.o - .debug_abbrev 0x00000014 0x263 C:\Users\Paul\AppData\Local\Temp\ccBQWscb.ltrans0.ltrans.o + .debug_abbrev 0x00000000 0x14 C:\Users\Paul\AppData\Local\Temp\cc6oNvuz.o + .debug_abbrev 0x00000014 0x263 C:\Users\Paul\AppData\Local\Temp\ccxBHZ68.ltrans0.ltrans.o .debug_aranges 0x00000000 0x58 .debug_aranges - 0x00000000 0x20 C:\Users\Paul\AppData\Local\Temp\ccUpdoNL.o + 0x00000000 0x20 C:\Users\Paul\AppData\Local\Temp\cc6oNvuz.o .debug_aranges - 0x00000020 0x38 C:\Users\Paul\AppData\Local\Temp\ccBQWscb.ltrans0.ltrans.o + 0x00000020 0x38 C:\Users\Paul\AppData\Local\Temp\ccxBHZ68.ltrans0.ltrans.o .debug_loc 0x00000000 0xa4 - .debug_loc 0x00000000 0xa4 C:\Users\Paul\AppData\Local\Temp\ccBQWscb.ltrans0.ltrans.o + .debug_loc 0x00000000 0xa4 C:\Users\Paul\AppData\Local\Temp\ccxBHZ68.ltrans0.ltrans.o .debug_ranges 0x00000000 0xc0 - .debug_ranges 0x00000000 0xc0 C:\Users\Paul\AppData\Local\Temp\ccBQWscb.ltrans0.ltrans.o + .debug_ranges 0x00000000 0xc0 C:\Users\Paul\AppData\Local\Temp\ccxBHZ68.ltrans0.ltrans.o .debug_str 0x00000000 0x360 - .debug_str 0x00000000 0x360 C:\Users\Paul\AppData\Local\Temp\ccBQWscb.ltrans0.ltrans.o + .debug_str 0x00000000 0x360 C:\Users\Paul\AppData\Local\Temp\ccxBHZ68.ltrans0.ltrans.o 0x38a (size before relaxing) .debug_frame 0x00000000 0x70 - .debug_frame 0x00000000 0x70 C:\Users\Paul\AppData\Local\Temp\ccBQWscb.ltrans0.ltrans.o + .debug_frame 0x00000000 0x70 C:\Users\Paul\AppData\Local\Temp\ccxBHZ68.ltrans0.ltrans.o diff --git a/firmware/include_stm/stm32f070x6.h b/firmware/include_stm/stm32f070x6.h index 9e4e958..b1a80c5 100644 --- a/firmware/include_stm/stm32f070x6.h +++ b/firmware/include_stm/stm32f070x6.h @@ -122,7 +122,7 @@ typedef enum */ #include "core_cm0.h" /* Cortex-M0 processor and core peripherals */ -#include "system_stm32f0xx.h" /* STM32F0xx System Header */ +//create our own system functions! #include "system_stm32f0xx.h" /* STM32F0xx System Header */ #include /** @addtogroup Peripheral_registers_structures diff --git a/firmware/source/avr_gpio.h b/firmware/source/avr_gpio.h new file mode 100644 index 0000000..036126b --- /dev/null +++ b/firmware/source/avr_gpio.h @@ -0,0 +1,32 @@ + +#define __IO volatile /*!< Defines 'read / write' permissions */ + +/** + * @brief General Purpose I/O + */ + +typedef struct +{ + __IO uint8_t PIN; /*!< GPIO port output type register, Address offset: 0x00 */ + __IO uint8_t DDR; /*!< GPIO port input data register, Address offset: 0x01 */ + __IO uint8_t PORT; /*!< GPIO port output data register, Address offset: 0x02 */ +} GPIO_TypeDef; + +#define REGISTER_BASE ((uint16_t)0x0000U) + +/*!< GPIO peripherals */ +#define GPIOA_BASE (REGISTER_BASE + 0x0020) +#define GPIOB_BASE (REGISTER_BASE + 0x0023) +#define GPIOC_BASE (REGISTER_BASE + 0x0026) +#define GPIOD_BASE (REGISTER_BASE + 0x0029) + + +#define GPIOA ((GPIO_TypeDef *) GPIOA_BASE) +#define GPIOB ((GPIO_TypeDef *) GPIOB_BASE) +#define GPIOC ((GPIO_TypeDef *) GPIOC_BASE) +#define GPIOD ((GPIO_TypeDef *) GPIOD_BASE) + +//#define GPIO_MODER_MODER0_Pos (0U) +//#define GPIO_MODER_MODER0_Msk (0x3U << GPIO_MODER_MODER0_Pos) /*!< 0x00000003 */ +//#define GPIO_MODER_MODER0 GPIO_MODER_MODER0_Msk + diff --git a/firmware/source/main.c b/firmware/source/main.c index b525708..23fcb1a 100644 --- a/firmware/source/main.c +++ b/firmware/source/main.c @@ -75,6 +75,14 @@ int main(void) //Initialize board/system #endif + //Turn on LED +#ifdef STM_CORE + RCC->AHBENR |= (IOP_LED_EN); +#endif +// PCb_OP_EN(LEDbank, LED); +// PCb_SET_HI(LEDbank, LED); + PCb_IP_PU(LEDbank, LED); + //================= //MAIN LOOP //================= diff --git a/firmware/source/pinport_al.h b/firmware/source/pinport_al.h new file mode 100644 index 0000000..824455f --- /dev/null +++ b/firmware/source/pinport_al.h @@ -0,0 +1,421 @@ +#ifndef _pinport_al_h +#define _pinport_al_h + +//Define the board type in makefile +//#define AVR_KAZZO +//#define STM_ADAPTER +//#define STM_INL6 + +#ifdef AVR_CORE + #include "avr_gpio.h" +#elif STM_CORE + #include +#endif + +//============================================================================================= +// +// PINPORT ABSTRACTION LAYER +// +//============================================================================================= +// +// The pinport abstraction layer creates definitions of generic device GPIO ports. +// These generic ports are designed to make high level firmware generic to the +// actual underlying hardware. The ports created have defined sizes and access rules +// that keeps firmware from growing in complexity based on the specific hardware. +// +// Idea is to define ports which are available on all hardware, but also create ports +// which may not be available to other hardwares. If the firmware is instructed to +// perform an operation on a port that's not present, or not initialized/setup error +// codes will be sent back to the host to designate the lack of port presence. +// +// --------------------------------------------------------------------------------------- +// CONTROL PORT: 16bits for function +// C15-0 +// Directionality: All pins are able to be toggled between input/output individually +// Driver: All pins indiv selectable pull-up or float for input. Output always push pull. +// Write/Output: Bit access only, no byte/word accesses +// Read/Input: Bit access only, returned byte/word will be zero if clear, non-zero if set +// --------------------------------------------------------------------------------------- + +// STM32 GPIO registers are quite different than AVR style +// they are more flexible/capable, but a little tricky to interface with +// some features present on STM32 pins, but not AVR +// - PULL-DOWN ability (and PULL-UP like AVR) +// - Speed/Slew rate selection +// - Open drain outputs (and push/pull like AVR) +// - Bit set/reset registers to remove necessity of RMW operations +// - Lockability to keep port config bits from changing until reset +// - GPIO blocks must be provided a clock and enabled to "turn on" +// failing to do so will cause hard faults when accessing registers!! +// +// All GPIO registers can be accessed in byte, halfword, or 32bit full words +// unless otherwise noted +// +// GPIOx->MODER[1:0] 32bit registers control direction/type of driver +// 00- Input (default reset state, except SWC-PA15 & SWD-PA13 default AF) +// 01- Gen Purp Output +// 10- Alternate func (SPI, I2C, etc) +// 11- reserved +// MODER[1] typically leave clear unless using AltFunc +// MODER[0] becomes equivalent of AVR DDR +#define MODER_OP 0x01 +#define MODER_AF 0x10 +// +// GPIOx->OTYPER 16bit registers control driver type +// 0- Push Pull (default reset state) +// 1- Open Drain +// N/A when MODER is set to "00" INPUT +// we can generally just ignore this register and use pushpull as AVR does +// +// GPIOx->OSPEEDR[1:0] 32bit registers control pin driver speed/slew +// x0- Low speed (default reset state, except SWD-PA13 default High Spd) +// 01- Medium speed +// 11- High speed +// N/A when MODER is set to "00" INPUT +// we can generally just ignore this register and use slow speed +// +// GPIOx->PUPDR[1:0] 32bit registers control pull-up/down resistors +// this register is in effect even when alternate functions are enabled +// 00- floating/disabled, no pull-up/down (default for most pins except below) +// 01- Pull-up enabled (default SWD-PA13) also CIRAM A10 +// 10- Pull-down enabled (default SWC-PA14) +// 11- Reserved, don't use (prob enables both which would be bad...) +// PUPDR[0] is kinda like AVR PORT when DDR is set to INPUT, and PUPDR[1]=0 +// This ends up being a little cleaner than AVR i/o interfacing +// Can probably just enable pull-ups on everything and leave it like that +// -only exception being USB pins (PA11/12) better leave those floating +#define PUPDR_FLT 0x00 +#define PUPDR_PU 0x01 +#define PUPDR_PD 0x10 +// +// GPIOx->IDR 16bit register used to read current input level on pin +// this register is read only +// +// GPIOx->ODR 16bit register used to set output of pin if enabled by MODER +// this register is read/writeable +// +// GPIOx->BSRR 32bit register to only set/clear pins +// BR[31:16] upper halfword is will reset/clear pin if written to '1' value +// BS[15:00] lower halfword is will set pin if written to '1' value +// writing 0 to any bit has no effect +// if setting both BS register has priority (bit will be set) +// this register is write only! +// +// GPIO->BRR 16bit register equivalent to upper word of BSRR register above +// provides convinent separate BR register that doesn't need shifted +// +// GPIOx->LCKR 17bit register MUST BE ACCESSED in 32bit full words!!! +// complex sequence needed to set, but once done lock config/altfunc +// bits for that GPIO. I interpret this to mean the registers above +// plus AF registers, exception of IDR, ODR, BSRR registers +// Good to use this for things than we don't want to accidentally change: +// - USB & XTAL pins come to mind as good candidates +// +// GPIOx->AFRL/H 2 sets of 32bit registers to determine alternate function +// of GPIO if enabled with MODER registers. Default is AF0 at reset + + +// AVR GPIO are rather simple in comparison to STM32 GPIO: +// +// DDRx 8bit direction register +// Determines 'direction' of pin driver +// set for output, clear of input +// reads give current status of register +// +// PORTx 8bit output/pullup register +// writes set/clear pin if DDR is set/OP +// write '1' to enable pull-up if DDR is clear/IP +// write '0' to disable pull-up if DDR is clear/IP +// reads give current status of register +// bit access must be done by means of RMW/shadow reg +// +// PINx 8bit read register +// read when DDR is clear/IP to get current pin level +// reading when O/P is of little use, as should be value of PORTx +// read only register + +//kaz6 is PB1 +//#define LED (1U) +//#define IOP_LED_EN RCC_AHBENR_GPIOBEN +//#define GPIO_LED GPIOB +// +////kaz adapter is PC13 +//#define LED (13U) +//#define IOP_LED_EN RCC_AHBENR_GPIOCEN +//#define GPIO_LED GPIOC +// +////kaz adapter data0 debug is PB8 +//#define DEBUG (8U) +//#define IOP_DEBUG_EN RCC_AHBENR_GPIOBEN +//#define GPIO_DEBUG GPIOB +// +//#define LED_ON() (GPIO_LED->ODR |= (0x1U<ODR &= ~(0x1U<ODR |= (0x1U<ODR &= ~(0x1U<MODER &= ~(MODER_OP<<(pin*2)); bank->PUPDR |= (PUPDR_PU<<(pin*2)) +#define PCb_IP_FLT(bank, pin) bank->MODER &= ~(MODER_OP<<(pin*2)); bank->PUPDR &= ~(PUPDR_PU<<(pin*2)) +#define PCb_OP_EN(bank, pin) bank->MODER |= (MODER_OP<<(pin*2)) +#define PCb_READ(bank, pin, val) val = (bank->IDR & (1<BSRR = 1<BRR = 1<DDR &= ~(1<PORT |= (1<DDR &= ~(1<PORT &= ~(1<DDR |= (1<PIN & (1<PORT |= (1<PORT &= ~(1<