mirror of
https://github.com/Proxmark/proxmark3.git
synced 2024-11-15 21:25:20 +08:00
8ff31e935d
TC1 counts the number of TC0 overflows (carry bits). In random conditions TC1 would return or stay at zero, instead of counting up. This due to the behavior of the reset signal. SAM7S Series Datasheet, 33.5.6 Trigger: Regardless of the trigger used, it will be taken into account at the following active edge of the selected clock. This means that the counter value can be read differently from zero just after a trigger, especially when a low frequency signal is selected as the clock. The new code first prepares TC1 and asserts TC1 trigger and then prepares TC0 and asserts TC0 trigger. The TC0 start-up will reset TC1.
76 lines
2.1 KiB
C
76 lines
2.1 KiB
C
//-----------------------------------------------------------------------------
|
|
// Jonathan Westhues, Aug 2005
|
|
//
|
|
// This code is licensed to you under the terms of the GNU GPL, version 2 or,
|
|
// at your option, any later version. See the LICENSE.txt file for the text of
|
|
// the license.
|
|
//-----------------------------------------------------------------------------
|
|
// Utility functions used in many places, not specific to any piece of code.
|
|
//-----------------------------------------------------------------------------
|
|
|
|
#ifndef __UTIL_H
|
|
#define __UTIL_H
|
|
|
|
#include <stddef.h>
|
|
#include <stdint.h>
|
|
#include "common.h"
|
|
|
|
#define BYTEx(x, n) (((x) >> (n * 8)) & 0xff )
|
|
|
|
#define LED_RED 1
|
|
#define LED_ORANGE 2
|
|
#define LED_GREEN 4
|
|
#define LED_RED2 8
|
|
#define BUTTON_HOLD 1
|
|
#define BUTTON_NO_CLICK 0
|
|
#define BUTTON_SINGLE_CLICK -1
|
|
#define BUTTON_DOUBLE_CLICK -2
|
|
#define BUTTON_ERROR -99
|
|
|
|
void print_result(char *name, uint8_t *buf, size_t len);
|
|
size_t nbytes(size_t nbits);
|
|
uint32_t SwapBits(uint32_t value, int nrbits);
|
|
void num_to_bytes(uint64_t n, size_t len, uint8_t* dest);
|
|
uint64_t bytes_to_num(uint8_t* src, size_t len);
|
|
void rol(uint8_t *data, const size_t len);
|
|
void lsl (uint8_t *data, size_t len);
|
|
int32_t le24toh (uint8_t data[3]);
|
|
|
|
void LED(int led, int ms);
|
|
void LEDsoff();
|
|
int BUTTON_CLICKED(int ms);
|
|
int BUTTON_HELD(int ms);
|
|
void FormatVersionInformation(char *dst, int len, const char *prefix, void *version_information);
|
|
|
|
//iceman's ticks.h
|
|
#ifndef GET_TICKS
|
|
# define GET_TICKS GetTicks()
|
|
#endif
|
|
|
|
void SpinDelay(int ms);
|
|
void SpinDelayUs(int us);
|
|
|
|
void StartTickCount();
|
|
uint32_t RAMFUNC GetTickCount();
|
|
|
|
void StartCountUS();
|
|
uint32_t RAMFUNC GetCountUS();
|
|
uint32_t RAMFUNC GetDeltaCountUS();
|
|
|
|
void StartCountSspClk();
|
|
void ResetSspClk(void);
|
|
uint32_t RAMFUNC GetCountSspClk();
|
|
|
|
extern void StartTicks(void);
|
|
extern uint32_t GetTicks(void);
|
|
extern void WaitTicks(uint32_t ticks);
|
|
extern void WaitUS(uint16_t us);
|
|
extern void WaitMS(uint16_t ms);
|
|
extern void ResetTicks();
|
|
extern void ResetTimer(AT91PS_TC timer);
|
|
extern void StopTicks(void);
|
|
// end iceman's ticks.h
|
|
|
|
uint32_t prand();
|
|
|
|
#endif
|