Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: cpputest mbed-dev_tmp
spi_master_asynch.cpp@0:829da9075ffa, 2016-04-26 (annotated)
- Committer:
- dkato
- Date:
- Tue Apr 26 02:12:17 2016 +0000
- Revision:
- 0:829da9075ffa
first commit
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
dkato | 0:829da9075ffa | 1 | /* mbed Microcontroller Library |
dkato | 0:829da9075ffa | 2 | * Copyright (c) 2015 ARM Limited |
dkato | 0:829da9075ffa | 3 | * |
dkato | 0:829da9075ffa | 4 | * Licensed under the Apache License, Version 2.0 (the "License"); |
dkato | 0:829da9075ffa | 5 | * you may not use this file except in compliance with the License. |
dkato | 0:829da9075ffa | 6 | * You may obtain a copy of the License at |
dkato | 0:829da9075ffa | 7 | * |
dkato | 0:829da9075ffa | 8 | * http://www.apache.org/licenses/LICENSE-2.0 |
dkato | 0:829da9075ffa | 9 | * |
dkato | 0:829da9075ffa | 10 | * Unless required by applicable law or agreed to in writing, software |
dkato | 0:829da9075ffa | 11 | * distributed under the License is distributed on an "AS IS" BASIS, |
dkato | 0:829da9075ffa | 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
dkato | 0:829da9075ffa | 13 | * See the License for the specific language governing permissions and |
dkato | 0:829da9075ffa | 14 | * limitations under the License. |
dkato | 0:829da9075ffa | 15 | */ |
dkato | 0:829da9075ffa | 16 | #include <stdio.h> |
dkato | 0:829da9075ffa | 17 | #include "TestHarness.h" |
dkato | 0:829da9075ffa | 18 | #include "mbed.h" |
dkato | 0:829da9075ffa | 19 | |
dkato | 0:829da9075ffa | 20 | #if !DEVICE_SPI || !DEVICE_SPI_ASYNCH |
dkato | 0:829da9075ffa | 21 | #error spi_master_asynch requires asynch SPI |
dkato | 0:829da9075ffa | 22 | #endif |
dkato | 0:829da9075ffa | 23 | |
dkato | 0:829da9075ffa | 24 | |
dkato | 0:829da9075ffa | 25 | #define SHORT_XFR 3 |
dkato | 0:829da9075ffa | 26 | #define LONG_XFR 16 |
dkato | 0:829da9075ffa | 27 | #define TEST_BYTE0 0x00 |
dkato | 0:829da9075ffa | 28 | #define TEST_BYTE1 0x11 |
dkato | 0:829da9075ffa | 29 | #define TEST_BYTE2 0xFF |
dkato | 0:829da9075ffa | 30 | #define TEST_BYTE3 0xAA |
dkato | 0:829da9075ffa | 31 | #define TEST_BYTE4 0x55 |
dkato | 0:829da9075ffa | 32 | #define TEST_BYTE5 0x50 |
dkato | 0:829da9075ffa | 33 | |
dkato | 0:829da9075ffa | 34 | #define TEST_BYTE_RX TEST_BYTE3 |
dkato | 0:829da9075ffa | 35 | #define TEST_BYTE_TX_BASE TEST_BYTE5 |
dkato | 0:829da9075ffa | 36 | |
dkato | 0:829da9075ffa | 37 | #if defined(TARGET_K64F) |
dkato | 0:829da9075ffa | 38 | #define TEST_MOSI_PIN PTD2 |
dkato | 0:829da9075ffa | 39 | #define TEST_MISO_PIN PTD3 |
dkato | 0:829da9075ffa | 40 | #define TEST_SCLK_PIN PTD1 |
dkato | 0:829da9075ffa | 41 | #define TEST_CS_PIN PTD0 |
dkato | 0:829da9075ffa | 42 | |
dkato | 0:829da9075ffa | 43 | #elif defined(TARGET_EFM32LG_STK3600) || defined(TARGET_EFM32GG_STK3700) || defined(TARGET_EFM32WG_STK3800) |
dkato | 0:829da9075ffa | 44 | #define TEST_MOSI_PIN PD0 |
dkato | 0:829da9075ffa | 45 | #define TEST_MISO_PIN PD1 |
dkato | 0:829da9075ffa | 46 | #define TEST_SCLK_PIN PD2 |
dkato | 0:829da9075ffa | 47 | #define TEST_CS_PIN PD3 |
dkato | 0:829da9075ffa | 48 | |
dkato | 0:829da9075ffa | 49 | #elif defined(TARGET_EFM32ZG_STK3200) |
dkato | 0:829da9075ffa | 50 | #define TEST_MOSI_PIN PD7 |
dkato | 0:829da9075ffa | 51 | #define TEST_MISO_PIN PD6 |
dkato | 0:829da9075ffa | 52 | #define TEST_SCLK_PIN PC15 |
dkato | 0:829da9075ffa | 53 | #define TEST_CS_PIN PC14 |
dkato | 0:829da9075ffa | 54 | |
dkato | 0:829da9075ffa | 55 | #elif defined(TARGET_EFM32HG_STK3400) |
dkato | 0:829da9075ffa | 56 | #define TEST_MOSI_PIN PE10 |
dkato | 0:829da9075ffa | 57 | #define TEST_MISO_PIN PE11 |
dkato | 0:829da9075ffa | 58 | #define TEST_SCLK_PIN PE12 |
dkato | 0:829da9075ffa | 59 | #define TEST_CS_PIN PE13 |
dkato | 0:829da9075ffa | 60 | |
dkato | 0:829da9075ffa | 61 | #elif defined(TARGET_RZ_A1H) |
dkato | 0:829da9075ffa | 62 | #define TEST_MOSI_PIN P10_14 |
dkato | 0:829da9075ffa | 63 | #define TEST_MISO_PIN P10_15 |
dkato | 0:829da9075ffa | 64 | #define TEST_SCLK_PIN P10_12 |
dkato | 0:829da9075ffa | 65 | #define TEST_CS_PIN P10_13 |
dkato | 0:829da9075ffa | 66 | |
dkato | 0:829da9075ffa | 67 | #else |
dkato | 0:829da9075ffa | 68 | #error Target not supported |
dkato | 0:829da9075ffa | 69 | #endif |
dkato | 0:829da9075ffa | 70 | |
dkato | 0:829da9075ffa | 71 | volatile int why; |
dkato | 0:829da9075ffa | 72 | volatile bool complete; |
dkato | 0:829da9075ffa | 73 | void cbdone(int event) { |
dkato | 0:829da9075ffa | 74 | complete = true; |
dkato | 0:829da9075ffa | 75 | why = event; |
dkato | 0:829da9075ffa | 76 | } |
dkato | 0:829da9075ffa | 77 | |
dkato | 0:829da9075ffa | 78 | |
dkato | 0:829da9075ffa | 79 | TEST_GROUP(SPI_Master_Asynchronous) |
dkato | 0:829da9075ffa | 80 | { |
dkato | 0:829da9075ffa | 81 | uint8_t tx_buf[LONG_XFR]; |
dkato | 0:829da9075ffa | 82 | uint8_t rx_buf[LONG_XFR]; |
dkato | 0:829da9075ffa | 83 | SPI *obj; |
dkato | 0:829da9075ffa | 84 | DigitalOut *cs; |
dkato | 0:829da9075ffa | 85 | event_callback_t callback; |
dkato | 0:829da9075ffa | 86 | |
dkato | 0:829da9075ffa | 87 | void setup() { |
dkato | 0:829da9075ffa | 88 | obj = new SPI(TEST_MOSI_PIN, TEST_MISO_PIN, TEST_SCLK_PIN); |
dkato | 0:829da9075ffa | 89 | cs = new DigitalOut(TEST_CS_PIN); |
dkato | 0:829da9075ffa | 90 | complete = false; |
dkato | 0:829da9075ffa | 91 | why = 0; |
dkato | 0:829da9075ffa | 92 | callback.attach(cbdone); |
dkato | 0:829da9075ffa | 93 | |
dkato | 0:829da9075ffa | 94 | // Set the default value of tx_buf |
dkato | 0:829da9075ffa | 95 | for (uint32_t i = 0; i < sizeof(tx_buf); i++) { |
dkato | 0:829da9075ffa | 96 | tx_buf[i] = i + TEST_BYTE_TX_BASE; |
dkato | 0:829da9075ffa | 97 | } |
dkato | 0:829da9075ffa | 98 | memset(rx_buf,TEST_BYTE_RX,sizeof(rx_buf)); |
dkato | 0:829da9075ffa | 99 | } |
dkato | 0:829da9075ffa | 100 | void teardown() { |
dkato | 0:829da9075ffa | 101 | delete obj; |
dkato | 0:829da9075ffa | 102 | obj = NULL; |
dkato | 0:829da9075ffa | 103 | delete cs; |
dkato | 0:829da9075ffa | 104 | cs = NULL; |
dkato | 0:829da9075ffa | 105 | } |
dkato | 0:829da9075ffa | 106 | uint32_t cmpnbuf(uint8_t *expect, uint8_t *actual, uint32_t offset, uint32_t end, const char *file, uint32_t line) |
dkato | 0:829da9075ffa | 107 | { |
dkato | 0:829da9075ffa | 108 | uint32_t i; |
dkato | 0:829da9075ffa | 109 | for (i = offset; i < end; i++){ |
dkato | 0:829da9075ffa | 110 | if (expect[i] != actual[i]) { |
dkato | 0:829da9075ffa | 111 | break; |
dkato | 0:829da9075ffa | 112 | } |
dkato | 0:829da9075ffa | 113 | } |
dkato | 0:829da9075ffa | 114 | if (i < end) { |
dkato | 0:829da9075ffa | 115 | CHECK_EQUAL_LOCATION((int)expect[i], (int)actual[i], file, line); |
dkato | 0:829da9075ffa | 116 | } |
dkato | 0:829da9075ffa | 117 | CHECK_EQUAL_LOCATION(end, i, file, line); |
dkato | 0:829da9075ffa | 118 | return i; |
dkato | 0:829da9075ffa | 119 | } |
dkato | 0:829da9075ffa | 120 | uint32_t cmpnbufc(uint8_t expect, uint8_t *actual, uint32_t offset, uint32_t end, const char *file, uint32_t line) |
dkato | 0:829da9075ffa | 121 | { |
dkato | 0:829da9075ffa | 122 | uint32_t i; |
dkato | 0:829da9075ffa | 123 | for (i = offset; i < end; i++){ |
dkato | 0:829da9075ffa | 124 | if (expect != actual[i]) { |
dkato | 0:829da9075ffa | 125 | break; |
dkato | 0:829da9075ffa | 126 | } |
dkato | 0:829da9075ffa | 127 | } |
dkato | 0:829da9075ffa | 128 | if (i < end) { |
dkato | 0:829da9075ffa | 129 | CHECK_EQUAL_LOCATION((int)expect, (int)actual[i], file, line); |
dkato | 0:829da9075ffa | 130 | } |
dkato | 0:829da9075ffa | 131 | CHECK_EQUAL_LOCATION(end, i, file, line); |
dkato | 0:829da9075ffa | 132 | return i; |
dkato | 0:829da9075ffa | 133 | } |
dkato | 0:829da9075ffa | 134 | void dumpRXbuf() { |
dkato | 0:829da9075ffa | 135 | uint32_t i; |
dkato | 0:829da9075ffa | 136 | printf("\r\n"); |
dkato | 0:829da9075ffa | 137 | printf("RX Buffer Contents: ["); |
dkato | 0:829da9075ffa | 138 | //flushf(stdout); |
dkato | 0:829da9075ffa | 139 | for (i = 0; i < sizeof(rx_buf); i++){ |
dkato | 0:829da9075ffa | 140 | printf("%02x",rx_buf[i]); |
dkato | 0:829da9075ffa | 141 | if (i+1 < sizeof(rx_buf)){ |
dkato | 0:829da9075ffa | 142 | printf(","); |
dkato | 0:829da9075ffa | 143 | } |
dkato | 0:829da9075ffa | 144 | } |
dkato | 0:829da9075ffa | 145 | printf("]\r\n"); |
dkato | 0:829da9075ffa | 146 | } |
dkato | 0:829da9075ffa | 147 | }; |
dkato | 0:829da9075ffa | 148 | |
dkato | 0:829da9075ffa | 149 | // SPI write tx length: FIFO-1, read length: 0 |
dkato | 0:829da9075ffa | 150 | // Checks: Null pointer exceptions, completion event |
dkato | 0:829da9075ffa | 151 | TEST(SPI_Master_Asynchronous, short_tx_0_rx) |
dkato | 0:829da9075ffa | 152 | { |
dkato | 0:829da9075ffa | 153 | int rc; |
dkato | 0:829da9075ffa | 154 | // Write a buffer of Short Transfer length. |
dkato | 0:829da9075ffa | 155 | // rc = obj->transfer( tx_buf,SHORT_XFR,NULL,0, callback, -1); |
dkato | 0:829da9075ffa | 156 | rc = obj->transfer( tx_buf,SHORT_XFR,(uint8_t *)NULL,0, callback, -1); |
dkato | 0:829da9075ffa | 157 | CHECK_EQUAL(0, rc); |
dkato | 0:829da9075ffa | 158 | |
dkato | 0:829da9075ffa | 159 | while (!complete); |
dkato | 0:829da9075ffa | 160 | |
dkato | 0:829da9075ffa | 161 | // Make sure that the callback fires. |
dkato | 0:829da9075ffa | 162 | CHECK_EQUAL(why, SPI_EVENT_COMPLETE); |
dkato | 0:829da9075ffa | 163 | |
dkato | 0:829da9075ffa | 164 | // TODO: Check for a null pointer exception |
dkato | 0:829da9075ffa | 165 | } |
dkato | 0:829da9075ffa | 166 | |
dkato | 0:829da9075ffa | 167 | |
dkato | 0:829da9075ffa | 168 | // |
dkato | 0:829da9075ffa | 169 | // SPI write tx length: FIFO-1, read length: 0, non-null read pointer |
dkato | 0:829da9075ffa | 170 | // Checks: Null pointer exceptions, completion event, canary values in read buffer |
dkato | 0:829da9075ffa | 171 | TEST(SPI_Master_Asynchronous, short_tx_0_rx_nn) |
dkato | 0:829da9075ffa | 172 | { |
dkato | 0:829da9075ffa | 173 | int rc; |
dkato | 0:829da9075ffa | 174 | // Write a buffer of Short Transfer length. |
dkato | 0:829da9075ffa | 175 | rc = obj->transfer( tx_buf,SHORT_XFR,rx_buf,0,callback, -1); |
dkato | 0:829da9075ffa | 176 | CHECK_EQUAL(0, rc); |
dkato | 0:829da9075ffa | 177 | |
dkato | 0:829da9075ffa | 178 | while (!complete); |
dkato | 0:829da9075ffa | 179 | |
dkato | 0:829da9075ffa | 180 | // Make sure that the callback fires. |
dkato | 0:829da9075ffa | 181 | CHECK_EQUAL(SPI_EVENT_COMPLETE, why); |
dkato | 0:829da9075ffa | 182 | |
dkato | 0:829da9075ffa | 183 | // Check that the rx buffer is untouched |
dkato | 0:829da9075ffa | 184 | cmpnbufc(TEST_BYTE_RX,rx_buf,0,sizeof(rx_buf),__FILE__,__LINE__); |
dkato | 0:829da9075ffa | 185 | } |
dkato | 0:829da9075ffa | 186 | |
dkato | 0:829da9075ffa | 187 | // SPI write tx length: 0, read length: FIFO-1 |
dkato | 0:829da9075ffa | 188 | // Checks: Receive value==fill character, completion event |
dkato | 0:829da9075ffa | 189 | TEST(SPI_Master_Asynchronous, 0_tx_short_rx) |
dkato | 0:829da9075ffa | 190 | { |
dkato | 0:829da9075ffa | 191 | int rc; |
dkato | 0:829da9075ffa | 192 | // Read a buffer of Short Transfer length. |
dkato | 0:829da9075ffa | 193 | // rc = obj->transfer( NULL,0,rx_buf,SHORT_XFR,callback, -1); |
dkato | 0:829da9075ffa | 194 | rc = obj->transfer( (uint8_t *)NULL,0,rx_buf,SHORT_XFR,callback, -1); |
dkato | 0:829da9075ffa | 195 | CHECK_EQUAL(0, rc); |
dkato | 0:829da9075ffa | 196 | |
dkato | 0:829da9075ffa | 197 | while (!complete); |
dkato | 0:829da9075ffa | 198 | |
dkato | 0:829da9075ffa | 199 | // Make sure that the callback fires. |
dkato | 0:829da9075ffa | 200 | CHECK_EQUAL(SPI_EVENT_COMPLETE, why); |
dkato | 0:829da9075ffa | 201 | |
dkato | 0:829da9075ffa | 202 | // TODO: Check for null pointer exception |
dkato | 0:829da9075ffa | 203 | // Check that the receive buffer contains the fill byte. |
dkato | 0:829da9075ffa | 204 | cmpnbufc(SPI_FILL_WORD,rx_buf,0,SHORT_XFR,__FILE__,__LINE__); |
dkato | 0:829da9075ffa | 205 | // Check that remaining portion of the receive buffer contains the rx test byte |
dkato | 0:829da9075ffa | 206 | cmpnbufc(TEST_BYTE_RX,rx_buf,SHORT_XFR,sizeof(rx_buf),__FILE__,__LINE__); |
dkato | 0:829da9075ffa | 207 | } |
dkato | 0:829da9075ffa | 208 | |
dkato | 0:829da9075ffa | 209 | // SPI write tx length: 0, read length: FIFO-1 |
dkato | 0:829da9075ffa | 210 | // Checks: Receive value==fill character, completion event |
dkato | 0:829da9075ffa | 211 | TEST(SPI_Master_Asynchronous, 0_tx_nn_short_rx) |
dkato | 0:829da9075ffa | 212 | { |
dkato | 0:829da9075ffa | 213 | int rc; |
dkato | 0:829da9075ffa | 214 | // Read a buffer of Short Transfer length. |
dkato | 0:829da9075ffa | 215 | rc = obj->transfer(tx_buf,0,rx_buf,SHORT_XFR,callback, -1); |
dkato | 0:829da9075ffa | 216 | CHECK_EQUAL(0, rc); |
dkato | 0:829da9075ffa | 217 | |
dkato | 0:829da9075ffa | 218 | while (!complete); |
dkato | 0:829da9075ffa | 219 | |
dkato | 0:829da9075ffa | 220 | // Make sure that the callback fires. |
dkato | 0:829da9075ffa | 221 | CHECK_EQUAL(SPI_EVENT_COMPLETE, why); |
dkato | 0:829da9075ffa | 222 | |
dkato | 0:829da9075ffa | 223 | // Check that the receive buffer contains the fill byte. |
dkato | 0:829da9075ffa | 224 | cmpnbufc(SPI_FILL_WORD,rx_buf,0,SHORT_XFR,__FILE__,__LINE__); |
dkato | 0:829da9075ffa | 225 | // Check that remaining portion of the receive buffer contains the rx test byte |
dkato | 0:829da9075ffa | 226 | cmpnbufc(TEST_BYTE_RX,rx_buf,SHORT_XFR,sizeof(rx_buf),__FILE__,__LINE__); |
dkato | 0:829da9075ffa | 227 | } |
dkato | 0:829da9075ffa | 228 | |
dkato | 0:829da9075ffa | 229 | // SPI write tx length: FIFO-1 ascending values, read length: FIFO-1 |
dkato | 0:829da9075ffa | 230 | // Checks: Receive buffer == tx buffer, completion event |
dkato | 0:829da9075ffa | 231 | TEST(SPI_Master_Asynchronous, short_tx_short_rx) |
dkato | 0:829da9075ffa | 232 | { |
dkato | 0:829da9075ffa | 233 | int rc; |
dkato | 0:829da9075ffa | 234 | // Write/Read a buffer of Long Transfer length. |
dkato | 0:829da9075ffa | 235 | rc = obj->transfer( tx_buf,SHORT_XFR,rx_buf,SHORT_XFR,callback, -1); |
dkato | 0:829da9075ffa | 236 | CHECK_EQUAL(0, rc); |
dkato | 0:829da9075ffa | 237 | |
dkato | 0:829da9075ffa | 238 | while (!complete); |
dkato | 0:829da9075ffa | 239 | |
dkato | 0:829da9075ffa | 240 | // Make sure that the callback fires. |
dkato | 0:829da9075ffa | 241 | CHECK_EQUAL(SPI_EVENT_COMPLETE, why); |
dkato | 0:829da9075ffa | 242 | |
dkato | 0:829da9075ffa | 243 | // Check that the rx buffer contains the tx bytes |
dkato | 0:829da9075ffa | 244 | cmpnbuf(tx_buf,rx_buf,0,SHORT_XFR,__FILE__,__LINE__); |
dkato | 0:829da9075ffa | 245 | // Check that remaining portion of the receive buffer contains the rx test byte |
dkato | 0:829da9075ffa | 246 | cmpnbufc(TEST_BYTE_RX,rx_buf,SHORT_XFR,sizeof(rx_buf),__FILE__,__LINE__); |
dkato | 0:829da9075ffa | 247 | } |
dkato | 0:829da9075ffa | 248 | // SPI write tx length: 2xFIFO ascending values, read length: 2xFIFO |
dkato | 0:829da9075ffa | 249 | // Checks: Receive buffer == tx buffer, completion event |
dkato | 0:829da9075ffa | 250 | TEST(SPI_Master_Asynchronous, long_tx_long_rx) |
dkato | 0:829da9075ffa | 251 | { |
dkato | 0:829da9075ffa | 252 | int rc; |
dkato | 0:829da9075ffa | 253 | // Write/Read a buffer of Long Transfer length. |
dkato | 0:829da9075ffa | 254 | rc = obj->transfer(tx_buf,LONG_XFR,rx_buf,LONG_XFR,callback, -1); |
dkato | 0:829da9075ffa | 255 | CHECK_EQUAL(0, rc); |
dkato | 0:829da9075ffa | 256 | |
dkato | 0:829da9075ffa | 257 | while (!complete); |
dkato | 0:829da9075ffa | 258 | |
dkato | 0:829da9075ffa | 259 | // Make sure that the callback fires. |
dkato | 0:829da9075ffa | 260 | CHECK_EQUAL(SPI_EVENT_COMPLETE, why); |
dkato | 0:829da9075ffa | 261 | |
dkato | 0:829da9075ffa | 262 | //dumpRXbuf(); |
dkato | 0:829da9075ffa | 263 | // Check that the rx buffer contains the tx bytes |
dkato | 0:829da9075ffa | 264 | cmpnbuf(tx_buf,rx_buf,0,LONG_XFR,__FILE__,__LINE__); |
dkato | 0:829da9075ffa | 265 | // Check that remaining portion of the receive buffer contains the rx test byte |
dkato | 0:829da9075ffa | 266 | cmpnbufc(TEST_BYTE_RX,rx_buf,LONG_XFR,sizeof(rx_buf),__FILE__,__LINE__); |
dkato | 0:829da9075ffa | 267 | } |
dkato | 0:829da9075ffa | 268 | |
dkato | 0:829da9075ffa | 269 | // SPI write tx length: 2xFIFO, ascending, read length: FIFO-1 |
dkato | 0:829da9075ffa | 270 | // Checks: Receive buffer == tx buffer, completion event, read buffer overflow |
dkato | 0:829da9075ffa | 271 | TEST(SPI_Master_Asynchronous, long_tx_short_rx) |
dkato | 0:829da9075ffa | 272 | { |
dkato | 0:829da9075ffa | 273 | int rc; |
dkato | 0:829da9075ffa | 274 | // Write a buffer of Short Transfer length. |
dkato | 0:829da9075ffa | 275 | rc = obj->transfer(tx_buf,LONG_XFR,rx_buf,SHORT_XFR,callback, -1); |
dkato | 0:829da9075ffa | 276 | CHECK_EQUAL(0, rc); |
dkato | 0:829da9075ffa | 277 | |
dkato | 0:829da9075ffa | 278 | while (!complete); |
dkato | 0:829da9075ffa | 279 | |
dkato | 0:829da9075ffa | 280 | // Make sure that the callback fires. |
dkato | 0:829da9075ffa | 281 | CHECK_EQUAL(SPI_EVENT_COMPLETE, why); |
dkato | 0:829da9075ffa | 282 | |
dkato | 0:829da9075ffa | 283 | // Check that the rx buffer contains the tx bytes |
dkato | 0:829da9075ffa | 284 | cmpnbuf(tx_buf,rx_buf,0,SHORT_XFR,__FILE__,__LINE__); |
dkato | 0:829da9075ffa | 285 | // Check that remaining portion of the receive buffer contains the rx test byte |
dkato | 0:829da9075ffa | 286 | cmpnbufc(TEST_BYTE_RX,rx_buf,SHORT_XFR,sizeof(rx_buf),__FILE__,__LINE__); |
dkato | 0:829da9075ffa | 287 | } |
dkato | 0:829da9075ffa | 288 | |
dkato | 0:829da9075ffa | 289 | // SPI write tx length: FIFO-1, ascending, read length: 2xFIFO |
dkato | 0:829da9075ffa | 290 | // Checks: Receive buffer == tx buffer, then fill, completion event |
dkato | 0:829da9075ffa | 291 | TEST(SPI_Master_Asynchronous, short_tx_long_rx) |
dkato | 0:829da9075ffa | 292 | { |
dkato | 0:829da9075ffa | 293 | int rc; |
dkato | 0:829da9075ffa | 294 | // Write a buffer of Short Transfer length. |
dkato | 0:829da9075ffa | 295 | rc = obj->transfer(tx_buf,SHORT_XFR,rx_buf,LONG_XFR,callback, -1); |
dkato | 0:829da9075ffa | 296 | CHECK_EQUAL(0, rc); |
dkato | 0:829da9075ffa | 297 | |
dkato | 0:829da9075ffa | 298 | while (!complete); |
dkato | 0:829da9075ffa | 299 | |
dkato | 0:829da9075ffa | 300 | // Make sure that the callback fires. |
dkato | 0:829da9075ffa | 301 | CHECK_EQUAL(SPI_EVENT_COMPLETE, why); |
dkato | 0:829da9075ffa | 302 | |
dkato | 0:829da9075ffa | 303 | //dumpRXbuf(); |
dkato | 0:829da9075ffa | 304 | // Check that the rx buffer contains the tx bytes |
dkato | 0:829da9075ffa | 305 | cmpnbuf(tx_buf,rx_buf,0,SHORT_XFR,__FILE__,__LINE__); |
dkato | 0:829da9075ffa | 306 | // Check that the rx buffer contains the tx fill bytes |
dkato | 0:829da9075ffa | 307 | cmpnbufc(SPI_FILL_WORD,rx_buf,SHORT_XFR,LONG_XFR,__FILE__,__LINE__); |
dkato | 0:829da9075ffa | 308 | // Check that remaining portion of the receive buffer contains the rx test byte |
dkato | 0:829da9075ffa | 309 | cmpnbufc(TEST_BYTE_RX,rx_buf,LONG_XFR,sizeof(rx_buf),__FILE__,__LINE__); |
dkato | 0:829da9075ffa | 310 | } |
dkato | 0:829da9075ffa | 311 | |
dkato | 0:829da9075ffa | 312 | TEST(SPI_Master_Asynchronous, queue_test) |
dkato | 0:829da9075ffa | 313 | { |
dkato | 0:829da9075ffa | 314 | int rc; |
dkato | 0:829da9075ffa | 315 | // Write/Read a buffer of Long Transfer length. |
dkato | 0:829da9075ffa | 316 | rc = obj->transfer( tx_buf,4,rx_buf,4,callback, 0); |
dkato | 0:829da9075ffa | 317 | CHECK_EQUAL(0, rc); |
dkato | 0:829da9075ffa | 318 | rc = obj->transfer( &tx_buf[4],4, &rx_buf[4],4,callback, 0); |
dkato | 0:829da9075ffa | 319 | CHECK_EQUAL(0, rc); |
dkato | 0:829da9075ffa | 320 | rc = obj->transfer( &tx_buf[8],4, &rx_buf[8],4,callback, -1); |
dkato | 0:829da9075ffa | 321 | CHECK_EQUAL(0, rc); |
dkato | 0:829da9075ffa | 322 | |
dkato | 0:829da9075ffa | 323 | while (!complete); |
dkato | 0:829da9075ffa | 324 | |
dkato | 0:829da9075ffa | 325 | // Make sure that the callback fires. |
dkato | 0:829da9075ffa | 326 | CHECK_EQUAL(SPI_EVENT_COMPLETE, why); |
dkato | 0:829da9075ffa | 327 | |
dkato | 0:829da9075ffa | 328 | // Check that the rx buffer contains the tx bytes |
dkato | 0:829da9075ffa | 329 | cmpnbuf(tx_buf,rx_buf,0,12,__FILE__,__LINE__); |
dkato | 0:829da9075ffa | 330 | // Check that remaining portion of the receive buffer contains the rx test byte |
dkato | 0:829da9075ffa | 331 | cmpnbufc(TEST_BYTE_RX,rx_buf,12,sizeof(rx_buf),__FILE__,__LINE__); |
dkato | 0:829da9075ffa | 332 | } |