forked from miracl/MIRACL
-
Notifications
You must be signed in to change notification settings - Fork 0
/
pic32.txt
174 lines (143 loc) · 4.92 KB
/
pic32.txt
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
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
Microchip PIC32 advice
This chip is supported by the MPLAB IDE and the MPLAB SIMulator.
These comments apply to version 8.73, Windows Version
A suitable mirdef.h file would be
#define MIRACL 32
#define MR_LITTLE_ENDIAN
#define mr_utype int
#define mr_unsign32 unsigned int
#define MR_IBITS 32
#define MR_LBITS 32
#define mr_dltype long long
#define mr_unsign64 unsigned long long
#define MR_NOASM
#define MAXBASE ((mr_small)1<<(MIRACL-1))
To get started, first build the miracl library from the command line
by executing this batch file
copy mirdef.pic mirdef.h
pic32-gcc -c -O2 -g mrcore.c
pic32-gcc -c -O2 -g mrarth0.c
pic32-gcc -c -O2 -g mrarth1.c
pic32-gcc -c -O2 -g mrarth2.c
pic32-gcc -c -O2 -g mralloc.c
pic32-gcc -c -O2 -g mrsmall.c
pic32-gcc -c -O2 -g mrio1.c
pic32-gcc -c -O2 -g mrio2.c
pic32-gcc -c -O2 -g mrgcd.c
pic32-gcc -c -O2 -g mrjack.c
pic32-gcc -c -O2 -g mrxgcd.c
pic32-gcc -c -O2 -g mrarth3.c
pic32-gcc -c -O2 -g mrbits.c
pic32-gcc -c -O2 -g mrrand.c
pic32-gcc -c -O2 -g mrprime.c
pic32-gcc -c -O2 -g mrcrt.c
pic32-gcc -c -O2 -g mrscrt.c
pic32-gcc -c -O2 -g mrmonty.c
pic32-gcc -c -O2 -g mrpower.c
pic32-gcc -c -O2 -g mrsroot.c
pic32-gcc -c -O2 -g mrcurve.c
pic32-gcc -c -O2 -g mrfast.c
pic32-gcc -c -O2 -g mrlucas.c
pic32-gcc -c -O2 -g mrzzn2.c
pic32-gcc -c -O2 -g mrzzn2b.c
pic32-gcc -c -O2 -g mrzzn3.c
pic32-gcc -c -O2 -g mrshs.c
pic32-gcc -c -O2 -g mrshs256.c
pic32-gcc -c -O2 -g mrshs512.c
pic32-gcc -c -O2 -g mraes.c
pic32-gcc -c -O2 -g mrgcm.c
pic32-gcc -c -O2 -g mrstrong.c
pic32-gcc -c -O2 -g mrbrick.c
pic32-gcc -c -O2 -g mrebrick.c
pic32-gcc -c -O2 -g mrgf2m.c
pic32-gcc -c -O2 -g mrec2m.c
pic32-gcc -c -O2 -g mrecn2.c
rem copy mrmuldv.ccc mrmuldv.c
rem pic32-gcc -c -O2 -g mrmuldv.c
rem
rem Create library 'miracl.lib'
del miracl.a
pic32-ar rc miracl.a mrcore.o mrarth0.o mrarth1.o mrarth2.o mralloc.o mrsmall.o mrgcm.o
pic32-ar r miracl.a mrio1.o mrio2.o mrjack.o mrgcd.o mrxgcd.o mrarth3.o mrbits.o mrzzn2.o mrzzn3.o
pic32-ar r miracl.a mrrand.o mrprime.o mrcrt.o mrscrt.o mrmonty.o mrcurve.o mrpower.o mrsroot.o
pic32-ar r miracl.a mrfast.o mrshs.o mraes.o mrlucas.o mrstrong.o mrbrick.o mrecn2.o
pic32-ar r miracl.a mrshs256.o mrshs512.o mrebrick.o mrgf2m.o mrec2m.o mrzzn2b.o
rem pic32-ar r miracl.a mrmuldv.o
del mr*.o
Then fire up the MPLAB IDE, and create a project called demo.
Choose one of the most powerful members of the PIC32 families to start
with, for example PIC32MX795F512L
Copy pk-demo.c to demo.c and add this to the project.
Add the Headers miracl.h and mirdef.h
Add the library file miracl.a
Edit demo.c to include at the start
#include <p32xxxx.h>
#include <stdio.h>
void _mon_putc (char c)
{
while (U1STAbits.UTXBF);
U1TXREG = c;
}
At the very start of the main() program add
U1MODEbits.UARTEN = 0x01;
U1STAbits.UTXEN = 0x01;
This magic is required to redirect printf() to UART1
Click on Debugger->Settings and the UART1 IO Tab. Enable UART1 IO
and redirect the output to a window.
Click on Project->Build options->project and the Linker Tab.
Create a heap of 65536 bytes and a stack of 1024 bytes
Build and Run the program. You should see the output in the Output Window,
SIM Uart1 Tab
The PIC32 uses a MIPS core. This architecture does not support a carry flag
and so Assembly language implementation will not be much faster than
C generated code.
To run the application ecdhp32.c, add the same "magic" as before
to redirect printf to UART1.
Use as mirdef.h
#define MIRACL 32
#define MR_LITTLE_ENDIAN
#define mr_utype int
#define mr_unsign32 unsigned int
#define MR_IBITS 32
#define MR_LBITS 32
#define mr_dltype long long
#define mr_unsign64 unsigned long long
#define MAXBASE ((mr_small)1<<(MIRACL-1))
#define MR_COMBA 5
#define MR_STATIC 5
#define MR_ALWAYS_BINARY
#define MR_STRIPPED_DOWN
#define MR_GENERIC_MT
#define MR_PSEUDO_MERSENNE
#define MR_SPECIAL
#define MR_NOASM
And build the library from the command line
mex 5 c mrcomba
pic32-gcc -c -g mrcore.c
pic32-gcc -c -g mrarth0.c
pic32-gcc -c -g mrarth1.c
pic32-gcc -c -g mrarth2.c
pic32-gcc -c -g mrsmall.c
pic32-gcc -c -g mrio1.c
pic32-gcc -c -g mrjack.c
pic32-gcc -c -g mrbits.c
pic32-gcc -c -g mrxgcd.c
pic32-gcc -c -g mrmonty.c
pic32-gcc -c -g mrsroot.c
pic32-gcc -c -g mrcurve.c
pic32-gcc -c -g mrlucas.c
pic32-gcc -c -g mrebrick.c
pic32-gcc -c -g mrcomba.c
pic32-ar -rc miracl.a mrcore.o mrarth0.o mrarth1.o mrarth2.o mrsmall.o
pic32-ar -r miracl.a mrio1.o mrjack.o mrxgcd.o
pic32-ar -r miracl.a mrmonty.o mrcurve.o
pic32-ar -r miracl.a mrebrick.o mrsroot.o mrlucas.o
pic32-ar -r miracl.a mrbits.o mrcomba.o
del mr*.o
This time no heap is required.
Note that -O2 optimization causes a problem. However introducing
each individual optimization from
http://gcc.gnu.org/onlinedocs/gcc-3.4.4/gcc/Optimize-Options.html
works fine.
Note that -O2 optimization works OK with MicroChip's newer MPLAB-X tool,
which uses a more up-to-date version 4.5 of the GCC compiler.