diff options
author | henryk <henryk@6dc7ffe9-61d6-0310-9af1-9938baff3ed1> | 2007-12-05 16:30:04 +0000 |
---|---|---|
committer | henryk <henryk@6dc7ffe9-61d6-0310-9af1-9938baff3ed1> | 2007-12-05 16:30:04 +0000 |
commit | ace500869d1f5e54c3b7605c81f1321d5523c3d9 (patch) | |
tree | 1d66fe78b4939574b17c668a1232efd9b98d68b3 | |
parent | ba63352b4b915e46bc44fbd98c6e0e837477005d (diff) |
Add a kludge to make repetitive sends working. For some obscure reason the first transfer of subsequent transmissions (32 sample-bits, equalling 2 data-bits) gets lost. It does work if I just give
the same TX buffer to the PDC twice (once after starting the TX PDC).
git-svn-id: https://svn.openpcd.org:2342/trunk@374 6dc7ffe9-61d6-0310-9af1-9938baff3ed1
-rw-r--r-- | openpicc/application/iso14443_layer3a.c | 4 | ||||
-rw-r--r-- | openpicc/application/ssc_picc.c | 2 |
2 files changed, 6 insertions, 0 deletions
diff --git a/openpicc/application/iso14443_layer3a.c b/openpicc/application/iso14443_layer3a.c index 06857f2..1433b33 100644 --- a/openpicc/application/iso14443_layer3a.c +++ b/openpicc/application/iso14443_layer3a.c @@ -206,6 +206,10 @@ void iso14443_layer3a_state_machine (void *pvParameters) DumpUIntToUSB((unsigned int)ssc_tx_buffer.source); DumpStringToUSB(" "); DumpUIntToUSB((unsigned int)&ATQA_FRAME); + DumpStringToUSB(" "); + DumpUIntToUSB(ssc_tx_buffer.len); + DumpStringToUSB(" "); + DumpBufferToUSB((char*)ssc_tx_buffer.data, ssc_tx_buffer.len); DumpStringToUSB("\n\r"); state=INITIAL_STATE; if(INITIAL_STATE == IDLE) diff --git a/openpicc/application/ssc_picc.c b/openpicc/application/ssc_picc.c index 7e02ec6..1332905 100644 --- a/openpicc/application/ssc_picc.c +++ b/openpicc/application/ssc_picc.c @@ -289,6 +289,7 @@ void ssc_tx_start(ssc_dma_tx_buffer_t *buf) u_int32_t start_cond; /* disable Tx */ + AT91F_PDC_DisableTx(tx_pdc); AT91F_SSC_DisableTx(AT91C_BASE_SSC); /* disable all Tx related interrupt sources */ @@ -315,6 +316,7 @@ void ssc_tx_start(ssc_dma_tx_buffer_t *buf) AT91F_SSC_EnableIt(ssc, AT91C_SSC_ENDTX); /* Enable DMA */ AT91F_PDC_EnableTx(tx_pdc); + AT91F_PDC_SetTx(tx_pdc, buf->data, num_data); /* Start Transmission */ #ifndef USE_SSC_TX_TF_WORKAROUND AT91F_SSC_EnableTx(AT91C_BASE_SSC); |