serial wip

This commit is contained in:
jaseg 2020-01-25 11:53:44 +01:00
parent 410e386510
commit 966f104597
16 changed files with 3827 additions and 3678 deletions

1
gm_platform/fw/.gitignore vendored Normal file
View file

@ -0,0 +1 @@
*.expand

View file

@ -16,11 +16,14 @@
*/
#include "adc.h"
#include "serial.h"
#include <stdbool.h>
#include <stdlib.h>
#include <assert.h>
volatile uint16_t adc_buf[ADC_BUFSIZE];
volatile uint16_t adc_buf[100]; /* 100ms worth of data */
uint32_t usart_overruns = 0;
static void adc_dma_init(int burstlen);
static void adc_timer_init(int psc, int ivl);
@ -56,9 +59,6 @@ void adc_configure_scope_mode(int sampling_interval_ns) {
adc_timer_init(12/*250ns/tick*/, cycles);
}
/* FIXME figure out the proper place to configure this. */
#define ADC_TIMER_INTERVAL_US 20
static void adc_dma_init(int burstlen) {
/* Configure DMA 1 Channel 1 to get rid of all the data */
DMA1_Channel1->CPAR = (unsigned int)&ADC1->DR;
@ -70,11 +70,12 @@ static void adc_dma_init(int burstlen) {
| (1<<DMA_CCR_MSIZE_Pos) /* 16 bit */
| (1<<DMA_CCR_PSIZE_Pos) /* 16 bit */
| DMA_CCR_MINC
| DMA_CCR_HTIE /* Enable half-transfer interrupt. */
| DMA_CCR_TCIE; /* Enable transfer complete interrupt. */
/* triggered on transfer completion. We use this to process the ADC data */
/* triggered on half-transfer and on transfer completion. We use this to send out the ADC data and to trap into GDB. */
NVIC_EnableIRQ(DMA1_Channel1_IRQn);
NVIC_SetPriority(DMA1_Channel1_IRQn, 2<<5);
NVIC_SetPriority(DMA1_Channel1_IRQn, 3<<5);
DMA1_Channel1->CCR |= DMA_CCR_EN; /* Enable channel */
}
@ -99,9 +100,21 @@ static void gdb_dump(void) {
}
void DMA1_Channel1_IRQHandler(void) {
uint32_t isr = DMA1->ISR;
/* Clear the interrupt flag */
DMA1->IFCR |= DMA_IFCR_CGIF1;
gdb_dump();
static_assert(ARRAY_LEN(adc_buf) % 2 == 0, "ADC_BUFSIZE must be even for half-transfer uart tx logic to work");
int rc;
if (isr & DMA_ISR_HTIF2) /* half-transfer */
rc = usart_send_packet_nonblocking((uint8_t *)adc_buf, sizeof(adc_buf)/2);
else /* end of transfer */
rc = usart_send_packet_nonblocking((uint8_t *)adc_buf + ARRAY_LEN(adc_buf)/2, sizeof(adc_buf)/2);
if (rc)
usart_overruns++;
/*
static int debug_buf_pos = 0;

View file

@ -20,8 +20,6 @@
#include "global.h"
extern volatile uint16_t adc_buf[ADC_BUFSIZE];
void adc_init(void);
void adc_configure_scope_mode(int sampling_interval_ns);

View file

@ -2,87 +2,11 @@
#include "serial.h"
#include "cobs.h"
/*@ requires \valid(dst + (0..dstlen-1));
@ requires \valid_read(src + (0..srclen-1));
@ requires \separated(dst + (0..dstlen-1), src + (0..srclen-1));
@
@ behavior valid:
@ assumes 0 <= srclen <= 254;
@ assumes 0 <= dstlen <= 65535;
@ assumes dstlen >= srclen+2;
@ assigns dst[0..srclen+1];
@ ensures \forall integer i; (0 <= i < srclen && \old(src[i]) != 0) ==> dst[i+1] == src[i];
@ ensures \result == srclen+2;
@ ensures \forall integer i; 0 <= i <= srclen ==> dst[i] != 0;
@ ensures dst[srclen+1] == 0;
@
@ behavior invalid:
@ assumes srclen < 0 || srclen > 254
@ || dstlen < 0 || dstlen > 65535
@ || dstlen < srclen+2;
@ assigns \nothing;
@ ensures \result == -1;
@
@ complete behaviors;
@ disjoint behaviors;
@*/
ssize_t cobs_encode(char *dst, size_t dstlen, char *src, size_t srclen) {
if (dstlen > 65535 || srclen > 254)
return -1;
//@ assert 0 <= dstlen <= 65535 && 0 <= srclen <= 254;
if (dstlen < srclen+2)
return -1;
//@ assert 0 <= srclen < srclen+2 <= dstlen;
size_t p = 0;
/*@ loop invariant 0 <= p <= srclen+1;
@ loop invariant \forall integer i; 0 <= i < p ==> dst[i] != 0;
@ loop invariant \forall integer i; 0 < i < p ==> (src[i-1] != 0 ==> dst[i] == src[i-1]);
@ loop assigns p, dst[0..srclen+1];
@ loop variant srclen-p+1;
@*/
while (p <= srclen) {
char val;
if (p != 0 && src[p-1] != 0) {
val = src[p-1];
} else {
size_t q = p;
/*@ loop invariant 0 <= p <= q <= srclen;
@ loop invariant \forall integer i; p <= i < q ==> src[i] != 0;
@ loop assigns q;
@ loop variant srclen-q;
@*/
while (q < srclen && src[q] != 0)
q++;
//@ assert q == srclen || src[q] == 0;
//@ assert q <= srclen <= 254;
val = (char)q-p+1;
//@ assert val != 0;
}
dst[p] = val;
p++;
}
dst[p] = 0;
//@ assert p == srclen+1;
return srclen+2;
}
int cobs_encode_usart(char *src, size_t srclen) {
int cobs_encode_usart(int (*output)(char), char *src, size_t srclen) {
if (srclen > 254)
return -1;
//@ assert 0 <= srclen <= 254;
size_t p = 0;
/*@ loop invariant 0 <= p <= srclen+1;
@ loop assigns p;
@ loop variant srclen-p+1;
@*/
while (p <= srclen) {
char val;
@ -91,25 +15,20 @@ int cobs_encode_usart(char *src, size_t srclen) {
} else {
size_t q = p;
/*@ loop invariant 0 <= p <= q <= srclen;
@ loop invariant \forall integer i; p <= i < q ==> src[i] != 0;
@ loop assigns q;
@ loop variant srclen-q;
@*/
while (q < srclen && src[q] != 0)
q++;
//@ assert q == srclen || src[q] == 0;
//@ assert q <= srclen <= 254;
val = (char)q-p+1;
//@ assert val != 0;
}
usart_putc(val);
int rv = output(val);
if (rv)
return rv;
p++;
}
usart_putc(0);
//@ assert p == srclen+1;
int rv = output(0);
if (rv)
return rv;
return 0;
}

View file

@ -15,7 +15,7 @@ struct cobs_decode_state {
ssize_t cobs_encode(char *dst, size_t dstlen, char *src, size_t srclen);
ssize_t cobs_decode(char *dst, size_t dstlen, char *src, size_t srclen);
int cobs_encode_usart(char *src, size_t srclen);
int cobs_encode_usart(int (*output)(char), char *src, size_t srclen);
void cobs_decode_incremental_initialize(struct cobs_decode_state *state);
int cobs_decode_incremental(struct cobs_decode_state *state, char *dst, size_t dstlen, char src);

View file

@ -42,7 +42,7 @@
#define TS_CAL1 (*(uint16_t *)0x1FFFF7B8)
#define VREFINT_CAL (*(uint16_t *)0x1FFFF7BA)
#define ADC_BUFSIZE 1024
#define ARRAY_LEN(x) ((sizeof(x)/sizeof(0[x])) / ((size_t)(!(sizeof(x) % sizeof(0[x])))))
extern volatile unsigned int sys_time;
extern volatile unsigned int sys_time_seconds;

Binary file not shown.

View file

@ -101,9 +101,6 @@ int main(void) {
usart_dma_init();
while (42) {
char *data = "FOOBAR\n";
usart_send_packet((uint8_t*)data, 8);
for (int i=0; i<100000; i++);
//int pol = GPIOB->IDR & (1<<1); /* Sample current polarity */
//leds.error = pol ? 100 : 0;
//for (int i=0; i<10000; i++) ;

Binary file not shown.

View file

@ -1,15 +1,15 @@
:020000040800F2
:100000000010002095180008B1040008BD04000885
:10000000001000205519000885040008910400081C
:1000100000000000000000000000000000000000E0
:10002000000000000000000000000000C104000803
:100030000000000000000000CD040008D904000802
:10004000E118000800000000E1180008E1180008AD
:10005000E1180008E1180008E1180008E11800089C
:1000600000000000930700085D0A0008E11800087E
:10007000E1180008E1180008E1180008000000007D
:10008000E11800080000000000000000E11800086E
:1000900000000000F5030008E1180008E11800085E
:1000A00000000000C903000800000000E11800087B
:10002000000000000000000000000000950400082F
:100030000000000000000000A1040008AD0400085A
:10004000A119000800000000A1190008A11900086A
:10005000A1190008A1190008A1190008A119000898
:100060000000000063070008A90A0008A1190008A1
:10007000A1190008A1190008A1190008000000003A
:10008000A11900080000000000000000A1190008EC
:1000900000000000C9030008A1190008A119000808
:1000A000000000009D03000800000000A1190008E6
:1000B0000000000000000000000000000000000040
:1000C00080B582B000AF0200FB1D1A70FB1D1B78CB
:1000D0001A001F231A40044B012191400A001A60A4
@ -32,383 +32,394 @@
:1001E0000A4B7A68013A5A6001235B4203211800E6
:1001F000FFF77CFF054B00229A60044B07221A6030
:1002000000231800BD4602B080BDC04610E000E0EB
:1002100080B500AFC046BD4680BD80B582B000AF9E
:100220005B4B1A685A4B802149020A431A60C04648
:10023000574B1A6880239B021340F9D0544B5A68DD
:10024000534B54490A405A60514B5A68504B8821CD
:1002500049030A435A604E4B1A684D4B80214904AA
:100260000A431A60C0464A4B1A6880239B04134015
:10027000F9D0474B5A68464B02210A435A6000F0B6
:1002800011FE454B1B680A21180001F08DF903008F
:100290001800FFF799FF01235B421800FFF710FFDA
:1002A00001235B4260211800FFF720FF384B5A6999
:1002B000374B3A490A435A61354B9A69344B3849AE
:1002C0000A439A61324BDA69314B02210A43DA61FF
:1002D0009023DB051A689023DB0532490A431A6034
:1002E0009023DB059A689023DB052F490A439A6027
:1002F0009023DB0500221A629023DB05882252003E
:100300005A622A4A294B12681A60294BC922920064
:100310001A60274BE022D2005A60254B1A68244B02
:1003200040210A431A601920FFF7CAFE4021192014
:10033000FFF7DCFE1F4B00225A601E4B0122DA60E1
:100340001C4B2F229A621B4B1B4ADA62194B01226B
:100350001A601520FFF7B4FE40211520FFF7C6FEF6
:10036000164B180000F05AF900F0BEFA144B3B602F
:100370003B680821180000F091FB00237B6002E03D
:100380007B6801337B607B680E4A9342F8DDEDE7C2
:10039000001002400CF8C3FF00000020110006000E
:1003A000015A420070A92800808A08000004004811
:1003B0000030014000440140E703000040420F00CC
:1003C000E41800089F86010080B500AF084B9B68C9
:1003D0000222134009D09023DB0508229A61044BC6
:1003E0005A68034B80218A435A60C046BD4680BD8F
:1003F0000030014080B582B000AF284B1B6901225C
:10040000134047D0254B1A69244B01218A431A61B6
:10041000FB1D00221A70BB1D01221A7000233B60D5
:100420001DE01F4B3A689200D358002B0FD01C4B95
:100430003A689200D358591E194B3A689200D1502D
:10044000FB1DF91DBA1D097812780A431A70BA1DEE
:10045000BB1D1B78DB1813703B6801333B603B68A6
:10046000072BDED90F4B1B68591C0E4A11600A2B53
:1004700010D10C4B00221A600B4AFB1D1B78137025
:100480000A4B5A68094B80210A435A609023DB05C6
:1004900008229A62C046BD4602B080BD00440140B9
:1004A000A8000020980000200C30014000300140DE
:1004B00080B500AF00BEC046BD4680BD00BEC04690
:1004C00080B500AF00BEC046BD4680BD80B500AF60
:1004D00000BEC046BD4680BD80B500AF0A4B1B685C
:1004E000591C094A11600A2B0AD1074B00221A60D5
:1004F000064B1B685A1C054B1A60054B64229A6117
:10050000C046BD4680BDC0469C000020940000202F
:10051000A800002080B582B000AF0200FB1D1A7059
:10052000FB1D1B781A001F231A40044B0121914028
:100530000A001A60C046BD4602B080BD00E100E07E
:1005400090B583B000AF02003960FB1D1A70FB1D2F
:100550001B787F2B32D92F4AFB1D1B7819000F23E4
:100560000B40083B9B0806339B00D31804331B68E1
:10057000FA1D1278110003220A40D200FF21914097
:100580000A00D2431A4011003B689B01FF221A4027
:10059000FB1D1B78180003230340DB009A401D4815
:1005A000FB1D1B781C000F232340083B9B080A43BC
:1005B00006339B00C31804331A6027E0164AFB1D5C
:1005C0001B785BB29B08C0339B009B58FA1D1278C6
:1005D000110003220A40D200FF2191400A00D243B9
:1005E0001A4011003B689B01FF221A40FB1D1B783B
:1005F000180003230340DB009A400748FB1D1B78CB
:100600005BB29B080A43C0339B001A50C046BD46EC
:1006100003B090BD00ED00E000E100E080B584B0E3
:1006200000AF78608023DB00180000F04BF8214B0E
:10063000802212061A611F4B07225A611D4B1E4A67
:10064000DA601C4B04229A621A4B9A68194B80217B
:1006500009060A439A60C046164B9B68002BFBDBD9
:10066000144B9A68134B01210A439A60114B9A6804
:10067000104B04210A439A607B68104A934206DDBE
:100680007B68FA21180001F019F8030000E0062346
:10069000FB60FA6880235B029A4201DB084BFB6037
:1006A000FB6819000C2000F03DF8C046BD4604B0C0
:1006B00080BDC0460024014043080000DC05000066
:1006C000FFFF000080B582B000AF7860114B124A86
:1006D0009A60104B114ADA600E4B7A685A600D4BE3
:1006E00000221A600B4B1A680A4B0D490A431A6024
:1006F0000920FFF70FFF40210920FFF721FF054BDD
:100700001A68044B01210A431A60C046BD4602B074
:1007100080BDC0460800024040240140C8000020BF
:10072000A205000080B582B000AF78603960154B3B
:10073000802212025A64134BC022D201DA61114B9B
:10074000802252011A620F4B01221A647B685A1EE2
:100750000C4B9A623B685A1E0A4BDA62094B5A6983
:10076000084B01210A435A61064B80221A60054B4F
:100770001A68044B01210A431A60C046BD4602B004
:1007800080BDC046002C014080B500AFC046BD46CC
:1007900080BD80B500AF054B5A68044B01210A4368
:1007A0005A60FFF7F1FFC046BD4680BD0000024021
:1007B00080B582B000AF0200FB1D1A70FB1D1B78D4
:1007C0001A001F231A40044B012191400A001A60AD
:1007D000C046BD4602B080BD00E100E080B582B0F9
:1007E00000AF0200FB1D1A70FB1D1B781A001F23AF
:1007F0001340054901229A40130080228B50C046C5
:10080000BD4602B080BDC04600E100E090B583B0B7
:1008100000AF02003960FB1D1A70FB1D1B787F2B97
:1008200032D92F4AFB1D1B7819000F230B40083BC0
:100830009B0806339B00D31804331B68FA1D1278FB
:10084000110003220A40D200FF2191400A00D24346
:100850001A4011003B689B01FF221A40FB1D1B78C8
:10086000180003230340DB009A401D48FB1D1B7842
:100870001C000F232340083B9B080A4306339B00C0
:10088000C31804331A6027E0164AFB1D1B785BB2BD
:100890009B08C0339B009B58FA1D1278110003225D
:1008A0000A40D200FF2191400A00D2431A401100B1
:1008B0003B689B01FF221A40FB1D1B781800032395
:1008C0000340DB009A400748FB1D1B785BB29B0886
:1008D0000A43C0339B001A50C046BD4603B090BDCA
:1008E00000ED00E000E100E080B500AF174B012211
:1008F00052421A60154B00225A60144B00229A6033
:10090000134B144A9A60124B92221A600A20FFF786
:100910004FFF20210A20FFF779FF0F4B0F4A1A6083
:100920000D4B3022DA600C4BC02292025A600A4B07
:100930009A68094B80210A439A60074B1A68064B54
:1009400001210A431A60C046BD4680BDC808002088
:100950001C00024028380140003801402C200000D3
:1009600080B584B000AF194BBB60BB685B687B602F
:10097000BB689B687A689A4205D2BB689A687B68B4
:10098000D31AFB6004E07B6880225200D31AFB601C
:10099000BB687A681A607A68FB68D318FF221A402D
:1009A000BB685A60BB680C331A007B68D218084BCE
:1009B000DA60074BFA685A60054B1A68044B01214C
:1009C0000A431A60C046BD4604B080BDC808002076
:1009D0001C00024080B582B000AF78600A00FB1CAA
:1009E0001A700A20FFF7FAFE7B689A687B681B681A
:1009F0009A4205D10A20FFF7DBFE10235B4211E08B
:100A00007B689B687A68D318FA1C12781A737B6823
:100A10009B680133FF221A407B689A600A20FFF727
:100A2000C7FE00231800BD4602B080BD80B582B06D
:100A300000AF0200FB1D1A70C046FB1D1A78064B62
:100A400011001800FFF7C6FF03001033F5D0C046B1
:100A5000C046BD4602B080BDC808002080B500AFCA
:100A60000B4B5A680A4B20210A435A60094B1A68FB
:100A7000084B01218A431A60074B9A68064B5B6852
:100A80009A4201D0FFF76CFFC046BD4680BDC0460C
:100A9000000002401C000240C808002080B582B05F
:100AA00000AF786039603A687B681100180000F088
:100AB00070F8054B1B680122134001D1FFF750FF6E
:100AC000C046BD4602B080BD1C00024080B588B063
:100AD00000AFF860B9607A603B60BA6880235B025F
:100AE0009A4202D23B68FE2B02D901235B424CE0C2
:100AF0003B680233BA689A4202D201235B4244E067
:100B00000023FB6136E0FB69002B0FD0FB69013B42
:100B10007A68D3181B78002B08D0FB69013B7A68F0
:100B2000D2181B23FB1812781A7019E0FB697B613D
:100B300002E07B6901337B617A693B689A4205D2A6
:100B40007A687B69D3181B78002BF2D17B69DAB203
:100B5000FB69DBB2D31ADAB21B23FB1801321A701D
:100B6000FA68FB69D3181B22BA1812781A70FB694D
:100B70000133FB61FA693B689A42C4D9FA68FB69A0
:100B8000D31800221A703B6802331800BD4608B023
:100B900080BD80B586B000AF786039603B68FE2BC1
:100BA00002D901235B4240E000237B6135E07B6991
:100BB000002B0FD07B69013B7A68D3181B78002B80
:100BC00008D07B69013B7A68D2181323FB1812788E
:100BD0001A7019E07B69FB6002E0FB680133FB607F
:100BE000FA683B689A4205D27A68FB68D3181B788A
:100BF000002BF2D1FB68DAB27B69DBB2D31ADAB22E
:100C00001323FB1801321A701323FB181B781800EA
:100C1000FFF70CFF7B6901337B617A693B689A427D
:100C2000C5D90020FFF702FF00231800BD4606B01B
:100C300080BD80B588B000AFF860B9607A603B6075
:100C4000BA6880235B029A4204D23A6880235B022E
:100C50009A4202D301235B4252E03B68002B02D14F
:100C600001235B424CE0BA683B689A4202D20123FE
:100C70005B4245E00123FB617B681B78BB61BB697C
:100C8000002B24D102235B423AE0BB69013BBB61EC
:100C9000BB69002B09D17A68FB69D3181B78BB614B
:100CA0001723FB1800221A7006E07A68FB69D21835
:100CB0001723FB1812781A70FB69013BFA68D318E6
:100CC0001722BA1812781A70FB690133FB61FA69AE
:100CD0003B689A4205D27A68FB69D3181B78002BCF
:100CE000D3D1FA693B689A4202D102235B4207E002
:100CF000BB69012B02D003235B4201E0FB69013B8E
:100D00001800BD4608B080BD80B582B000AF7860E5
:100D10007B6800221A607B6800225A60C046BD468C
:100D200002B080BD80B588B000AFF860B9607A606D
:100D30001A00FB1C1A70FB681B68002B0ED1FB1CF1
:100D40001B78002B54D0FB1C1A78FB685A60FB6898
:100D50001B685A1CFB681A60002350E0FB1C1B78C0
:100D6000002B0DD1FB685B68012B39D1FB681B6838
:100D7000013B7B61FB681800FFF7C6FF7B693EE023
:100D8000FB685B685A1EFB685A60FB685B68002B57
:100D900008D1FB1C1A78FB685A601F23FB1800223D
:100DA0001A7004E01F23FB18FA1C12781A70FB68F3
:100DB0001B68013BBB61BA697B689A4202D302237C
:100DC0005B421CE0BA68BB69D3181F22BA181278BC
:100DD0001A70FB681B685A1CFB681A6000230EE03F
:100DE000C046FB681800FFF78FFF01235B4206E057
:100DF000C046FB681800FFF787FF03235B4218001B
:100E0000BD4608B080BD0419000800000020940011
:100E1000002094000020D4090020000080B500AF1D
:100E20001A4B1A68194B01210A431A60174B5A686A
:100E3000164B17490A405A60144B1A68134B154950
:100E40000A401A60114B1A68104B13490A401A6085
:100E50000E4B5A680D4B11490A405A600B4BDA6A27
:100E60000A4B0F218A43DA62084B1A6B074B0C4975
:100E70000A401A63054B5A6B044B01218A435A639B
:100E8000024B00229A60C046BD4680BD0010024061
:100E90000CB8FF08FFFFF6FEFFFFFBFFFFFFC0FFE0
:100EA000ECFEFFFF80B584B000AF0023FB600023A1
:100EB000BB6000237B6000233B60314B5B680C22EE
:100EC0001340FB60FB68082B11D0FB68082B41D84E
:100ED000FB68002B03D0FB68042B04D03AE0294BBD
:100EE000294A1A603AE0274B274A1A6036E0244B19
:100EF0005A68F0239B031340BB60214B5A68802340
:100F00005B0213407B60BB689B0C0233BB601C4BD5
:100F1000DB6A0F22134001333B607A6880235B0257
:100F20009A420AD13968184800F03EFB03001A00C3
:100F3000BB685A43134B1A6010E0B9680A005201AB
:100F4000521A93019B1ADB005B181B021A000D4B0F
:100F50001A6003E00B4B0C4A1A60C046084B5B68F2
:100F60001B090F221340094AD35CFB60054B1A682A
:100F7000FB68DA40034B1A60C046BD4604B080BD32
:100F8000001002400000002000127A00EC18000857
:100F900080B500AF044B1A68034B8021C9020A4395
:100FA0001A60C046BD4680BD0010024080B500AF4B
:100FB000044B1A68034B04490A401A60C046BD46F8
:100FC00080BDC04600100240FFFFFBFF80B500AFB0
:100FD000044B1A68034B802149020A431A60C04639
:100FE000BD4680BD0010024080B500AF064B1A68B8
:100FF00080239B021340054A944663445A4253415E
:10100000DBB21800BD4680BD001002400000FEFFAC
:1010100080B500AF044B1A68034B01210A431A60E4
:10102000C046BD4680BDC0460010024080B500AF3E
:10103000054B1B6802221340023B5A425341DBB26C
:101040001800BD4680BDC0460010024080B582B089
:1010500000AF7860064B5B68032293431900044B92
:101060007A680A435A60C046BD4602B080BDC04699
:101070000010024080B500AF034B5B680C221340A8
:101080001800BD4680BDC0460010024080B582B049
:1010900000AF7860064B5B68F02293431900044B65
:1010A0007A680A435A60C046BD4602B080BDC04659
:1010B0000010024080B582B000AF7860064B5B68DC
:1010C000064A13401900044B7A680A435A60C04626
:1010D000BD4602B080BDC04600100240FFF8FFFFD1
:1010E00080B500AF044B1A68034B802149040A43C2
:1010F0001A60C046BD4680BD0010024080B500AFFA
:10110000074B1A6880239B041340FE221206944664
:1011100063445A425341DBB21800BD4680BDC0460D
:101120000010024080B582B000AF786039600E4B8D
:101130005B680E4A134019007A6880235B021A40EC
:101140003B681A43084B0A435A60074BDB6A0F227D
:10115000934319007B680F221A40034B0A43DA625B
:10116000C046BD4602B080BD00100240FFFFC2FF76
:1011700080B582B000AF786039603968786800F077
:1011800013FA03001A00064B013A5A60044B00227E
:101190009A60034B05221A60C046BD4602B080BD6E
:1011A00010E000E080B582B000AF7860064B1B68AD
:1011B000012293431900044B7A680A431A60C0461F
:1011C000BD4602B080BDC0460020024080B500AFE1
:1011D000034B1B68012213401800BD4680BDC0466A
:1011E0000020024080B582B000AF7860FA239A00F8
:1011F0007B6811001800FFF7BBFFC046BD4602B078
:1012000080BD80B584B000AF78600E4B1B68FB607A
:10121000FB687B6801330CD07B6801337B6008E09E
:10122000084B1A6880235B02134002D07B68013BA5
:101230007B607B68002BF3D1C046C046BD4604B03E
:1012400080BDC04610E000E080B582B000AF78609D
:10125000034B7A681A60C046BD4602B080BDC046E6
:101260000000002090B585B000AF786039600F2392
:10127000FB1801221A700023BB6000F0D4F80300B1
:10128000012B28D17B6801225A607B68174A19001C
:10129000100000F0ABF80300BB60FFF7C7FE0300CF
:1012A000012B07D0FFF7B4FEC046FFF7BFFE0300D7
:1012B000012BFAD17B681B6819000020FFF732FF71
:1012C0000F23FC183A68BB681100180000F0BEF844
:1012D0000300237003E00F23FB1800221A700F2372
:1012E000FB181B781800BD4605B090BD00127A00AF
:1012F00090B587B000AFF860B9607A603B601723A3
:10130000FB1801221A7000233B6100F08CF80300E7
:10131000012B32D17A68FB681100180000F066F8E2
:1013200003003B61FFF760FE0300012B0FD0BB6899
:10133000012B02D1FFF72CFE01E0FFF737FEFFF78C
:1013400045FEC046FFF750FE0300012BFAD17B6833
:101350005B68802252021A437B681B6819001000E8
:10136000FFF7E0FE1723FC183A683B6911001800EC
:1013700000F06CF80300237003E01723FB18002231
:101380001A701723FB181B781800BD4607B090BDD4
:1013900080B584B000AF78600F217B1801221A70ED
:1013A0000023BB607B68002B03D17B1800221A70DE
:1013B00013E07B680C4A934201D90123BB60BB68F0
:1013C0001800FFF7EFFEFFF701FF0200BB68934232
:1013D00003D00F23FB1800221A700F23FB181B7871
:1013E0001800BD4604B080BD00366E0180B584B0E3
:1013F00000AF786039600023FB603B685B680133B5
:101400001900786800F0D0F8030019003B681B68E9
:101410009B0C0F22134002334B43FB60FB68180008
:10142000BD4604B080BD80B582B000AFFB1D012277
:101430001A70FFF763FE031E02D0FB1D00221A7014
:10144000FB1D1B781800BD4602B080BD90B585B06D
:1014500000AF786039600F203B1801221A7000231A
:10146000BB602E4B1A683B681B681B090F210B40A1
:101470002B49CB5C9A401300BB60BA687B689A42E8
:1014800006D23C187B681800FFF782FF0300237028
:101490000F23FB181B78012B1AD1FFF721FEC04642
:1014A000FFF72CFE0300012BFAD13B681B681800E4
:1014B000FFF7ECFD0220FFF7C9FDC046FFF7DAFD9C
:1014C0000300082BFAD13B685B681800FFF7F2FDB8
:1014D000BA687B689A4207D90F23FC187B6818000A
:1014E000FFF756FF030023700F23FB181B78012B17
:1014F0000CD13B681B681B090F221340084AD35CC0
:101500001A007B68D3401800FFF79EFE0F23FB18DC
:101510001B781800BD4605B090BDC04600000020F5
:10152000EC18000880B500AFC046BD4680BD80B550
:1015300086B000AFF860B9607A60FA687B68D3184B
:101540003B61FB687B6106E0BB68DAB27B691A70BD
:101550007B6901337B617A693B699A42F4D3FB680A
:101560001800BD4606B080BD80B584B000AF78607D
:101570007B68FB60C0467B685A1C7A601B78002B36
:10158000F9D17A68FB68D31A013B1800BD4604B054
:1015900080BD80B582B000AF0200FB1D1A70C0464E
:1015A000BD4602B080BD0000002243088B4274D3C8
:1015B00003098B425FD3030A8B4244D3030B8B4254
:1015C00028D3030C8B420DD3FF22090212BA030C5D
:1015D0008B4202D31212090265D0030B8B4219D33E
:1015E00000E0090AC30B8B4201D3CB03C01A52415E
:1015F000830B8B4201D38B03C01A5241430B8B42A6
:1016000001D34B03C01A5241030B8B4201D30B038E
:10161000C01A5241C30A8B4201D3CB02C01A5241B5
:10162000830A8B4201D38B02C01A5241430A8B4278
:1016300001D34B02C01A5241030A8B4201D30B0261
:10164000C01A5241CDD2C3098B4201D3CB01C01A7B
:10165000524183098B4201D38B01C01A5241430985
:101660008B4201D34B01C01A524103098B4201D373
:101670000B01C01A5241C3088B4201D3CB00C01AE0
:10168000524183088B4201D38B00C01A5241430858
:101690008B4201D34B00C01A5241411A00D201467D
:1016A000524110467047FFE701B5002000F0F0F806
:1016B00002BDC0460029F7D076E7704703460B43CA
:1016C0007FD4002243088B4274D303098B425FD33B
:1016D000030A8B4244D3030B8B4228D3030C8B4267
:1016E0000DD3FF22090212BA030C8B4202D312124D
:1016F000090265D0030B8B4219D300E0090AC30B22
:101700008B4201D3CB03C01A5241830B8B4201D3CE
:101710008B03C01A5241430B8B4201D34B03C01AB7
:101720005241030B8B4201D30B03C01A5241C30A2F
:101730008B4201D3CB02C01A5241830A8B4201D3A0
:101740008B02C01A5241430A8B4201D34B02C01A8A
:101750005241030A8B4201D30B02C01A5241CDD22F
:10176000C3098B4201D3CB01C01A524183098B427A
:1017700001D38B01C01A524143098B4201D34B0163
:10178000C01A524103098B4201D30B01C01A5241C6
:10179000C3088B4201D3CB00C01A524183088B424D
:1017A00001D38B00C01A524143088B4201D34B0036
:1017B000C01A5241411A00D20146524110467047A8
:1017C0005DE0CA0F00D04942031000D340425340AD
:1017D00000229C4603098B422DD3030A8B4212D36D
:1017E000FC22890112BA030A8B420CD3890192119F
:1017F0008B4208D3890192118B4204D389013AD0DC
:10180000921100E08909C3098B4201D3CB01C01AB0
:10181000524183098B4201D38B01C01A52414309C3
:101820008B4201D34B01C01A524103098B4201D3B1
:101830000B01C01A5241C3088B4201D3CB00C01A1E
:10184000524183088B4201D38B00C01A5241D9D236
:1018500043088B4201D34B00C01A5241411A00D2B7
:101860000146634652415B10104601D34042002BB3
:1018700000D54942704763465B1000D3404201B532
:10188000002000F005F802BD0029F8D016E77047E7
:101890007047C0460C488546002103E00B4B5B585F
:1018A000435004310A480B4B42189A42F6D30A4A75
:1018B00002E0002313600432084B9A42F9D3FFF789
:1018C000ADFAFEF7AAFCFEE700100020041900089C
:1018D000000000209400002094000020D409002083
:1018E000FEE70000464F4F4241520A000000000050
:1018F00000000000010203040607080900000000C0
:0419000001020304D9
:1019040000127A000004004000200040002800403B
:10191400002C0040003000400054004000700040A3
:101924000000014000040140002401400827014058
:1019340008270140002C01400030014000380140DC
:1019440000440140004801400058014000000240AA
:10195400080002401C0002403000024044000240E3
:10196400580002400020024000F8FF1F001002400F
:10197400003002400000004800040048000800480D
:10198400000C00480014004800ED00E010E000E006
:0419940000E100E08E
:040000050800189542
:1002100080B500AFC046BD4680BD80B500AF534B32
:100220001A68524B802149020A431A60C0464F4B5C
:100230001A6880239B021340F9D04C4B5A684B4BF1
:100240004B490A405A60494B5A68484B8821490338
:100250000A435A60454B1A68444B802149040A43BB
:100260001A60C046414B1A6880239B041340F9D0A2
:100270003E4B5A683D4B02210A435A6000F072FE21
:100280003C4B1B680A21180001F0EEF9030018002E
:10029000FFF79AFF01235B421800FFF711FF0123CC
:1002A0005B4260211800FFF721FF304B5A692F4B4A
:1002B00031490A435A612D4B9A692C4B2F490A4305
:1002C0009A612A4BDA69294B02210A43DA619023A9
:1002D000DB051A689023DB0529490A431A6090233D
:1002E000DB059A689023DB0526490A439A60902330
:1002F000DB0500221A629023DB05882252005A6235
:10030000214A214B12681A60204BC92292001A60C0
:100310001E4BE022D2005A601C4B1A681B4B402136
:100320000A431A601920FFF7CBFE40211920FFF77E
:10033000DDFE174B00225A60154B0122DA60144B88
:100340002F229A62124B134ADA62114B01221A6071
:100350001520FFF7B5FE40211520FFF7C7FE0E4B15
:10036000180000F045F900F0CDFAFEE70010024059
:100370000CF8C3FF0000002011000600015A4200E3
:1003800070A92800808A080000040048003001405D
:1003900000440140E703000040420F0080B500AF79
:1003A000084B9B680222134009D09023DB050822EA
:1003B0009A61044B5A68034B80218A435A60C046B5
:1003C000BD4680BD0030014080B582B000AF284BF3
:1003D0001B690122134047D0254B1A69244B012188
:1003E0008A431A61FB1D00221A70BB1D01221A707C
:1003F00000233B601DE01F4B3A689200D358002B4E
:100400000FD01C4B3A689200D358591E194B3A68CA
:100410009200D150FB1DF91DBA1D097812780A43CC
:100420001A70BA1DBB1D1B78DB1813703B680133B3
:100430003B603B68072BDED90F4B1B68591C0E4AEB
:1004400011600A2B10D10C4B00221A600B4AFB1DC5
:100450001B7813700A4B5A68094B80210A435A6073
:100460009023DB0508229A62C046BD4602B080BDDB
:1004700000440140B0000020980000200C300140F2
:100480000030014080B500AF00BEC046BD4680BD13
:1004900000BEC04680B500AF00BEC046BD4680BDB0
:1004A00080B500AF00BEC046BD4680BD80B500AF80
:1004B0000A4B1B68591C094A11600A2B0AD1074BC9
:1004C00000221A60064B1B685A1C054B1A60054B2C
:1004D00064229A61C046BD4680BDC0469C00002093
:1004E00094000020B000002080B582B000AF020070
:1004F000FB1D1A70FB1D1B781A001F231A40044BAA
:10050000012191400A001A60C046BD4602B080BD7C
:1005100000E100E090B583B000AF02003960FB1D40
:100520001A70FB1D1B787F2B32D92F4AFB1D1B78BD
:1005300019000F230B40083B9B0806339B00D31880
:1005400004331B68FA1D1278110003220A40D200FE
:10055000FF2191400A00D2431A4011003B689B01E1
:10056000FF221A40FB1D1B78180003230340DB0009
:100570009A401D48FB1D1B781C000F232340083B9D
:100580009B080A4306339B00C31804331A6027E014
:10059000164AFB1D1B785BB29B08C0339B009B581F
:1005A000FA1D1278110003220A40D200FF21914067
:1005B0000A00D2431A4011003B689B01FF221A40F7
:1005C000FB1D1B78180003230340DB009A400748FB
:1005D000FB1D1B785BB29B080A43C0339B001A507B
:1005E000C046BD4603B090BD00ED00E000E100E074
:1005F00080B584B000AF7860202000F04BF8214B2C
:10060000802212061A611F4B07225A611D4B1E4A97
:10061000DA601C4B04229A621A4B9A68194B8021AB
:1006200009060A439A60C046164B9B68002BFBDB09
:10063000144B9A68134B01210A439A60114B9A6834
:10064000104B04210A439A607B68104A934206DDEE
:100650007B68FA21180001F091F8030000E00623FE
:10066000FB60FA6880235B029A4201DB084BFB6067
:10067000FB6819000C2000F03DF8C046BD4604B0F0
:1006800080BDC0460024014043080000DC05000096
:10069000FFFF000080B582B000AF7860114B124AB6
:1006A0009A60104B114ADA600E4B7A685A600D4B13
:1006B00000221A600B4B1A680A4B0D490A431A6054
:1006C0000920FFF711FF60210920FFF723FF054BE9
:1006D0001A68044B01210A431A60C046BD4602B0A5
:1006E00080BDC0460800024040240140D0000020E8
:1006F000A605000080B582B000AF78603960154B68
:10070000802212025A64134BC022D201DA61114BCB
:10071000802252011A620F4B01221A647B685A1E12
:100720000C4B9A623B685A1E0A4BDA62094B5A69B3
:10073000084B01210A435A61064B80221A60054B7F
:100740001A68044B01210A431A60C046BD4602B034
:1007500080BDC046002C014080B500AFC046BD46FC
:1007600080BD80B582B000AF144B1B683B60134B5B
:100770005A68124B01210A435A60FFF7EDFF3B68AC
:100780004022134007D00E4B2021180000F0C6F97C
:1007900003007B6006E00B4B2021180000F0BEF93F
:1007A00003007B607B68002B04D0074B1B685A1C3E
:1007B000054B1A60C046BD4602B080BD0000024035
:1007C000D0000020E0000020A000002080B582B012
:1007D00000AF0200FB1D1A70FB1D1B781A001F23BF
:1007E0001A40044B012191400A001A60C046BD46E0
:1007F00002B080BD00E100E080B582B000AF020031
:10080000FB1D1A70FB1D1B781A001F23134005499E
:1008100001229A40130080228B50C046BD4602B090
:1008200080BDC04600E100E090B583B000AF02009B
:100830003960FB1D1A70FB1D1B787F2B32D92F4AA4
:10084000FB1D1B7819000F230B40083B9B08063348
:100850009B00D31804331B68FA1D12781100032281
:100860000A40D200FF2191400A00D2431A401100F1
:100870003B689B01FF221A40FB1D1B7818000323D5
:100880000340DB009A401D48FB1D1B781C000F2312
:100890002340083B9B080A4306339B00C3180433DC
:1008A0001A6027E0164AFB1D1B785BB29B08C03319
:1008B0009B009B58FA1D1278110003220A40D200B7
:1008C000FF2191400A00D2431A4011003B689B016E
:1008D000FF221A40FB1D1B78180003230340DB0096
:1008E0009A400748FB1D1B785BB29B080A43C03344
:1008F0009B001A50C046BD4603B090BD00ED00E01D
:1009000000E100E080B500AF194B012252421A60AD
:10091000174B00225A60164B00229A60154B164A5C
:100920009A60144B92221A600A20FFF74FFF202191
:100930000A20FFF779FF114B114A1A600F4B602212
:10094000DA600E4BC022DA600C4BC02292025A6071
:100950000A4B9A68094B80210A439A60074B1A6830
:10096000064B01210A431A60C046BD4680BDC04601
:10097000100100201C0002402838014000380140CE
:100980002C20000080B584B000AF194BBB60BB6861
:100990005B687B60BB689B687A689A4205D2BB68DB
:1009A0009A687B68D31AFB6004E07B688022D200DF
:1009B000D31AFB60BB687A681A607A68FB68D31840
:1009C0009B059A0DBB685A60BB680C331A007B68A4
:1009D000D218084BDA60074BFA685A60054B1A6860
:1009E000044B01210A431A60C046BD4604B080BDD5
:1009F000100100201C00024080B582B000AF78607A
:100A00000A00FB1C1A700A20FFF7F6FE7B689A6842
:100A10007B681B689A4205D10A20FFF7D7FE102396
:100A20005B4211E07B689B687A68D318FA1C1278E5
:100A30001A737B689B6801339B059A0D7B689A60EB
:100A40000A20FFF7C3FE00231800BD4602B080BD98
:100A500080B582B000AF0200FB1D1A70C046FB1DBE
:100A60001A78064B11001800FFF7C6FF0300103379
:100A7000F5D000231800BD4602B080BD1001002053
:100A800080B582B000AF0200FB1D1A70FB1D1A7802
:100A9000044B11001800FFF7AFFF03001800BD461C
:100AA00002B080BD1001002080B500AF0B4B5A682A
:100AB0000A4B20210A435A60094B1A68084B01214E
:100AC0008A431A60074B9A68064B5B689A4201D0CA
:100AD000FFF758FFC046BD4680BDC046000002403B
:100AE0001C0002401001002080B582B000AF786089
:100AF00039603A687968074B180000F09CF8064B9B
:100B00001B680122134001D1FFF73CFFC046BD46E0
:100B100002B080BD510A00081C00024080B584B0BC
:100B200000AF786039600023FB600BE00E4B1B7850
:100B30005A1CD1B20C4A11701800FFF7A1FFFB68D4
:100B40000133FB60FA68AF235B009A42EED9074B92
:100B50001B680122134001D1FFF714FF0023180086
:100B6000BD4604B080BDC046A40000201C00024069
:100B700080B588B000AFF860B9607A603B60BA6851
:100B800080235B029A4202D23B68FE2B02D90123EA
:100B90005B424CE03B680233BA689A4202D20123BE
:100BA0005B4244E00023FB6136E0FB69002B0FD081
:100BB000FB69013B7A68D3181B78002B08D0FB69CE
:100BC000013B7A68D2181B23FB1812781A7019E0BF
:100BD000FB697B6102E07B6901337B617A693B6879
:100BE0009A4205D27A687B69D3181B78002BF2D120
:100BF0007B69DAB2FB69DBB2D31ADAB21B23FB18CA
:100C000001321A70FA68FB69D3181B22BA181278DD
:100C10001A70FB690133FB61FA693B689A42C4D9D7
:100C2000FA68FB69D31800221A703B680233180077
:100C3000BD4608B080BD80B58AB000AFF860B9602D
:100C40007A607B68FE2B02D901235B424EE00023D1
:100C50007B623CE07B6A002B0FD07B6A013BBA6869
:100C6000D3181B78002B08D07B6A013BBA68D218D6
:100C70002323FB1812781A7019E07B6AFB6102E0EB
:100C8000FB690133FB61FA697B689A4205D2BA6855
:100C9000FB69D3181B78002BF2D1FB69DAB27B6AAF
:100CA000DBB2D31ADAB22323FB1801321A702323E2
:100CB000FB181A78FB681000984703007B617B697A
:100CC000002B01D07B6911E07B6A01337B627A6A79
:100CD0007B689A42BED9FB68002098470300BB613D
:100CE000BB69002B01D0BB6900E000231800BD46A2
:100CF0000AB080BD80B588B000AFF860B9607A6096
:100D00003B60BA6880235B029A4204D23A6880232F
:100D10005B029A4202D301235B4252E03B68002B04
:100D200002D101235B424CE0BA683B689A4202D28E
:100D300001235B4245E00123FB617B681B78BB61BB
:100D4000BB69002B24D102235B423AE0BB69013B23
:100D5000BB61BB69002B09D17A68FB69D3181B788A
:100D6000BB611723FB1800221A7006E07A68FB6942
:100D7000D2181723FB1812781A70FB69013BFA6826
:100D8000D3181722BA1812781A70FB690133FB6165
:100D9000FA693B689A4205D27A68FB69D3181B78D6
:100DA000002BD3D1FA693B689A4202D102235B42FD
:100DB00007E0BB69012B02D003235B4201E0FB6922
:100DC000013B1800BD4608B080BD80B582B000AFC1
:100DD00078607B6800221A607B6800225A60C046F7
:100DE000BD4602B080BD80B588B000AFF860B96084
:100DF0007A601A00FB1C1A70FB681B68002B0ED16E
:100E0000FB1C1B78002B54D0FB1C1A78FB685A6023
:100E1000FB681B685A1CFB681A60002350E0FB1C2F
:100E20001B78002B0DD1FB685B68012B39D1FB6867
:100E30001B68013B7B61FB681800FFF7C6FF7B69FD
:100E40003EE0FB685B685A1EFB685A60FB685B68A3
:100E5000002B08D1FB1C1A78FB685A601F23FB1873
:100E600000221A7004E01F23FB18FA1C12781A7073
:100E7000FB681B68013BBB61BA697B689A4202D37D
:100E800002235B421CE0BA68BB69D3181F22BA1860
:100E900012781A70FB681B685A1CFB681A600023E2
:100EA0000EE0C046FB681800FFF78FFF01235B428E
:100EB00006E0C046FB681800FFF787FF03235B428C
:100EC0001800BD4608B080BDBC1900080000002015
:100ED00094000020940000201C05002080B500AF85
:100EE0001A4B1A68194B01210A431A60174B5A68AA
:100EF000164B17490A405A60144B1A68134B154990
:100F00000A401A60114B1A68104B13490A401A60C4
:100F10000E4B5A680D4B11490A405A600B4BDA6A66
:100F20000A4B0F218A43DA62084B1A6B074B0C49B4
:100F30000A401A63054B5A6B044B01218A435A63DA
:100F4000024B00229A60C046BD4680BD00100240A0
:100F50000CB8FF08FFFFF6FEFFFFFBFFFFFFC0FF1F
:100F6000ECFEFFFF80B584B000AF0023FB600023E0
:100F7000BB6000237B6000233B60314B5B680C222D
:100F80001340FB60FB68082B11D0FB68082B41D88D
:100F9000FB68002B03D0FB68042B04D03AE0294BFC
:100FA000294A1A603AE0274B274A1A6036E0244B58
:100FB0005A68F0239B031340BB60214B5A6880237F
:100FC0005B0213407B60BB689B0C0233BB601C4B15
:100FD000DB6A0F22134001333B607A6880235B0297
:100FE0009A420AD13968184800F03EFB03001A0003
:100FF000BB685A43134B1A6010E0B9680A005201EB
:10100000521A93019B1ADB005B181B021A000D4B4E
:101010001A6003E00B4B0C4A1A60C046084B5B6831
:101020001B090F221340094AD35CFB60054B1A6869
:10103000FB68DA40034B1A60C046BD4604B080BD71
:10104000001002400000002000127A00A4190008DD
:1010500080B500AF044B1A68034B8021C9020A43D4
:101060001A60C046BD4680BD0010024080B500AF8A
:10107000044B1A68034B04490A401A60C046BD4637
:1010800080BDC04600100240FFFFFBFF80B500AFEF
:10109000044B1A68034B802149020A431A60C04678
:1010A000BD4680BD0010024080B500AF064B1A68F7
:1010B00080239B021340054A944663445A4253419D
:1010C000DBB21800BD4680BD001002400000FEFFEC
:1010D00080B500AF044B1A68034B01210A431A6024
:1010E000C046BD4680BDC0460010024080B500AF7E
:1010F000054B1B6802221340023B5A425341DBB2AC
:101100001800BD4680BDC0460010024080B582B0C8
:1011100000AF7860064B5B68032293431900044BD1
:101120007A680A435A60C046BD4602B080BDC046D8
:101130000010024080B500AF034B5B680C221340E7
:101140001800BD4680BDC0460010024080B582B088
:1011500000AF7860064B5B68F02293431900044BA4
:101160007A680A435A60C046BD4602B080BDC04698
:101170000010024080B582B000AF7860064B5B681B
:10118000064A13401900044B7A680A435A60C04665
:10119000BD4602B080BDC04600100240FFF8FFFF10
:1011A00080B500AF044B1A68034B802149040A4301
:1011B0001A60C046BD4680BD0010024080B500AF39
:1011C000074B1A6880239B041340FE2212069446A4
:1011D00063445A425341DBB21800BD4680BDC0464D
:1011E0000010024080B582B000AF786039600E4BCD
:1011F0005B680E4A134019007A6880235B021A402C
:101200003B681A43084B0A435A60074BDB6A0F22BC
:10121000934319007B680F221A40034B0A43DA629A
:10122000C046BD4602B080BD00100240FFFFC2FFB5
:1012300080B582B000AF786039603968786800F0B6
:1012400013FA03001A00064B013A5A60044B0022BD
:101250009A60034B05221A60C046BD4602B080BDAD
:1012600010E000E080B582B000AF7860064B1B68EC
:10127000012293431900044B7A680A431A60C0465E
:10128000BD4602B080BDC0460020024080B500AF20
:10129000034B1B68012213401800BD4680BDC046A9
:1012A0000020024080B582B000AF7860FA239A0037
:1012B0007B6811001800FFF7BBFFC046BD4602B0B7
:1012C00080BD80B584B000AF78600E4B1B68FB60BA
:1012D000FB687B6801330CD07B6801337B6008E0DE
:1012E000084B1A6880235B02134002D07B68013BE5
:1012F0007B607B68002BF3D1C046C046BD4604B07E
:1013000080BDC04610E000E080B582B000AF7860DC
:10131000034B7A681A60C046BD4602B080BDC04625
:101320000000002090B585B000AF786039600F23D1
:10133000FB1801221A700023BB6000F0D4F80300F0
:10134000012B28D17B6801225A607B68174A19005B
:10135000100000F0ABF80300BB60FFF7C7FE03000E
:10136000012B07D0FFF7B4FEC046FFF7BFFE030016
:10137000012BFAD17B681B6819000020FFF732FFB0
:101380000F23FC183A68BB681100180000F0BEF883
:101390000300237003E00F23FB1800221A700F23B1
:1013A000FB181B781800BD4605B090BD00127A00EE
:1013B00090B587B000AFF860B9607A603B601723E2
:1013C000FB1801221A7000233B6100F08CF8030027
:1013D000012B32D17A68FB681100180000F066F822
:1013E00003003B61FFF760FE0300012B0FD0BB68D9
:1013F000012B02D1FFF72CFE01E0FFF737FEFFF7CC
:1014000045FEC046FFF750FE0300012BFAD17B6872
:101410005B68802252021A437B681B681900100027
:10142000FFF7E0FE1723FC183A683B69110018002B
:1014300000F06CF80300237003E01723FB18002270
:101440001A701723FB181B781800BD4607B090BD13
:1014500080B584B000AF78600F217B1801221A702C
:101460000023BB607B68002B03D17B1800221A701D
:1014700013E07B680C4A934201D90123BB60BB682F
:101480001800FFF7EFFEFFF701FF0200BB68934271
:1014900003D00F23FB1800221A700F23FB181B78B0
:1014A0001800BD4604B080BD00366E0180B584B022
:1014B00000AF786039600023FB603B685B680133F4
:1014C0001900786800F0D0F8030019003B681B6829
:1014D0009B0C0F22134002334B43FB60FB68180048
:1014E000BD4604B080BD80B582B000AFFB1D0122B7
:1014F0001A70FFF763FE031E02D0FB1D00221A7054
:10150000FB1D1B781800BD4602B080BD90B585B0AC
:1015100000AF786039600F203B1801221A70002359
:10152000BB602E4B1A683B681B681B090F210B40E0
:101530002B49CB5C9A401300BB60BA687B689A4227
:1015400006D23C187B681800FFF782FF0300237067
:101550000F23FB181B78012B1AD1FFF721FEC04681
:10156000FFF72CFE0300012BFAD13B681B68180023
:10157000FFF7ECFD0220FFF7C9FDC046FFF7DAFDDB
:101580000300082BFAD13B685B681800FFF7F2FDF7
:10159000BA687B689A4207D90F23FC187B68180049
:1015A000FFF756FF030023700F23FB181B78012B56
:1015B0000CD13B681B681B090F221340084AD35CFF
:1015C0001A007B68D3401800FFF79EFE0F23FB181C
:1015D0001B781800BD4605B090BDC0460000002035
:1015E000A419000880B500AFC046BD4680BD80B5D7
:1015F00086B000AFF860B9607A60FA687B68D3188B
:101600003B61FB687B6106E0BB68DAB27B691A70FC
:101610007B6901337B617A693B699A42F4D3FB6849
:101620001800BD4606B080BD80B584B000AF7860BC
:101630007B68FB60C0467B685A1C7A601B78002B75
:10164000F9D17A68FB68D31A013B1800BD4604B093
:1016500080BD80B582B000AF0200FB1D1A70C0468D
:10166000BD4602B080BD0000002243088B4274D307
:1016700003098B425FD3030A8B4244D3030B8B4293
:1016800028D3030C8B420DD3FF22090212BA030C9C
:101690008B4202D31212090265D0030B8B4219D37D
:1016A00000E0090AC30B8B4201D3CB03C01A52419D
:1016B000830B8B4201D38B03C01A5241430B8B42E5
:1016C00001D34B03C01A5241030B8B4201D30B03CE
:1016D000C01A5241C30A8B4201D3CB02C01A5241F5
:1016E000830A8B4201D38B02C01A5241430A8B42B8
:1016F00001D34B02C01A5241030A8B4201D30B02A1
:10170000C01A5241CDD2C3098B4201D3CB01C01ABA
:10171000524183098B4201D38B01C01A52414309C4
:101720008B4201D34B01C01A524103098B4201D3B2
:101730000B01C01A5241C3088B4201D3CB00C01A1F
:10174000524183088B4201D38B00C01A5241430897
:101750008B4201D34B00C01A5241411A00D20146BC
:10176000524110467047FFE701B5002000F0F0F845
:1017700002BDC0460029F7D076E7704703460B4309
:101780007FD4002243088B4274D303098B425FD37A
:10179000030A8B4244D3030B8B4228D3030C8B42A6
:1017A0000DD3FF22090212BA030C8B4202D312128C
:1017B000090265D0030B8B4219D300E0090AC30B61
:1017C0008B4201D3CB03C01A5241830B8B4201D30E
:1017D0008B03C01A5241430B8B4201D34B03C01AF7
:1017E0005241030B8B4201D30B03C01A5241C30A6F
:1017F0008B4201D3CB02C01A5241830A8B4201D3E0
:101800008B02C01A5241430A8B4201D34B02C01AC9
:101810005241030A8B4201D30B02C01A5241CDD26E
:10182000C3098B4201D3CB01C01A524183098B42B9
:1018300001D38B01C01A524143098B4201D34B01A2
:10184000C01A524103098B4201D30B01C01A524105
:10185000C3088B4201D3CB00C01A524183088B428C
:1018600001D38B00C01A524143088B4201D34B0075
:10187000C01A5241411A00D20146524110467047E7
:101880005DE0CA0F00D04942031000D340425340EC
:1018900000229C4603098B422DD3030A8B4212D3AC
:1018A000FC22890112BA030A8B420CD389019211DE
:1018B0008B4208D3890192118B4204D389013AD01B
:1018C000921100E08909C3098B4201D3CB01C01AF0
:1018D000524183098B4201D38B01C01A5241430903
:1018E0008B4201D34B01C01A524103098B4201D3F1
:1018F0000B01C01A5241C3088B4201D3CB00C01A5E
:10190000524183088B4201D38B00C01A5241D9D275
:1019100043088B4201D34B00C01A5241411A00D2F6
:101920000146634652415B10104601D34042002BF2
:1019300000D54942704763465B1000D3404201B571
:10194000002000F005F802BD0029F8D016E7704726
:101950007047C0460C488546002103E00B4B5B589E
:10196000435004310A480B4B42189A42F6D30A4AB4
:1019700002E0002313600432084B9A42F9D3FFF7C8
:10198000ADFAFEF74AFCFEE700100020BC19000883
:101990000000002094000020940000201C0500207E
:1019A000FEE7000000000000000000000102030448
:0C19B00006070809000000000102030403
:1019BC0000127A0000040040002000400028004083
:1019CC00002C0040003000400054004000700040EB
:1019DC0000000140000401400024014008270140A0
:1019EC0008270140002C0140003001400038014024
:1019FC0000440140004801400058014000000240F2
:101A0C00080002401C00024030000240440002402A
:101A1C00580002400020024000F8FF1F0010024056
:101A2C000030024000000048000400480008004854
:101A3C00000C00480014004800ED00E010E000E04D
:041A4C0000E100E0D5
:040000050800195581
:00000001FF

File diff suppressed because it is too large Load diff

View file

@ -1,18 +1,18 @@
Archive member included to satisfy reference by file (symbol)
/usr/lib/gcc/arm-none-eabi/9.2.0/thumb/v6-m/nofp/libgcc.a(_udivsi3.o)
/tmp/cchCmUnQ.o (__aeabi_uidiv)
/tmp/ccxtvPlT.o (__aeabi_uidiv)
/usr/lib/gcc/arm-none-eabi/9.2.0/thumb/v6-m/nofp/libgcc.a(_divsi3.o)
/tmp/cczzmF2c.o (__aeabi_idiv)
/tmp/ccrrpgrR.o (__aeabi_idiv)
/usr/lib/gcc/arm-none-eabi/9.2.0/thumb/v6-m/nofp/libgcc.a(_dvmd_tls.o)
/usr/lib/gcc/arm-none-eabi/9.2.0/thumb/v6-m/nofp/libgcc.a(_udivsi3.o) (__aeabi_idiv0)
Allocating common symbols
Common symbol size file
usart_tx_buf 0x10c /tmp/cc4OHQ7z.o
leds 0x20 /tmp/cchCmUnQ.o
adc_buf 0x800 /tmp/cczzmF2c.o
usart_tx_buf 0x40c /tmp/ccXNIrIP.o
leds 0x20 /tmp/ccxtvPlT.o
adc_buf 0x40 /tmp/ccrrpgrR.o
Memory Configuration
@ -25,151 +25,151 @@ RAM 0x0000000020000000 0x0000000000001000 xrw
Linker script and memory map
LOAD /home/user/resource/STM32CubeF0/Drivers/CMSIS/Lib/GCC/libarm_cortexM0l_math.a
LOAD /tmp/cchCmUnQ.o
LOAD /tmp/cczzmF2c.o
LOAD /tmp/cc4OHQ7z.o
LOAD /tmp/cc0OqFzX.o
LOAD /tmp/ccTaPb5k.o
LOAD /tmp/cc6XVkRI.o
LOAD /tmp/ccvZIDd7.o
LOAD /tmp/ccTEVTRv.o
LOAD /tmp/ccvICuLU.o
LOAD /tmp/ccxtvPlT.o
LOAD /tmp/ccrrpgrR.o
LOAD /tmp/ccXNIrIP.o
LOAD /tmp/ccy0xC7N.o
LOAD /tmp/ccr2qryM.o
LOAD /tmp/ccJ50X5K.o
LOAD /tmp/ccFUXyQJ.o
LOAD /tmp/cc8rJnLI.o
LOAD /tmp/ccDd2fMH.o
LOAD /usr/lib/gcc/arm-none-eabi/9.2.0/thumb/v6-m/nofp/libgcc.a
0x0000000020001000 _estack = 0x20001000
.isr_vector 0x0000000008000000 0xc0
0x0000000008000000 . = ALIGN (0x4)
*(.isr_vector)
.isr_vector 0x0000000008000000 0xc0 /tmp/ccTaPb5k.o
.isr_vector 0x0000000008000000 0xc0 /tmp/ccr2qryM.o
0x0000000008000000 g_pfnVectors
0x00000000080000c0 . = ALIGN (0x4)
.text 0x00000000080000c0 0x1844
.text 0x00000000080000c0 0x18fc
0x00000000080000c0 . = ALIGN (0x4)
*(.text)
.text 0x00000000080000c0 0x454 /tmp/cchCmUnQ.o
.text 0x00000000080000c0 0x428 /tmp/ccxtvPlT.o
0x0000000008000210 update_leds
0x000000000800021a main
0x00000000080003c8 SPI1_IRQHandler
0x00000000080003f4 TIM16_IRQHandler
0x00000000080004b0 NMI_Handler
0x00000000080004bc HardFault_Handler
0x00000000080004c0 SVC_Handler
0x00000000080004cc PendSV_Handler
0x00000000080004d8 SysTick_Handler
.text 0x0000000008000514 0x29c /tmp/cczzmF2c.o
0x000000000800061c adc_configure_scope_mode
0x0000000008000792 DMA1_Channel1_IRQHandler
.text 0x00000000080007b0 0x31c /tmp/cc4OHQ7z.o
0x00000000080008e8 usart_dma_init
0x00000000080009d4 usart_dma_fifo_push
0x0000000008000a2c usart_putc
0x0000000008000a5c DMA1_Channel2_3_IRQHandler
0x0000000008000a9c usart_send_packet
.text 0x0000000008000acc 0x33a /tmp/cc0OqFzX.o
0x0000000008000acc cobs_encode
0x0000000008000b92 cobs_encode_usart
0x0000000008000c32 cobs_decode
0x0000000008000d08 cobs_decode_incremental_initialize
0x0000000008000d24 cobs_decode_incremental
.text 0x0000000008000e06 0x14 /tmp/ccTaPb5k.o
*fill* 0x0000000008000e1a 0x2
.text 0x0000000008000e1c 0x174 /tmp/cc6XVkRI.o
0x0000000008000e1c SystemInit
0x0000000008000ea4 SystemCoreClockUpdate
.text 0x0000000008000f90 0x594 /tmp/ccvZIDd7.o
0x00000000080011e4 LL_Init1msTick
0x0000000008001202 LL_mDelay
0x0000000008001248 LL_SetSystemCoreClock
0x0000000008001264 LL_PLL_ConfigSystemClock_HSI
0x00000000080012f0 LL_PLL_ConfigSystemClock_HSE
.text 0x0000000008001524 0x82 /tmp/ccTEVTRv.o
0x0000000008001524 __sinit
0x000000000800152e memset
0x0000000008001568 strlen
0x0000000008001592 __assert_func
.text 0x00000000080015a6 0x0 /tmp/ccvICuLU.o
*fill* 0x00000000080015a6 0x2
.text 0x00000000080015a8 0x114 /usr/lib/gcc/arm-none-eabi/9.2.0/thumb/v6-m/nofp/libgcc.a(_udivsi3.o)
0x00000000080015a8 __udivsi3
0x00000000080015a8 __aeabi_uidiv
0x00000000080016b4 __aeabi_uidivmod
.text 0x00000000080016bc 0x1d4 /usr/lib/gcc/arm-none-eabi/9.2.0/thumb/v6-m/nofp/libgcc.a(_divsi3.o)
0x00000000080016bc __aeabi_idiv
0x00000000080016bc __divsi3
0x0000000008001888 __aeabi_idivmod
.text 0x0000000008001890 0x4 /usr/lib/gcc/arm-none-eabi/9.2.0/thumb/v6-m/nofp/libgcc.a(_dvmd_tls.o)
0x0000000008001890 __aeabi_ldiv0
0x0000000008001890 __aeabi_idiv0
0x000000000800039c SPI1_IRQHandler
0x00000000080003c8 TIM16_IRQHandler
0x0000000008000484 NMI_Handler
0x0000000008000490 HardFault_Handler
0x0000000008000494 SVC_Handler
0x00000000080004a0 PendSV_Handler
0x00000000080004ac SysTick_Handler
.text 0x00000000080004e8 0x2e4 /tmp/ccrrpgrR.o
0x00000000080005f0 adc_configure_scope_mode
0x0000000008000762 DMA1_Channel1_IRQHandler
.text 0x00000000080007cc 0x3a4 /tmp/ccXNIrIP.o
0x0000000008000904 usart_dma_init
0x00000000080009f8 usart_dma_fifo_push
0x0000000008000a50 usart_putc
0x0000000008000a80 usart_putc_nonblocking
0x0000000008000aa8 DMA1_Channel2_3_IRQHandler
0x0000000008000ae8 usart_send_packet
0x0000000008000b1c usart_send_packet_nonblocking
.text 0x0000000008000b70 0x358 /tmp/ccy0xC7N.o
0x0000000008000b70 cobs_encode
0x0000000008000c36 cobs_encode_usart
0x0000000008000cf4 cobs_decode
0x0000000008000dca cobs_decode_incremental_initialize
0x0000000008000de6 cobs_decode_incremental
.text 0x0000000008000ec8 0x14 /tmp/ccr2qryM.o
.text 0x0000000008000edc 0x174 /tmp/ccJ50X5K.o
0x0000000008000edc SystemInit
0x0000000008000f64 SystemCoreClockUpdate
.text 0x0000000008001050 0x594 /tmp/ccFUXyQJ.o
0x00000000080012a4 LL_Init1msTick
0x00000000080012c2 LL_mDelay
0x0000000008001308 LL_SetSystemCoreClock
0x0000000008001324 LL_PLL_ConfigSystemClock_HSI
0x00000000080013b0 LL_PLL_ConfigSystemClock_HSE
.text 0x00000000080015e4 0x82 /tmp/cc8rJnLI.o
0x00000000080015e4 __sinit
0x00000000080015ee memset
0x0000000008001628 strlen
0x0000000008001652 __assert_func
.text 0x0000000008001666 0x0 /tmp/ccDd2fMH.o
*fill* 0x0000000008001666 0x2
.text 0x0000000008001668 0x114 /usr/lib/gcc/arm-none-eabi/9.2.0/thumb/v6-m/nofp/libgcc.a(_udivsi3.o)
0x0000000008001668 __udivsi3
0x0000000008001668 __aeabi_uidiv
0x0000000008001774 __aeabi_uidivmod
.text 0x000000000800177c 0x1d4 /usr/lib/gcc/arm-none-eabi/9.2.0/thumb/v6-m/nofp/libgcc.a(_divsi3.o)
0x000000000800177c __aeabi_idiv
0x000000000800177c __divsi3
0x0000000008001948 __aeabi_idivmod
.text 0x0000000008001950 0x4 /usr/lib/gcc/arm-none-eabi/9.2.0/thumb/v6-m/nofp/libgcc.a(_dvmd_tls.o)
0x0000000008001950 __aeabi_ldiv0
0x0000000008001950 __aeabi_idiv0
*(.text.*)
.text.Reset_Handler
0x0000000008001894 0x4c /tmp/ccTaPb5k.o
0x0000000008001894 Reset_Handler
0x0000000008001954 0x4c /tmp/ccr2qryM.o
0x0000000008001954 Reset_Handler
.text.Default_Handler
0x00000000080018e0 0x2 /tmp/ccTaPb5k.o
0x00000000080018e0 TIM1_CC_IRQHandler
0x00000000080018e0 I2C1_IRQHandler
0x00000000080018e0 EXTI2_3_IRQHandler
0x00000000080018e0 ADC1_IRQHandler
0x00000000080018e0 TIM17_IRQHandler
0x00000000080018e0 RTC_IRQHandler
0x00000000080018e0 TIM3_IRQHandler
0x00000000080018e0 EXTI4_15_IRQHandler
0x00000000080018e0 RCC_IRQHandler
0x00000000080018e0 Default_Handler
0x00000000080018e0 TIM14_IRQHandler
0x00000000080018e0 DMA1_Channel4_5_IRQHandler
0x00000000080018e0 EXTI0_1_IRQHandler
0x00000000080018e0 WWDG_IRQHandler
0x00000000080018e0 FLASH_IRQHandler
0x00000000080018e0 USART1_IRQHandler
0x00000000080018e0 TIM1_BRK_UP_TRG_COM_IRQHandler
0x00000000080019a0 0x2 /tmp/ccr2qryM.o
0x00000000080019a0 TIM1_CC_IRQHandler
0x00000000080019a0 I2C1_IRQHandler
0x00000000080019a0 EXTI2_3_IRQHandler
0x00000000080019a0 ADC1_IRQHandler
0x00000000080019a0 TIM17_IRQHandler
0x00000000080019a0 RTC_IRQHandler
0x00000000080019a0 TIM3_IRQHandler
0x00000000080019a0 EXTI4_15_IRQHandler
0x00000000080019a0 RCC_IRQHandler
0x00000000080019a0 Default_Handler
0x00000000080019a0 TIM14_IRQHandler
0x00000000080019a0 DMA1_Channel4_5_IRQHandler
0x00000000080019a0 EXTI0_1_IRQHandler
0x00000000080019a0 WWDG_IRQHandler
0x00000000080019a0 FLASH_IRQHandler
0x00000000080019a0 USART1_IRQHandler
0x00000000080019a0 TIM1_BRK_UP_TRG_COM_IRQHandler
*(.rodata)
*fill* 0x00000000080018e2 0x2
.rodata 0x00000000080018e4 0x8 /tmp/cchCmUnQ.o
.rodata 0x00000000080018ec 0x18 /tmp/cc6XVkRI.o
0x00000000080018ec AHBPrescTable
0x00000000080018fc APBPrescTable
*fill* 0x00000000080019a2 0x2
.rodata 0x00000000080019a4 0x18 /tmp/ccJ50X5K.o
0x00000000080019a4 AHBPrescTable
0x00000000080019b4 APBPrescTable
*(.rodata*)
*(.glue_7)
.glue_7 0x0000000008001904 0x0 linker stubs
.glue_7 0x00000000080019bc 0x0 linker stubs
*(.glue_7t)
.glue_7t 0x0000000008001904 0x0 linker stubs
.glue_7t 0x00000000080019bc 0x0 linker stubs
*(.source_tarball)
*(.init)
*(.fini)
*(.source_tarball)
0x0000000008001904 . = ALIGN (0x4)
0x0000000008001904 _etext = .
0x0000000008001904 _sidata = _etext
0x00000000080019bc . = ALIGN (0x4)
0x00000000080019bc _etext = .
0x00000000080019bc _sidata = _etext
.vfp11_veneer 0x0000000008001904 0x0
.vfp11_veneer 0x0000000008001904 0x0 linker stubs
.vfp11_veneer 0x00000000080019bc 0x0
.vfp11_veneer 0x00000000080019bc 0x0 linker stubs
.v4_bx 0x0000000008001904 0x0
.v4_bx 0x0000000008001904 0x0 linker stubs
.v4_bx 0x00000000080019bc 0x0
.v4_bx 0x00000000080019bc 0x0 linker stubs
.iplt 0x0000000008001904 0x0
.iplt 0x0000000008001904 0x0 /tmp/cchCmUnQ.o
.iplt 0x00000000080019bc 0x0
.iplt 0x00000000080019bc 0x0 /tmp/ccxtvPlT.o
.rel.dyn 0x0000000008001904 0x0
.rel.iplt 0x0000000008001904 0x0 /tmp/cchCmUnQ.o
.rel.dyn 0x00000000080019bc 0x0
.rel.iplt 0x00000000080019bc 0x0 /tmp/ccxtvPlT.o
.data 0x0000000020000000 0x94 load address 0x0000000008001904
.data 0x0000000020000000 0x94 load address 0x00000000080019bc
0x0000000020000000 . = ALIGN (0x4)
0x0000000020000000 _sdata = .
0x0000000020000000 _data = .
*(.data)
.data 0x0000000020000000 0x0 /tmp/cchCmUnQ.o
.data 0x0000000020000000 0x0 /tmp/cczzmF2c.o
.data 0x0000000020000000 0x0 /tmp/cc4OHQ7z.o
.data 0x0000000020000000 0x0 /tmp/cc0OqFzX.o
.data 0x0000000020000000 0x0 /tmp/ccTaPb5k.o
.data 0x0000000020000000 0x4 /tmp/cc6XVkRI.o
.data 0x0000000020000000 0x0 /tmp/ccxtvPlT.o
.data 0x0000000020000000 0x0 /tmp/ccrrpgrR.o
.data 0x0000000020000000 0x0 /tmp/ccXNIrIP.o
.data 0x0000000020000000 0x0 /tmp/ccy0xC7N.o
.data 0x0000000020000000 0x0 /tmp/ccr2qryM.o
.data 0x0000000020000000 0x4 /tmp/ccJ50X5K.o
0x0000000020000000 SystemCoreClock
.data 0x0000000020000004 0x0 /tmp/ccvZIDd7.o
.data 0x0000000020000004 0x0 /tmp/ccTEVTRv.o
.data 0x0000000020000004 0x90 /tmp/ccvICuLU.o
.data 0x0000000020000004 0x0 /tmp/ccFUXyQJ.o
.data 0x0000000020000004 0x0 /tmp/cc8rJnLI.o
.data 0x0000000020000004 0x90 /tmp/ccDd2fMH.o
0x0000000020000004 tim3
0x0000000020000008 tim14
0x000000002000000c rtc
@ -214,43 +214,45 @@ LOAD /usr/lib/gcc/arm-none-eabi/9.2.0/thumb/v6-m/nofp/libgcc.a
0x0000000020000094 . = ALIGN (0x4)
0x0000000020000094 _edata = .
.igot.plt 0x0000000020000094 0x0 load address 0x0000000008001998
.igot.plt 0x0000000020000094 0x0 /tmp/cchCmUnQ.o
.igot.plt 0x0000000020000094 0x0 load address 0x0000000008001a50
.igot.plt 0x0000000020000094 0x0 /tmp/ccxtvPlT.o
.bss 0x0000000020000094 0x940 load address 0x0000000008001998
.bss 0x0000000020000094 0x488 load address 0x0000000008001a50
0x0000000020000094 . = ALIGN (0x4)
0x0000000020000094 _sbss = .
0x0000000020000094 _bss = .
*(.bss)
.bss 0x0000000020000094 0xc /tmp/cchCmUnQ.o
.bss 0x0000000020000094 0xc /tmp/ccxtvPlT.o
0x0000000020000094 sys_time_seconds
.bss 0x00000000200000a0 0x0 /tmp/cczzmF2c.o
.bss 0x00000000200000a0 0x0 /tmp/cc4OHQ7z.o
.bss 0x00000000200000a0 0x0 /tmp/cc0OqFzX.o
.bss 0x00000000200000a0 0x0 /tmp/ccTaPb5k.o
.bss 0x00000000200000a0 0x0 /tmp/cc6XVkRI.o
.bss 0x00000000200000a0 0x0 /tmp/ccvZIDd7.o
.bss 0x00000000200000a0 0x8 /tmp/ccTEVTRv.o
0x00000000200000a0 __errno
0x00000000200000a4 _impure_ptr
.bss 0x00000000200000a8 0x0 /tmp/ccvICuLU.o
.bss 0x00000000200000a8 0x0 /usr/lib/gcc/arm-none-eabi/9.2.0/thumb/v6-m/nofp/libgcc.a(_udivsi3.o)
.bss 0x00000000200000a8 0x0 /usr/lib/gcc/arm-none-eabi/9.2.0/thumb/v6-m/nofp/libgcc.a(_divsi3.o)
.bss 0x00000000200000a8 0x0 /usr/lib/gcc/arm-none-eabi/9.2.0/thumb/v6-m/nofp/libgcc.a(_dvmd_tls.o)
.bss 0x00000000200000a0 0x4 /tmp/ccrrpgrR.o
0x00000000200000a0 usart_overruns
.bss 0x00000000200000a4 0x1 /tmp/ccXNIrIP.o
.bss 0x00000000200000a5 0x0 /tmp/ccy0xC7N.o
.bss 0x00000000200000a5 0x0 /tmp/ccr2qryM.o
.bss 0x00000000200000a5 0x0 /tmp/ccJ50X5K.o
.bss 0x00000000200000a5 0x0 /tmp/ccFUXyQJ.o
*fill* 0x00000000200000a5 0x3
.bss 0x00000000200000a8 0x8 /tmp/cc8rJnLI.o
0x00000000200000a8 __errno
0x00000000200000ac _impure_ptr
.bss 0x00000000200000b0 0x0 /tmp/ccDd2fMH.o
.bss 0x00000000200000b0 0x0 /usr/lib/gcc/arm-none-eabi/9.2.0/thumb/v6-m/nofp/libgcc.a(_udivsi3.o)
.bss 0x00000000200000b0 0x0 /usr/lib/gcc/arm-none-eabi/9.2.0/thumb/v6-m/nofp/libgcc.a(_divsi3.o)
.bss 0x00000000200000b0 0x0 /usr/lib/gcc/arm-none-eabi/9.2.0/thumb/v6-m/nofp/libgcc.a(_dvmd_tls.o)
*(.bss.*)
*(COMMON)
COMMON 0x00000000200000a8 0x20 /tmp/cchCmUnQ.o
0x00000000200000a8 leds
COMMON 0x00000000200000c8 0x800 /tmp/cczzmF2c.o
0x00000000200000c8 adc_buf
COMMON 0x00000000200008c8 0x10c /tmp/cc4OHQ7z.o
0x00000000200008c8 usart_tx_buf
0x00000000200009d4 . = ALIGN (0x4)
0x00000000200009d4 _ebss = .
COMMON 0x00000000200000b0 0x20 /tmp/ccxtvPlT.o
0x00000000200000b0 leds
COMMON 0x00000000200000d0 0x40 /tmp/ccrrpgrR.o
0x00000000200000d0 adc_buf
COMMON 0x0000000020000110 0x40c /tmp/ccXNIrIP.o
0x0000000020000110 usart_tx_buf
0x000000002000051c . = ALIGN (0x4)
0x000000002000051c _ebss = .
[!provide] PROVIDE (end = _ebss)
[!provide] PROVIDE (_end = _ebss)
0x00000000200009d4 __exidx_start = .
0x00000000200009d4 __exidx_end = .
0x000000002000051c __exidx_start = .
0x000000002000051c __exidx_end = .
.stab
*(.stab)
@ -272,36 +274,36 @@ LOAD /usr/lib/gcc/arm-none-eabi/9.2.0/thumb/v6-m/nofp/libgcc.a
.comment 0x0000000000000000 0x21
*(.comment)
.comment 0x0000000000000000 0x21 /tmp/cchCmUnQ.o
.comment 0x0000000000000000 0x21 /tmp/ccxtvPlT.o
0x22 (size before relaxing)
.comment 0x0000000000000021 0x22 /tmp/cczzmF2c.o
.comment 0x0000000000000021 0x22 /tmp/cc4OHQ7z.o
.comment 0x0000000000000021 0x22 /tmp/cc0OqFzX.o
.comment 0x0000000000000021 0x22 /tmp/cc6XVkRI.o
.comment 0x0000000000000021 0x22 /tmp/ccvZIDd7.o
.comment 0x0000000000000021 0x22 /tmp/ccTEVTRv.o
.comment 0x0000000000000021 0x22 /tmp/ccvICuLU.o
.comment 0x0000000000000021 0x22 /tmp/ccrrpgrR.o
.comment 0x0000000000000021 0x22 /tmp/ccXNIrIP.o
.comment 0x0000000000000021 0x22 /tmp/ccy0xC7N.o
.comment 0x0000000000000021 0x22 /tmp/ccJ50X5K.o
.comment 0x0000000000000021 0x22 /tmp/ccFUXyQJ.o
.comment 0x0000000000000021 0x22 /tmp/cc8rJnLI.o
.comment 0x0000000000000021 0x22 /tmp/ccDd2fMH.o
.ARM.attributes
0x0000000000000000 0x2f
.ARM.attributes
0x0000000000000000 0x2b /tmp/cchCmUnQ.o
0x0000000000000000 0x2b /tmp/ccxtvPlT.o
.ARM.attributes
0x000000000000002b 0x2b /tmp/cczzmF2c.o
0x000000000000002b 0x2b /tmp/ccrrpgrR.o
.ARM.attributes
0x0000000000000056 0x2b /tmp/cc4OHQ7z.o
0x0000000000000056 0x2b /tmp/ccXNIrIP.o
.ARM.attributes
0x0000000000000081 0x2b /tmp/cc0OqFzX.o
0x0000000000000081 0x2b /tmp/ccy0xC7N.o
.ARM.attributes
0x00000000000000ac 0x21 /tmp/ccTaPb5k.o
0x00000000000000ac 0x21 /tmp/ccr2qryM.o
.ARM.attributes
0x00000000000000cd 0x2b /tmp/cc6XVkRI.o
0x00000000000000cd 0x2b /tmp/ccJ50X5K.o
.ARM.attributes
0x00000000000000f8 0x2b /tmp/ccvZIDd7.o
0x00000000000000f8 0x2b /tmp/ccFUXyQJ.o
.ARM.attributes
0x0000000000000123 0x2b /tmp/ccTEVTRv.o
0x0000000000000123 0x2b /tmp/cc8rJnLI.o
.ARM.attributes
0x000000000000014e 0x31 /tmp/ccvICuLU.o
0x000000000000014e 0x31 /tmp/ccDd2fMH.o
.ARM.attributes
0x000000000000017f 0x1e /usr/lib/gcc/arm-none-eabi/9.2.0/thumb/v6-m/nofp/libgcc.a(_udivsi3.o)
.ARM.attributes
@ -324,23 +326,23 @@ LOAD /usr/lib/gcc/arm-none-eabi/9.2.0/thumb/v6-m/nofp/libgcc.a
.debug_aranges 0x0000000000000000 0x180
*(.debug_aranges)
.debug_aranges
0x0000000000000000 0x20 /tmp/cchCmUnQ.o
0x0000000000000000 0x20 /tmp/ccxtvPlT.o
.debug_aranges
0x0000000000000020 0x20 /tmp/cczzmF2c.o
0x0000000000000020 0x20 /tmp/ccrrpgrR.o
.debug_aranges
0x0000000000000040 0x20 /tmp/cc4OHQ7z.o
0x0000000000000040 0x20 /tmp/ccXNIrIP.o
.debug_aranges
0x0000000000000060 0x20 /tmp/cc0OqFzX.o
0x0000000000000060 0x20 /tmp/ccy0xC7N.o
.debug_aranges
0x0000000000000080 0x28 /tmp/ccTaPb5k.o
0x0000000000000080 0x28 /tmp/ccr2qryM.o
.debug_aranges
0x00000000000000a8 0x20 /tmp/cc6XVkRI.o
0x00000000000000a8 0x20 /tmp/ccJ50X5K.o
.debug_aranges
0x00000000000000c8 0x20 /tmp/ccvZIDd7.o
0x00000000000000c8 0x20 /tmp/ccFUXyQJ.o
.debug_aranges
0x00000000000000e8 0x20 /tmp/ccTEVTRv.o
0x00000000000000e8 0x20 /tmp/cc8rJnLI.o
.debug_aranges
0x0000000000000108 0x18 /tmp/ccvICuLU.o
0x0000000000000108 0x18 /tmp/ccDd2fMH.o
.debug_aranges
0x0000000000000120 0x20 /usr/lib/gcc/arm-none-eabi/9.2.0/thumb/v6-m/nofp/libgcc.a(_udivsi3.o)
.debug_aranges
@ -351,87 +353,87 @@ LOAD /usr/lib/gcc/arm-none-eabi/9.2.0/thumb/v6-m/nofp/libgcc.a
.debug_pubnames
*(.debug_pubnames)
.debug_info 0x0000000000000000 0x5d8a
.debug_info 0x0000000000000000 0x5eaf
*(.debug_info .gnu.linkonce.wi.*)
.debug_info 0x0000000000000000 0x136b /tmp/cchCmUnQ.o
.debug_info 0x000000000000136b 0x105f /tmp/cczzmF2c.o
.debug_info 0x00000000000023ca 0x1019 /tmp/cc4OHQ7z.o
.debug_info 0x00000000000033e3 0xcb1 /tmp/cc0OqFzX.o
.debug_info 0x0000000000004094 0x22 /tmp/ccTaPb5k.o
.debug_info 0x00000000000040b6 0x263 /tmp/cc6XVkRI.o
.debug_info 0x0000000000004319 0x795 /tmp/ccvZIDd7.o
.debug_info 0x0000000000004aae 0x1e9 /tmp/ccTEVTRv.o
.debug_info 0x0000000000004c97 0x1081 /tmp/ccvICuLU.o
.debug_info 0x0000000000005d18 0x26 /usr/lib/gcc/arm-none-eabi/9.2.0/thumb/v6-m/nofp/libgcc.a(_udivsi3.o)
.debug_info 0x0000000000005d3e 0x26 /usr/lib/gcc/arm-none-eabi/9.2.0/thumb/v6-m/nofp/libgcc.a(_divsi3.o)
.debug_info 0x0000000000005d64 0x26 /usr/lib/gcc/arm-none-eabi/9.2.0/thumb/v6-m/nofp/libgcc.a(_dvmd_tls.o)
.debug_info 0x0000000000000000 0x12f8 /tmp/ccxtvPlT.o
.debug_info 0x00000000000012f8 0x1129 /tmp/ccrrpgrR.o
.debug_info 0x0000000000002421 0x10a6 /tmp/ccXNIrIP.o
.debug_info 0x00000000000034c7 0xcf2 /tmp/ccy0xC7N.o
.debug_info 0x00000000000041b9 0x22 /tmp/ccr2qryM.o
.debug_info 0x00000000000041db 0x263 /tmp/ccJ50X5K.o
.debug_info 0x000000000000443e 0x795 /tmp/ccFUXyQJ.o
.debug_info 0x0000000000004bd3 0x1e9 /tmp/cc8rJnLI.o
.debug_info 0x0000000000004dbc 0x1081 /tmp/ccDd2fMH.o
.debug_info 0x0000000000005e3d 0x26 /usr/lib/gcc/arm-none-eabi/9.2.0/thumb/v6-m/nofp/libgcc.a(_udivsi3.o)
.debug_info 0x0000000000005e63 0x26 /usr/lib/gcc/arm-none-eabi/9.2.0/thumb/v6-m/nofp/libgcc.a(_divsi3.o)
.debug_info 0x0000000000005e89 0x26 /usr/lib/gcc/arm-none-eabi/9.2.0/thumb/v6-m/nofp/libgcc.a(_dvmd_tls.o)
.debug_abbrev 0x0000000000000000 0x1204
.debug_abbrev 0x0000000000000000 0x1221
*(.debug_abbrev)
.debug_abbrev 0x0000000000000000 0x357 /tmp/cchCmUnQ.o
.debug_abbrev 0x0000000000000357 0x320 /tmp/cczzmF2c.o
.debug_abbrev 0x0000000000000677 0x319 /tmp/cc4OHQ7z.o
.debug_abbrev 0x0000000000000990 0x287 /tmp/cc0OqFzX.o
.debug_abbrev 0x0000000000000c17 0x12 /tmp/ccTaPb5k.o
.debug_abbrev 0x0000000000000c29 0x113 /tmp/cc6XVkRI.o
.debug_abbrev 0x0000000000000d3c 0x23c /tmp/ccvZIDd7.o
.debug_abbrev 0x0000000000000f78 0x117 /tmp/ccTEVTRv.o
.debug_abbrev 0x000000000000108f 0x139 /tmp/ccvICuLU.o
.debug_abbrev 0x00000000000011c8 0x14 /usr/lib/gcc/arm-none-eabi/9.2.0/thumb/v6-m/nofp/libgcc.a(_udivsi3.o)
.debug_abbrev 0x00000000000011dc 0x14 /usr/lib/gcc/arm-none-eabi/9.2.0/thumb/v6-m/nofp/libgcc.a(_divsi3.o)
.debug_abbrev 0x00000000000011f0 0x14 /usr/lib/gcc/arm-none-eabi/9.2.0/thumb/v6-m/nofp/libgcc.a(_dvmd_tls.o)
.debug_abbrev 0x0000000000000000 0x355 /tmp/ccxtvPlT.o
.debug_abbrev 0x0000000000000355 0x322 /tmp/ccrrpgrR.o
.debug_abbrev 0x0000000000000677 0x32d /tmp/ccXNIrIP.o
.debug_abbrev 0x00000000000009a4 0x290 /tmp/ccy0xC7N.o
.debug_abbrev 0x0000000000000c34 0x12 /tmp/ccr2qryM.o
.debug_abbrev 0x0000000000000c46 0x113 /tmp/ccJ50X5K.o
.debug_abbrev 0x0000000000000d59 0x23c /tmp/ccFUXyQJ.o
.debug_abbrev 0x0000000000000f95 0x117 /tmp/cc8rJnLI.o
.debug_abbrev 0x00000000000010ac 0x139 /tmp/ccDd2fMH.o
.debug_abbrev 0x00000000000011e5 0x14 /usr/lib/gcc/arm-none-eabi/9.2.0/thumb/v6-m/nofp/libgcc.a(_udivsi3.o)
.debug_abbrev 0x00000000000011f9 0x14 /usr/lib/gcc/arm-none-eabi/9.2.0/thumb/v6-m/nofp/libgcc.a(_divsi3.o)
.debug_abbrev 0x000000000000120d 0x14 /usr/lib/gcc/arm-none-eabi/9.2.0/thumb/v6-m/nofp/libgcc.a(_dvmd_tls.o)
.debug_line 0x0000000000000000 0x17b1
.debug_line 0x0000000000000000 0x1806
*(.debug_line)
.debug_line 0x0000000000000000 0x3ec /tmp/cchCmUnQ.o
.debug_line 0x00000000000003ec 0x33d /tmp/cczzmF2c.o
.debug_line 0x0000000000000729 0x36e /tmp/cc4OHQ7z.o
.debug_line 0x0000000000000a97 0x2f9 /tmp/cc0OqFzX.o
.debug_line 0x0000000000000d90 0x77 /tmp/ccTaPb5k.o
.debug_line 0x0000000000000e07 0x1ab /tmp/cc6XVkRI.o
.debug_line 0x0000000000000fb2 0x466 /tmp/ccvZIDd7.o
.debug_line 0x0000000000001418 0xf4 /tmp/ccTEVTRv.o
.debug_line 0x000000000000150c 0x148 /tmp/ccvICuLU.o
.debug_line 0x0000000000001654 0x76 /usr/lib/gcc/arm-none-eabi/9.2.0/thumb/v6-m/nofp/libgcc.a(_udivsi3.o)
.debug_line 0x00000000000016ca 0x7d /usr/lib/gcc/arm-none-eabi/9.2.0/thumb/v6-m/nofp/libgcc.a(_divsi3.o)
.debug_line 0x0000000000001747 0x6a /usr/lib/gcc/arm-none-eabi/9.2.0/thumb/v6-m/nofp/libgcc.a(_dvmd_tls.o)
.debug_line 0x0000000000000000 0x3cb /tmp/ccxtvPlT.o
.debug_line 0x00000000000003cb 0x363 /tmp/ccrrpgrR.o
.debug_line 0x000000000000072e 0x3b2 /tmp/ccXNIrIP.o
.debug_line 0x0000000000000ae0 0x305 /tmp/ccy0xC7N.o
.debug_line 0x0000000000000de5 0x77 /tmp/ccr2qryM.o
.debug_line 0x0000000000000e5c 0x1ab /tmp/ccJ50X5K.o
.debug_line 0x0000000000001007 0x466 /tmp/ccFUXyQJ.o
.debug_line 0x000000000000146d 0xf4 /tmp/cc8rJnLI.o
.debug_line 0x0000000000001561 0x148 /tmp/ccDd2fMH.o
.debug_line 0x00000000000016a9 0x76 /usr/lib/gcc/arm-none-eabi/9.2.0/thumb/v6-m/nofp/libgcc.a(_udivsi3.o)
.debug_line 0x000000000000171f 0x7d /usr/lib/gcc/arm-none-eabi/9.2.0/thumb/v6-m/nofp/libgcc.a(_divsi3.o)
.debug_line 0x000000000000179c 0x6a /usr/lib/gcc/arm-none-eabi/9.2.0/thumb/v6-m/nofp/libgcc.a(_dvmd_tls.o)
.debug_frame 0x0000000000000000 0x848
.debug_frame 0x0000000000000000 0x888
*(.debug_frame)
.debug_frame 0x0000000000000000 0x168 /tmp/cchCmUnQ.o
.debug_frame 0x0000000000000168 0xe8 /tmp/cczzmF2c.o
.debug_frame 0x0000000000000250 0x128 /tmp/cc4OHQ7z.o
.debug_frame 0x0000000000000378 0xb0 /tmp/cc0OqFzX.o
.debug_frame 0x0000000000000428 0x4c /tmp/cc6XVkRI.o
.debug_frame 0x0000000000000474 0x308 /tmp/ccvZIDd7.o
.debug_frame 0x000000000000077c 0x8c /tmp/ccTEVTRv.o
.debug_frame 0x0000000000000808 0x20 /usr/lib/gcc/arm-none-eabi/9.2.0/thumb/v6-m/nofp/libgcc.a(_udivsi3.o)
.debug_frame 0x0000000000000828 0x20 /usr/lib/gcc/arm-none-eabi/9.2.0/thumb/v6-m/nofp/libgcc.a(_divsi3.o)
.debug_frame 0x0000000000000000 0x164 /tmp/ccxtvPlT.o
.debug_frame 0x0000000000000164 0xec /tmp/ccrrpgrR.o
.debug_frame 0x0000000000000250 0x168 /tmp/ccXNIrIP.o
.debug_frame 0x00000000000003b8 0xb0 /tmp/ccy0xC7N.o
.debug_frame 0x0000000000000468 0x4c /tmp/ccJ50X5K.o
.debug_frame 0x00000000000004b4 0x308 /tmp/ccFUXyQJ.o
.debug_frame 0x00000000000007bc 0x8c /tmp/cc8rJnLI.o
.debug_frame 0x0000000000000848 0x20 /usr/lib/gcc/arm-none-eabi/9.2.0/thumb/v6-m/nofp/libgcc.a(_udivsi3.o)
.debug_frame 0x0000000000000868 0x20 /usr/lib/gcc/arm-none-eabi/9.2.0/thumb/v6-m/nofp/libgcc.a(_divsi3.o)
.debug_str 0x0000000000000000 0x12b2
.debug_str 0x0000000000000000 0x12fd
*(.debug_str)
.debug_str 0x0000000000000000 0x965 /tmp/cchCmUnQ.o
0xa11 (size before relaxing)
.debug_str 0x0000000000000965 0xdf /tmp/cczzmF2c.o
0x8fc (size before relaxing)
.debug_str 0x0000000000000a44 0xa7 /tmp/cc4OHQ7z.o
0x904 (size before relaxing)
.debug_str 0x0000000000000aeb 0xa2 /tmp/cc0OqFzX.o
0x658 (size before relaxing)
.debug_str 0x0000000000000b8d 0x22 /tmp/ccTaPb5k.o
.debug_str 0x0000000000000000 0x952 /tmp/ccxtvPlT.o
0x9f5 (size before relaxing)
.debug_str 0x0000000000000952 0x101 /tmp/ccrrpgrR.o
0x95f (size before relaxing)
.debug_str 0x0000000000000a53 0xdc /tmp/ccXNIrIP.o
0x939 (size before relaxing)
.debug_str 0x0000000000000b2f 0xa9 /tmp/ccy0xC7N.o
0x65f (size before relaxing)
.debug_str 0x0000000000000bd8 0x22 /tmp/ccr2qryM.o
0x57 (size before relaxing)
.debug_str 0x0000000000000baf 0x53 /tmp/cc6XVkRI.o
.debug_str 0x0000000000000bfa 0x53 /tmp/ccJ50X5K.o
0x219 (size before relaxing)
.debug_str 0x0000000000000c02 0x3ae /tmp/ccvZIDd7.o
.debug_str 0x0000000000000c4d 0x3ae /tmp/ccFUXyQJ.o
0x5bf (size before relaxing)
.debug_str 0x0000000000000fb0 0x39 /tmp/ccTEVTRv.o
.debug_str 0x0000000000000ffb 0x39 /tmp/cc8rJnLI.o
0x1b7 (size before relaxing)
.debug_str 0x0000000000000fe9 0x227 /tmp/ccvICuLU.o
.debug_str 0x0000000000001034 0x227 /tmp/ccDd2fMH.o
0x5ca (size before relaxing)
.debug_str 0x0000000000001210 0xa2 /usr/lib/gcc/arm-none-eabi/9.2.0/thumb/v6-m/nofp/libgcc.a(_udivsi3.o)
.debug_str 0x000000000000125b 0xa2 /usr/lib/gcc/arm-none-eabi/9.2.0/thumb/v6-m/nofp/libgcc.a(_udivsi3.o)
0xae (size before relaxing)
.debug_str 0x00000000000012b2 0xae /usr/lib/gcc/arm-none-eabi/9.2.0/thumb/v6-m/nofp/libgcc.a(_divsi3.o)
.debug_str 0x00000000000012b2 0xae /usr/lib/gcc/arm-none-eabi/9.2.0/thumb/v6-m/nofp/libgcc.a(_dvmd_tls.o)
.debug_str 0x00000000000012fd 0xae /usr/lib/gcc/arm-none-eabi/9.2.0/thumb/v6-m/nofp/libgcc.a(_divsi3.o)
.debug_str 0x00000000000012fd 0xae /usr/lib/gcc/arm-none-eabi/9.2.0/thumb/v6-m/nofp/libgcc.a(_dvmd_tls.o)
.debug_loc
*(.debug_loc)
@ -453,5 +455,5 @@ LOAD /usr/lib/gcc/arm-none-eabi/9.2.0/thumb/v6-m/nofp/libgcc.a
OUTPUT(main.elf elf32-littlearm)
.debug_ranges 0x0000000000000000 0x38
.debug_ranges 0x0000000000000000 0x18 /tmp/cc0OqFzX.o
.debug_ranges 0x0000000000000018 0x20 /tmp/ccTaPb5k.o
.debug_ranges 0x0000000000000000 0x18 /tmp/ccy0xC7N.o
.debug_ranges 0x0000000000000018 0x20 /tmp/ccr2qryM.o

View file

@ -31,7 +31,9 @@
volatile struct dma_tx_buf usart_tx_buf;
static void usart_schedule_dma();
static void usart_schedule_dma(void);
int usart_putc_nonblocking(char c);
int usart_putc(char c);
void usart_dma_init() {
usart_tx_buf.xfr_start = -1,
@ -39,7 +41,7 @@ void usart_dma_init() {
usart_tx_buf.wr_pos = 0,
/* Configure DMA 1 Channel 2 to handle uart transmission */
DMA1_Channel2->CPAR = (unsigned int)&(USART1->TDR);
DMA1_Channel2->CPAR = (uint32_t)&(USART1->TDR);
DMA1_Channel2->CCR = (0<<DMA_CCR_PL_Pos)
| DMA_CCR_DIR
| (0<<DMA_CCR_MSIZE_Pos) /* 8 bit */
@ -47,6 +49,13 @@ void usart_dma_init() {
| DMA_CCR_MINC
| DMA_CCR_TCIE; /* Enable transfer complete interrupt. */
DMA1_Channel3->CMAR = (uint32_t)&(CRC->DR);
DMA1_Channel3->CCR = (1<<DMA_CCR_PL_Pos)
| (0<<DMA_CCR_MSIZE_Pos) /* 8 bit */
| (0<<DMA_CCR_PSIZE_Pos) /* 8 bit */
| DMA_CCR_PINC
| DMA_CCR_TCIE; /* Enable transfer complete interrupt. */
/* triggered on transfer completion. We use this to process the ADC data */
NVIC_EnableIRQ(DMA1_Channel2_3_IRQn);
NVIC_SetPriority(DMA1_Channel2_3_IRQn, 1<<5);
@ -61,8 +70,13 @@ void usart_dma_init() {
/* other interrupts clear */
| USART_CR1_TE
| USART_CR1_RE;
/* Set divider for 1MBd @48MHz system clock. */
USART1->BRR = 48;
/* Set divider for 115.2kBd @48MHz system clock. */
//USART1->BRR = 417;
//USART1->BRR = 48; /* 1MBd */
USART1->BRR = 96; /* 500kBd */
USART1->BRR = 192; /* 250kBd */
//USART1->BRR = 208; /* 230400 */
USART1->CR2 = USART_CR2_TXINV | USART_CR2_RXINV;
@ -112,13 +126,19 @@ int usart_dma_fifo_push(volatile struct dma_tx_buf *buf, char c) {
return 0;
}
void usart_putc(char c) {
int usart_putc(char c) {
/* push char to fifo, busy-loop if stalled to wait for USART to empty fifo via DMA */
while (usart_dma_fifo_push(&usart_tx_buf, c) == -EBUSY) {
/* idle */
}
return 0;
}
int usart_putc_nonblocking(char c) {
return usart_dma_fifo_push(&usart_tx_buf, c);
}
void DMA1_Channel2_3_IRQHandler(void) {
/* Transfer complete */
DMA1->IFCR |= DMA_IFCR_CTCIF2;
@ -130,10 +150,28 @@ void DMA1_Channel2_3_IRQHandler(void) {
void usart_send_packet(const uint8_t *data, size_t len) {
/* ignore return value as putf is blocking and always succeeds */
(void)cobs_encode_usart((char *)data, len);
(void)cobs_encode_usart(usart_putc, (char *)data, len);
/* If the DMA stream is idle right now, schedule a transfer */
if (!(DMA1_Channel2->CCR & DMA_CCR_EN))
usart_schedule_dma();
}
int usart_send_packet_nonblocking(const uint8_t *data, size_t len) {
/* ignore return value as putf is blocking and always succeeds */
/* FIXME DEBUG */
//int rc = cobs_encode_usart(usart_putc_nonblocking, (char *)data, len);
//if (rc)
// return rc;
/* END */
static uint8_t x = 0;
for (size_t i=0; i<351; i++)
usart_putc_nonblocking(x++);
/* If the DMA stream is idle right now, schedule a transfer */
if (!(DMA1_Channel2->CCR & DMA_CCR_EN))
usart_schedule_dma();
return 0;
}

View file

@ -31,14 +31,15 @@ struct dma_tx_buf {
size_t xfr_start; /* Start index of running DMA transfer */
size_t xfr_end; /* End index of running DMA transfer plus one */
size_t wr_pos; /* Next index to be written */
uint8_t data[256];
uint8_t data[512];
size_t packet_starts[5];
};
extern volatile struct dma_tx_buf usart_tx_buf;
void usart_dma_init(void);
int usart_dma_fifo_push(volatile struct dma_tx_buf *buf, char c);
void usart_putc(char c);
void usart_send_packet(const uint8_t *data, size_t len);
int usart_send_packet_nonblocking(const uint8_t *data, size_t len);
#endif // __SERIAL_H__

41
gm_platform/fw/test.py Normal file
View file

@ -0,0 +1,41 @@
#!/usr/bin/env python3
import serial
import time
#ser = serial.Serial('/dev/serial/by-id/usb-1a86_USB2.0-Serial-if00-port0', 230400)
ser = serial.Serial('/dev/serial/by-id/usb-Silicon_Labs_CP2102_USB_to_UART_Bridge_Controller_0001-if00-port0', 250000)
#while True:
# ser.write(bytes(range(256)))
start = time.time()
last_val = None
run = 0
total_errors = 0
rx_bytes = 0
last_print = time.time()
while True:
bytes = ser.read(256)
for byte in bytes:
if last_val is not None and byte != (last_val + 1) % 256:
if run > 0:
print(f'{time.time()-start:>8.3f} {run} {last_val:02x} {byte:02x}')
run = 0
total_errors += 1
else:
run += 1
rx_bytes += 1
if time.time() - last_print > 5:
last_print = time.time()
print(f'{time.time()-start:>8.3f} {run} [all good] err={total_errors}@rx={rx_bytes}B',
f'(rate 1/{rx_bytes/total_errors:.5g})' if total_errors > 0 else 'rate unknown')
last_val = byte
#while True:
# data = ser.read_until(b'\0')
# print(f'{time.time()-start:>8.3f} {len(data)}')
# while True:
# data = ser.read(256)
# print('YES' if b'\0' in data else 'NO ', data)

View file

@ -3021,5 +3021,5 @@ F 5 "SDCIT/8GB" H 12700 7050 50 0001 C CNN "Reichelt"
1 0 0 -1
$EndComp
Text Notes 850 11050 0 50 ~ 0
TO-DO\n* Add adc buffer op amp\n* join input resistors, adjust divider\n* earth secondary side\n* add slots for large isolation barrier\n* add slots for small isolation barrier\n* fixup/remove ocxo footprint\n* fixup converter footprint, use smaller part? use 5V one and power raspi?\n* remove uart isolation?\n* fix fuse rating\n* remove one fuse\n* remove lid switches?\n* fixup incorrect bom items
TO-DO\n* Add adc buffer op amp\n* join input resistors, adjust divider\n* earth secondary side\n* add slots for large isolation barrier\n* add slots for small isolation barrier\n* fixup/remove ocxo footprint\n* fixup converter footprint, use smaller part? use 5V one and power raspi?\n* remove uart isolation?\n* fix fuse rating\n* remove one fuse\n* remove lid switches?\n* fixup incorrect bom items\n* CH340 V3 cap -> 100n\n* replace CH340 w/ silabs cp2102\n* replace optocoupler pullups w/ 350R
$EndSCHEMATC