summaryrefslogtreecommitdiff
path: root/openpicc
diff options
context:
space:
mode:
authorhenryk <henryk@6dc7ffe9-61d6-0310-9af1-9938baff3ed1>2007-12-05 16:30:04 +0000
committerhenryk <henryk@6dc7ffe9-61d6-0310-9af1-9938baff3ed1>2007-12-05 16:30:04 +0000
commitace500869d1f5e54c3b7605c81f1321d5523c3d9 (patch)
tree1d66fe78b4939574b17c668a1232efd9b98d68b3 /openpicc
parentba63352b4b915e46bc44fbd98c6e0e837477005d (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
Diffstat (limited to 'openpicc')
-rw-r--r--openpicc/application/iso14443_layer3a.c4
-rw-r--r--openpicc/application/ssc_picc.c2
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);
personal git repositories of Harald Welte. Your mileage may vary