80cf21f14304b424eff35ad4074b3ee998d3d2b2
ch32-node fw
fw for a ch32v203 node w/ w5500 ethernet
current
SysTick IRQ and DMA issue
Enabling the SysTick IRQ leads to a permanent hang of the socket.
- With a 1ms IRQ interval, the hang occurs at
DHCP_ACKduring thecheck_DHCP_leasedIP->sendto()ARP request. - With a 100ms interval, the hang occurs during the DNS request.
- With a 1s interval it works
- Disabling SPI DMA solves it (just commenting out
reg_wizchip_spiburst_cbfunc), so it's most likely DMA related? - SPI DMA only works with prescalers 8 and 64?
- Also, for some reason it needs a ~50ms delay before configuring w5500 when compiled with
-O0, not needed with-Os...
Diff between SPI w/ and w/o DMA:
SPI DMA
SPI
00 09 04 C0 A8 66 01 02 00 09 04 C0 A8 66 01 02 02
previous (DNS Processing)
solved by patching the korean bloatlib (dns_makequery in DNS.c)
w/ ch32v003fun
Partial DNS message:
11 23 81 82 00 01 00 00 00 00 00 00 03 68 79 65 00 00 00 02 73DNS_run() failed, res = 0
w/ WCH HAL (none-os).. I get a full response
Receive DNS message from 192.168.102.1(53). len = 56 Partial DNS message:
11 23 81 80 00 01 00 02 00 00 00 00 03 68 79 65 02 73 75 00 00 01 00 01 C0 0C 00 01 00 01 00 00 01 2C 00 04 68 15 33 7F C0 0C 00 01 00 01 00 00 01 2C 00 04 AC 43 B4 9AResult: 172.67.180.154
RCC_CTLR, GPIO Registers, SPIx_CTLR1 registers are identical
LA
ch32v003fun
00 00 34 11 27 01 00 00 01 00 00 00 00 00 00 03 68 79 65 00 00 00 02 73 75 00 00 00 00 01 00 01
- 32 bytes long
- (Post
68 79 65):00 00 00 02 73 75 00 00 00 00 01 00 01
none-os
00 00 34 11 27 01 00 00 01 00 00 00 00 00 00 03 68 79 65 02 73 75 00 00 01 00 01
- 27 bytes long
- (Post
68 79 65):02 73 75 00 00 01 00 01
Description
Languages
C
97.6%
Assembly
2.1%
Makefile
0.3%





