summaryrefslogtreecommitdiff
path: root/openpicc/config/board.h
blob: 0fa6858511a0a78c41afb0f7bafdbde16ba75d66 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
/***************************************************************
 *
 * OpenBeacon.org - board specific configuration
 *
 * Copyright 2007 Milosch Meriac <meriac@openbeacon.de>
 *
 * change this file to reflect hardware design changes
 *
 ***************************************************************

    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation; version 2.

    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License along
    with this program; if not, write to the Free Software Foundation, Inc.,
    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.

*/
#ifndef Board_h
#define Board_h

#include "lib_AT91SAM7.h"

#define RAMFUNC __attribute__ ((long_call, section (".ramfunc")))
#define IRQFUNC __attribute__ ((interrupt("IRQ")))
#define FIQFUNC __attribute__ ((interrupt("FIQ")))

#define true	-1
#define false	0

/*-------------------------------*/
/* SAM7Board Memories Definition */
/*-------------------------------*/

#define  ENVIRONMENT_SIZE	1024
#define  FLASH_PAGE_NB		AT91C_IFLASH_NB_OF_PAGES-(ENVIRONMENT_SIZE/AT91C_IFLASH_PAGE_SIZE)

/*-----------------*/
/* Master Clock    */
/*-----------------*/

#define EXT_OC		18432000	// Exetrnal ocilator MAINCK
#define MCK		47923200	// MCK (PLLRC div by 2)
#define MCKKHz		(MCK/1000)	//

/*-----------------*/
/* Board version   */
/*-----------------*/
enum openpicc_release {
	OPENPICC_v0_4,    /* Schematics v0.4, as sold in the shop */
	
	OPENPICC_v0_4_p1, /* based on schematics v0.4; Modifications: 
	 				   * + PLL_LOCK relocated from PA4 to PA5
	 				   * + Copy of FRAME routed to PA4 
	 				   * + Connection between R18 and 3V3 removed, instead R18 is now connected to PA31*/
	OPENPICC_v0_4_p2, /* Enhancement of v0.4p1, Add:
					   * + CARRIER can be switched from PLL output to original carrier
					   *   using PA30
					   */
	OPENPICC_v0_4_karsten, /* Combination of p1 and p2:
							* + Has everything v0.4p1 has
							* + CARRIER is fixed to original carrier, PLL ist completely out of the loop*/
};
enum clock_source { 
	CLOCK_SELECT_PLL,
	CLOCK_SELECT_CARRIER,
};

struct openpicc_hardware {
	enum openpicc_release release;
	char *release_name;
	struct {
		int data_gating:1;
		int clock_gating:1;
		int clock_switching:1;
	} features;
	enum clock_source default_clock;
	
	int PLL_LOCK;
	
	int CLOCK_GATE;
	int DATA_GATE;
	int CLOCK_SWITCH;
};

extern const struct openpicc_hardware OPENPICC_HARDWARE[];
extern const struct openpicc_hardware *OPENPICC;

/*-----------------*/
/* Pins            */
/*-----------------*/

#define LED_GREEN	AT91C_PIO_PA25
#define LED_RED		AT91C_PIO_PA12
#define LED_MASK	(LED_GREEN|LED_RED)

#define OPENPICC_PIO_SS2_DT_THRESH AT91C_PIO_PA8
#define OPENPICC_PIO_PLL_INHIBIT   AT91C_PIO_PA24

#define OPENPICC_MOD_PWM	   AT91C_PA23_PWM0
#define OPENPICC_MOD_SSC	   AT91C_PA17_TD
#define OPENPICC_SSC_DATA	   AT91C_PA18_RD
#define OPENPICC_SSC_CLOCK	   AT91C_PA19_RK
#define OPENPICC_SSC_TF		   AT91C_PIO_PA15

#define OPENPICC_PIO_FRAME         AT91C_PIO_PA20

#define OPENPICC_PIO_SSC_DATA_CONTROL   AT91C_PIO_PA21
#define OPENPICC_PIO_AB_DETECT          AT91C_PIO_PA22
#define OPENPICC_PIO_PLL_INHIBIT        AT91C_PIO_PA24

#define OPENPICC_ADC_FIELD_STRENGTH    AT91C_ADC_CH4

#define OPENPICC_PIO_LOAD1              AT91C_PIO_PA2
#define OPENPICC_PIO_LOAD2              AT91C_PIO_PA3

#define OPENPICC_PIO_CARRIER_IN          AT91C_PA28_TCLK1
#define OPENPICC_PIO_CARRIER_DIV_OUT     AT91C_PA1_TIOB0
#define OPENPICC_PIO_CDIV_HELP_OUT       AT91C_PA0_TIOA0
#define OPENPICC_PIO_CDIV_HELP_IN        AT91C_PA29_TCLK2

#define OPENPICC_IRQ_PRIO_PIO   (AT91C_AIC_PRIOR_LOWEST+4)
#define OPENPICC_IRQ_PRIO_SSC    (AT91C_AIC_PRIOR_HIGHEST-1)
#define OPENPCD_IRQ_PRIO_TC_FDT (AT91C_AIC_PRIOR_LOWEST+3)

/*-----------------*/
/* task priorities */
/*-----------------*/

#define TASK_BEACON_PRIORITY	( tskIDLE_PRIORITY )
#define TASK_BEACON_STACK	( 512 )

#define TASK_CMD_PRIORITY	( tskIDLE_PRIORITY + 2 )
#define TASK_CMD_STACK		( 512 )

#define TASK_USB_PRIORITY	( tskIDLE_PRIORITY + 2 )
#define TASK_USB_STACK		( 512 )

#define TASK_ISO_PRIORITY	( tskIDLE_PRIORITY + 3 )
#define TASK_ISO_STACK		( 512 )

#define TASK_NRF_PRIORITY	( tskIDLE_PRIORITY + 3 )
#define TASK_NRF_STACK		( 512 )

#endif /* Board_h */
personal git repositories of Harald Welte. Your mileage may vary