@@ -142,8 +142,8 @@ uint8_t arm_mem_spi_peek(arm_t *arm, uint8_t pin, uint32_t *res) {
142142 spi -> CTRLA .bit .MODE !=
143143 SERCOM_SPI_CTRLA_MODE_SPI_SLAVE_Val ||
144144 !spi -> CTRLB .bit .RXEN )) {
145- * res = 1 << 15 ;
146- return 16 ;
145+ * res = 0 ;
146+ return 1 ;
147147 }
148148 uint8_t bits = 8 | (spi -> CTRLB .bit .CHSIZE & 1 );
149149 * res = spi -> BUFFER [1 ].bit .DATA ;
@@ -177,24 +177,28 @@ void arm_mem_spi_xfer(arm_t *arm, uint8_t pin, uint32_t val) {
177177 } else {
178178 spi -> BUFFER [2 ].bit .OVF = true;
179179 }
180- spi -> BUFFER [1 ].bit .VLD = true;
180+ // spi->BUFFER[1].bit.VLD = true;
181181 } else {
182- spi -> INTFLAG .bit .DRE = true;
183182 spi -> INTFLAG .bit .RXC = true;
184- if (likely (spi -> INTEN .bit .DRE || spi -> INTEN . bit . RXC )) {
183+ if (likely (spi -> INTEN .bit .RXC )) {
185184 arm_mem_set_pending (arm , SERCOM0_IRQn + pin , true);
186185 }
187186 spi -> BUFFER [3 ].reg = spi -> BUFFER [2 ].reg ;
188187 spi -> BUFFER [2 ].reg = spi -> BUFFER [1 ].reg ;
189- if (likely (spi -> BUFFER [1 ].bit .VLD = spi -> BUFFER [0 ].bit .VLD )) {
190- spi -> BUFFER [1 ].bit .DATA = spi -> BUFFER [0 ].bit .DATA ;
191- spi -> BUFFER [0 ].reg = 0 ;
192- } else if (unlikely (spi -> CTRLA .bit .MODE ==
193- SERCOM_SPI_CTRLA_MODE_SPI_MASTER_Val )) {
194- spi -> INTFLAG .bit .TXC = true;
195- if (likely (spi -> INTEN .bit .TXC )) {
196- arm_mem_set_pending (arm , SERCOM0_IRQn + pin , true);
197- }
188+ spi -> BUFFER [2 ].bit .VLD = true;
189+ }
190+ spi -> INTFLAG .bit .DRE = true;
191+ if (likely (spi -> INTEN .bit .DRE )) {
192+ arm_mem_set_pending (arm , SERCOM0_IRQn + pin , true);
193+ }
194+ if (likely (spi -> BUFFER [1 ].bit .VLD = spi -> BUFFER [0 ].bit .VLD )) {
195+ spi -> BUFFER [1 ].bit .DATA = spi -> BUFFER [0 ].bit .DATA ;
196+ spi -> BUFFER [0 ].reg = 0 ;
197+ } else if (unlikely (spi -> CTRLA .bit .MODE ==
198+ SERCOM_SPI_CTRLA_MODE_SPI_MASTER_Val )) {
199+ spi -> INTFLAG .bit .TXC = true;
200+ if (likely (spi -> INTEN .bit .TXC )) {
201+ arm_mem_set_pending (arm , SERCOM0_IRQn + pin , true);
198202 }
199203 }
200204}
0 commit comments