From cd321aff3d48b6244fc9204ee6722622470f4f2e Mon Sep 17 00:00:00 2001 From: chenzitai Date: Wed, 11 Jul 2018 10:59:43 +0100 Subject: [PATCH] Event Channel and PORTB int1 bug fix: 1. Use event CH2 for timer resetting 2. Can not sniff the second round of traffic due to the PORTB int1 was disabled in CardSniffInit(). This is reenabled in ReaderSniffInit (cherry picked from commit 24b87e2) --- Firmware/Chameleon-Mini/Codec/Codec.h | 5 +++ .../Chameleon-Mini/Codec/SniffISO14443-2A.c | 43 +++++++++++++------ 2 files changed, 36 insertions(+), 12 deletions(-) diff --git a/Firmware/Chameleon-Mini/Codec/Codec.h b/Firmware/Chameleon-Mini/Codec/Codec.h index 1e530bc..29daa91 100644 --- a/Firmware/Chameleon-Mini/Codec/Codec.h +++ b/Firmware/Chameleon-Mini/Codec/Codec.h @@ -146,6 +146,9 @@ INLINE void CodecInitCommon(void) EVSYS.CH0MUX = CODEC_DEMOD_IN_EVMUX0; EVSYS.CH1MUX = CODEC_DEMOD_IN_EVMUX1; + EVSYS.CH2MUX = CODEC_DEMOD_IN_EVMUX0; + + /* Configure loadmod pin configuration and use a virtual port configuration * for single instruction cycle access */ CODEC_LOADMOD_PORT.DIRSET = CODEC_LOADMOD_MASK; @@ -187,6 +190,8 @@ INLINE void CodecInitCommon(void) /* Configure Analog Comparator 1 to detect SOC */ ACA.AC1MUXCTRL = AC_MUXPOS_DAC_gc | AC_MUXNEG_PIN7_gc; ACA.AC1CTRL = CODEC_AC_DEMOD_SETTINGS; + + } INLINE void CodecSetSubcarrier(SubcarrierModType ModType, uint16_t Divider) diff --git a/Firmware/Chameleon-Mini/Codec/SniffISO14443-2A.c b/Firmware/Chameleon-Mini/Codec/SniffISO14443-2A.c index d8617ef..22fd65e 100644 --- a/Firmware/Chameleon-Mini/Codec/SniffISO14443-2A.c +++ b/Firmware/Chameleon-Mini/Codec/SniffISO14443-2A.c @@ -76,6 +76,22 @@ static volatile enum { void ReaderSniffInit(void) { + + // Common Codec Register settings +// CodecInitCommon(); + + + // Configure interrupt for demod + // This was disabled in CardSniffInit() + CODEC_DEMOD_IN_PORT.INTCTRL = PORT_INT1LVL_HI_gc; + + + // Enable demodulator power +// CodecSetDemodPower(true); + + + TrafficSource = TRAFFIC_READER; + /* Initialize some global vars and start looking out for reader commands */ Flags.DemodFinished = 0; @@ -408,6 +424,7 @@ ISR(TCD1_CCB_vect) // EOC found INLINE void CardSniffInit(void) { + TrafficSource = TRAFFIC_CARD; //////////////////////////// // Same as reader init @@ -530,6 +547,7 @@ INLINE void CardSniffDeinit(void) EVSYS.CH2MUX = 0; // on every ACA_AC1 INT EVSYS.CH2CTRL = 0; + ACA.AC0MUXCTRL = AC_MUXPOS_DAC_gc | AC_MUXNEG_PIN7_gc; ACA.AC0CTRL = CODEC_AC_DEMOD_SETTINGS; @@ -548,10 +566,9 @@ INLINE void CardSniffDeinit(void) void Sniff14443ACodecInit(void) { - Flags.DemodFinished = 0; +// Flags.DemodFinished = 0; - SniffEnable = true; - TrafficSource = TRAFFIC_READER; +// SniffEnable = true; // Common Codec Register settings CodecInitCommon(); @@ -570,9 +587,10 @@ void Sniff14443ACodecInit(void) void Sniff14443ACodecDeInit(void) { - SniffEnable = false; +// SniffEnable = false; CardSniffDeinit(); ReaderSniffDeInit(); + CodecSetDemodPower(false); } @@ -590,18 +608,17 @@ void Sniff14443ACodecTask(void) LogEntry(LOG_INFO_CODEC_RX_DATA, CodecBuffer, (DemodBitCount+7)/8); LEDHook(LED_CODEC_RX, LED_PULSE); - if(SniffEnable == true){ - // TODO: Start interrupt for finding Card -> Reader direction traffic +// if(SniffEnable == true){ + // TODO: Start interrupt for finding Card -> Reader direction traffic - ReaderSniffDeInit(); - CardSniffInit(); + ReaderSniffDeInit(); + CardSniffInit(); // ISO14443ACodecDeInit(); // TestSniff14443ACodecInit(); - TrafficSource = TRAFFIC_CARD; - return; - } + return; +// } } // // /* No data to be processed. Disable loadmodding and start listening again */ @@ -691,10 +708,12 @@ void Sniff14443ACodecTask(void) // LED_PORT.OUTCLR = LED_RED; CardSniffDeinit(); +// TrafficSource = TRAFFIC_READER; ReaderSniffInit(); +// Sniff14443ACodecInit(); +// ReaderSniffInit(); // Reader14443ACodecDeInit(); // ISO14443ACodecInit(); - TrafficSource = TRAFFIC_READER; return; // }