New file |
| | |
| | | %PDF-1.0 |
| | | 10 0 obj
|
| | | <<
|
| | | /Length 11 0 R
|
| | | /Filter [ /ASCII85Decode /LZWDecode ]
|
| | | >>
|
| | | stream
|
| | | J.+gME)=>9"r`LkU>_3l5WBYj7Dj\tJE18F)1b1"U_H'n3Cf`onhA-N!\-[5ctG6q
|
| | | E&SRBL6?P8/8Zdna,5U3dG,F?'G+$:F/dCJ-QJ.9Jrs`f?o&^\Ku5W1aAQ:n&qNGQ
|
| | | lkk`iJJqqU!`b3/+;tWBU'%oUB+l3i$).LSFpqmb%7V!3]rZ(!(LKQDR=5A=JAE0*
|
| | | 75.`SEH/PGDg5[jggb'7@5!qZ[URjG`^^&-8XuMTA!Y$p'.g*),r^n1BE\K(UtBB@
|
| | | *5i":.C@N52k,b];]3s=E]MSQ@faZpF&Nbe%S$F>'L6_!),+Y*i65dk0pk^jSdf#4
|
| | | @$=5/nmTd9=>l%)jMaiTTS@8:SG,Da(L6/ZU>pJ`1^p,ba>aV=#g*\eK94MC5RLn.
|
| | | L5,em-56f=+G(H@@Dg<k-#4E(eYZcZC5%Bk_L<1)_C1!MYHYgB.0uZ<51,20>>1(]
|
| | | W01JpMMo8H/d=uD;CW,Q_G)&D82Po%"Tl3^1-ojRg?ahq&F,1J_[,$RN3YR/P"/(>
|
| | | 2'.D_l=(W%&ep0I8J4os1FrnRSeMLX&EZ'6,G<%5"9Nh<(Q%-*N"?D7\AgD:1Q9F9
|
| | | V'&ab2$VN=5;u-,]Yum&PI,ueNrp6A2@Y9egnTl3GjbVnj/Clq%>2eSgf=ti/i>^d
|
| | | )p:`A1ka/*;O"QW2q(dfQT@^F]V$TO5m:1eN`8At3KCDYF>m-?I!8/ip(];A9PH),
|
| | | 3m#e]VZ`#ITN^`C6Q#,QU;JDA1oSjll"nt[h19IgZA"-_=S.T:4,F&1cTk,*1QFB:
|
| | | eJ0up=?#Mqm]"?:Co%:EXq'dU_f3IN"g0O_2\#MXD"0WM^*.r.=I<`YKt+X,N8W1c
|
| | | k>JFfbQ!i%3FnbKAf6\,2Hce$ki5r%-*XI$<n-AO9m>rZ9]-^.#9aD+#j!`C"*j)l
|
| | | %N>+-3t:4XkV2=df[DL-f>C6B8?"YHW<hK3S0EhW#ac//Of4!`#pOnu,g]_rGEnn=
|
| | | 'V6(p!HRmpVpN?fO2FfP@#&'>"M>:_DtqYL%&5*[r'*ILq#<S]/-Q)?cpSV(kGVth
|
| | | `c8hr-cemkC`c\;'fa+=oK;'fc$3]bSqf<'f(m+TeV!G_N-90X7I:1*>`Z[kK[jug
|
| | | ]u\>X2t1001CPKB*:U`A(>%Xj6YP0b#\%J=.G<";7FKB8&CC@P8=-gn!t]$CcdXeU
|
| | | `#PjTA)C6o]^33V'XUk4l$TLr"u'Taa5#$aBYhC]]-W[K!t)5/9VH1/eTfiuM+n3@
|
| | | oa<3L,ROU/<='fW-%Z85Mc$-B#[nI^,4KKo_P/_9+Q/ofE_*u:dte3Yc,CqNXJX0t
|
| | | l7O4@$Nlbs%1IJ6"u*.T,li`5'\X]f+N11E!mk@MKO#u+oVM^5D@R%N-jHr`)je?;
|
| | | 'B3CJ#@N-2[(mCj9,V_:LfmA>Ju'7-MGOXnff6tq*_F2B(5icpeY9"o*@$(l"TZD#
|
| | | '*sF9!PE_'kh\Q9B`nn#CeK`X*\J+n5T<')@5SZ[(m+ls8YX.gOYU5X'*>,%+u8t3
|
| | | %`q?r<W%tiil55DV,&B;LE=>i:mP\2f+S.)6_lPBQ)R#*b9PM(JW[)e7*]&$)(Z+>
|
| | | AA(#(`]=3`:`@29HB2K,;GAi1Rgs`nQ#g\.Jq07JOVIO:7)gasM9e4mEA.S^TpNt;
|
| | | b+rPm[QQ<l/%B-Rj$C6FKl\/0#>j3T>psV$L_)Qo^ug6o_:gu+GT/[\9XnLtB2+M'
|
| | | >c*^N>(NY+KB_Kgbbks;@<4"("A#BlOCAZo]_..MS/;thXZaa>JY02rJ4;N-)1e&3
|
| | | 1@jjT8VlCHk>\,^dI'2iGtJ>f&2\99Y&MDf[L*(\>Qk/D(5Dn"$>QZL7+C4CeY6[p
|
| | | WpD4!1bc=/f]!Ws"`c_'@SPKgL`$7/GAXV[dOm4WF2>@B#6["%QMG;0;-6U$:%c:)
|
| | | i/S'E859HALaL%!dmDh/Koa/ECT14e>L)o7-im!mK[>AckP-Vsl;ZuB!oH>]$[E&T
|
| | | EP*"$EDae_$OCJQ+p=BE'9T]>#)JebJq0>*>A?<VkZT/65dD()8e\>BU@=@KYX:&4
|
| | | 5mnL;8B2!l'gd&oQn]aU)Y?p!P>RWqnNAk_Gc!gmIG65Ac<"";)_B'M2*KEM)PTh"
|
| | | [360gClOkJWO;G'WXD#p$dC?)=P=3_@1/8f^.oBs[jHo;/I#<,p_+'IMs<ubE<Sf!
|
| | | 'Ea*1nN9i!&nm,&$tb@=XbFa57edbsNK,M<>-dXC2.OY&JJ(]^"9^+h@$te0U?F"f
|
| | | Fls%k_c\6iD-P4-\2&e^:kTR$)/O/TZ_dor6cdeT1$/h'!no3$>\H!Q#_bA$>jf,i
|
| | | 3UNPTh`k')04--e(63/$4;cKaU8DTPdAr$$BH7=68d8$W5j"s$%&0Q#fi,baY:ANG
|
| | | KG%m^98\k!)JWLp(S_0FS)g1t:.$@D/-Zql$H[Js+tfk;@?tKp`KC9,Lk2LFj3L0l
|
| | | [HH?E7Z;KEe.aUu""d)l.g%FKJ=nfpq"tMBY$Ite[K#*B$U(fW:H?D.\"%$uY,DgC
|
| | | -7$gu,)ZAJGI/2ilER*+UN$SU`LV1m5##kLSf'GD45+uN&*^J]SMndDW'o2t"$9gh
|
| | | E]'77J[UI(IFFpuAjt7l6[*+4iIW4YRX`f[%W@0DY=imNhfWpn#D`_p>3fO3.\Tic
|
| | | )`eB7FE%Y=+tuck1_2).R`ut@4gIP$3hdndZBGWO?Yud>GdKug"A`l3^hki.%[Gd,
|
| | | gM:Ka,K=iO,ZB&a3$N%'luKL#Y$E]Xd#_'2qMKO#i4U("ki"6s;m^T=fIAm&!ZM[i
|
| | | =q.A4hn`3LERq_H%>>Q-]u6H%=X,8(+hSSo0[@_OK0!Qm`=;t/,,Lq(0C$Z7XAhA-
|
| | | Z3Xbimi8N*D1*s'37]9nV*@h0#9-#/(cF]K;Ki1LD[LiGm"P93cL'nZT=WkV/N`]#
|
| | | b)HmkoM9;_^AC]/]s`cmCpi<s5oZ':hSo:c+Fj"3GLX!XAdB"*k';]2o4]8*bG+,N
|
| | | QIl<)Ta9MUlO9"#f(n\'MaQ2&D7617HAmZ/N\@>Bj4a72Z>.T!M3!6Z8B@?].-tlR
|
| | | d:@ps-,f]kaTL^H#YsNqmd,XGUo6PU"lPn[b&Stm9_AocA7eH0jLSD`g'.X3dRo8h
|
| | | cdIiWCpPPLN0"kW5\Psd/u*@)mEMm>D)2'O7U'h>#-RD!AF9jZI*53n4p'NjancEW
|
| | | )G)@tbcE0#ln$@+r_(Jfnd8,%#.3>"^2=Fnif+fLcJYIY]aJ^3m#T*rn>uBPb(K2j
|
| | | 8KsV&b)F+G<;p`DO=CD5$19gT^m37C%?)F$n<aCefZT6'Q,#WiTKk)J(D)HHouf,;
|
| | | K((0",XipN/L`OR"4$7$QmTb#djW;cDURl\+V=-=&.l(@OW)a[lO2'N&nkSY!2^)p
|
| | | kds)tTl('</VJZX*/$as%&Io&VNfaX,*"+HO3Ft%W=GATSfrseS$2a["thSR9Hg?<
|
| | | hrIi=aqY3KAH:_gSgqg\;(Mo^;Ctc/*GoZt&[k`?jK=C,Y7]VCdDg4kmcRCQ*q'/h
|
| | | OnS;3aOK@B;Bcmemh$-@3>bU/:@1U`DVl#P9M,jm^QAU1OBbO5kU&$OpLjJ]0C'7f
|
| | | PcFoF'4daE.:CAZGn&umbq\Pg#T,f2:eTt.Q2o?4c0e.N&:`cB9*DUGnkdXdqF=(>
|
| | | ,Yfu=$-)nc37bC@da1VQ&WIWJ<q"sd(^+gF;3$:ihX(riM(`,_+GOaV/-^a!#`!="
|
| | | @MnitbR+W#$,ERMbF20Sh"AUD!XBVe8qakh.[*,LL4FknYM-#:>]q;@`'Bgu/!`Ls
|
| | | 4KBmiDkNtGk5r6U,Y`p(YibE^B*ee32Ht(a,-1i4BO4%O2FF4+MZen@$`XO:4Sl+g
|
| | | LkhKKcRR!(+DkLi2XK(B8#T)epGcjALkSGd_fW%KQQmp<2o+(Kj<Y(b9[#bn$AbcR
|
| | | YM*ukQMrN-`)Cbu^i5)]cj%o$3X:X(C05@gk&cBO3p%8YNe.b)S3_,a3ZuU,DZ`&Y
|
| | | a:;nW$q$so7/.1J7P2iqYg,]IZ[)hp._DU<4MYes#lH3)$8"Tt6A$=35X5?;$8=m#
|
| | | .RQ!\6T0nl@bJUV"]'S&'N-9[kcKf2;SmKF6R[io,V_,k7eBLX8WY]l>(a\58L"C0
|
| | | 6RXZSKgrs#7fsZqe6,;9egDt)1Xou.1lFu5NZp!K7uS6WE1ePV4\?EF8p$"I0V_>+
|
| | | mn6"Q$4><XES!plW/T6aUGS62JoV'[rCQYP1\AR\PYs/6@nCcL;,i/jeI>7&`%j1j
|
| | | :m?`0!t(-t$V$C-;$/+6.b.9]2,/0LK@H_nFAGee-V<Tu7J/DfC[4Y/4&n-O<HV]J
|
| | | oU//_f2i,-<:o'K[6T\Y>bP/+=B-SG'Wk9-eiD5m<+RXaPtb*JBiF%?M2L+f'o4Hg
|
| | | %o62T>(Zr>ogMF^cW[_L=1+l-2/Fkk]J>_@>]meeFh(CmJQf>!8(GPQ'pi77O'B#V
|
| | | /_+'0#X$mBAQ]_.?a9i?2-qlbH!b^U>Lf'BeE]]W+%LH6@$O_hC5l:Q'&1oK=4S<t
|
| | | Z`@AsFAg[W?8XlV'`hiebuuu;9%6m38L%bH?7?RuA(<[gUb"2rMcVfU14Wi&p/tkS
|
| | | ;DltcB6ETTLch!(O(";:$6g:!<b#IeSS,`XBm)"6Q.'Ag)f$k(@!8eE2Le1RS4?Vl
|
| | | AC[SbWG?-'d:]Xjk>oi5(;MTsAQpXFB!orm[^*N1m9q2S9X_-7p9S?gLM8[N?Xa'~>
|
| | | endstream
|
| | | endobj
|
| | | 11 0 obj
|
| | | 4686
|
| | | endobj
|
| | | 4 0 obj
|
| | | <<
|
| | | /Type /Page
|
| | | /Parent 5 0 R
|
| | | /Resources <<
|
| | | /Font <<
|
| | | /F2 7 0 R |
| | | /F4 8 0 R |
| | | /F5 9 0 R |
| | | >>
|
| | | /ProcSet 2 0 R
|
| | | >>
|
| | | /Contents 10 0 R
|
| | | >>
|
| | | endobj
|
| | | 6 0 obj
|
| | | <<
|
| | | /Type /Encoding
|
| | | /Differences [ 39 /quotesingle 96 /grave 128 /Adieresis/Aring/Ccedilla/Eacute
|
| | | /Ntilde/Odieresis/Udieresis/aacute/agrave/acircumflex
|
| | | /adieresis/atilde/aring/ccedilla/eacute/egrave
|
| | | /ecircumflex/edieresis/iacute/igrave/icircumflex/idieresis
|
| | | /ntilde/oacute/ograve/ocircumflex/odieresis/otilde
|
| | | /uacute/ugrave/ucircumflex/udieresis/dagger/.notdef
|
| | | 164 /section/bullet/paragraph/germandbls/registered/copyright
|
| | | /trademark/acute/dieresis/.notdef/AE/Oslash
|
| | | 177 /.notdef/.notdef/.notdef/yen 182 /.notdef/.notdef
|
| | | /.notdef/.notdef/.notdef/ordfeminine/ordmasculine/.notdef
|
| | | /ae/oslash/questiondown/exclamdown/logicalnot/.notdef
|
| | | /florin/.notdef/.notdef/guillemotleft/guillemotright/ellipsis
|
| | | /.notdef/Agrave/Atilde/Otilde/OE/oe
|
| | | /endash/emdash/quotedblleft/quotedblright/quoteleft/quoteright
|
| | | 216 /ydieresis/Ydieresis/fraction/currency/guilsinglleft/guilsinglright
|
| | | /fi/fl/daggerdbl/periodcentered/quotesinglbase/quotedblbase
|
| | | /perthousand/Acircumflex/Ecircumflex/Aacute/Edieresis/Egrave
|
| | | /Iacute/Icircumflex/Idieresis/Igrave/Oacute/Ocircumflex
|
| | | 241 /Ograve/Uacute/Ucircumflex/Ugrave 246 /circumflex/tilde
|
| | | /macron/breve/dotaccent/ring/cedilla/hungarumlaut
|
| | | /ogonek/caron
|
| | | ]
|
| | | >>
|
| | | endobj
|
| | | 13 0 obj
|
| | | <<
|
| | | /Length 14 0 R
|
| | | /Filter [ /ASCII85Decode /LZWDecode ]
|
| | | >>
|
| | | stream
|
| | | J.+gME)=>9"r`LkU>_3l5WBYj7Dj\tJE18F)1b1"U_H'n3Cf`onhA-N!\-[5ctG6q
|
| | | E&SRBL6?P8/8Zdna,5U3dG,F?'G+$:F/dCJ-QJ.9Jrs`f?o&^\Ku5W1bYh^r&qNGQ
|
| | | lkk`iJJqqU!`b30-Pm4[#B9ah-8lDK6j9m_(s!%&N$\XR:tk[s^'H)AquufoJMmRe
|
| | | @&n8+iGuS;YbD0.`+bFOhX+HN^*=@3Nlp^/l%I5.15S`co8u=(ctPBV:'WKS9Zh3/
|
| | | R*FdR+k4MR2k5n;P+efg1q*mJj#muPn#\ShpUfqrbi!%eRS/8fR+TDe3Z<3i:,'[^
|
| | | /<e222(^N9.2.m[-StlBYekJ8&4g)*Tp@;iKEFK^0T:X7d+sYS!6@/0,I@<F1;SKS
|
| | | W<WGhW$2KjLh7J/$G*MH,`.sdPq6Wa*n$ooY\JlH.DQW3#XVpj+c0V-La7d#32@[R
|
| | | Y9LE8NZ_7+^nsE7(psR*E'U:oX%Fq%$K2!?O"9N'`j28\3+0+K/OJ$sXm:l,]"q'J
|
| | | Af2bO6Jrd(YiE=29[c7<2$<r[,,rOq1D:4kBLm*M9p.?g\5.0.dMU5FZ6pE^X@VKn
|
| | | 9Itg]1^=;,U)\m'Jng1@1n#db-;ri8`3F,o*Y8?I<43_M_3/FGXhh'J)9r^k=JsL\
|
| | | P1*Qe'dY!C9N=W%8lF&@!#dj4XbT]tTrKCpL/k'u;ck3,g_X)oV*Q\f2Au`og@icC
|
| | | $&-4:@0p#C8ek%'f%=8GbKN\_,@"0JQY\Y_^!fL*Pa/FDe-_A'pK"_C@gV$bNWf`_
|
| | | et"$b??^hCMUi)n&V?`CTPn[MX)`,F1\^;\K*MF7?TNrjPU2OBW_LWn<esLND-pCf
|
| | | JOsFhc=)rLH"GN"B0jgPK\WS^5uQ\;ra2@%\d"-th0CeN($Wl#e"gUK6b,#XH5-G0
|
| | | ?/_9>3%>S1Ob-;`PVo`.eNDijldMeEbN-,/))`Y*h(?1bBGT?1c^6a,3m"J2JX4ak
|
| | | PjQ=Ygbt4#mD5)o`Dugf[(()q'jkGtTq;4Ekrb4cP3d0pkST$\139bi39O")ofBi2
|
| | | ^e(\.s.2qAf#bRI'X)L:pKRSBK58"V$+4SLV)lc')Lg/>m>UlEZf<4MDMKg3'iM!7
|
| | | ':_su0Y$7D9YsGQ>4Z,fYC)7Z<.)!(bEDV+d"`P!DLj/$]Hjm`^T+10_#QAK9!NIk
|
| | | -i=FB&LMuWA/[\O;ZYfM!J#+q;8DqmMdV[DJr?FZV6uEc<)MIS0D*H'+E4G*>U!?J
|
| | | 4qaaV5lREm*![%#'Z(Jnnt:@eL%$e(5\O@.iS46Q:M>Ke-`faF9K-"L3HE&_1/)*2
|
| | | "ssh*P/J2Hs'hHEIg/L1*6;\'J\4O.d#J@1Kq`c7ga[r7R<OmY*<P45nr8M*"X0_H
|
| | | H(jNgD+_)J*b,1sSGSIZ-9/`6eJ8Uf>_6/m&eH@uJ=`OamuNQ&1GGcYQK+bR8BS@J
|
| | | \L"d*U3p6TZ'9tna9;d@/.[[O+plDT)\unaE/O4L1WS-V*b=n[B2F,f*4<C)b=m%1
|
| | | `'bJ9Lut0M!b_f/!]A$/&I8Z+-(4;GB1LVp;l#)WP;!>9Wl]fI+Yb]Odf:6-$,Yc!
|
| | | 8ahtNK]U?:?<#q6m#00rL`Wt])<47E"qG'a.h_coV)^7lZatK)B[BJsEQiXN[)S:)
|
| | | =D;FgCS/E!J3Z.?*/^!cO0g3*OQK`/Rh@3-nf`TT.5n`8XUq;/Wf58[;a.,>P,.4)
|
| | | OjS=$A^b,9P(fa>[0$&G@bR2F1'FEb`&UY*/!=WS#cPUj@2Y7iNH>V?`[R\@AYnCS
|
| | | BMdXs[Un2oAgDXhEt.S-R$=2bHJ#=+"p.(i2`+5s2(d?B1ci4LrG'/-R8YlJ<TgPd
|
| | | CSWJ^Ce@gMBme0?WGZpbDH'[%dZS5`Cl1)E[ir%bd$W?qN/i1BT&S]A<_[7d`7>j?
|
| | | ;_#@pZUM2YK!%P^k<K_\EA<Uo%8nWd=KS:QOJZ>A=(I9#O#53f%p@5P]11f;]SEnt
|
| | | Ndoh5V-oi_b.'^bi`_0I_^tc6Ng:m7(^K@W*>oQS(No&nWOQ,)jJ0>r@SKTIh0,#O
|
| | | :9sK"e5Z"r74B7@6[&E&5cIstXM(g/=/l:h@etic@na!:9lo4XIb:k,(5=W!TeX1F
|
| | | IkD2P\sAr">g)YlY,Zi_'0bK\$a"&B!B6J8`t9oC9,OceG.Y366HOo6G:pS#VeT3a
|
| | | icVMdY;eDQ3;XV#ff=2[FQL;_qY"6@M`725,H8d'FC/998lmV:XVbOI?TI:LE"/ka
|
| | | )-7"#/.[C&[Tb==`\(UjltLDs7\"PJfop--rZ`Fg;+R`%gDFFVT@0m0<GF@"-9RW9
|
| | | `\G'Y*A:luG#U*&JOqf0$JtPMqQ0[5bO0^=/F2mW>k(^ZVlrnQnmJ!4<<8=c=I9r`
|
| | | @@>h%Bsqn:]h$s$DDe1/`"nsWC=i\5CRn\[M5O>9lZ&kZ:"d"@S-9+TAnBi,k1IqA
|
| | | &=go)Te;(_Nk-`+.@gXEQ'RNdVf7H+9Hg3Pc0!JVX$,^*gQcf>S["Sq9rN`+WAR^[
|
| | | [X+K[7D,UOXd]CBoKRY!mIj^rel1-\R()AZ^iqBM^>[f6iiV&K;sX_*`*<VbgO4jW
|
| | | 1W6tJbNgSCNUaCG(@m@6j%JRl75+8,B/M<uei$%6Eq(M*0opp7BfZhHjt3OpLe9_[
|
| | | \>l.r\_W=GT^unnONNL*Kpjs@TlWDoE:rBU9c"Gp2Pl2UR.J>Ff5IlM<9M0n(HXDD
|
| | | (<GBLH$Ik[8+!j][k/ZGK<S(%:3gGYn!uAh%sA3$f;k_,9ZOp^4<E^URot!$Z/Y4:
|
| | | Ds0c2S5!j=ePsjlf%lOfP9+FT3r_b:All/.Mi6DJ]Pin`5I/(rM`po\C@4pMUO%C?
|
| | | Rl7rgorCHFoIi_lF3<b#grmq34f7NB/K<mgMr`*Ls3^Z";#&j$aYFB`i,3a<oNh(:
|
| | | iP/1@I90bC*o=uo*Q.It_Sah]LE?)Kd^?`#Fo7&n_tTn]l`smPl^F0aI>]B#&";t5
|
| | | #k:Z;ri[YI/]tqicKPJ?6]^I0No9tol:Z'@o*o%$cc#je522+)qiA%ODKbpgSE[5Y
|
| | | ma(C+:S.IOm]6]`m&s=]Y)rYOGj"B&k0JLb$#]o=G)).hnuB##YScp"$Bo2Dq$!>o
|
| | | l=g5nas!oKh/7'.Cug2FYd1?`,%QjPn*W2288dg!$KUJ_`QE<P7g`l/OU4X9"PF/5
|
| | | n9&]o=tn>4"jA-j:hYGe>nGFhYdA5.g,Xmt%M6ShB1E75.h,=`.M2amd/=GL@T4P7
|
| | | DJ,!Wib&^P?m_rDH0rJN_Yd?l"F9/U]7mCVVs=r^?:&F(>2l2pAD%$?&A:q7FO7b4
|
| | | NZ:i75%MN(=iE(29SF1_>)KS$CbOKsOY[W)'+ls$g']VClhM,iJJccT%ck52EIea=
|
| | | KOHQ/%l%W3EAmIo;S7!^'JSrX!\"h`5o%O_b9mN1;9'C]p:?&7*<k=9LBpTX2&%dK
|
| | | '2]g=@ZqTsh\pJV'(JU4OTuC/TS,k*)6o!RAs-st;GLi<DN1B,LR>NI@dY\$XjE/e
|
| | | %$_=d&F1[]>CuYhM3Me\0PSRG'%02_Z:Jd#.!1AE,3?EQ0mYj7/l-L?<K]-H"HmQ+
|
| | | >'UFG=i0lT/%BkY>3I_h9dd%d$E.c/cooI`'#L5=K,@qSCE(:/B17@uL-/ZpifpL$
|
| | | @q);qE^;4=>&K&%)^6RXc`Ae]TQ6bP0/@YsK_dI0<%nB<X?up-6>CIm[^aN2/P=2&
|
| | | U(W+LBe5BkS>IS\o*6f.`>J_(3GZW@iad]'S4LM'9_)Al8(AB]%!<3q.Pd<CjXi18
|
| | | "!Z2Y.B`AJ/7_n(R5?Kj_6T0.Vlh1t9,=j/F4)2]WV0eaW`$.NMIN)MB#-(AUhiA*
|
| | | :"&0_/H71UMM1Q`09TNuanHP373^3"JJ4k9P(Li?B/,T#1$()onOYKW)`#iT;['P>
|
| | | PHLnUJnP6:'6?Pj9&,/9N=?-/3Q1YU6Cg<$.5%o14btgAdbcN1bT[^C/G"-OVo_%W
|
| | | C3/M4+X/%7PNa[)Sns3X,&91No$FcY.WkuU*4&L07^u^O-;IKV53#Nu8"W.*9W_5f
|
| | | 6<"%6;DAkYNC3s,+u1N1F-@,dVHFRT!f,;n6Q8A^;CZFQ]i6&FE8G\YB0PMO.?gSb
|
| | | FFcd-s"e`H8i/Ob1FY'.BPXb*4B&jZ<)5Zr0fp)c7?^':;rKUs!)N.Z)6VsCNkTXX
|
| | | fN"sNpC;a<.Pe%;1rLUUM3A$0B::8K1d[0^+0n[+oa*9.L4)g*:SO[]o;*d0XGMU6
|
| | | <Ut*41P\_<D%#o`3E.h(Kk40,q(o7r1'4-!VG(oF:8)X:;.k8W7-'I85?+Mf%APIK
|
| | | B#QZ'%-^(r<p&LE1eMZK7UZM_<HWLde&"r#X]R:e$GuaD[<-V8LKX:X+dHV5<D='g
|
| | | 2JuD4MpWed13HP?->67YeZ=F9-MU#"U7c8.L,Hmn.`E+E6>fV1`K>\H($=:!EtsB4
|
| | | 5F&83&bJl^8l3^0p*70^A%6!5Q!3]gg(h)#[?e>1[4(-J=O?_L'uO)s)dK*b>kOc?
|
| | | nn2;%g/%m_,&3_hQ112Rj=3O,<O'IlFn.!t4"i>DWV,(Z7`9K?lX3`>7>e]!6oAI3
|
| | | ],7Bf@J2QYOpF3o.:I@O<g'17,U?eCQq66=F`J[:ejqH*LG,K)3K\)Y/RC6]4!/X[
|
| | | .S?;!EF`_f%9o+<1S_R!7pJ-0b0k<D>D\JLju#,=CMUrN,"JhSQCf2g8oqu(YYp0i
|
| | | -KP;eJQi>c=_5gt[Dbn+G;9<I<rs.TG4[QN>,ar$:Sq&7`ooLm^N7Q&/cqq(p2N53
|
| | | 9PTi3KXEa]D3J&c9'nC!$o]>A7V*2g4a,Dk7#o`1b!U$SV/o&lEb-qNp'5hs3BX@U
|
| | | Gq$\8pR"uXd:QH=0%"Q8;)`VUoeM6`DHBCR`u6Dg?[!;N3U+L@f/lKGojJ'ODhB%:
|
| | | /Xn48-n.*1+(dNJfB6j[4UDb5I>7I]GDgjf>C@7n4!l6k[?TY`>C2^kGLrrfPQ-0?
|
| | | &U>,=J/=NWPh(=Pc>R=YM,`P:-e3Tg06L7jY&2@12fhW+:OC$jFL:n5-te37eP*8;
|
| | | C\Tu?'O_W?fX-m%D,Oe[6Mu'f?>^3">+ua`oO(S$m=J:)I`cA6(_o709mh1+8gIJk
|
| | | pmFpf2%E`JJ2EWl3&cPY;bgH'Dg)&/<@4','itT>;#!Y\R'Akk\O*M@E?`i_pf313
|
| | | 2idE<Lj524Gi`q0qB9SG.$g`t[]>L$5?$,_0G_,oBE)C=MTAE.M1Qk0"_DMl5sFn+
|
| | | iRPjjQJ=0I3Kr%T.8.^E_i]PINf5tAD>*h<f)Rg_(/h[\E/F:m<8!AA8T@jdBu<ao
|
| | | #THO:\6@!eQfYHm7>`9[c>i'(mpuFG"BO#B'NVc8F/>@o<a(->$sQ3'RPh47\Z;/'
|
| | | %@MLL5^Bu/H)=NN[SPu9S9_EcOr.Kb.Un/%>g/j@,F$Grn"-NPA.;Bdq9PL4^n_36
|
| | | S[kt!jlBV!!M-e)J]GFDnEle#&VC65E/3jpD><&<:nI&;S&RB'je>aanmNoU.J*_<
|
| | | .4&9=N%\4;TdG:M7YWXsQB3I?+@_+OG-HUdp/)`.DoPJ7\Fr?nShDMkVM4,NM").)
|
| | | M(/:O2'c@;/#eStQujV_0@/QcU*-=e4)RD;Ul0Jb\q";1[TTVL-L.C1.sR5t?7ILk
|
| | | W:rY?a'MI&(T@']F(RK@g5K#jE.D,$Ca:m97/O0ARjhkpQPOSD`)eMQ4I\:cQ.lpY
|
| | | "&5o9n=//R?97b\;_>;S"07>9Z0'B2&siK!Y%XkgW;Ar^jR%uoQ)f7,9mWRD\HNG^
|
| | | o;nE].KuP"@MPrq:Tf$9_3G2)$1tJADGqj:YG=%ZqN!VJMm-e'Ug'$RRsnbbKs\I=
|
| | | /s9UMgHVT0WMGrIZYP%-q_b9Mbq'f(]/ksc!Y_/p'tT*(PNtt>4.;KBoSpK>='L]I
|
| | | -G!Hoe#rPR\6JN6;\uSt_7NSPF*c$3VqQ<*,ZtX5\3#8B78c,L(EYaC[tS)>1S_'u
|
| | | b_(S4/*9d=Rb=e'mNtML_PoRkl%tt+)n8!i2(PV-WY5QtjhmlNG=F*sr&CAp\YOq9
|
| | | *'@gfWQUm&$+\h8ImonDVg,bbB?8jK\m#uk4=@gH+iO:5T[eD,L:E1'Q+O\4@/N[0
|
| | | "=M.M14:*3\nN=Sa;[UOc:*%7<kQjjj`2hS5+<k>FVqZb[M-QD*t9,hR=+3bM6Xga
|
| | | B?rs'G!"Vn2Kcl!p1Sc"gq76o0`FLZ.><.]-H-Nt0H6"j>XaPn::jkm)e.gLT1'"t
|
| | | $GmKX]gP#'2H2"r.f(Q&&_9b?.Fb^2U"s0s@\RuC>W!59;ZuF;MlG:Ic.60Mf3/&.
|
| | | I=+rk9qgC*>Wl2(>@UD*mFU?o*K"@!,j1U"=L`NATB.r`eVDZ94.dk[f/6j+g(iB@
|
| | | BA>XdImgkI*K@Kd#Z],?a@S+iqR=mmRj-n'E#MOr\'`^/;loh1N&om#nnadVC+;6U
|
| | | '-nqG\aZOc<)%eM/]g*4[[#J=0;R<DOiU>KCO):23fig#%*:N6fp'(>.'Z;^WbSJ9
|
| | | ,gdToK"ONfDG[]?nM4Z)?#EP(@50r4HHpGlbLL5EkSeSPa%PSC;5aO3.Fm8:H9l.L
|
| | | S59AUN&qL20i@-*XgO%3k6!fqq;Gk[mHOQ0lC,1EcZikc!;fsmm2XaC)];=Y.Fhp#
|
| | | eluZmI=AL$Qb\>4@cF0HZ`Ue#obP9LkUfO_h.Q1_GKrN^igG@[%u%2e*a'P`m&?VX
|
| | | IjaTG\Zjs/AR63*,n[DS&!`bN.JR2YIg=W<Xm^lmih!ohbC;W"<K&"q^])^UAY#[2
|
| | | ?c"-Q3M,fD;0#UJ,UqD$kt,0u[^Xh;!Q7jrec)QDI(E%<n+b\WN#r`.)hl">B1'AA
|
| | | or/W%;<QZ*2p8QUoD`mWP1o;p2>3P9q4q*b?EMBU],WuYr]GY.hhiS,:!/M[gI1lB
|
| | | +ojM=#Ru<XOO.Sl)\*'^;#o/_/f9QP_iXu.%1%YT+jg=`\7RIH5pJ(GT[7('LQ.uP
|
| | | ;970;"bXZ]6NNS"<saVA+k%U-aBUYA%O0:+8Ao$nR)WeA!J&`_/;[8=E,g]DC,2m9
|
| | | A-5uqOJWA<NX!?%BS%us(J70gJZ.@3/fY:4&VrTMZ8])DmPB.dOq'CXh$4RtbU?sh
|
| | | ^dSFE6,;Ib&0+#ke;R]@KJg4JLA9Q&a"K`\B(//j[&SP+a(-K>Tq'hVWPOP_Z0;8:
|
| | | hi#,UY>rXZj)o,U>AK?\Kn@9aZJ"0h;0<Bn3R6F"nE[PEorOKjl2$EW",8hipo#oQ
|
| | | O+/',nO(>NRr*T^@BoCj""nQ4;j!bMIfjr-R]F12qVIkM.<>LP#%=7iLTRXm6E7T>
|
| | | HG6k^/E.6E.A=)'#,*3`nA;%pP&/<.Tl`I86nW4XVlt&]0(Zg'Eub3Ja?l-p6dJYf
|
| | | rP6d=F<&>^!,fQi;4)>A^M7j.,<=sk<4Amm*"]W]OfBVG_!r%$)(95NYb!:^PE`C;
|
| | | Y/1sqL<GI.*'3<](F1;J>,_qKiOj-.11@t+)^hmo'a$&1o&W&2ca#`s3_4Z'grjML
|
| | | ',o5+Rs;6de*IRC1T[Nd(rL#bTVARRRsRY#'T5qd+ED8OX\ik1Eo'X8Pe%]2.oIkD
|
| | | 6r*qL]rDbMEr\>*eU:O\YX5M;"t]nL_,2nFV"W:h'`*\I&"Lg-Z]47UajZ7pY6tR.
|
| | | h)OTDNq?k9>YEe*kD"0YK1]9[3oll;o^n6i+nqM4mn@LCYluNbI>r+g;ej5gYi3h%
|
| | | GqsP@QCG,;Z<;TUlYV3/`;!p9_'Yl#.^:9*:h9`=N,>SH_+MFAP9fr.!k#pdKC*^>
|
| | | kpBdVV"(Ild4s=cI\=Bbg=3$2\P@\J?.[LgXM^JfJXjW8b/P:]3W(^thau:(QbdOP
|
| | | jFkK(AraBo=Y?SZZ1V-0Kk#HrDa%e.9.78SLkP6-0^8GIV6+1,'5L:%Amkig."4S*
|
| | | ;K)PBr)4O-8BU,k>9>8/bgYsOXuK[u_q>`q]"#"*p2anf3DS^o_O2%Lc>P9)-AV#+
|
| | | Vd%X=9WXo@,#d7pg<^D-gull9cZRWiCr/u,A6dk6j!t.a`Q9<+:N4bXrT6GIXHK&1
|
| | | j2$&RDo4A)m(1/MlG[1Cp^)>+OQmoX@u#8WrsSJ)G[,6`q^<+nfh1+XF=$@oM(-K.
|
| | | k(//T1JeOu2FiT'$p1eAlt+\/f5giBK6&5s^s,([T&<]IK6Jaf$kWQD9,un-AdWO8
|
| | | 6:)B^gKZ1P`blF+k8)jo@5(Po:$8*jr-]Mn-UDFqnegpd%88gQ"q*!Q+h%C*T<WHo
|
| | | 9K@s$Ec2WB;=%4Mbs*qMOV49).:qnj\/YQT@$pa7JW*9_Z1CAXT?/3%jgm>ek@#=Q
|
| | | ,&rR<XVAa_JE'6O"tL%#'fa(&+3=8!CGFIq`$.C@j)`k,X]5!+oMTZO@gao%Yd'X2
|
| | | #2I=F0o/_E'Y<M?,hl"Y@1cZh8Cg?8?-5QD17CTOkc.HM7"7.-dO-5`TR.(Z:-K6e
|
| | | MB#1Y*@7I)PQj<Y7bAp:N\kd8bYAt^i`RO`FC/DG.Qe^q2^G9M6AeH72pGIUAE%,'
|
| | | @o?k)Y=OO:6^c&Kje58.o;(7NaZsBu*Q><N5Y>7^piC9,h@V)HS'MN?1U(P]]cmsl
|
| | | U%IrLL?-T-L*hDD6L6[F%0[=n.mo[*C*X6h0+fNH7A3&2Lki4-&ggpQ%nkZHKdg38
|
| | | \ktMRKcFV7p5bHiaXNW$It\%t41TrJQO/$m;oJV8P4nhG)+pJh#se3LJ8Y0U&q-F2
|
| | | DQ0[<]i30p3-98tg,/)u=6g1oX:2hE&N[:(8>6H'og&Tinq`.T>[+0Q*6?`19VZ@5
|
| | | mO8>-\t<Ke>\W6QY\0EB(:nii:45WPA.$=YLlZ#+N:<P'E9F0gI:Of8p1UmWp,lq4
|
| | | @UkXe/au0<&L(+ZlC&Aq(9Nio'%\Ma]rSRUW/t$f<*X:^0!,PTZ!/W.HRj(eQBnWR
|
| | | ==+bgl]%_aQ-dG#fHN^c>r+"^<l3A\a(I$I::kXTmZC^A5jAg=.(1Jle#*DF'C+"6
|
| | | oo>I]_K`7X`(=DFLmL@AR.+Kd@T6,A"=rNi'bq<OM5<M44=4!Xb0nHh7EYmC"$;$l
|
| | | NY+L_[*IR9TN5K<A1)5ij-9sP9J=MO+pqbnU2oK6a`N)0W[t3Enf(h,M,(Z"G_r49
|
| | | Ch$@4&1A>=lDHHDL)tbXF%1.8(-Er6Z:r2<clT5uk'Mg*<X$OBdg.\\$'0)Fn1G73
|
| | | !*qDI7qlu1X9=]1X`k"\Os)'b\Y,3e&qQPA\N5!O/Kg=k8Vc`5-9A],''%-+U(r9R
|
| | | `d"r%Oo1JuoM.9EdD:[<]`uD)_FV>-pE<TQRRHY"GcS5Z:;-#SI&t%uSlTO+YFS=T
|
| | | @7@4FN[n/R67Z[;:1q:@"s_PIAW&Bq$GDYErO"Frc:Yo#][mZ`9VS3/2FY),81k?f
|
| | | Ad<(9\W0as;PEIZjG26A/M*56[1l1uV$iUDALCH2D2ld+pC`P@H</ee]o/ZFhSYFY
|
| | | pDRsnTtYZ=Mb&M>@`E7ZE;#13_meMX0(#gVn*(N9)fp$K'jb#\Id5p-\`Yp]e&,2R
|
| | | $d*gsBjoFS<EkLJhMNt!>!;C.\,NSg]XnpI\ib$JiG'cW&XjS;N*V:N+AGPSA1Ifl
|
| | | 86J-XkAl+=&8lu]\eF7,\t-YZ<^`Qd1A[h_Lr,KmOG3PJT6?b[]b/c+[r;1ra4Kpg
|
| | | lP4rZO"0J:/_n-(!f'1U/>0#Vc1.";G6q&`D0QG-g6@qV&pr5K?VY9h1(MZ3TLB5?
|
| | | X]UuPN.9h^IOR!hLT_G_DG>In,!fmYLQnNcir$rklL"QqSg79$gFM(OGbCc`I_(Y)
|
| | | NNB4=F0YQtVEg9%\M;_,:`Q;liQKVq0g=R^p?q4*ISJL&[UEtgFWV)@\J"3ur.E<j
|
| | | F4\n0@Jb4b#(:sQ@`b=@B4V29PO86%4"oLeD#h"erpf<(P>^n*S'TE<^gqg9>!L_+
|
| | | ^N7@T\=X]J,J:A(]qU-89?oZ3(l@kP,Jo/-42VBo[3Yjh4]BeE.($^eU:h_5-<(Ag
|
| | | qqJi8`P@]#(j#MgMt%0riL\F6LsW7Hl+aptikK")6$sE\bPT+PX?E&AO/[:5&i(qE
|
| | | c3j?Y(Lb(Vd`47jR29<7Wf[fF,Ua)dWeahQ1%>Z=ZX]G#QSYRoMQ25qbV,(SWYtF]
|
| | | _SG])X4TahmO2b8$gAiuCaG.Z]o5"Q+!P#9,.b@j6RUfYYY77ie"Wm^XV-5s_pI#?
|
| | | @Nr^OO@,eRO9jC>0Y'PlVAu&V(.:^+S4p'3m#%j=#b,EUR)_PRVB!up/T`I2$q$Jj
|
| | | -QcbLQr)Qa=`gMK27f9S$95O@A6V)t:.<qV_`F3uR$.kT+[_bV`RA_4,Xk-07QOH3
|
| | | 4[Ys4+R'?:68eY0Y`TR<F1I\&"!_&]]kQW%geBB%D[O>6V)0G2o3f.;cA?f=XE8VL
|
| | | dB<ib%73+U\g`I[XEDS4m2\TDY5CN$&<_ph<=`N'ZRgEfG_;dhKg:0I\LFP\4C:UX
|
| | | Bq@.LR$9qR5lNWOI)8FO)@U6!gL&!@\/?5&[_b:qWY@j/JOr[m5/?"oOg<&5Q'uBl
|
| | | W4E5MYRh4b?-/e)_MjkA.);b9Si83madNLX(l(]$UF<Y?8W9;`]T\SITWoc7$/r8&
|
| | | fn;19ZH?'A8dqmP,d7Y%Q:]JW0q"PmoMZ6GYSb9Q&2=YeI$VrQ'?apg8u.&q]5`h+
|
| | | V^hnZT(J?Xk`_IB[gF'NM7ecU<4^7DS&^1lbLEAXPf=!9a!%D5$LiVi#bakkkog&E
|
| | | M%Ue"^naTePmh@j9]WOLq'i(`PR/>XP+7k+aJ[9bUQ\P09`fSY!0fYufhFGi[ooP&
|
| | | !M?`,KM-.49ejVCd/;0_gdWMr:"bWF\Q[6^BVJ-[cCh6uN40OSW6X'k)>(BO:n*mK
|
| | | j-T\Q#s"h#37=F(XXH%")$so;9\$LXfGXQ:QAkSN3A.)c>E.^eb1Mq'WK>I,oh*TD
|
| | | *Amp;$<YDPRh&ctX^K^O=GDq8o:J%EbpbX!PWDGkdZf<TT,@e@/IJWa&PhE&-2E4V
|
| | | :c(r"\.s]#bt6P25iIS/lVHU4U88e_<6:?VXdVBbcQ&>mqI@i>ZVA?AOAOI=:mFZ\
|
| | | Ng_t0SKu>*/H!k3!>)Kj.EDZ%!&K.'DAFpZ1;'LlE"E%b,(kt4J5A$&:^$n3.KE9^
|
| | | !<=SOPrO<u0*-;B#T1niTJHRE_UFc1$n2!-]XGaf-A%nL;iiI2*BO=q4+L-A!\cH`
|
| | | 3/IY9&-<D$"*cPQ=:bQW1kQ&iK9.d>BGU\?.K`KN!\HA`n.5]3&2c^)K'bQ#,sT8V
|
| | | LCi-Vb&bu:E#,G?1k8JJJrM]hANA5A3E*^<#us/fofrN]5lh!32dDs^GfGQI7+??K
|
| | | e6PTG5UZ\)-N\F/Jj!&_9",8&s&JQfLi=hDW%EQc.>#VfJe0;]?kh'MWe$FQf)9q_
|
| | | !UPA&+p'/AJf#p<814P4,_C7g!D"hpTHsS<4O`+He*n-X\<^2]X/[1_f4Yj"GUe<<
|
| | | 'Y"Dg!C.dZYeLS]OTCGg9c+cL5W==o3Wk)&f<F*ch3$>qL=<OdMSOdFcimKnDh86I
|
| | | !C/RG-o6J5'\Sk<J]JN+Q'E5K'E^lb"0aP5O?-R$1P#_.fn_[lR;iSQRoj6W;jEmZ
|
| | | JQCB6T)hBR=qEXqGWFJ@R@Iq)!M-+p4e[LQ2Z[cog7>7t]rZj/XkN"'gBF*O).Zn3
|
| | | 3Rt&B!k!%K:pSRV&.9sQ'NDfb[5j&^GClC*<cr'u!9$q1\lQ>"=)]'^V3Y:-1P6.;
|
| | | >*oj'Qo]kM3!3PNftE.AC1#NY_co!Xf(^Cm?+/L9?X&=)h(?6C`P#HOWrmLG>1K$@
|
| | | orhL0+^LY/h8Pu=pa9A/U"V*UM5ZdB5T=#Mj'1X+g\&?gD49=8YhkY9h9E</kUKnh
|
| | | (6k2[!C.U\*LBo_k#nOah`\hT2<imb8DIKM>]"-3--2IX&3I#:f#<,j--]gDc5W.8
|
| | | i'h>t--KLX**sYo".1q$:bpj<f3O*`?U[tF:cNu%ge,?n&gNQqmKm0uT2kqBJH.W-
|
| | | [4bI?,LY\Ti#j=R+>m2EXAsCF3h9DRV-@A!ToX8keraH>Ae^%L+]E/U;W2d72C(Dp
|
| | | s33G9QqATep*`\+MIJ]9'kiP9"ssrm/)l"+`Q=9F^kZC*Sqo3Zj"ST@2Di^N2Ib&(
|
| | | @tk<rFsc7O2e,a1j,Q%JKUH?'n`0%)@dZLTp,lem46!c/A*$g'K^`IE.:dTcPTE3O
|
| | | ]+F$%9B0>=A*CpB*[;D:-0%H[A%kfFrZmR(8Vt/_A%#'B@7cWJ-"KGH5Q4+5?:#*M
|
| | | 3b?<+O\R98<a'#WaCL<0@raJ<[RNHP<b$SdQ#:8l-8/C@'+KCl@brWlh>X[^(u_#I
|
| | | @DL4l:*"lccscFEM1EQFI9>$j:G*MJ/"La?T\d)*H!l`cMi!T9j/HQ$GA"^VB@=hi
|
| | | i/@q,ahA%=BHDU7<-N";[-1>aBI'bEIY?c29ap,8ig,IZ-A>K`MTgCHMjAYPreuk+
|
| | | 3FVL93[Q!5fT`RrX(S;k&,;A:TSDYER61>mkh)[l!ZYp7P@ukG8C!8-n;una>j8,P
|
| | | l+Wn$/q[kWp?@=%#ml].:8ho4rgC3pl*`p?opSpYRd,p9S)m-)eu51`j49qF.@Ah%
|
| | | gI2E8Eu%M;lY@F)+T,*II-Y7dZ)Ino&@`,sg1rcAlf:S_(tra:_X"A=ln4eCN1Xi#
|
| | | ^M;o49]jC^?D=Ei7`diV$_Db"ncPRHX5dpH(N@[dn[6Iull5qTD!<R\8`OXtJI%(j
|
| | | VTe:6QIeaKd;=gn3!Oo`L>;0fbjF>CNgYQ[!heq/=;;C%:qhE1cK"=(\S`V4mVnP,
|
| | | ,^.J)gCCC6DPhkD?@Z`2I.#d/9BOK3RG=[*l#".cD_a.dUg3?-eD0nA#p/,F:!]@<
|
| | | "A@n,D%oGT<`8AZc0n^1cN`<Frdd3ZfdSi+DlF!Q8ulemkAWJ^n4r`F(:uCbkj>PO
|
| | | E&#Tdrn[&q=E(_ZmU9pFiuW%UagOaq$cGYW517M*'fJ*aEGj?AR9piX)/]),C.B4_
|
| | | B,p0*i+VQ8kXOBJ)!5fjKl0ZLkVjQ&QR)!*p>d#,EPB3YG2hIF->WVM\;qhl7k&Fj
|
| | | /NR5`eV>huIir_hp$kg/DhuPQ2!OT*)08:dnR"7p(@,Yk2+^::o+*Wj<rR$X/n$t.
|
| | | E<3alQT9&G^[R9hF*B`g:B^9=6u_,coERnV#>!.l0aS@`EHph0[m>sdX\27p]dl[2
|
| | | $:_4+2_<=o^+T[0hb`u;`:4(2%m%2(OIL@d<p?5XoiR'GLKTLraE=smFU)0WB41Dk
|
| | | KV@R.+0g$/2UZ@6K4KN12_LjV@]*Wu8.:(slC"<jLuFHBeooe[M'm3hm^ri<R&1C7
|
| | | %=`Fmd%pCR,nidNN`/N*.,gc@#PX@e&Qa<2B5.'#n;*uR]sgo4mr>M>Ap(jsp434<
|
| | | 8H3iEj7f`nGK0mr9G.!5Dho6lT<m'lH%?<IS9WWiopG^P?][Gh+O,+gpIC1V)8D\C
|
| | | M"eZ$4rE-aQ^E!cLHZUYp:#RUO+HdbKjd2uq=e$3HZ]lHJLFZS[%D"M+mjCA&#-gp
|
| | | ca^:M@%+VjCQq)dH,4BSBg3(EZ'*EED'u0(J$9:[D37V_qSdT&_F)BDW<cA2M$X\#
|
| | | T^N@4VMQD*W@+Y<\@`.b"#HrRE5n[]d?2dGC'o/Xg@5`"AAX3OY?LLkp1Vi$(Meu$
|
| | | UNsd.OdC:PU%e8Ui;A0Oqu<oGf=MPmK=HtZ\^%4'3PYMaWg"lTG`U6#BTU66G5SV<
|
| | | pNM3&<<_cQOIh5Z+ck)+h"Ud\jEGp'c`__`hh[Sh!:^<KrFb<k45l&/MKXd?BNC]8
|
| | | 2P]i!a;8O5G,OYaXqQ_`XD;&!r<I?B5FQnrSGQ2FG-4%'5LodAX81BD2];da#Pijg
|
| | | &-r9[@Pnr1#9shbJCk2I%L+-9\CM'2JIMe#@=[!?$AK#p6K+.7AJ?!#L1=YZdQ%bt
|
| | | N^fd79N5:FPfh#K0lYKM3#p$ad>6<+E<dE%i(us$,&J*Ha/"e_^qaM#Ku7VW>'($e
|
| | | +<1jL2-IH#M+/>Ai1gTYJoNiC8M&6AFP9qPR+YpN.7A.;$ChSL,gca:E<R3#D:Wu0
|
| | | [QA(?`+3g;I.1o0ZOA7WN&]\`1RhFbEg]rpms2-',?@Kta%J3-N:Rr2Kq`F](tgEL
|
| | | ;395T*Ndb0n;?=S.9s=4TWp&eK,K]IMlJWp[L?Suc;E_F^"bQCeE51pppc)7AO*8?
|
| | | 1;b,[Q=hW4hkk]+pTA;4e,4T_4_D=<#OdoGNcP-7Xp?Fr)mgcM@$ucnZ4b,A@B1:c
|
| | | Uk-\,g:X,PEs/6]RX0NOO?t^f_]`u6f/g*%5T,<XR]@%*Z!.\T6]V(!"NB_sN#4#s
|
| | | bXW;Cmu"[r7>PJE%E"lsLEo$eU`d[QM83SQ_Wg+f"!i]tDR-`io(rE\J[.JnL/='t
|
| | | _1mN2,mR*EFN$!kl,qC*^[(AS^e<uLOO1DWbg6nq;oEfA/TZeM)_$?5/;d5E4OZC1
|
| | | PRS?n[o=pi7*N"!)OOF-`8<s\BO&(J:9Y:H&#C!#HO_9>FL%F\D0es/eO`t&2CPYS
|
| | | <9G`&)QR&L_8Ptt#,/>0=sNVA@*beQ\8n1m[Q%i/V(\'f)HXboJOm>n]psgXW#H+]
|
| | | :tH/&LSmGO@7`O<.R@"f<;"jA79!7251PuW?[>Wd2/R<\nH:L\gFW3G"gdsbO\Rbf
|
| | | Q(Eof3)^Dq>KHbm4Z;]OBlDSp;RW.0'rCGBA!N2f6Jb]'lV-,nh)TU&Pmln=>0;A9
|
| | | ]MVM%&Bn.1,nWLO=fnH&,/M?4k[4'1]Se^7X?/6a$&-!,,1&ZgOg<'!H`>%aEfbpa
|
| | | 3_FE2BpR;SB';l'MPFjs5[fCOg#=eN,Oe0T?KRZ^5)6IF`a:aLf!<O'3jm-M3`VOs
|
| | | nV^9@`P"&c21i9fajo`+_M4O],;a8gZm^nl9`&_[l8E.C'%;Xa$]Mrc($<i?'1*XA
|
| | | E&!YKa\sa*6/$J+B4FbVeJ^K(ausT^)/RZBJ:aKL;@2Au5"p(Pd9T2g)D!>ONEFm_
|
| | | EeP,20ZHS=EJSG(P0Me.-B@)A56ph%BQPb&r&k[0Es?u/XF[ij7tW^5Ngu1nGP^gY
|
| | | i>*T[bcj<En7TmR["0mLVNZTg6q`[M8IK7b2>>1]+#Fg"ctKYja2%-$Ral]p/O_qR
|
| | | 3:E$r^cP%l#!\B1nd@3>0[>6g]^j:8'uTGqUg/Y<'k6R(qHA<OjST*lq$mn'`AMLg
|
| | | M6*WWo@`(8Bs8I#6=W_&esJ1C`pkr0B*SQt/1)l^)*0jh12u45*d=N6)b)S9),?,E
|
| | | Let*4ZrgfJ+sY/_EU"\[e#&ATOZ[MYKt\P)9+ArS@OG$Wbp]I]H/\[7Lf-p@`)su(
|
| | | UiR/\%K.b+;Y"JR_E(K7&HnD%(7s4]eO40bq)!7?L)pt@D,(85+sJ)p,!/k@,TY`$
|
| | | 2S-rVCpcnfOIf,;'.b&9/Um,)&^$p)grbj.F0$9T2n$IKh?"ZE'537T@V0FMiJO,D
|
| | | hBeAb&D-))3@BZHEBeY]3LV+#Sb%OhY)1gpB)sHR1*jRi<7k8E1u]hC[X'JNU1e3p
|
| | | E$L0ZKe-,#%d,,KTLY_dd54E^VkRUmPD4r`qB1VC>p,YWIVpND3*XKr0qkruJC;;C
|
| | | 4ssVO/C>mMdV7f'Bo*WRPdldOF6?=t4Yrj4*1kJE5."(e03bAp$7s]C:8k-l2COZm
|
| | | U!d=:&s4]Eju)0o(-2oMSR*K$8S1^4KOJG[dibWMXYi%C=-9bVX$s+S,>,+9CJ=^Y
|
| | | 7(jbo!lT]7I-RY"m_JuTR8"&@!2XE#UJ@j/53]aFWft_Ye?hk[iE_kUF\[o3KHXV-
|
| | | !C`Za7]t9P'436>A$!,;nCA4N>3o7bX;/\gY^9eo-Ok;Gp5s%%.f;r/'c*f-&t24f
|
| | | pL^FB6%P9ST2V3W@GC-#AjrAK-<a*"<sfEe6s]96_s:<YZ)p5i[.(;H]LuZRP.Y<\
|
| | | n#BP.Qu@;B]/Q=`R+p/=%Cn=.:J.ZkLbE+k7KC.=QL.Xl74HpW>ekQq""8cQB$!^Z
|
| | | Hfe)l)qPaAD["+[`8SO6FSPp@CEBIOY,GW+7<QuSs/\bQPMqGXlGt!"^dqcb,")lK
|
| | | ;oK4r\E*uer!>Qep+:EpD%`pD(dXf)8%$EF-4o3WMt0Kja!c9U&6?a3o"%]&Zi1DE
|
| | | %!Q2:,V6oJ#k]6tVbu[:$nfQ<iF]s]O5=`jCfZeZA+H#sY24#9q<p2e)QT?tM(kM8
|
| | | L<d>X$4X@*)l=MP^Q][MSe7Xu,T5=i&i:W*N7>,XlJ>[6$#",G]$\ha\B;86?$T#m
|
| | | <cBL>QP;7ne4[&kD[Dqi*R'#5F,]CoR96TV3b`^mTqeYkJ<c_#?)4QfA^/p20;lsI
|
| | | jiSP:g,CNm_'1+\h8o`Q/[E7Q"D*T3)T/5O2$b>[h!,9d>2:*h72)!#3*I1)e2m2$
|
| | | gRT"SVfNs.HCK%q'FgfrTb,bd-[]@@(AtSnB@jJ>?"ctB_(HaYfd%5[l:[\To7!^W
|
| | | KYlX2]n<u`p=S$/G@U"bZa.%u_n#U.J`mi05W5Lt_i>+F&IA]cM6<?%V+R1lr)Cm:
|
| | | &dUYm1EPcPU591G=f6Tm$5mFdH8;YF0Q1!HDZ)*9bOl9X76;Ua'MGnqa&)#[(S2Y=
|
| | | NH=Y42!E*aq9r6A<9'IQ\pV/F=JXSeB85F#h9Cg;/db5X?[>EQpODV'$CH2&<5q*9
|
| | | LQSb,TVD6C5s<+Lk:dVM*547ar_f>5fu@'58!!!a+0"O4($YR[:$_Y0$9s#3hm(4n
|
| | | \\+uL/3_J'>N-.[ACnH\52N+7%r1Y\Q]4r-2;JjDmd2ti\ejh+Km)_tmnR&2HN+f<
|
| | | f!T8@Sj<@)5>.0OS@`L(P=0j1-2KCIU\EVPid)+BJpV/$o`"/-g*YWJH78t["O?Tg
|
| | | P4'`^8hQ4$m1M?(Ce.6+=c=R+,+;"/[S1ID!+L!LYIlC,PjkDr5gH[9$Yo*Jr)a;p
|
| | | lV@jtW4\e*l=g<AE\21ZL?e4O[[kL62aVQO%e=QlRc-tQn??qLDlE$*k6=8IjXs73
|
| | | /M=-.MX[i=!"bC_E!X*0GkkgP!H<SEE&Reo,1]L,!j=ZNcto"e'%)d#"m)af.L-9a
|
| | | C0@cA0+a6#n%T,q7f1Fr"Ng$8LJU9tQNt];,RVWhd.[R!;[Dl)X&%1S,,Y_sS0O(T
|
| | | $rB!kO.cmf(rl'M$d;rZDlj,&isu\Y">J4+O?X.-:D#9R%P9a"Yh':<!&P8'#Hd'O
|
| | | c`#f7U.fQ3e;n;YU-f1MeHjN)%aIu)OH0t\$J?"Ps6jj2E@CtYSH?#<\LuYcA7Z-E
|
| | | Wpm9baRHYS:oOLL[0bhG&^aYp&=4'V]\j@e(bk*SOR!V*-Nc#g#]OJ!nEUXJ!s-bP
|
| | | V9o_`E/:=9o_K.fTX!k6Z,382T,Vc"Zn/Zo&X_RYMYG,FGgC:EnTZAl,3*/H#6[sA
|
| | | ,3HeY'`Wd\%AgS#iX.]&bp0&s1ZCSM#&MN/LbFM6,VJFt`nJRLbp@s><YA+1MB4-T
|
| | | S8VsQ19s7nB'1Lp'dh@+,D-1NU3@uJ5pe@F-W6'PXL0I>2M$NPBnk-s$Yq(cA3krR
|
| | | f.]K:B2D]BRjYM-@#B>nnkM:1U`q6t-1ZG-AUl>;Kdm3$GNr.)$O7$7p+6WKSC6h+
|
| | | k6=]`0Q"[)6Vhl+0&X(88>BXuH=aOK+r;t0A<,r&m1UU0O%+ps^,I:[0hVNoW_"_i
|
| | | #ZaB5+n'NHo)(S%55kfW1(s"XZL\!T#pgk0YKir$k^Z7QqBP&na@1,@'.PYpE%4@A
|
| | | =!Z./F'>'oc;juQ36IitU8E9nV)RN_'kL!N18[mgdi6=\.u&kC1KnI5\6\Cq1u`sr
|
| | | V)V*N<A?;$4U0DRA2'R6E/[^Z3cik"'8J.&0/^(ZT@2dZ0:b=G:mnAiZZH:-di1<H
|
| | | :H#"@Bs6`D%Yls!`)qs'32.Vt8i/*)f`0Am2!E4P,hsd1!CNT%aX+>Ve#9<Z`4+oQ
|
| | | Cf9:NZojUpdm16k/CZI@F8nERDCDCf,h)EG./lKRVD+4c.)i#GoDpp)@WLRM7T7l0
|
| | | L!WXq8O_-la$p8-oM7=9P[DD-4#7'aVb2IQV_n$rql$>W+r2hIX=uH[:R%tL1NG.%
|
| | | 8p<,$6Z[cH8qM#h&OOV].&%h/"bJUqO%q1MnIp=<P9;&A\3l'N2\QElUh)q"_K,;E
|
| | | 1o"hY1pKm\YTRMaXFk(]%E1tV-VAL63Cs]GZU7Jf9.iS97Wd9K'XpWtfJ`kQ:GSP+
|
| | | [4+o#M+=lc;=t;t2#'P[M*Q2cZa-AQl:?/PUa?O.:+baA;T`*_=\^;h9#A%l'_p\l
|
| | | %%'s61PLTZBF?SZWE[n[.t]]WFV.h3RVcPS<>DH.;bAm3R]pq+IcHqq'c\F8E-RRU
|
| | | s)RF"E8""TIp:%9;5j+_Q39K!$Gb)cOeQ_B6rZ+Q+[K-I.mb[^2AJ$2EbYYc@!3hC
|
| | | 66BXe3FO2>@jK9_<\7c,m4">[@b+%XFo<UqY@'eZd+0O%i_V\DAl-rf/)k//Urd,T
|
| | | <@jkg(%s:kMB=gdIq8]-BLOs>`,TJA?VOIN[:3ES0P*d3'e\^_A@<Wc`bT8n3[\ED
|
| | | 7:X2LZRg.&DFI+#\+;.)A29lYjFVF#Q%LVE2KUGW"#Ak.D\W%a87QK@*/SeN6NjMK
|
| | | WDY/o_ErjfC_mS.bU>ga!_*i8S#7l!dpHS)?U\#&=q//^@LCMGdl9`'C'%(*PE7fA
|
| | | nSFOc;tGSdbQh801=Yhp7;dZNMe>1qnfgFC@e7Pr[R"sN5(;T@0=QK.GC*84.5&VR
|
| | | G?&6.ceV+O_QUG==HpJ`iu1:lj`_EYUmD9=Zi>B-N@m.SG#q(dU<@1.=Kr1N7or`]
|
| | | G?VZ]2+;_!F>QH@Uod@CYW;h$IuPd&Q^T/nT4"bhJ+dnlK:dV2a):>i<4';sjH3r-
|
| | | KNJpb1:IKs2gn/JSUD8WOk5eC2oTGI,a%\&HM==gKF:*Q]1t\gl?)-;79<5?G(b)(
|
| | | G'.D6Wf:-TL9VHiHZt0co]#H,1PV(A;'T?6fN]ZO\s4SDA!d@E[=Cu=R:=eYkS4[.
|
| | | Kn4'-:Jobr.+J+nou*2@2FU_$K@K?8(ibLm"'/l<HT4H!;sknhF,O#nNYkuK<#(+3
|
| | | j+E=#<^a/Fb6r<%`Jmu1X$i=jFSR3-#B<T:8i:UD[j"Lk)iE'cTXbMJnhk"qKP6[;
|
| | | 5d.bheW)/i>1b$E>Z7%YUf;Z.09lX0Pa3n<R#!]2KT):6Q8lHXp@DK+=]&^/>fDJS
|
| | | R8&-@'6(I)JBQ3"G8XXP9p9$a`O@4Y(8fHt0KQ!<<_'Yo7k,uu+.@jnH\/8'Jo5>,
|
| | | %]bDU>L2P])8pA?1ou_)BZ4^5lD@XjK:-;b8gd-#=f5[P6_;u`.,!3WKk['u7U:X'
|
| | | Q?g2%`5lM.9M>2c?c\J9C3,le=>cg%TuELq"WUC-VBX^(L)Hb]3[nq2V1g7,<i-KR
|
| | | RC5!,4.:b]1ceL'VV\H>@Pt^94!GlL%sOmrdT2OHP^2%0l"?m4ReRcaCrYhGHAA+M
|
| | | (T>d6T,#,=H>YJ6#:mf,VBe6s0?@rJ=elrW@jRdN3\.!q)l1M_R^uM"`,Vjs0-aq6
|
| | | <B7F,2-@\K$r)F,<MU%NAC`mSVCTj<`^MbfA9"cK&6l`s,m#]Jp,M(6-;?n$=Ef!H
|
| | | __a^@f&E"<bJ\'gABqV`N_:r;Y6&ucJqi5q$DZ459*`1PHS0!@Z]Qq[=`Lu]dn61c
|
| | | :U,gDMo:aNW$S\C3%LkSS(7)dgN4sbelcHT[HKV1&gJlZSX5,FP5C>DR#eY$$a$q9
|
| | | X,jl^gS[c'V6\-<HhZ@&AI;O-Rps_AB"PMt)i9hs)1Q23\&J;^UbZ/]d`gem+j`*3
|
| | | Hf;+dcb@qAIeOaRj.oeEZalQ#0OeC4gM==]<aF@u-X1kiD@F2N'=W:'Qs8+NUMIC8
|
| | | epI*4:Tr&bAQo--J7=*>W#.s:)\]H!?s;$&-.fKB$lPuh+iV=:I!MZn(<OPW=DDE8
|
| | | Cm]jkg=CHR7;h+([+\N"@rZ0%LdJsqQpS,S=;9.,U=V<>9pHha[Lu\cml+^5H2OmZ
|
| | | gQj2^S0=\EbM.o*!^"N5G^*G/<h,1DH\'#R!.3%K_HVV8>j$#&Ea.>T`;F>mZ!"b%
|
| | | +j$7PZ.9H.4M>XpL*K3jd2?4jJq>Nnai]k0]3PX1PhAST8'dMWWsg5o-bmtirPf!1
|
| | | e/[CA<i<cg]JM2k3V[%!RkQe`3[*"dEG.Bm__//M^*5+]3$!!cKOknYJ7I*A:BDe3
|
| | | *EXdi32#)d3MNp/_B:A)a?<?ifC*66_DBkM$FiIQ77\jbWh[ajSm,^tP'pco7E:6^
|
| | | \AEo\:)HKW"=deh$f2`0hAoXcKR_dSMDs\iZ!D%p1s._\D0qgthgP`^Kk8n"q9AM8
|
| | | fVL1V7]BM#1Mj01]`!pQ)*\6tj4IXM:PP.p6Z1.NkY^ZBf=jUN4eT/'2cP/!2P\\M
|
| | | *KuTeBB?gq+W-&tKRj+E:3r[a-iL=27)h/1j4h)n]Y)l>6Mm8jEh`^$Jk%IuVKaBc
|
| | | RGGDH)kJN*W\Ki(-p9`^=.V0"^(juq*[HHa<a:G'hS8"$A*"a>TTpL+Sn96<F5Ik-
|
| | | ^2)(<7JuCg4+Ld7JprB,'EXUH4Ta850>@86T)!,-l=n5A=F*^jA6,UkbN[]eiWZYD
|
| | | ct,97AgB#dLBs0-W-BL"H"d_>2ak_fZ;.C\@Q.90ST<]]C45^LfB'=C<\r'rLH?_F
|
| | | ,YVQ_<l7o`BPL()A"p[6BbH@O!fcu((F=!/_dZA]VO;?u4nrB(f-E4;)GZP]Z#RX)
|
| | | oZuLL6kfHd:FL:TqV(R7+%:,m*,coU2;_@.SA1q3ZguOGprt+^@U2HMjX!i?90Z/@
|
| | | i+aA:0`eWq1E$[U_Z@9cDBKgV`WG+degMY!6"'4+PU[Y2*/fQh6*+6E#TJdnUDW?F
|
| | | @PsBA+N#pUUi@UsNJ@SoaN.p%Mp,g$Ohfs<3M"K."$rTiD`en0`R<Fer^B[(NMb+f
|
| | | "H&@"(C^RfpiJhK'TporedE0UALJJ4U?+?_\8X>;'1<F`[ErYBU0B!B8/)[a&K)!H
|
| | | =7Nu5"\G6=`gEi=^'>Lq_6<HeeFIto\P008Hd#4r1rN[nnJQ<*T7e-2ooeV^WeF6@
|
| | | gZ/GKJC;K%_80TE3.CF:7a=[d")ZX'(P0_EL,'''X,EIC>]+j,`"oaTXB=^s.MOfJ
|
| | | A<t'E*%7ofa>Y('#5-r:dd?CWqn<nUO/&tQ]/so/EZD'WF'cF<9WS<sWT]e`h*>\+
|
| | | [#KfrC`8^s$/?_c[)qA9Y;MD.I]Wh_$lBnd@=W1a-4:r4pr(QJ<#il;LgV3W#S\j%
|
| | | ,u8$F)93;hJf;N9Z3l;_@>b^..P\7jLUnp.P_lAZ;@aZi;?R?'V4iLe,9eTUOGTi*
|
| | | 4';ie+hTMY,q)H9\4Fo&RgMEcXPAspn2j&+,O+-*i[3p>Cu.:[J8#rGe-'Y/[u[au
|
| | | Stu!FQN9Z4@Nles'E'4Ma-2*3)q-9H?T6*kSIHI<.U8`%<0)pQ6mbJd;_-D'b/5b[
|
| | | o"/6r`2T,E)9B32P6"Md6Zi'#Wr4S8\fnp6)8o)BlP6KZAXs9-bY8%GTi,p<(aF/d
|
| | | I^7/'3p?Os9;6>d].a%NZ3M$/.Y]u]F;&lT.!#r],W+OZ\mGK/k)WiM,;b2\bs5a7
|
| | | X>#<R^':fR'T!$=CHZi:8lG@%?n32Wpo_[b15+EHZf<sBBd/eF9f5'tRAJ=a<2N"n
|
| | | 8eeNSq%-tt2lR!ZqCCNf-_;Mu?@3^>a`^:E0c)0V$8.V;>(g%PMM\5Y1&du*-rf2j
|
| | | a+c5F8P=e6W"lL-)[qadYke!t?+miSbHnZLCM'cTG(.]6^6#A:TV6Z)23)%urk"fc
|
| | | 6'b-!_O.3KQ0+G((PHeT^?\[6HnrAYo$T_B\LP.!`e7fP`sfZKLjl4TlJ'b]&gk0O
|
| | | R4g!m3cT0o)C44NL)f2acgBD#Q^]eC5-jgTONt$VF,KU0P\Ji8q2WkTqFEX+mbVIn
|
| | | 9<j'^))Afc?PPi2N*#+g?L1T*j>m6S'2GgOf)K4gMQDoe$eSrrHl@<bPSP#kGFC6!
|
| | | @0eSUW$_XAR%guAC+2V5dNmHVWdmO_Oie@nKVAhD."#kkY7lYBUf@c)K>`;k.oKpQ
|
| | | TR/GH"oWERjaR>6$M@JY)<*IGU9.IrLO'+lqCWV.hHcm45ALiX/9d?XT=V[i%)r(3
|
| | | ?u#neP?E+kI$V_t9)[a@=&]=q3Q'@q&QM4DG>15S&a2WYh)#IgEK2nD-m].aU_cB0
|
| | | \F?KmD[55^YDY(t4<:0efurrr?nEAe)tmfmO\5G2c&silpBF8^RI5,B#">a15/Nsb
|
| | | .TTBiKU::n&DTnCPK@p]5W$?#,a5'YDq+;:#r"i4o5/=Ifng]Gf_O8)[S(J"fui@\
|
| | | .[)$eM9R)@YEBI#Ug-'ICa=ZIK[V:'9WFNH2GfZA'f2L^bAU9F@20J^.pUQR?nV82
|
| | | 2jjTV>;:m_-7$2E,=%]i"RIiIK^ftWIdH6nmK=3=\kaY>reo\j.$NHF30mIm8X_7X
|
| | | ;u-nX#0fDiXTY8phLiF$'T(TK%\OM(a3_sZ4t&_q:G6:P["J^0N@^`oBi2$2)D90.
|
| | | RF62a<d:["6;Ise/3HEjX>UDs9'&2UV\?5,:g,DSko1CeFI9b'A][_>!@a`G*M]R@
|
| | | 5=K;Z<2NA1Ki$<J5O'_0BFS"0<2oOlNAWVq<E6u1GN1ui6h7%Y"S".Td6it7jD<$D
|
| | | 5b^m'ZXQ@O3[ik#=/Cqu;>OC.[E+>qg![kTZ)ar1K"\l%CgnfgrZQ#BS1Z!_1hZEU
|
| | | Ai>5he:M3tV4F5mD$HdKA;9UhZ!b!#JDJ?\$pmla]VS&EV*lhSM9i"5+U%I2ZC>nm
|
| | | Oe#Ar$81C%f,I\VgD)7U6KP1l_!`mAY]M]>59%5C;\,9*T[)6DgRDG=lu=#QMY<Lq
|
| | | ]4Gboh%mZT,%TDR@<^[6i[!h2WAY-lB?;n2]U**lgFM`+Y/SZ#AB:@s>E%06Z11N=
|
| | | oVDX_JATGCmjE;2aPIWmJSg"`]Jh=K>-%CA)5X)d\:X8%b<(GXFTfBXL;=bZY>\s<
|
| | | %qK=m^tF&K?J'p"Z\1*l3cYsH<,kO;W1p]YCO^@[F^VGL])C]I2g-kZ'$*N^JR2@8
|
| | | H.k>@a4J2h1j+:NZSeABeIMFf)j!fg6m9>6D[@)@':gg`<mE0U4lm),T6$T2X=)7C
|
| | | B#Xdb$>)cOjD-V_CG&'4\LJ$K'`G$LqRd_3+DReC(=W?F)*h#1"[FIZ"[Eb1!<?(/
|
| | | >,2^D:gO`kGq'/PQj"0u<N;#$^+&SsT^&fhWe-mRe\P'DJ=o^NK1KWP^jlt"!7Dg;
|
| | | !+QJs\2.s*l5YE^F:C<2(BT\s)LtXQeHVr`#BChj6J,So6'-\nNA/<bjm(\*O&+OB
|
| | | 6)[%If*WWKJ:I~>
|
| | | endstream
|
| | | endobj
|
| | | 14 0 obj
|
| | | 23115
|
| | | endobj
|
| | | 12 0 obj
|
| | | <<
|
| | | /Type /Page
|
| | | /Parent 5 0 R
|
| | | /Resources <<
|
| | | /Font <<
|
| | | /F2 7 0 R |
| | | /F4 8 0 R |
| | | >>
|
| | | /ProcSet 2 0 R
|
| | | >>
|
| | | /Contents 13 0 R
|
| | | >>
|
| | | endobj
|
| | | 16 0 obj
|
| | | <<
|
| | | /Length 17 0 R
|
| | | /Filter [ /ASCII85Decode /LZWDecode ]
|
| | | >>
|
| | | stream
|
| | | J.+gME)>J+0c(<)+p!4E>6]aIKEG)me6FaK#S'=#;4&%a.KZ<?6^3H4$5\hZ63n0$
|
| | | 4W0!l@j?Q7\84!f$t@+gBsp]71!e/'U=c,jFYfR`B1ZLlE\nJg7RI3De8-`TMCJeX
|
| | | TdUUDOMaWIW"GmD+=118;S`Ch5Vn(QKET['CqC-3!f!HVW8),1)de<Ni<9!kK>6>R
|
| | | fL'$pV@'gC/lt]ro+3#`N(04_2>7'<c/UP+q$b-d1RcS[""6S,5ZF?_$3l,SYgRJN
|
| | | L^I`mBr&ae2]3+&1SMJBEtjlK5bY$iA2bCjMO0lraPXko#S(JL.?)\[)2uST1C;FW
|
| | | ^uY(+1:`@L<]R5GL<ukmY@0g5&C#qCT&bJH4%#[`NK)lscn^P)+Q,(9""6Di%RWeS
|
| | | !NI]t?lCNR^ecKdJd>g'L&o(fXt.Zq'KDbenlQca9Xnc8U1hD#NXF_Fgp/3aTQ5]>
|
| | | N7;&QY"RJ(NME1G8=u]VC'^'#Bkfbu+jDicX+qk0hAN!t'4.:VC'mG(K`WsV1TLNV
|
| | | 5U)45X<]KZK.,NP%V$Ig2S?0a*]/g#392cQTl\YcX<@YbZE3@a)RY;#E+g2G.*C>d
|
| | | Z>6K/#I4AdE#10@U>E]k!L&thJP)IG)(Ec(B#+]1OD:&cXEk#W`N[-cQ-noTjq'9T
|
| | | TNi<kd_Kn>VXh$@&2"^W"^b@=GX5B+e3t*A;9OB(auSauW#5eTG]L;ldFCNtf5YB-
|
| | | )$\6qeek&\AKb:+[(S5KWi<'`)l"kT_/%daLg>;$2cZb\9,DPU9j%M1K2>[8h0Kpi
|
| | | pb`k![!,fS_l&EXa`B=q(%$k_/!+Gd-Gb]OLgKfe6'&`?''4Tu=(VP.@!@6u70]r$
|
| | | ^Q'pB%5&Q2[:;^.KGB;[=fo,u>A??:^gT^nlk!hI@oX#&&8@A4/;)l*K-,qO(F:`7
|
| | | ,<C00)2BeT^T$IE$nk%a)."P;l:fiEP[sT\B1?_7QK[JZlD(&T=f>o(VH18l]2[[(
|
| | | ap"h_JZXX9d9GIuJ]c2Rah;8t'!V.<[1<k3>o>iXZ9EX?JY?bI/L+*T'#&Pu0DO:#
|
| | | NqM)&h6$)_/[2_SfA"3ApK,[f+#!G&=&C1;k/4ekk[!Nl<.7m6^=;l&NL*PrKf-ka
|
| | | qMnp,l+4B7XSV:Y_aMErL/4N*R2-AG=(kVtp-T_*R7$IC?O<KMIf<gO>\fCMcY`Ln
|
| | | B8U4AKB[i"-(Y3P%f,"?l9bbmL)h((#ShrKBPPro4ba+5h&BpPcXlT+Vn29>K5cDR
|
| | | .?h!QYX-j__gsJ`(9@#+Lg1$e;Q;$h"#=iXRj2NIDiDMbLj\EUPAP7LiW^t=M[lBt
|
| | | $]#:4KL/3.6/f0C@M#[\7>P8cN,2aN7-L*a(HUt(18,ng@-EsPVWh49E%fFa,WW>+
|
| | | q,P<@?-sLZ.]"ali,[^UDFFsj&8NBDK-ZOqc9e[%>'+/YQ?imGbqp0X^=^U?O%NkF
|
| | | 8SK7YSEP$J0r4=u+r$<;nMZL[%B5]"(Fiqu&!a7L:DJ^P(?E%[.[!qn3Z,_.e5W?3
|
| | | Z9hC12ia12_MjJsS:lMn_RJYoVi[f5RY-Heop#s5#4kQp!p"O(g'XX@5h[XuGrV[P
|
| | | OjB2JFd(*b%]5*lkp"/9MU'W^46:e@-H,I(:"d92-dq*bNRhjhE'ZU"%/b"?/[E]j
|
| | | k!GqM'In2)R^6/LF(g\`T^%8O8.#/_AOP7APVH&m)FVWCACd11"uJGe>r&!W"e"]1
|
| | | J@OkN1M2#ZRjhr\;gMFPB#tfee7r_sM6T]TAEfhg=I%9fp?a<*9;;$f*37/$mUo6i
|
| | | -V`,ZV1m#J&Skr^a#:)l[bS;?jRkt,r2Vog/N0Y/aC'(p\(29W5AMiXVcBH`3Z?RD
|
| | | Lf3oDFnN_g"h"kJ3nQsgD/@ciZ!!HIU5)b<)_-*/3.\p3-O\X==]Y'&XNE<$ZgL*2
|
| | | lFblQPI[(i3KHo][aQee4HL:u^]RJSB]aGIIMSNrb\E=s+-hh:+PBah![<"E&rE`n
|
| | | <c"fN6W7jXO>42@1t\XJmd+t[.Fj%9gm95,&RcK^0`L:fTG;SklVMfRm>K)A6Eo3I
|
| | | :3Mu3F0:dKB((p!\<>Q:X-JQXV1a\a2lR>EbP*_Cm?=!ieiq0#`p?uBCdSV8#>5h'
|
| | | I4_bdQu_$+3nrmGE9THQdJ!b%bKk*mUt]6n6<%Ar<p,=AaH4go5e19@N,5X9^TRiJ
|
| | | ?L-s!i2/'G;\gcV-%*F/mFRhD,(2@@%U81E#E1Y]$C:M[?J4gW8D+bKQkb[H=F<Jg
|
| | | lbbD]b)lFsdQYb]21qtkZ?V>R:sFq_SOFOZYVQTIbp^=akD[ZC(^>>2Bjkdf%%+L[
|
| | | k#O)P@]RXFW4(-bTgS914VnNs7Tn4-B?7@tAQX><<4(4c)/DKMXLk!Eb<0CiM=!)G
|
| | | G0b8GrB)l]+Zit/9&YutL75#BB3bYS=e<+ER[msT*I?K%,Z\<B)cc-&pS)fjp=TuN
|
| | | 8*g[lZVLmH,-^*@Zg?#2F@Ln<`XbZ)I@m1[HM[pcMdL2S+B;'e:MVu&9+bG`nC9Uk
|
| | | e!<4B^;=R.FWOb@=hcUO`T=gCY%-D8q0Hfl?*F$,r7GRjK!2='ST[p#h]+S$DKgfN
|
| | | phmh$0+3$<$m<'inSd=(qYP.-ot-R6LdWp)-LYM(7?m)0b'_$"f#B5UFXerpSD<t?
|
| | | rE/h05<)Tl+/%p_\#'l&97?[$olQd`dkWR$ka^e.F=o#B3fc>UE-kXY^88kk=(^f(
|
| | | ]7&ahe^o+j[HcRhLLuRRWR5W?gtejN.?8ma_7S*10ttIDrrj@;SQ1)E"2h]!mY`cN
|
| | | jB(qVB6`[R_"tsZS<GnS^#(L)=1<`-b,LG.WiP6/B;6s5>LV(4%.\cdlC$6>^%o'6
|
| | | k%#C:n@jdRpjs(+g1RDZ^0BNB\9R&8Dn35\NthM8rmUbe11&hiN-\j+)>,YGN2g%.
|
| | | C'tVch"Qg"`*lGc<tG)0=609#^NIHi##;;0k56JMK72;EpY.aDBRb*eIt-JI!YB)W
|
| | | <r\qdZS1lPk(s(lkiK"Ro48^=.0fjNJG4eipWr8"YN5BFL@`9)!tRa!,'<[u0*-#I
|
| | | 1G-oNbFGgK%Yr,cs0*u'mTfWc=To$Knh;Kc0EPe2K`\G/?Nn1I`-hiO?Nd)7d*MPg
|
| | | C"W&2cquG1KaT74mh#k\Q7bt1=6;8T6sBs,]`G@=>nF5=&'5(GMTKgu$nhTa`_:3&
|
| | | \00$Ea+hZ5juWAI->`seKIGdXE&S9RjEE+0kc1*_7W+5ZCi)Y]MNE#T,nbdNl=49I
|
| | | ;pbOV+t3^,Z?,1CFAX1nB0=ZU.e&NU&$Bscib];TD\8dONi,GZCT@dG[%a[%-Rh$F
|
| | | &JCWY(.aEU_*_BuU2Xq$;H4q?"f9Qr"]S\U](Y2s!E!TU018<)f+hd",,C\.,;LSP
|
| | | 0KJZ])!OTZ-u`$n>!?l?gF[+Y-RP_7l70"$X(3nicf5h`mYJf`(+MrmNWdbLjA^qa
|
| | | Bd3\s;1A'JKUF%k*Y+VdC=%B?/dDM3+ApWs8]Yj<f,BeLbDs;VEPgjj2H5\TH\X$K
|
| | | 6s1^EWba@_>d*FI:2mNfh'928,6^1Rnht3e[j184,>p$91,+Gr,a\ieYXl]]ER;/_
|
| | | Qs^BCR`&`6D&/WS5od1",1#1a_no$$`i5`+;[L7NDOS<IHRK3oB8>=nk^&$TRU!/"
|
| | | N%rE0EQg+'W1+1AA^SS)#&PiDkZ'CA'J)*n6>4hg^Ec:;^BOmmo#c?t`=*AKgI@LW
|
| | | K>Sri_DEQ"hbhI!$U6)D'HqLiMA#XmnsD4Fr9b4%,\&``crDU<k$[9e1.S@\-rhm@
|
| | | #:\'!L-i%PjugUQBer0l``"p*CJc2EM(YV=Hd_V&"L0kGaLRK90a8^Wo63#'Y;3C_
|
| | | T5n'nZG@rmr<^l5r)-r0:LPMh#,/7o3Q3X.VPNcu&@&<S+XF)Z/#r2Z.6EBe47I_8
|
| | | 0F'\=:HSlBoLk$(1WjY-T`\lj"E6-mLGM#nDNM3f#DEq/k0"JQgH*A5qG66,c_!En
|
| | | [lKRKq:!D=F;FrGD`&a968**R7\M&Z;Gh:N%hnn*V,h=EX#_Sr?,EK@AJ4s=RmV5K
|
| | | oe]WFFBLu7[/Y5)PuLs8B0?A2i=$@$$Et*kMCMQP,n=L9!VCq5ODR77DY\6]'iY*s
|
| | | <"(eZF[D=T#`qhNB%[!FI0OetHaEpT0/lOg@7r857$O:_l$!^1V*YK4"8&cjFM1;n
|
| | | NB=4lrH+SoU(jE1eO6aVUpPOWoW_/tmgH>p:5QGTd)RY'CJ[jQ>V!$h!dJ6o6OabO
|
| | | 25kphLQ;q.3,8";5Hb;=$MP4]*.SSMET/\a8Eh>G`CCIs6fibQ;f`P4r+WQF3NsA-
|
| | | nMIGg(tnRl'.4Gp<B4&u@oQ;tIoU`<'o=B)K$WqXr'`Xjk8Yi]IZWg0"gQl!@Q>@I
|
| | | Nt853%$dF"Z4.m1Jg&Nr7T(0cZWe;Z549]j>;:R[O1AHAVFoCb)Xt%5A`6^"q"8<3
|
| | | ?Kt-D-l==1$qKc./b01:_^.7$Anbdd3\#D(kRcStb%EF)Xg3%21F1!6-qB8X2l1b;
|
| | | p)GdrV)P6nCt:s_aL=(mD.G#p@7%-I7H%Y9)DF'I4t8-lecNta]k5U#n$Vm=$c:(%
|
| | | nlPO7/Z9\&[Ic-&0eC\WA4907e%B7u9XKq'C't,W(7Hq0U,-tqIHlMp2@QZ=s(++'
|
| | | Ar,0/X>Lu.Ian\U>7+tn(=lUIGZ+e1/kX!u6c@IWFY6B>BP$,:Bq1?l]b!l0D^,Ih
|
| | | p/5^=GY6QrS+_B(@]L:qpMnd*S(5Pu`DTpkG8LX1E7Y2$o(O`&$o:ArAuWGDA&Ou4
|
| | | lZC'g<7]dX2H+KG<)e'MC3Nm*@P;m?e;1;/Pc6VbkMA_nXCit7S;<4V`l;\9,U1EK
|
| | | /m"3&mSmH27:APAYn,hV<aQ`r&m,i:HNJ"fG<ha3GU7RHh.FnhPn.fo1/k7@.4EhQ
|
| | | f=cF\5q<['H7"lrW";Ra.-3f3qA3:aA&Tk5.59B;OLKV!pORC"SEd)(aiUf9bpLmG
|
| | | J1>`k7g$X:.DU_WG[1s`BK.b-V05j_g:SZ(I$d1/Qlagnb[(M9=*R3^A]\qZ>)uSj
|
| | | Jq_U,7`T=d=F=g4LY-W(<_,Ck9S.s;J;<-oK&;9h7<<)*"cl0-,NAdVS7$QeIk(M$
|
| | | l-+-G)/^(XL0-@,G,@HJZ&ACcm>Y^XG0FT[/q?Z.7>_;)_CV^q'X$)!>/DeM@g5Ah
|
| | | P;M8-JbVBgU22Y&@uIj[-DR#.;S5NpoS:Pg;V4L"R$)BaGqdJo24.MV!\7pij>E<9
|
| | | P7L`?$FQ(oGER0Yn0nI%O%*8R2iLk%0l!+ufiX$Z!5H%f8*U6)9<S7OqH*oJ,kqJ&
|
| | | f'[0+:0Vr4)oAYC8`j4orG[`M<CnU02n+e`)4AeQKQePS0-DrnQ@Tn5Equ5<ZK*Lr
|
| | | =`_-D>ZgqT(Wi%h"*Kr-Qd[[[KhS+-B)hY9@+fj.V,\J?pNGt%SoSt4bnbl`VD"dY
|
| | | L.s5g3N!>o]oZgiGG6g]=K?km)kf;9<p+LdB'3`JSjMWlH0?,cBe5tH(P:6=<.Zl(
|
| | | `T7f5=?[t'V"iGQBT/8hZ_YTnM*_Y=\)X<rC+!OZ4bd3mbJ\:4%(ScM)l\ADC$J\e
|
| | | 7RH?N1?+lYlL$"J!gagr.`FOnEY=`4\=smW3qpFV(;HeO;0;&M1)b]_Jd&5dGHA9d
|
| | | 09Jo-j`W**[sQFH-$nKKQ]J6!?9/C!A*X.i3qP$QqF<p<XkLuGV0HgFL*HJ]QPC9t
|
| | | l!?#U2K&nN2(9$S\qtB0brY*gZ!o/g6c>)gX0H-3/%[\_.,1W∨_U+F@%i"!t*i
|
| | | m?%1V,oZB^-^'u<eL_CgVue]T95L"B1mON=W@=@,`O@d_J=N(1\E%!8R^IM>RRO.q
|
| | | VE:QP)PC)AG/jDjX=P8[LS9:qc6<Q(]GgmRWOK%MCArm0QP3,aS(-mg\\5tSYshW*
|
| | | 8EcE$1,Vp\A1G'oVA6i"N[`O%c4uur=n:BJDnt,-`MUX.gL[^\Fgs&f_C8KlHi(UJ
|
| | | Q*nk*^Up,UHVq\m[CWuhZs0lN>:HrIQGpJ\Vo'okQa::X4A)"/OAQXA\or^.X2YfW
|
| | | ``PO;0\V\!DY8+*a'($R.5mW`dSY7\W#Ut"r0C7D353KmZeJJ/g4V2X)/,/3W[L9)
|
| | | *4A^6]s2.rRqIgt&%SZ;;&O'o!&+S`R#7"tm`&M^bcH9c`-8B=$-VQIPO&=SMfU74
|
| | | V[FhUXrO@cWAnABR=uWr;5G#M)JV,fglPeJd9S#q1i^Y(i`0#=EW%bs4-"#kj3(^K
|
| | | b1le<go)[GP`X??1Esrk6sauJ''X$jbj`<rSK@KY6G5m^X*bO?]lca)1!Z8@estj4
|
| | | #&V13n'M63^`/?b*>">!-s3:GcM]9+UCau,5MHkad[_'+Q%[Z"_QpXI;hq'qh,L\T
|
| | | <:4]7e;s7[%]hi'V;,tj<5o>O2JM"!^1i9sNlO6*-4Q)cm[YgbhaKVF*UZ<%C#;O`
|
| | | JDLpG.5fXE)TdF(E\q^Yir+7qmRLL8P!p!o;5rQUD)H`b<,Pf:@]rrbcB;Y:l5ik&
|
| | | ^-#QsmH#i.O\:rUSl'_2D3-r%.a,<`.C\EX0LH/NGo,+8rU+:21$HgBk:e"/Y7ahf
|
| | | @qFc,j_t9$<V)_M*SBBHT"Z^".h]X_:Zj]IMg^<?*g&;@H0W7"\"5':p3"u+MUA"G
|
| | | +M@pV,oILD"Dk[@fKq<7Y34U=O73'*Q.jFMe[jt!L2["EG;*"]d?M25c>h\,Sn2!i
|
| | | 0ENCm@]2X/k@CU>@g"/S`TY<eo"2BUSk:\Mkj$$`a$*sA^@WW(_IpoNA+$A972t:%
|
| | | ;VNO>pB;N&5!J-^M=nT?P'-Ng^JEbd,bWGb"25uMDZf\W0@sIGZR8B1c`8F"!4'A$
|
| | | ?7(*Y'h@g&(&@U<k^rQ44iaEAboNFtO<9R8gJ-I;9'D\DgKi;-DQGMG8)IV&qGIS'
|
| | | !WY.j)Z`>M:afp.*"@Q(d/YS*2M@'E,=0D$BJUTcLEgL%JD1Wl$\lPBU^Ak:(CUM#
|
| | | @DiXE',cg"EIjXY@PWL#+u(gNia4,N%#+j-XMT<0*"9hcBiOdZ4HYWbYf[[8D+CQl
|
| | | 7fre9?A2CMb[Eki]n1,S)Th4V1!&-Y6+"TX[3;?KIoa+>U=S)/`+p'b$a(4;oaW6(
|
| | | _2ZHE>9$-#1E&]%EGCGimPLQqW'bR+dge7_=s[0@rZ8D/`JherHtH;<0Z.1i;T_-.
|
| | | D.hGe-kpJ;8jB[&kc[m`pu`Ai)TqBp=r",M:$#".\j:FA=`*8ZH]j:\Ai89Y?o1tF
|
| | | e=4B2jDF9/0n@7]dhrSa\2ku6jX%H0Xs9O$7-1=?1,=iaXpb<(L@+U=Ka-MB/r7:d
|
| | | X&ti9@Cok9#!n&aZm08T>4dQ,oI@79Du:fE_+W37n1LfZ39!>`A)>+Y!L,SW,gc^-
|
| | | f<^:]L8).sHTnpWO+:p)`T]IT+0Z.=B\#8dglE_d%iYm$/b5q:]HM:=OSGo6UN7:u
|
| | | aa1CL6>M`BRDa/5\t[-%e"X:E.\]-3#-XQ^_DY7peIG,B960mFM"<nh07fje"tG2"
|
| | | cE]L;r+m3=e/D%1+\g+e8A.r*3;#pXSNRTNdg?M:;b1XESNnUh>/n^,>)n]pTl]$l
|
| | | 1!1H0a0X=.!/=N3\r-hqc_,&Yc&?4[jfts*6"(u]bop:g@?N9P0JC9d?W$$PTj9=.
|
| | | dZIlj.*]R93]8LS^-Pgf#TR+6ja>'OGCAL1>E2mQ`a7q8X'[3:/VG+U[ifLPL+p<t
|
| | | s!RS'`lT?*,9'9Aar3-JUP^q.M^b#6F<%_kHprbA8cr(=i=pUuHb?m]e;7X7cu>N!
|
| | | .Fo'g-2&#m[GgV"@&)n)2BR7E[Lt`Ajm,$IGD=95H\<heh;5Q=G^@W#=tmWMS(%gW
|
| | | KT0:tH]Z3K:lJ2.3,]7ZMVEICOW7J,"g>2bq^V`.8JnV*[9OW/7BU+IZo,TDN^hEL
|
| | | 1u'^S*S["!RDP]O[O`?bI#A#cAPJJ%KPWI\/Xt?Slp\V#DMJRr,e#"aYJ-Pp)p-u`
|
| | | rpYnY(XiZ3>8tNtTQOrk@[d!#\i\e9H4KG[V;:ecb'6_653:1#^3.(Sn\s['W#hiL
|
| | | XS:Ps[Y7J*nr:9?&,&HY=D\!EYOu6sEHe7M[;B]`>F,0Yrj^8.:/qY[$mEPSKos5S
|
| | | d>quh0hU!tZ5*eS%f&djYUoUT,1<b&M+E2.Acj#arrsQ"\QC0&,T-*r9$j:(1oBC@
|
| | | Og;W_+E8k9$0i8%F3t=#j/IY6CniAV?:PhH3EG43C_JR)AsT5=8IY7f"-Q^,iW3h@
|
| | | E&o<ZQ[o\RO>)>B9ZFK]8lZd?90?mE'>dc0%jM1lA^C_b[MYfbc\",($mgZu".KK*
|
| | | iA>1E&hHO`Y12L*d>VX",XaCe>L]a%>3U>P+64hG,E!.Y-)@k2\K"5(&gN.TdDhr,
|
| | | /55+JKL0\^lb,;B992K+/Or8m_8^12%24DLcls^)@OWed$+#.P(r48aN>,qj'/7ec
|
| | | ^_8_5>[Z>UB<n1hV\A9F<2pLljuHNgq)'RW1,PDuoZ'J>\Eg$6-(-ON3Cf5j:Xla^
|
| | | ?8*:<R:q,'PMFi9d2``=p<&H>>We.iYgH0*b13E66'<XAnjESSG9CoABFp;/6?I[1
|
| | | bN(oQXTiM^70NusX6Z6+L13^:bXZ+\"[V`Go,-^Uck3)oL?I,r*p=gDSnVmePT#cO
|
| | | aep8N'f1BEo_0^OE2)UH#UU)X<Bq7m@2pI81+2kJOrB40T3Y!PEh%e:UBoc`_(700
|
| | | kqLW8X]?Kg0WD+kc;ipbP%lK:@<Fl)3'mpK==j`Z;DPIV7Ag6&JT"b)Yl69<!==q^
|
| | | D*qrp^/`XJ=.S`/.HH`Ef@PP2X4"I1L>AM).^reo*Fh0CHF$]gc"7J)nM9f#Nuk=)
|
| | | AnMR6ZW9Wa]UJ!l+iTBb7?5Em=SH;3AX/@R!l>sGl!P]G=CG6r3EJ2<0^?2m,I70F
|
| | | `A76ulGEdgQRni7U/=r7MMSi4))>1nc<9QZ_mZs]"YT+gXi[,>0'#U$?;P6,M@EZj
|
| | | $9mpe)pk_P<V'@;*F[JC=VDQnc7eKYb2;7r<\-!m^SM@)Q3Abp8\O"i7@L9B_iK#q
|
| | | "3P_N<5@5?DN-?l\YSmnf-!0o8Q]8S:T0<_RJ.Y1kp@'?#A4`!Z^l_D4e])*lI',5
|
| | | "c!^R>p<jt"BZBhGHf2\``5_7UeG1@."-W6cDqA>Cep4X9GbSu_+n$TJUM1-PsWUL
|
| | | rBf$X;d?>]WsgL1eO(1pWduL*fg;H5qQRBoG&4,M@*'\lXFdY[p8ru^K>7(\T2=O+
|
| | | =NRM'B@DuPf'BcGji!B9;Ce<Zg,;F=@<07(kG@IpRU(gr+eVcmW!jj\e"grhRDjR_
|
| | | Ct\_3V`B9q,QD8pXG8(hYi4`MT#\4e#]=t>^n4!"8bN2+[T6M-'G`5pF1K:E)GPlI
|
| | | !,mt@<U/:8KrO'jgS-Tq(rM0`[-Z:$Zf!+`fYjt(@D^kt2>Pa92bOPFc%(33`)Bk$
|
| | | JUlTMV7B4)!F#<%-:'d+^?B^s7eJuHkSt5U[UI@c>MdG=m;c+6Fld/(4[:9!0t93G
|
| | | `o'?lQLUh$R86m.i2$r"?2(1sX^2s[K[Z0m%C^G=A3>D^T9,4Q;9i=@dD7*iA8.e+
|
| | | @<XG5C>@tcD/IUpbIO+q-C"Us9!bL:6LE?04H4-sLD>*VCXj8pa^OV:e1fkQDOi8j
|
| | | A*W%'3]7s+ZF??tH!?f%dC8D!s-"R'M8$,X0rLFATOY^7>PF+i;1%TFQlO_Sd,0(0
|
| | | DF6E!fnm[D^O%Z'2cDn7P(g8,VEN!AYb1AMU51*^9@*hm*Q72i=G0P&9Ho(M03tt"
|
| | | J5]H3V,eng=AsXLCf[S3,F!8BY1JaBpDO^qHn-BH4t4larl&0u++J=E_6"/3J/KAN
|
| | | S5Vedd&;E\(*+KQ8P0rUd:>c;S)q"ResZR4!5K.oOC9Qh\)7!fmf+Fd>PiKH=pYl@
|
| | | OJ'uEJh0-=gn4cJ'taH/E6jQTCT:L!,Uqga(tu)7Jj)is^lXRAU^%7ldM8_dS\_?l
|
| | | X:L9&%)(-j_&/WW.//P1&AStY^iRGW'GNf+%>n>E^o78F";jC/!Pid'P"ZfO.#>]u
|
| | | #-[SK+A<LU=OY+@SdC&o4]E"[BT'`T*l5_eN)V<k$n4?ldYdOK$k)p%Zl^-\)'YO<
|
| | | 5f<dl/.k63,SIa+_,9p>Tr/::"2E&?Y"RqFZnfGL\/lnM_n7D8A*(J+B0Rq7[9N9[
|
| | | E4$mK5o<GZ6mOmNLuUmN4%,#R_DE@P5eK%700rPr^oIj"X5LoUq8>rd_Akn-@(83q
|
| | | Tu7N:*$c)kZ3s%[qSe[;`FKF:d%&(drP4@d`=SZ/e.]gV@6e?)7P",MEZMp]4%7@b
|
| | | ^sJW@_3t[X5nmMu6Sr>n+Kh>Xj@26j7cXWA<*C$K3(<a]]tA<@;@#]bF[fnVR[e1-
|
| | | 1hf6Kog!lt5;W>XA0\kYRM=gZ&\In'*%OP7J3QUE'[Y/nj6anJ28l;163:F_.KN'a
|
| | | p;41G%O=/+Rqf]"#KB`&`aBY)r+jA5qT+>(MWu.g7$*_aKZLflaZP*o%"A^"OY-q-
|
| | | 'EIX;W03XC3<LZ5".WlC=K\@Ud10>cMJ*dId&%AA&4OD=$%/C<'UkTf^d)UW(at`m
|
| | | dO[7D;jSK(8fTsNA;:[Gf*W^2.UaSRKLng'B?.@ub:H`/E/Ke][0T%o(&QRH>PC^b
|
| | | Z:iQq9B:jDI'noi#K#9.92&hZ_sKYH35<B@3ujF)C\,#W[D/[[aTR7'bVd/!qEM3N
|
| | | b`!6sTp6+H0hBf\Wab\BbV;\Z64ITa`S)7JUYeYR,VBM&8Kr3]'V:Xf&5&TM1`XUC
|
| | | M?66=U`"g58nat+XJhRui6E=j$VN6Iaho$eh)BkBb5d)gK\;29KaGDE9Ha23AE&\j
|
| | | B?0q77g-+n0aGE<eB"`F,n("!UlJ.pp<Q/%$>f:)jRc/oPg5CL6A0YSe@`h<q7gY>
|
| | | .l&:T]$aCu84srE&c>tOA32)brQEB8V0lXs]!)]^":1]\+%3-Q!cjm&B?BDW9j;uU
|
| | | X?e"-d*VU0$k/:,3S+N_#gST"M!U<iWpY[Re^-Gs;%!pjg4l&D?d\A1;8g!jPWHl.
|
| | | hbjS!^%Dr2KbuYXp;KUXdT"oIN@DsmhEV,]$t6D<RNf&;N/;XhaWQm)XX1>*q,.oi
|
| | | (;&3q0^GhD5"QtV0LD-<NB@icU!^P+;@M;UX$tKk.DFUA98k(9;0]krI@di6$8C`k
|
| | | C]@@n!("5I^fpJkMfD^[m>l6?.Y+"T*DBCVU7<q(Ll5XPI1/Q0<1>:s+hNZY>ffu3
|
| | | T@Jei$+Q>%AQtQ.c4eS.`E]]Ko4$8V\>.kd^>3$mnI[gi>0S=qZVpa#R"6_uBh2ZC
|
| | | ,%3W1[7lkY<Pl,WScgSdTgR,(mL5pj.O;feb\PDcqANnpLeTEi]URMA@E+fr0-%Q]
|
| | | \G*QS1KW4e&Rj8?>UclLJ;\^3N<L`3LnNBkb7Shm+gm&\`J<(lL*AL(/tEq^KhRLm
|
| | | QlU7/RH*qlpqYPlKY.<j==I9B=O/iTf2qTPfkFta'*a#>i)s<C,mBXg[@C:0qO+1F
|
| | | *2nPD\A;6CLPfLN&9J[\[@#I/V&&mL_ZB2Z3.qUbP$2)Q$].'=m;(/GES?\\9Dln3
|
| | | P?J9l'L,Sb>:UU-KFoKjFi:,GQ+7V8^oY2l9U2`j%m8H-fnC;TWl7<hb/"9E*?U)g
|
| | | 8'_8^-DMqkaUKG&)\6FOgh".;_&JW`_VB"H1r2Wnq2h06&D-2T'ePp0*9dgi]G?-`
|
| | | Y3g!179Lj\SR#($M]IXIdHRN<<f$ET?"qkAM.g22j]\VZ>rd*TN*@cC]*Y0oNr3*f
|
| | | %)!56iYBrKYA7k.a`k_R8iiZD0TaE(UO:'hdYr.G8^R\N3I.f$8I3<*hXf[_"dKLd
|
| | | bc"*R?Tmf1f\FH6DI78N?\3.P0Tod/&N76c?M[K*Fo(#2^_Z.DNcEuQ!6muA!3C&0
|
| | | Mn4M-!q_P@c:bG,ZDa<TOZEo?U9^W8hTc)VEYue&l/3\b@4a_[jnXa&(#_=RgT'n7
|
| | | EFRmL\qinIQgOKT:)Sm8)W-h[?J(D!e5G2D*f4bSM:IF%3HCFQc4.om>3XduReGL8
|
| | | $TqkT=hZBmCF.sGY144USc]:+mHn>,j!F+9j#+EX)3CB`]Aj)1,%-I7;=rl)3>Bo0
|
| | | @\GN`e1rC[o[0^?A+fD_EmK_D"lm_NS4T\i@Sr`2,E2<i@YhhXh@sLYJ'?(2?q&Pd
|
| | | PmnZJ*Y#K?AFY1\jF_"b!Ta_R&?s7nY#<0tfig"-=O'MZ_rK`YKdcXrOp,CU5#e+K
|
| | | ?,H"VLe>.o'NZ';o"GTBNojg)+h/Rs\%ZsF%Rft*Y%S5bmFK[l(LVs1nHEL?1*9't
|
| | | &K&Q#DG=Xl@qLOMbgFP$N_&>,O.;UR$I36B<c\fa9c<A7PO(/<l,I=p^<"-221Y%j
|
| | | OdJT-H*k)__VScGM855BXM,r]$U*D`iZ/BLg-p/O=j(85<4>.)\.^.<i0a"$i[/@@
|
| | | fai7d_VU?J`RYQsOe$I,M8:,\hNWokNu>c(_j6Xn<g_n_RS`W3$N?=TaW,"1T$XX7
|
| | | `\bJ&lmE3Q4(=eA%s0=:I;8$S2eZF_O]I]736Gm_4jkldB,lsD^+1^OP`XiDBIKrr
|
| | | 7$8EON)Rg,d=^hE1_N@Kok3CF@Jq'7p9mfjIbKgf$tbsdR>5PR,jY>m7_WdPSW7FD
|
| | | /4!mG]EK,XRe:<=Dc/0]$tdS:R^>ob\fRHg$;e0H4GO8MLkngM;"h@7k'-0`e[W&H
|
| | | B#W_GK(j,F+Q.FLm9oGI0!a`Ednt"sLgH<_#.nZ2ITVl9N0t"o@'pH/km_+'[]#-&
|
| | | VWVic[dI#N/7.V3Y3F29h56B1,%52eG3nX/'I4_E.&Q5cG4DL'WtAt21t##&[e4No
|
| | | d;G>8n"T/d9C]&T(mot`:G2YR5c'b#&=DtWP1Jo%+P&%tCQ;fp'Rk0RMQd]&g5mBY
|
| | | $Tg?%Zi]a@_s"!$ftRh0M7g%T#U9pNDup:sQO!rpU[S:p406*6_1IRM(m*Q:a<^BF
|
| | | Tk9P/fEfpmnL;B&>htK\X)T`UZS).G56a6r%W>\sn1P,f7d0Bg.A8V@nY(1^h+!W8
|
| | | @*Af5\Oai9jl;cJml:*X<p_j&Fjqml&PnBh9[ulJ]E;DU[hFai#q$&"ko`.YU,PqB
|
| | | @Ynka,@R\'GdUA/nWgY_%"VPpVEa@G$X)I3<?CdbkB$p%iaqHtbBFWM)@kg.'t%>e
|
| | | \G:t/9:)2\O&RhDNZZIt6BH7`+dBU/s&DGt<g5gG(q3V]+UoY)VrZLrO&nQ9l9j],
|
| | | j)uQAA0@FD=IHqkX,)U[RdSPrIZ##frfdF:F4W(o%BG?cD)jS^BK`C4hQJI9MX!("
|
| | | 0D.0FW17SQNMM[HF=J:<p"^n>H$$urVn[In8<ibc7$^=>GO1E60Xnj4/WJ!HFZ#ZH
|
| | | G,(2-(=)_5ERh.8<MBr16O]'177U$LqoX,9Oq^,kNoH[KqsGVJX_PaWmYWQ?=(87S
|
| | | ZjN^;R8JS$kDFPI#3.(aE8O>#n;R.0ZX@c9&*2kiLR*)HVhhH<deQ=R_FltNfEbZQ
|
| | | H5AWG>eJ6=WGoBW%%be;$nGMo*:,&4G_+EhhSf2=UYkc.5DTkFQ""NMC7?`;Ym0k3
|
| | | Gm9T3"L:BHqlXoSa)I)[fmBaQH]IWWHEI)Na^'YkT`VHG$hosB5RWL;#Xq]F!MK&g
|
| | | ^O+O^(3pe.<>!c-5T;@A9G7P/6_""$>R>Vi51u)9QU"m;>1Gt7QH.S`T?N3is*^C5
|
| | | N7P=_Sul_Ae%Xg2rTJqnGMmo,_`lb8r3tL08&g!LX*j*^r+2U"TAW]o19bKNIEE\<
|
| | | 8G?ap.XhI]I>2lX^[SLD#4Qiun5l`mDtJ6dc8MT6D,09n!C(u[I\4*j)?Rr5BYL]A
|
| | | */FU1CbcP@!CJSlbZm"BN<Xt8R)F"t)idC,=?IoG1*"4V6K,0*',ZBhL8,ob`]XtR
|
| | | NQ/6U1mSn2)@`NPiLnt;.[\5R,6=n$Ai:VtkHLYIjDPQb`5YdP,\Ug=Jl>+U)Os!O
|
| | | /f>'F;fR?/AiQa+L'*;9G]58TN@8o]Q*Q<_[SS:_Ru$&A(Ppec'M7EG.3,2nDo5aQ
|
| | | _A>V5haQ/eSSJ?bVr'2[;2c-7EJW7bQJ8!KXuNuBX>W1;`+(%@>@uS=!8;9j(l`,%
|
| | | Tn]j;:QX'q2Slg;S2hHi-bK@)2Eio9dA&g`cH\Wa]l119NE"b1P([bo"*(bQ=?"Is
|
| | | ]C=Ld%O:-,E24+!E<oPLa3BI8#WUIP3#V+\iPKbrNN^P!LG9+FEYo!4HjH5gkj#5h
|
| | | ]+-Y9S?8`A\ecb)C.S:MD*k*:.dSu/Ttb$96Bsqgi_nr-aT<$n_^_-k%_l]kWtgAN
|
| | | :i@9sJ]lF],VZ$#n$nIt7#!-fns&"MEC-=c[SYD1#X^%e:C`-%\87!n#m+fRb$gBL
|
| | | *(nTm\s1B(ElP1RiO$K[V^tN5]h"<UD(eKJP4#$eBGqaAYma=&/\Vfr1)`[njJEm/
|
| | | $EXqr1Jc6(!('T[P9/)R]DG8+PRTO/.M5mBlI7Hj&J6J\,WZm^9s%<o`=ulgTM89g
|
| | | 2]!_pTP!^GLilo2;X1Ui2bI)M/JTMuBOab$26321,%qt>@%eaePa3Lne@$@?[`mD7
|
| | | ;fa^kS(+MJr/+A9]p]j7oDKBt"p)ju2:!t.51n2eRjd):E)_BGUOgDGH.geAYa6mH
|
| | | Q-g+KPB0G4?Z4_YWo#b3FW70bop]kiaURO9,nWU1Y,mMd&0#(p?!3ChfK;9[]*Z%g
|
| | | e4NOg/uq'RnnWG4.A\C.e*p;bKkBSg5@5d9N%5p^e9'69Tuj)0!2C'gkeDc]]INoc
|
| | | WuO<g5^F3/Lhm*lMaft9Ia#4.97E[oWLF!Z?teN!'9hbj7]F#=4)3EcD,Go6?JjsA
|
| | | 15[XZrViP8;8!dP,%tg.+(DmG\HOBB4I[D]d:F1IXRi0LXs[92\NP&;/+nHeY_Q:&
|
| | | BJQ+3^3+5k2bGG-Dd]Ig1DI<Fo*IoRO9SYp5+SOV>n>.^[k0O/+F\L9ESu5]][BMk
|
| | | ,s0GS3E4U-._>ktP#V#@!<f]o[:-j!YQ_*Hf))2*L=W@XD7=c]]ofu[D;b)gFbG(k
|
| | | l"`e-C&o(/hZ6Ya1gb"IUp]dE=&-o3>ODMr0=<:.Rkh-oY0B<d[<em3dCiIk"e;+%
|
| | | e8SKp8qWp9aJU5nm?MZ8?>KoS2`4i;$6j7o/Ue_Bk@T1qHo-Qf%ElUD.!?dP'Ou*r
|
| | | '!h]6a<E@W.;Y6T_YA/h;*08YL"XM/[V#[NbN;-qV?rT$G]7$[>WWE)Tq\F"InABW
|
| | | Cp5Xl7E1G>,K+21On#c>P60;@;d*sr$*OpB>#i\=4`"eW!uK&p@@bS.D27dc"!dIP
|
| | | :pE]VCA'?s##?GjgeC3G[RHasUu;_uMbXa^USEZM%a3?r,,kc8P2j^4i_57^%m^E1
|
| | | fbFf-qnQ9h6=2gqI$\G5,W(H;/Z(q\0[+f7P-30u8L^1ReCnu3Vq!#k[tQ.;I)Sfp
|
| | | !>S8jT(=3Ae7oB*'pVpBR2LUAHLm5m(6um:AXg\=cKXjn6<]_J4R#ka0S)F.OXUW1
|
| | | r'O9&K-nN[bTFF0RYn4N/1F&hNEJ8Fb9gsaVsK/(N/Ci:WEhdnYt9n"@@j@t)P>OY
|
| | | MC,tT>dVS+Sk<c\Bk!\k0'X-BjL/19/1jXgU59LC]+!q4#a8*DJl9HG!+")=WNU^s
|
| | | ,RGbnl'%DWZc\u7"Ra9kjZ"Ti-7Vp1:;C$n",f"oQabH`.Ha<Q9<srEf2DlTg64Or
|
| | | "eh\7=P6=gj#h5pl"j/haFWLt\Tr$`Vc".3(g<H$UQRL8T/d7,O2<PDPcX"%63c)(
|
| | | BuO0iKjU,kHq+a!i'TpsCS.p/@r68XU<O\!Ohr8WNN*e07]@,+l0.+ub+H.c%.tk*
|
| | | D"6pT8@b"n(u3e4O.AGMGU^M^R.@h)m;d/c-P4!tdN[s-Ffes\ar_>pbXa9H!\:*&
|
| | | m]#r<6qFH)+E"S]_&M!MPERK-eE!(%@WR%C6VLcC\>n9Eh,:6Rc"-Stk"c&#_N&29
|
| | | 2Xa*I>2lk`ciZ\QV/Yq@"!1,(q%?\cN<rtbk<'rrn;*#:(*(MMBVVT$.X36YOr@Yg
|
| | | %gBS&B8-jEb@qbr,3('h%%J&k,]b]WCaB`\iu./Zntn21CK@+0?AnB_/SY)gG3M`C
|
| | | U>:m/HM!!DLGBN9+#$I08BC<XU;t,UYd4B?]"*oWjA[%f(l!+SQRTa_7p-f_*N1_P
|
| | | '&[@g;dtj^9ZCW%JjpRbR2)9&JZ!uQ*#oi/Mf+S<OB0f69O(!s%BC\`+ucg>5H6:U
|
| | | R;4^"K:9*Ua$Bf&>W:3<lQVruFgXDH3p=]uI;E@BM)!UU93RNI_)QRpW\<G6>7qXV
|
| | | Z&oW\V0^dObQBqiD:Z-Wo5eN-KG$dt[>?u6ac2TSGF,Qh,h>H,"mhblGW.Z---QU:
|
| | | U,JdVG'QC2,W?D)'&/fJqHZP0W=<f`jHgH3#WAl%JuifuDr*[Shr[jYS+V*32u/2!
|
| | | S0EgYidd:57d`5$\GpK1BueKo[VK*4D_@%^?-"AS0cW%-Rj2j^;<K8MKJ]08lQ`Zo
|
| | | q(=_?@U&H`.`/X7&gA]K'5WbD8.*4^i==mjCo6_hH6J=qgl&/%bNmbTs!cVk'tA6G
|
| | | 8'lEX*FShNSaK4:=1Q-]/`"L%*(6.FG*d$,]OZ`)Nr9@uY?`a%Go`!Aoe-,C)^52,
|
| | | 0L1ZJ=&UHf,fI=(S+=8<aO2Kn4&EA,?TZ&Hg#1imBfLAi\%Fg@qVeD"9_iT5-$>Hk
|
| | | lS90Ylh!X*I2%BP*F!9WY!q2@NqH,$YMkedZ.mf0o]fD>f:p-sXc9C1oEC-7CL_YZ
|
| | | $K4eH4\[\M]sk0Dr_E;SPNSIXJKYQ)><`it-[>ROInm!GrWdu''9ii+ep$j^YN/+:
|
| | | #Q[`h.8@n/Dgq_\/A"PSs%D#*U(%#'89o.m;9!GQE"jn.$t=t=!A:7Gc"bO5/2#rg
|
| | | Oc7L3-U]m<SHOmF8$Ga^kJ73$g+.l]k,W6'K-^YW9)_5e1F4"c&99?6Ft2kq#Ol7M
|
| | | kcY0/@0KJ<AOe6W0SoudVQ9+^[u45n0"`bi>[D2o!q)p;U>H>Q57"@'-Z4OEVcaF>
|
| | | KVQm4`@u78&;DfVfXEQ_nrQ+GKE2Bhp3>T1%a26(@Q=rd>n=(%%j]el&Gfs5dgu]"
|
| | | WULfPl\u)o$=FGA?-aB#@T%?Q)ZGM5'&ut#d.B:D-P9gNNj'EfC`*q)9*(et'9M)&
|
| | | JsL@#4VB>Y=g10VCcXkE(1(t3('DYm:h3eTeJ88(0[P^ni^F37V\.qk"H4?<;3XK\
|
| | | QKi5Qg(@_A7[XK74Vl?FoC0>BV(T9P(/3*1l>TlFA&>tm]^p-7kOF#i0(g/ob,DOR
|
| | | pkA#R/O^\tY6&]O8.f%oj(00G;[B?0N3N.$;(Vf:b+d9W-u]eB:JDMiB+!!=+lgHW
|
| | | ;"YFk#)UI"'1u+H:5o?DfPLk6rJ:s]ne/V>'NN#6&!-*$1+_"NP]peZ*ei+D10#9U
|
| | | R3=6l-7F&$;0)b+!<J?o."j#N,4u,FA31@u-Eo9RWN.A.eFKna.8<)3E47/<efcO=
|
| | | )pul,;RB-GFSl\a.jD,?14\Y/FY'=(^bDq-D]V53Y"Z-\#f;iZ!nK'E3stJGglgZ"
|
| | | Y9b']P:^D"$KJl/1AiP?Uf['%0?4Y6,/W1l^>UKH(3+OI1:/PEJ3RK^%PhR!aB99t
|
| | | lRIUt%YjL&-qGYg7hsDT-NYe@&S>+N(l"s_%4mn115I,.h%EKq-:/R)&N^X]AL3EN
|
| | | 5d<I$j1?[3A2oRB-;7,FYN[LqcI3Fnh*ntXmK4&1G8@"h;PIA1XLp-jP#08/)ps9b
|
| | | .d\o$AMDC-3m6tH;4Ti/(*_3B)O'2=1;lK!d6!K/TC>Ap&]$W02)/"B4gKt_b"3=H
|
| | | X=83j*UUI"_m!&0ROKhB61==g:aJ5&Y:!3I2W\[(&b:dBfNAJi-F+@QME%E=8r&S$
|
| | | G`^`*YOa)-3?,0ip[aCsdJY;1q^#bc=jfpn&'!1V!(0P>":]BO:V6fEKJc@aqX&o,
|
| | | +uCKBaS]n;84bY_DoUK&Sgb'2h9U\LFG.A(N$Tus84*t\NP\O`Db*:Eqi0&t6f.[a
|
| | | _Y'/M3O.`%/aaoaKMfYtoF:[ll$iI]"sW\m3tQf*Z4Bc@1dD\`l/cH&<<ua21+SK^
|
| | | :4snXc8A.WoHhcmjR5$&Jnn9O+@"BJbt`ZJ_JN"\T'q:e+I(G7D1:XmoHU`cD&$IA
|
| | | liTqW'^i,_-oA`(Y*>C)hC*?R;5YF9U,5Q$j]J;M/<lBlDLCfYN\&\9m#JhPio8m6
|
| | | =RC761#dsh`J[c+_M/+gkt^\ONs/S0qcf8op5W>G<Oi'o6LaZb1P3;<:E<Z#.dO8d
|
| | | 8#Gc.0<nR(2dVJUg^U\_p&+]f!q`i/@2,g$jNpQ-;-ZF4>`V-)"IEO3j%H`M=gc2G
|
| | | c^6']'32HY,jb0XD66q"iiXrE1U^2pOC6ihaG#ok3OK^V!l&.LR:Hi5A]%)IX`[2N
|
| | | &0f?+Ai>9H6mZHpNi9=<+XZOV<.+Yq@`t"-J)[%CoSe@!Q>Zu`"7JKC2%jcF/RrE&
|
| | | A"qQ<c\s8bf5"k;h60(!L)"Q7gL@P:giT,pj*>-F:mu"cEaloGjO#p;lq<24oETYN
|
| | | 6C_T;2CPD)Di?rimK@.2"=&n!:ua'F<a+\3X&1&f+t]\_@Y\I&3;F&4?PaYN:?tS_
|
| | | +*>SMnA=j#igh_teJ^AQ.e<f3K`,jV)c)LDAOAV#XB+IYMd4k`Dj>jPp>ScklWD`:
|
| | | oI>>m[B4:dO^4jd\CT72(P=Gcas7-THO\5FJkp9,)I!A,D.;=.:=LK><%RC,<$]]3
|
| | | f%);7o^,YpH%N\WDS&hj,_O%[>rQa[cFiSRq-5==Z-Ic?1nKH+*qF(IJHH-L:)pq`
|
| | | r]HAmi'f;N8srJL).0,O,Bc"bfG\[hBMB3dKGYS9_]rZi4<^([dK@[0@rl;OG"e0^
|
| | | .n<r_E$]db.:n:rI7P]0mrZ[iZYa5_D&5]uA_1_92gLC8@H\Vf2p*H!J0>c%I<WI^
|
| | | <hPQ8'^NZ`8d%!a[#-m=!Dm50.dkYGf'A6k9Tlom8-Z&Q/[@Fhdoj3%1,jA<YEXJQ
|
| | | \uasu>Z))6\B',#SQnpjO5f.ACDC)KGBI$/.$Po0=$&u5a=2,WWRaEAfXibHqdb9t
|
| | | <d;__\G9]5iJXFf4Te(t=5T4YL0YP4M3u:91NG3<'9KZTWT-B5=^6f-#U:P<)d+ji
|
| | | "A;>h'9`M-Q!tFTB^:SOATF2^`"obCK#C33V0?&eAOFS'6BEl=W$-@S.r$G-3638f
|
| | | QmP->I2KOHC8m_K4(%+VR(9Y-(qNk[-mhR<Rnd%UUUQ`QO>-qLo;(C;ai_i\],;J2
|
| | | GXp+2AM]Hd>$dVk.0?KARC?_WO=Sjb9=@2,U1>h7e">]74-kmZH2a781bU'IU#nk@
|
| | | 6O#mR5tci!Dcm"uJl@qDi\HElU_mo)6T_$&1m;*P1jVB\Uj&R/"uUYFjPk<WU>e'g
|
| | | ;51Vb2?HC@l!KE[O_/nh,WFhFo*(cG?(P0N3]\<I)4-BJT:[R4oU*!Im7X)BS2g;Q
|
| | | Oa<*J3A`h8gRb.qMX*+tW=IN\Vi/+QN##3G=lG=j]W%:HEH]?q\[8^<Rr(271PX(i
|
| | | fOp[UpLA<oSO+)tfUHe`/!0O.nTa5Y`6E5a?t7kD-Fd2uH+kmk1LkP2Roqr<cZ>Ej
|
| | | 8FREQ[CK9"_Sh5?8!XXsFLaLi2c):kgQseZFkO,a%_6aM_j4fSBC9hjfbeSoI<W:?
|
| | | GgJ$>U6h6M!LhW"WE*#gQfdQmoMJW'H5Pn2NdO]LB!g1$/_`E@=leNX]ru[plaOp2
|
| | | _V(Q.d"XR[@%%1HAa,Di$[W]STB%(u=7`-N&UP,;WDu$SmLatQ+/>24\2m9[fG>'e
|
| | | 5Z@>B2S'MORTG*NkG@Q2gLBgk\ndX.8guk@r6Al,GqZ)gF`06:U#L-@05??6'$dVg
|
| | | D>We%(iDCGT:gA@LRK<c>='faKqc/nYum"-EiX#&s.[*Sgc24F_fI:grJC<j-Bq)9
|
| | | qX#QD'I#uCP>GG:9OK3c#L$^d7\\[j`C_?pei5%T]qdM84QJ_3c%`bLc:uAr(N_;-
|
| | | f2HT/C_R'"-0]9&Hd9,t6CcXID:EA(.F@'$.8YH<[*o6^Ehn:WcDTb']ei#l\npL8
|
| | | e*i_]h!.P/Wra;!Kaqj6&W$X=271&%D:`dXA<M0(CXqF6#Q6J;>u0#=,V-"`W1A$[
|
| | | n]07W6otLue"p^1,HaB33\]A^3"N@D,A#?m2&*_J,nO(763S>7kG[3_2rcZJ4VoU#
|
| | | [F@>FJoXlHLGRVRrc-cN,mL?oU<aG`#E)/18UT;FK?;ln-t&$gbiRXs4n`c!Fb)L?
|
| | | hbGS:Sbt]EjFWH)'hD;Q;d\LfL0D:g7r_D\m8)\:O1?9dg9(:,:FR0P1nU;^UQ4Bf
|
| | | llFWqTaRG`QgTHZ7)RJ,GLW3OA5PeGRA&eq;qdK]k2'\4/e]NZ<O_$,c#CG]V_Z9)
|
| | | `R+p1l/]q2]c8n7r?ZFac92cdIR;k>\fuF%i.YD_ZU*kFVO.9Lir5@n%i=:Wn'Sl,
|
| | | D*HrN^;\?g9ST=AmgJUGKRSU2dWiZVhqePipoq*$q%P"qAQ%SRaW=)eH`&81\_n//
|
| | | D-q$,5X0o^NB,[qV>)m:\rFu/o'87+58A$=.]L:;ncEh$Ggg>81%`'FrVmgj)/uU*
|
| | | =TDsQ`!j][(M!/d_p"so2&XUh,!,_Z==e`0WP\-!1k%g0i9cQA`1K4_q[1r^-G"fI
|
| | | g((J69<p!d)XC!rQ9PZ.:L&_X&Fo.P;9INWV9&S/oNnFU\W<?c8p47^>3'H=R*G]a
|
| | | 5[Y]:;/j<c2]@J]J>&@_Cb?S7#(qI,dKp!q`ShB,@(9f*)iUM2;2EG/)25stK/%nr
|
| | | 6NS*a+nB=!eibRA9892RbfUh^L^g2Tl$UJa-Pm63EV]sZA2Akc@q1(Gej26g$jMq'
|
| | | KJ[X.):`2k!P$.W)MX8gFpJYpA3#rT#4OU*Q7+R+%S%->KN][E]>nA^\TlbF+hJ4;
|
| | | 1V;;\@9CDTY9Ri4C?&#.NA9I=p+%R%**;[jCq[SF?`)l'URHXtEsKHJ7Q;D:g6n#"
|
| | | >GbI?FSd+7d:P%Od>f"@A/a-0H`Ik_r<0Cn@Fj:C^h7j.N&Fq0(=MHsa:,I>%]66n
|
| | | e[4llG2\c$]JcSM.+akoP[18icNV4&s%fXPj0OV!No@^/TPi[=_/aGe5HjtRn-4kn
|
| | | ]_ahtC0m]"O)pnpTPS-_o/LG6TRele"6^]1n2_>90ad71*$PeB7*$h&l`.EYacZcG
|
| | | LG*`4]I]2fNe4mDY[H0H+gc?pVf!uJ&>N+N7a*O%P*mRc:;e?g2pqtLl8i^bAf.FD
|
| | | m(V43/Kf]]+\[K<-A3"anu#)n1_Ph%")Qth3f'<kS>@tLP.XSh'C=8g:X"!n:8hX$
|
| | | 18/e6O"j5u6T!dtTu(LdZg;]q&YlFu&0/:qU)K<6&dg7Rca>HGJj0VWR*@$Or)/Na
|
| | | E_TZ05gTQjou3m#)TFTFg(r>m;QMM\UWc/ghan)g$QdqKF?oaXJXZI=Vc:k/K37iB
|
| | | L)O-nj@aHm1cs/M>UmYLoWq,sAqDj8'&-(/_1L&(1\=pAK#nCX7k2qE)f!2F</Wt,
|
| | | Z"fgRbu_!K2,@(%J7R!+Zh'4pZ`@s?4''S*]h"osL+8uVe#FKkZ!j+T8Dm6pa]5+Z
|
| | | ZLAdj#dhQ7k,`Em]A=FZNZ91f`*\X=MEVIP>P?M3L.@QA)2r:Y(4C2JqElO&5m\eG
|
| | | TY8o=2V?`&1\/fA&`/,HeL3&IUPCE`AYIHh75E3<Ch&m=Xk2'695#`f=#cuKdamI7
|
| | | -kf%8jmGhET5R77X16JY7jF_fF@>ka,b.6mMK<4Dog&-@MGjW%;eJE.:$>JG]8!K*
|
| | | 66%5$ZGeqKZ+",TWt7q>dL'A[=>^3^PS;cH"1UV]oj)#u,24`BB5FFc^RTlO*KiCc
|
| | | @t"Dc&9qW:'-3fR:R="8*9-D6/09udS^0MoH+5U(0=fU1rG5!sW%+S2p_;cRMoi4=
|
| | | /$4&L]Ec[Gha@HVi6hY#ZI!2*q$g)5:'*]o1BJ5+$?`RLRR(U0f:Vs:IUu[]Q<6!8
|
| | | +B\b4"N60I@i.i^)sW*P<L/lJ%fP>GnUG+R)j1IRJkD70L'Q!D^mCKViY#`H0btWk
|
| | | PS4"*C)i&F.MTXQdT=L@;aSDD)8@BF6]a%'MX^$67KS0feO2\]N*7h_kVE^C8Nf\n
|
| | | ]qRkR[!N@cE/="$3N47F$f_h8HE[C?6"P_9N1=I9,e974,M+(_r&l;njN^<;<t-A\
|
| | | ;bW;VUdu2Z+QQdJJRrf*`(.2O+dtkend6>QM+JC-@GQNhTV+k9C0J])#Eo`d1_jKP
|
| | | a^PWFM3>GS7i7@;9=\_-P(]h_a`(?"iWG7GWaA=hVI<j/2(%igB;G?Loo-JcOAgTp
|
| | | Q?elWQ5mu,cn4FlU+#n9CsdS[AJWNmYX?a:UFqC^cQh-@c,rR"HnB$&LEO_@K+_sf
|
| | | 0Qai>W#Q4B8L#p^[XU`?9))"PDP7aoL/-/35*:1Z,'3sAR>Lj(Q_WLgLTD%ag(u;3
|
| | | +uZ/OeT<rWoKccAnKX:THpbJcQ^umZVXMBpe$jSBB4TRM`&^E#`17Gg$$HNT<8/+D
|
| | | 7mfimiDbRDWLoBY7%aE_7J1t`("gW%ST0I!M23.[nk2i\Gtr8M]!t_LZ!,j!#:[X2
|
| | | I+;D?>h@(_YG>@;;tjE5L`6;<L;_.OW1L36E@W5)<S>rYIk5D5cEa9'TbZ:XA>,!R
|
| | | 3i9mlOIJ1=!Ki=)Vd]=MX$pS@-(_K`:=Q"bB)#Z^YI5r&e_@-1?6J4m>c\FcQEiSW
|
| | | D1])I2]1F5nfgP?]q%Q._U,$(-Z>&Koh)*El.\;#C>HS:Z_c<URji\pOkKoFG$Lo`
|
| | | l^!Z-K>^Ga[;=VK'"j+t,q5`kYnNVIIZ6?^0$*FS>(pU(d(SlmQ"&u.11>^k@?SJ$
|
| | | 'UE.D%&U6pEIl&\$m4O?HHV77ZFEZa?%X'ZY[p\Jm`s5;9F=r4?0&_dq/>3`Me\f*
|
| | | s0=5Bc=7(9Ja\F*.[ZHO@a#F0Q=]\b\5OZJ2UdHNe]VtZ,bS^"6DGaU9Kp!K.V0"`
|
| | | !&@!d<7gR]?u0J:Z.:hK$0N46dKbcu6?#)#<:DheRe2[6nBRrnS)JCNqOLY_+o%;3
|
| | | ZZLPG/k*9!X9=ICQsc7;B`gEXQJrb`QtA1C.nJ;W&XLZBUR?92G%RPe?VM$o;L.T1
|
| | | jQVE`1jPb^?#S'M+$>\0pO4omng?D`<gos5QdSVMAZ+#sm!Kl_,2&918)Ha('+2mC
|
| | | X/+GG%H7seX_ogZVUrFdM&+hVR2kndJ]K+?At&Z#[C513qk3kVmFShl<ia1DqYk>`
|
| | | h6sIm/iVF0C_K54W=Fq&fnf64DmVKbG$tR-(iOW!SX<0XRHrO17q2!?K<$L,JCjTl
|
| | | oVYY3Zq4#A^b-p'&H(lbo1n)M`5'GCSLgkap>gIqM:$;(gUd3`Z.%JmST==_Mg/"k
|
| | | jX?IH>.t<ae^$bC]3R"OXKq39B*ogtJ[Fq,-,_jIO#*/Z\SCa[B@M[jgjFpE+1s+5
|
| | | q.hiCrH1SMI]Dd]^0fqa3/;VX1*#Z3]]HZ5s%@cogcCQ+2I'0oD1"<IY4j'lARrE\
|
| | | /X)g9oFrJhYI.M?*@Ep?5NH-J<-D#Lk=Rnsm"b%l(D@'D3QC@<rXYLR]Ju:f?[h3%
|
| | | @sE=TM=#OX;r7Mc_VL67^V!66l('*+q$mSs2SYj>h.Ll(>QLA_??VuG?WQIY!d.C4
|
| | | ;Yo.8L1>fUF@^gu0cc<.SP9sf#^>%j-*p0lU`mSH\Pab%Jai[\A#J`RlJ<T^;N^"%
|
| | | 59mNh6XRG,\!J'&^`ico0VL\Jknp`.QQ&XMEE=0e2[i$nMos&@\Ak/HL;8>7^lmBS
|
| | | nB7jFfKd6T^s^cL,3Z-p(VpEE/c(=!>SF3K]J/p&(X*Z24:&c\ef]&Q(pk5J<$-sC
|
| | | [(uL2O/U^=Z@*)LN'P!B_HPWMiS(OF(R=#T%g'eR`!aF%*&-=.(u,Zh_XKnI'1*BA
|
| | | _8.g_6<HQB",oSTR'Y2"`!aA;<!mAs#bt7kZHXBtdBC'WSg_5lN!kGTO2M$YME'lR
|
| | | oKO:HJZrQi]IY=l)Nld^XI)Bl6A]Ta@3i3R)N)&&1?;3<>RVX'Otu)k['U5SnBaRS
|
| | | '?$+g1H\+/PS?EpqEtos7$Jb"d'&A?>d#+t_%Ql<;4U!nDBGBM(2OcnE4NqQ_F7<g
|
| | | Y"V\&4Almi#=b4Z(pXJcYar_>B>pQX_@nOiN,V/]'!Noi`\\N$jBP(u:Vf\57r%Z`
|
| | | l.h*cqE+3'6`Q`HK1VQ$gHg3727#Q7*.O+!V)4S*Z(+#d*,_KI[mnReS^S4033ksr
|
| | | fp<Qm[6Ue6;RaLV@Q[>6^_8E,)$;Iq;54dQQHLH]j9NV:PdVitLq;\;d[nP'Ah2YW
|
| | | MO?Q7ORP:f'>B-j[_[m5lotm\9fFLN^5S\B]U-(s"HLE#*LhGe'KjNkS>rYs8VrQr
|
| | | lYO)<XX=68NRF6'\`0B;-j\n=V:_Q#6q.PHVTVnJ`[msCUeo62JsRHtatpXNKR_,I
|
| | | UQR%qb.OC-W0fj"(HeL_3>d>g[)9]g'fg5f0=Z[f6kd`X;i#h,UV+a6PC(NtKcZE-
|
| | | `pCbWFBC[EQT7COb[aMlRqp4kMb!]E%NCO(!QDlpfnfRT\u`V7UsKKb]1\%*_F-`s
|
| | | Mglb9:.%.<LlA*eMdqtS`lZ`lT$`,7I&oM99M&ckbKu$$6@23O"&+'-8gMS=\J:0I
|
| | | J'MTJ]*hV5J<!>4lNeXh9siA4&<t16e]j?E$C'mE7+MWgh&D#:9tLQk7((<^:Q73Y
|
| | | :,?e5UnH(3A&,[dMIS/mLnRXM'<?CURe6V%;cUq!lbBBZ:b<0L$%#F(QHkrO8Nd^4
|
| | | aKdN0%jh_N:TSiY7!cWVnBcP(8)4KPGhO#LF[uhu5>r99X?!KEod@,#6npG]ZXXbM
|
| | | c,c.mXjjl*j)[f",E,$N%.k94&L0^iOZr.Rd2\BF'TSi/)6!V$*suIHlo>n#p^(&R
|
| | | [6"O%qgAcM4LSG\Lk0r12)mUJcBsS*#un4K]%O.RpCTsb#tn@&h(I2C,.FsHZ6_c,
|
| | | i0XtU3Rc@U*T4TJM\26Q4ptL90551NqarWV3?X/GeC*M1R7@T98fX#IX*CEf\:ks`
|
| | | j\6-'\8>En,M=`EQ;rW?<#mt*:n^nn>,sXCXR-EN'g>R.BT$Rr<M_cUNG$dM:lK)/
|
| | | 87L8pOtjSkR9%9aYG-k'WR4Xijcl<U&#b2Bbu`E#qO'K1$p*E;kqSmN>1E^*`T[7o
|
| | | 21*k()RG7?<HWRD"76H:pfD6?<-c++F`WgQ@?sW?doC6eGi?pW1fjj;ZOi!DPr.(:
|
| | | --8uKU>8mQQ&gddDUX#]0;Xk!4c@&$KsM4k#\.8!<L5b@M%A"X=N)Sp^lO]`PZRM$
|
| | | 1*ffO*KNo,nCd*g$!!4u@)aH:kupuh%h-rDgV?qUd'"/N]=@@aGd\$2XNlZ(&A:#o
|
| | | .2S!(nZLibe_@:8Zh6j`6o2(_;MqAA]nR2aKg1-^N^BPQD'fOI9NA'i%g6dbi6g/4
|
| | | n$'L6La>Gm=`N1bSD7UMdWMTmSIjNbUtO9R>]jZ0V7BfQc.h?s>GYiBQ+:,l]cJa"
|
| | | /?QQhrBUuh6;h4"h%eM2HRmlE.G\jHau`cC[6@_=d9M[SgjmHR'X0(8cRq2We7#+$
|
| | | ^tfPURpK(,$8(;[k_\/Jf8BOh`jhBkC"V:+4'nSI<-Y5h2=01JmLIM+P]cJWjmf;Z
|
| | | o%pM=.a9eV3L5Tj@RfJA#i`8uSbq!'q@jd2d3<k8$%*@r3=8EiMZ*\7j)9gt9<?Vp
|
| | | 1s"92E2c4!fN*Q9i0^Z4F?VtdmBp@Ogh>?09/g1-\m0'`]'AIoOX]%!#Wh?^$1q/X
|
| | | JsKhl>q$*>R;%DCSfKWFc]!F`R2Ht&]r']6e!EFGP_1nq_/,)p-F8W^ScRdk+lagk
|
| | | o%:QAM\(sqYkjFO-^,27$CHJ*j#u&#V@+$fMGU;`kq=C1KaE'^OiB8e1t<Z3n#.E"
|
| | | 'HSd)@Xf.aP)_Q^OL:*Yl"ads=#E.=j+++g4!M;KA06>aOqA>fBWMaL8;LSDY1SID
|
| | | %S2L$/de8oT,<c&l`>X;WYUPaAJj^n`\FW@OirkYjH`i/dF`!6]4>54_U/<*2E.ih
|
| | | -Y5+d='<`splC@^W\Q`-AK5QQ5%EU??5"&"2*PW.2*HgFiP9.MAN<q*L22tbL??k6
|
| | | Pbr>^*`hA/L#[H/P8Ks(!OH>!B]_-3A?KK>DIugb"C]#X%f'_:Wej<4l\d""N5DTd
|
| | | .-%&)I#b"<kT$H2ei0ofKUm0jO+r0=-;tq);3X7p$dO1=8USaJ2o+KQb/'U.cA]dT
|
| | | W^%0rBPr@aX8AHjEG0<W.]kQ8:6K=GMSmNfkB<-Rjl+i%Q"\O$C$'nV*fsn.qW],;
|
| | | Bss59I[$;'iTUeb$q#ZF$*oF0TW5$CNB-bKSIFbCX;ul6MG@C"/lQN[[TZG/$Pop=
|
| | | /VT!]Wp:ub*\r<3fX'mEZKkpkCO.pTLofp6[qhr*ler98_)gGm0otgt2p(@N:;DlN
|
| | | T'O\,le]ZOQE?8e9]e$t@dA[4&><lobcq>Olt3FNTUJ5b1_ZjXCr=aeNlC@j/W]P'
|
| | | 9Ycj-euQ&p]WZr<$bj4`o"e)@c>'enmBI;iVVQ'%b.UQeA\M[91"rXJQYPC=A=1IE
|
| | | )BnL>ki3`KNl!,\,_tXpk1^A%,0$YN>\Y;Id$!&uin3u5QB,k?RUlE^]MRZ..&e5q
|
| | | 5Rt%A$7S#o(4gC+XD_g;_!^>@Ye4nD,F,G5hAq%P8eqraSW5m<Po1:"WiTojT3ZMW
|
| | | n7#snf*F8h/oT0APNNFFDY].VEc,A5E627F3Ce&Q0jmbZ$RY<SYhe]:MB*K'M2)_4
|
| | | (DcK3qXLmV'ScMRQQR/a&T4+?O9X2m#3Hs[,jh!G(`spa="#+E(@Ni4O+tO@7e2D2
|
| | | =`Dogju3[rmjdeh'F<XUnkd5a^G0_'a>TXbF*?jXn`k+<2"R;-m`-5/e%I6YZA^.l
|
| | | P"@R\hWT$8Fd9J9SAt*eOH_+g&.Z/h#ha40RI6-7&7aDbK%M]In1juC,ap&]Z6GI>
|
| | | VI25AQ`*Qj!f.!c#Q~>
|
| | | endstream
|
| | | endobj
|
| | | 17 0 obj
|
| | | 26815
|
| | | endobj
|
| | | 15 0 obj
|
| | | <<
|
| | | /Type /Page
|
| | | /Parent 5 0 R
|
| | | /Resources <<
|
| | | /Font <<
|
| | | /F2 7 0 R |
| | | >>
|
| | | /ProcSet 2 0 R
|
| | | >>
|
| | | /Contents 16 0 R
|
| | | >>
|
| | | endobj
|
| | | 20 0 obj
|
| | | <<
|
| | | /Length 21 0 R
|
| | | /Filter [ /ASCII85Decode /LZWDecode ]
|
| | | >>
|
| | | stream
|
| | | J.+gME)=>9"r`LkU>_3l5WBYj7Dj\tJE18F)1b1"U_H'n3Cf`onhA-N!\-[5ctG6q
|
| | | E&SRBL6?P8/8Zdna,5U3dG,F?'G+$:F/dCJ-QJ.9Jrs`f?o&^\Ku5W1e5BR%&qNGQ
|
| | | lkk`iJJqqU!`b30-Pm4[#B9ah-8lDK6j9m_(s!%&N$\XR:tk[s^'H)AquufoJMmRe
|
| | | @&n8+iGuS;YbD0.`+bFOhX+HN^*=@3Nlp^/l%I5.15S`co8u=(ctPBV:'WKS9Zh3/
|
| | | R*FdR+k4MR2k5n;P+efg1q*mJj#muPn#\ShpUfqrbi!%eRS/8fR+TDe3Z<3i:,'[^
|
| | | /<e222(^N9.2.m[-StlBYekJ8&4g)*Tp@;iKEFK^0T:X7d+sYS!6@/0,I@<F1;SKS
|
| | | W<WGhW$2KjLh7J/$G*MH,`.sdPq6Wa*n$ooY\JlH.DgNJ$%b^:,`71ES0N[gYYlEp
|
| | | M?oS!Ln^D%XX&`[7ZR_OPE<Sj^ediQNPPV30t0N3a=rUk*"k>m,G<Bp9@-4]0b.]<
|
| | | fK-dJLr)7`,A?@#KE@@Q1l]C7C-8H>\3MZ<i[BQk#(kc2(Hdf[N=dE!dL@J(_5eOn
|
| | | U[EAs2nuL7MaL%b9T[bY92q@Q,"c6`(l#jlOZ1Ga!6"+4//+g7NIfGA+fUJuE2eNl
|
| | | m:mT;$D:iF"r5s3WX](aG<"2gJ88EB91VkrWI_iqM5mueLI3Xk3h.!0:1D6jK`\pq
|
| | | ,,FkX@)+G=;@QEU(-#r8"Ts;?2@a4IBK-I]S@]!A,D=@r?0Z*A>M44cl$EO8E69u^
|
| | | E-2Gf.nXP%)mpB5P*j_*N*g;K<?P*bb&)SB<t(@JAQiJ-]pXFZJO5o8jbRL-,?@-B
|
| | | P?_0lNL+^dfo.C=M%u,KAE@f:946`p`QFEr6'C"?#/R\jFh.5]060VX3,`onlahXk
|
| | | ?5PQcHf$d;*"ZK".bgHFQ_)6NiHT%ZLVrWlQAm>pCUb=:!G^C,V=aAN.L?/)UaCmA
|
| | | AS*1n,*7C"MOZA`.E8)%KhKg9pfs9J8cYS8nM-]Bg56R5Os:8W(kWj8Ycs9<M:TDG
|
| | | F)S"D"-!Jn3+*ZZ_P2H+atfKf/'B^'\hmZ$2YeT)=IjuM+j$`"jXmPVAGE&]?[hD=
|
| | | ii'47Kq]-MOpX@nC`!@?jkm,7]=8R&7,GR*83)N^Y18)/aBdWr^%bi&ck?^[iJ@LQ
|
| | | 5i*BB"9AuUe1d@'kc7I`fF9!kgnurO#S-].J:N/+#4Unr!<R@o+dM-$[5@JK"4&.K
|
| | | JE-fqdR0Y+%!r-M-U#7U'OYG]<M;r=L1C-!?7LX4V]`bW,M_ZW@tI:g+Y3gd<ZAq\
|
| | | l?OjjVEY>eH&@ei/ZS@Z5D"Fc_P@2A&N2"k\1jpjfth3p>VZ?^MObEd@=np"&-J#+
|
| | | %T)HmKuHk,X7hA!T0f5c/_MA5dO#G3:bs:cFRqN>:_^df9mfXe(74(<ZGM6q=jAiH
|
| | | K[RBhMI8@J+NY[X2dd40UTY!G$6cZ@gf4rR:/HX$on/Po&44=A+f[P;"]1_K*L#lP
|
| | | VPT2*1X-P`698$+_"8EE'Xo%?2d14[quVD)&JQcsH6l!t(XjoCLl>XD!R*T["oPDg
|
| | | Z=XStKJUJ7,Z7700F!84>:Xl)Et!+F7nk6EX)]+Oi^$FO.tBZ/=dW=REmlbYJb-$`
|
| | | BL@iD:'tD=4p:N^2Gl#,RtN8G5)$M)M?Ft1Mo_ZK1_(LXTIi5Ka>&HL\q5R5Ee;-;
|
| | | V?8Mi$mi,W>4`ee(BPL]aE7r^'L:4R&D@u"_<?UfGe[,(,cKl>3EF<`:<XHYVO![A
|
| | | @kCRs`+=Pt,,0sb%<X$$230(r>o>7"EEe&^qQMFheMn6X9?j3c4Na*AUX_\ePR=5%
|
| | | eoK,K.oC:3P*Dq<F]Nq;\Aobma9hra;gltdXe'\n38tZtHKD,aPo1LM.Fi.#Z.-tD
|
| | | [2_jeV%K5+cnj187S2gsC/N?f)FHSeE+`Vd5G>IMdidmK@3b-=m4a9[3>#cfNF71Y
|
| | | nqWad]F#6N2(%HjWWKJ@dMo,S\7B<u/./jt_W>+09kLZ\^eh-I]WGZZE/@C?O_@KI
|
| | | 4JA(&[t4Tp?g)mfW7<*'d@%FBW9*ch(>(S#eE3<"Pt)9<!2J;]%<'>"ah)CI@GH4S
|
| | | E_\EsBpULn>i]3#-b[u1!3S^lUlT^cL#6,OL%F.Yc$=-=kW%1m)_mgDNFkT$^,;oO
|
| | | P@A/iQK:M+bLeRRj@i9e"gTIRJf0dV@!2XGd4!,\0qb2f*5`b+%TBa3>'<jaPbd_-
|
| | | ;V>_S41+mf.El'u?OSBAQ<J0CA1.H"BVX+.bU"Ka`-Kd[QKD2<eZ$bJlRmUZobci<
|
| | | i=<m"%d2sVqQAqgFNiB2o+mc)\2/"@X?bAse]d0`S+F6o@%\7?qJ1s^\2'I."[k2e
|
| | | r(X%M[9Vn*-=$?i,_CE.6V'b%Tij.3,hn?Cc:+G*b&"W2U,k;Nai't`\r0[X.$rBb
|
| | | 1KG=_C.K!S1:f1f1cn,m,H4S227SJSg>nU<:b<)9)N>fT9j<pQ'\qmH2Sd`l]s><:
|
| | | Gd)/NVZ>6Pc2$?k-NaL+//B1^4<b3P>m,lndN"K(ftFoT7fiun'I1`BC.,lFX71..
|
| | | $,!q$5qEhT-Bk__Sa=eZE1d@gT>jmh3S=hP5=nag5Cl<MjN)_O&5pq[bAHo-"q\T7
|
| | | ao#>$acgIF*"WsKKF3ZN63IIChAJI9ArIO*cc,P=)*XV@$u(dfA2UJn.e$h;cXc9G
|
| | | FO,(.UI*1UbhTn$X:q2e&nkoo/R<k8p*5UH]>mu/*W5!k`GaLX#?!PFX2+FXOlG5i
|
| | | L?lcr`:jb=?@'X]mf_gtG.sC%3sfotk"*;[^GbuH[ut5bK>i,n9AgZ58Rja3_Xu_7
|
| | | hgH*!lNH+Nop;d>^$i&nhWq44O&,65\&S)ihp@c%?#6<,KD>j6L%p^Ko=ZHUfm^uk
|
| | | GTXEOrb&A12qdft51ISEO2:`Y&*Mhb+7];*mdpI^^N;fmD08X8rm7pPpQ(!r_J8CM
|
| | | =RZgIlU*"jBX7OGh"e+M3KJKpYQXC0E<5P)qTp'=i+W-E#6HS6"&KR"E#/@HYl>5/
|
| | | rNJK]E'jMa`rkf<q%-[0:Fbh[9IB5(rZih"E+&P27g*NsrXSH$OAP3D!W~>
|
| | | endstream
|
| | | endobj
|
| | | 21 0 obj
|
| | | 3095
|
| | | endobj
|
| | | 18 0 obj
|
| | | <<
|
| | | /Type /Page
|
| | | /Parent 5 0 R
|
| | | /Resources <<
|
| | | /Font <<
|
| | | /F2 7 0 R |
| | | /F4 8 0 R |
| | | /F5 9 0 R |
| | | /F7 19 0 R |
| | | >>
|
| | | /ProcSet 2 0 R
|
| | | >>
|
| | | /Contents 20 0 R
|
| | | >>
|
| | | endobj
|
| | | 23 0 obj
|
| | | <<
|
| | | /Length 24 0 R
|
| | | /Filter [ /ASCII85Decode /LZWDecode ]
|
| | | >>
|
| | | stream
|
| | | J.+gME)=>9"r`LkU>_3l5WBYj7Dj\tJE18F)1b1"U_H'n3Cf`onhA-N!\-[5ctG6q
|
| | | E&SRBL6?P8/8Zdna,5U3dG,F?'G+$:F/dCJ-QJ.9Jrs`f?o&^\Ku5W1fMZ!)&qNGQ
|
| | | lkk`iJJqqU!`b30-Pm4[#B9ah-8lDK6j9m_(s!%&N$\XR:tk[s^'H)AquufoJMmRe
|
| | | @&n8+iGuS;YbD0.`+bFOhX+HN^*=@3Nlp^/l%I5.15S`co8u=(ctPBV:'WKS9Zh3/
|
| | | R*FdR+k4MR2k5n;P+efg1q*mJj#muPn#\ShpUfqrbi!%eRS/8fR+TDe3Z<3i:,'[^
|
| | | /<e222(^N9.2.m[-StlBYekJ8&4g)*Tp@;iKEFK^0T:X7d+sYS!6@/0,I@<F1;SKS
|
| | | W<WGhW$2KjLh7J/$G*MH,`.sdPq6Wa*n$ooY\JlH.DQW3#\$&N.0q+7W$7*c8>[jC
|
| | | +rI3J6jY><O/#6">)>6J$_8)kdK8A!/cj%((C)+n5ab5QN3)hDiZO(#1f5r9VlfO%
|
| | | OI4#0!.(M&6,M%a#.%]T]nI)4AfHF)fKgjb$IkZPXq9*[))%\ZZRrS:S:9IK;[OS0
|
| | | d(s[7LF,Z8<A%!EPh[12!JKO$6F4&h4UR;Cr=[9;3,TR26(H1e[;gH.2N1Q<:ko6'
|
| | | Ju4`0ZUJ@tWO&%j'Mt&OK!e!S<<aAgM]A#s$\=CV:Jlrm9k;e2RLNncF3r/Z<==FU
|
| | | Qj5IE,:uq>5grq##]O>(/MTrF9>4h&f3kH_TOTte+[FU(%o^iO@o);G`.WilD-qtD
|
| | | &U9^e1gpQ`bHKAP/Mu>6qA9nN@?le7=V<$FL'Fh=SEGe#"g&rE-n>;l9%Mah4V"6+
|
| | | fJ:2B!8]b%6]g^mNc7XmloRu#Cbgs#G#T\S=V@2>;KB!FW3ER+SgS/r`g:K%;DV6`
|
| | | a_Cl&V?\9#D*!V#@-a<c!t$Xl%M"<Qi4LYudL\AOh?e/\6%rHH0DJMV'MI)39W&+P
|
| | | Pl_o);-eZ6KEC3c,YRh?2A?=>d\nN$JOj,io#q)1*ck<K&eaG-kS5>9GC'E:VE4kI
|
| | | TLsPXbrY<6Jkd.4;Q<J29/1Vs0@?#,E@jkr1>TuL(sbQE+a!DI2i?)6q%)Dk8o!G@
|
| | | rWX%p$2fnC(60C'%7eT>Qu?46hHJIlhXbR@jl9=uXiQ2,"Z9'8:oMGHSEm.Ak_5<7
|
| | | TN^>@WcKag,q9n?*8!PB;[Xa*+U%K[$W*7?25$`aR<:KJ_?`jdLu>-4A]gPF(f(IS
|
| | | &1"$l<9O@WF%sVM-A7JNdZt5<F?r_SK`G"rPB(o'$5"b>J=7$9`']8.\I+$eSI8IP
|
| | | /QIn"&3C!Fm#cNk%\^Zt)]#fg;A.W>Ue&YILN'"0b#'="pk60-dc"L^[o*?#Z@W,j
|
| | | \I"aX%WQA=LQFbAK6V2BJV5h6<.I6)JPh=/!:#<#g_neVCg'KFq1@e*;uqWuP/T1M
|
| | | (?FsY,e82Lb8IK!Q[nthQmb6de[23k\.'SM-mD7$(<M7iPi\^3FAL=gasV/nJS?eB
|
| | | LiA,?R8-8tH;0A.n:a-[lp=cGML=^ILo!E@<*%4g21`7mL3(._=ql>nOnq=6.1%/m
|
| | | "!M6V8@4steBF&"/Sf;?QNL9_ajGLBBlg54)/s2@eTC9a'?W!d``fDjYqM^W&@Bco
|
| | | ks'`pn!Oj/H*)e\6DoB"Q[m/2'dBULb1%7g+OhB)=_BJ?GY)-Ml5^`*m"EPUDg7$T
|
| | | j$u,39B3pNO)]2[JcNe26]i/o_9f%s:iHgD5]/gfYW&4E4qX^Pb&Oc!L!W2Gb19.N
|
| | | ,*Y\*"#?6a'>(!)Q%=C=d"<$J#WR*,N`/D\I5:%tCJ)CnJ$+ud;'UtcVU<u+&@l3/
|
| | | laq@Y@GLl*VLTZ2Pi"TDp'juo5uT7SWaldkFu!'e5cV+UT[WOiOK%a%V9A1`M\=Bh
|
| | | JuBVk9p04SdTWXXf'FndAdEqtT*C&*(esi*BEs2FS2q$@,qNVm#r7dE!'rDNA=4WW
|
| | | Ua3JnhAkE1H"&+(3_aZ@%&VE:>sYt[#?$R$f)*NeJXN0qH-7>k/PiB)<iT;[.`eX?
|
| | | StJZ8LK0g)Sa*?GA[f[^*:V]<N\hS0Z=^O9X+gs1<H,It[($3'Ea+fMK+(&Aqoq1q
|
| | | 5d57!]/OWqP^Fg+l1I<?<T:(0$Ro'A]b@&_lHWD@(O[Z*&&.DN'j7!1Hn=[`7H)+i
|
| | | W6>B<E$WG^fDl(ERu^g*!g@QgU`kEH/TiMRP>HI6TGsQX)bo";3_1Uhc?(3+;Q=Y6
|
| | | euG[$1lu%Kegn6(fSX$n1<1eZ]ot5M&&F%O+t5Wd#ko'd>]_EI:N9<=+knBh=R(Rp
|
| | | 9HA-3]^(=1>>m@hIulU_"O60O-R\^h?uE"i-pe`!&=bO^/3`;XFf(E=G).gi;<L.k
|
| | | T`8*dlEZ?op!=U(:`2eU1!6SSik&3&b67f+LG\1o]BbJ5DDYMkg+_lOjbf],5f`1a
|
| | | [:Cg!Jke3n_3lSagp[J$oI\VJKYm(8nCe^H^hF7Oe2FY6]n^S:5n(.12AbKOjFX.k
|
| | | "9>M73QF8G+-BNEO$1qo&50*j:$fh\0,>OTF$eHLa1llEr8t\`RVOh0L,f?NkF<$t
|
| | | n5as#C.es^Hm3>b#,Q_d)j90VdMqq/hBL2'h1cKr)!=@7]m-;/m*1*2-sE]S\ApL8
|
| | | rKSjFPp/P&U=?tAR`fcWJBnt>"6<1aOq'rSg\ZaSZ-jMj3Il5.)0S?;<du@Zr;Qtd
|
| | | -*38O+:J`Z\9,^]KJG+&UpEQ+`4Z,-B(IX[8ngn)["6cL66M#e/LWXWK5A$A4B0b6
|
| | | &_'Pd;H$-I[$>56aWSVllGqo\dsG]pZ`TC0[SRJ/BbEa7l:+aJqPLq49Nco%Ia>+;
|
| | | 4V6!LA%_Pjh]1ISo7XZ@h@QQ\57Xa&[OUg8(WUCK6#rWDXR`AMbNaR70_Zrdp):X/
|
| | | ThsA)aO45BZn*a(N\&A%<=uS.X4Km[#eo#\gsc0;n.l+i8TlBor:marI^:X3.6.*9
|
| | | U/E3cnL552TV`&c#*u1@Dr=HrCC6tQqW;283sOsZ_CVr[+<dTX>O=EGU*KsF9Eo;S
|
| | | cpn:GDH'ofS4_.!ji?<VBk2/.?n-m2oa-.KJ8SZ\3b41KlHbnTU'*K8+C-60Vgup;
|
| | | 8'&7p/?_AYn*jF\9bdipVI*/1F=U,UM^DRTJkJOp#EBZ$DB-X<":$6Ok=fF>0(cJH
|
| | | cIq<Ng+J1qc8OC4Wqa`8=l@0UY-')q*)>q/22ceHM!@b%VHk=a[_U[fJCloUapnet
|
| | | !q%?3/pRmWDW5WR`D)=$nL4F<h$adDTMXFZ,Eska](lguq+UQ`0-7k0T^m#s_Tspd
|
| | | !nq&oU0b#eEp76t76oEWDW*0\IBV5R/U%6;jO`j>fL)%Fkq`q@_\5^YpT>SO^kC`A
|
| | | #7#&R`B]1mjJ"+j+t]f=,%lT*C21m'!on.?E,-R)ML5ge(cs/Nk3d7llqX+T9Y4&_
|
| | | 3=_AmDOf>g&u;[j]0`$Nk?S,HN2bs.l4=6dC=He5Sjobq[d.s"JrDW=I.(j$Xc%kO
|
| | | :%7%7pts+U8^?h$WUPd:/3.7L-brQ_0bUq1jN@PY2_,:b`ooN]0T2Z_8-qnH"h,c"
|
| | | P\:'>"f$SOWt5]tghu'3"%=($,UP)S%fN7!=HDbA.5N#SJKCfiD"7!F;'mM[r(/@S
|
| | | '(F,Zao;$r^nD)&c/_ifJ7P;6L>"A*BuJ"@AFCFt'`V&Zkc\*1_OaJRPnt`KGEVU7
|
| | | ^eitRJ9_e%/lJ!N17AD:"EuAT+f(uZL*VOCk[DkD0Sb37,;-cnV&';j(?L3F&&0^"
|
| | | 8Fr#4f.,u6%=9Rem]#T(7A\ut/*7$>pCdop/28F7n+b-^599uk8EM>-b"V)_RhLpU
|
| | | `DZPNciH%eQM9m`0!6h#D@X_6ilEiHJcMYOi1-k33s6['-o-MdP'd_s>:4$8""*;"
|
| | | #\57c3)">m3D!b6MR<XAlQGe:mu]+0Z(j?WVZ=pN>OFgX/[k34">u/4"Y;987]:Td
|
| | | l=Q^;%Z(&2cnGmF/e05Zk2>g2k"5h#:sk9bdGWm/P8=>aFJFgZ,.%LmlmtMB1+bp#
|
| | | EMq\0OC9r`kqk#_]lA?\mss"7]$MY#.e(qj-PAM%&>2?*:,A./dJD*dSJ*R&$)R_A
|
| | | :,tOt<3>U-XsomQ"K+"s2\6#n]+Zthla5I7dbScoln./t!9B?!GXA\kEioIb&7HfD
|
| | | !*DZLi,)`WZNWh'ij."O8TSq3&Bd"lSN2=okKqf?##d`cUA6+G)[uZ*L*T-!^0NEi
|
| | | $#?F"Pp2N9^r)1C47UogY&*85Pi5U=8+W=F9"dd`q`&]r)/R_2&dM91j\^k5!AA"B
|
| | | 7hS.]k%<W+.'Hs-l69TB)*u+D$n3/!#ol7Hj?,'B1dX%b`2$qk2c[+D`DhgIo`n&G
|
| | | %5,d=$G^!d:GVl@":_LPTa)H*"eQuO<l)cg>#@jN80JluV`SaB9`REe:2C>nILLsU
|
| | | p/&ju<JNm5N<9oY5Ll,0n*=-Z;-anE):S"6iggrdOZp/_Tk4367"?eEl7HK!9VW^a
|
| | | K*!LE7PI7L1ISCI-(6P2KEX^\A&(A/aFZ(E-s<9b6WR]-p.]+!=>?QmAbKpqC?UV.
|
| | | eRkSD11d?<K%4L7>,B+[BB''B0R7>tDIfK<AKj'GG$S\^-7R!cBQgdtiYr,gQ"P^/
|
| | | Aa?QM6NVK9QXlE.BZe1JelQR/H<EjJ0K+M=(?oZ;qRZBaCA-b*[dl1sTk9VnDT9q;
|
| | | <rHie+`4YSmM>>4K%+;+h.kO$EE6Bq![LpWeS6<GA?^<,[W?FHZZ?\'DW:dG2bA'k
|
| | | pp'Q^BpUJo`LCgi]lb_>E;(es(L;*k1I[WNFSBn_QR-Vf.s,aPF7s6iGDgNChf#uZ
|
| | | G;)SO8/CXfI<kQOF`tfMQ_>@a7s,W3G.+GsQZ6neW*-R>D\pH72T'_3r\=WcEAob"
|
| | | p.9\A5C%HUH+)mb7@SDM]mgglBc$)_2Z\Dp[<%]=C6sX)(YGLEH$m)LJ6.AO="H>u
|
| | | "+Bmo-S7]7G=-i3"+k`lBNO5HKWf^R>CQ?5G$$tLGJ/P$f4F_1I$]20GY<HD_1cAD
|
| | | ACa1jK(EO)6%rDcLGmt!__ZoI-[PN.LXsq'(k[F-H##C!Dg(eaK*c[&T88frM5]bi
|
| | | =#k!9(Q0+RM1[*lb11DI[#WeVDAWsspoGr(h.tZ;JS7c7G`.LD(2B1aNN&P-GXl]i
|
| | | dZt\0NlgYVph,AljGqigNL0Tn=9"#BdrsCRFL`9O3<`s1nrq`GIjE-pfbKTb*Hub%
|
| | | J(Zc@(orir6&rK=P^*@hekC]Uqieg4HhehM""'a&.?gu]Q<8p',9_rd@?[(A/Qm:^
|
| | | )"j(n_fs\c=euR>po0W@;j$'\R(7X-q3..*23RbcQeA@'pu>o&R?s44GSn>V\[-6L
|
| | | ".4sSFudU-q86q/WGn6k.N)N\373h2Tp1mo9_gE+2['mUl#o)[SJaea6>LY!0lU:u
|
| | | S/M?G=C5p5bAoWWSeu6YGIqCS#@ok?U"HJ'RJ0.65G-VoCLgG1GSd.O%AU?u=dJT<
|
| | | `<g=jZ(UeWR!M&GRU)_7V2!\#QC#^j\h0"R:j'=K@Tj/7RV-D^':5TnV,ig'+9~>
|
| | | endstream
|
| | | endobj
|
| | | 24 0 obj
|
| | | 5542
|
| | | endobj
|
| | | 22 0 obj
|
| | | <<
|
| | | /Type /Page
|
| | | /Parent 5 0 R
|
| | | /Resources <<
|
| | | /Font <<
|
| | | /F2 7 0 R |
| | | /F4 8 0 R |
| | | /F5 9 0 R |
| | | >>
|
| | | /ProcSet 2 0 R
|
| | | >>
|
| | | /Contents 23 0 R
|
| | | >>
|
| | | endobj
|
| | | 26 0 obj
|
| | | <<
|
| | | /Length 27 0 R
|
| | | /Filter [ /ASCII85Decode /LZWDecode ]
|
| | | >>
|
| | | stream
|
| | | J.+gME)=>9"r`LkU>_3l5WBYj7Dj\tJE18F)1b1"U_H'n3Cf`onhA-N!\-[5ctG6q
|
| | | E&SRBL6?P8/8Zdna,5U3dG,F?'G+$:F/dCJ-QJ.9Jrs`f?o&^\Ku5W1geqE-&qNGQ
|
| | | lkk`iJJqqU!`b30-Pm4[#B9ah-8lDK6j9m_(s!%&N$\XR:tk[s^'H)AquufoJMmRe
|
| | | @&n8+iGuS;YbD0.`+bFOhX+HN^*=@3Nlp^/l%I5.15S`co8u=(ctPBV:'WKS9Zh3/
|
| | | R*FdR+k4MR2k5n;P+efg1q*mJj#muPn#\ShpUfqrbi!%eRS/8fR+TDe3Z<3i:,'[^
|
| | | /<e222(^N9.2.m[-StlBYekJ8&4g)*Tp@;iKEFK^0T:X7d+sYS!6@/0,I@<F1;SKS
|
| | | W<WGhW$2KjLh7J/$G*MH,`.sdPq6Wa*n$ooY\JlH.DgQB#bm]b&-sJ!M&H^&J=%U<
|
| | | @L,jNZJhl9,`1N"5U;3'0V0^"Z1NRGaDrgoXXeouiWV#p$=k,"Mbn)b":AgUKrmnU
|
| | | 'J"h=E]gP,.iQQ_/E)+aLkb.LfZ(2^Rd1+X6'@nX\H)h6)($lV*1VaS:g>!N@@[N>
|
| | | d#h9e&2>_@n@4,bm/F^q+fihrVQ:L/78]*,"])DR%4]@LoYj:Re?j10jtHh!iC$Y0
|
| | | D'(AWiPO*_L1,t9#q?W#BjOQ61D2^uN-/DoV?*?-^r:)0AQ)Y2biX^6(91j);:Sr)
|
| | | aBB7JVR6W26=WJa<)'c1_KIf=G$J$aa;iBhOsslriNR>?LA,QTF'j,c#TLW\q`f)L
|
| | | +d?%&-/ei?(f5dNEYpB-6O4T'nP1L3iqQM*HW))II'gs273P"GF@9:K=Au=D8C5k`
|
| | | (Qp<e3,=c*6(SQ)LC#gM:#.[mI)>)-[RXt:on@NU,'jSH>\V_G+YI$p<J+_j(Ih*n
|
| | | #<#BnAmprFUN=rODLnK\GC@$/U3g43B$WOrc"^%qS0XNW2VmCa0tZ<*ZI(VPDh<^C
|
| | | +E5#%29-0E1AkB]_<2YU(SKbARb[KX2f:R7KH/QOLEa41R>0<S[(a=a2f=IIolrmF
|
| | | Rnq+23E^>`eYh,D4i\;WEh,90@0P4.d:9%39gt[VHp,+&0AK?U](qpNSQ!_#QJ&D8
|
| | | ]'lo.Cg(2F$-mBS9Y@'-Jea6LT-V/B:dK[Z(>mfLBD6f2O43dtGiI-[6%[p&k9(_1
|
| | | "b<t;Ru:Z#j[)4'%*dWBpF8S]7kH+::#"^qJniQWXZ),D=:;!RE,H#Lp]>$!lm.4[
|
| | | \@if9VQ6'b;HCrn5r9;<^XP9&J>=k<6UhLM*Ln=.&FLF<e2C\FF&RijarZlQNscq$
|
| | | %t%4a-::=qnR@G+Ae8u5Yt/R?N.`p@OSTmu89#E<Uc!_.ShMkJT#)<p5Z)IU[N)&'
|
| | | LBsn1>>B1C7q*g?),f0A.g=WnAXsm/>_O>?=p:"N-NRL&I>EY5=\.OYrCff*4b1KD
|
| | | W:dPF,a&j/KF1+<1'K"4n1^,)k!qq`$;;aEl;qQtj@@jGik`R/N^n4_85c7(-..'&
|
| | | CPGD+'nlD8Gn_G8]pL4b*/`O_pa1!h8J&0GXI_dfKaK"70kN,EP2t>cEeK0=7?"TM
|
| | | e<,q_9_1u8d)DkmS3+'IL,bUO2d$R]@ZKkU'*`UiAL$VuZeg06H2t49*4VE#H/kbj
|
| | | Kek#QSlj(=qoe'_<$+4$.7tpU2]*?#P5P'C^uB0-8]GeCgD$An9W([-0#bYd+*Pk+
|
| | | 8B!I.2bC*HLugf?dY-d5RPJo]P]YDR'a-lrR8B98p_m*=NgCH2VNhTN?W?c&601C1
|
| | | >r7_F0T*+\M1Odn7*VcuQ#0+NoRh^;+UH5:_!<*P8"d),Ib+b7Ei*V9R?aeIT#)D_
|
| | | N`BM-23D)S`$\_<e5*9PI"bGNS@U7%(pUJDT9T3h=R).$+c*S7bO`8BiA,k0p(go9
|
| | | QsWS0K+:=GI;-5P\L[cf!*&LUN_aqL^Z3P.WAPTqZNN9k/^`@_Q>'LCHZWho2'%:3
|
| | | Ofu+p^EI<:12FmomRq>im*tRlE;(eagr3['XTE#nMfbDRQ8rV$S\J.b/u;3SA:!Xf
|
| | | lrJ>A8'BFFR4g\H[7tu9gDQDr?TZ2bc;(t/"]';tF`kH6T%'b)h)`Z+p80+TlHs/U
|
| | | rD`;@BJ7Md5REd3:PKjpQPT-t9(caJ?49K:&n7fOV1IJu$%`[aV^:(Kq?op0I>mtg
|
| | | 2A^Rt)?MF<cK?97[P<e_&NOLB8bj6*ibD-:Vc,T.c.55Z6RBma0nu@.Pa0X]d%&9]
|
| | | %cq+Po`TW5/YC+!'/HU4AI$eP;LPR^>it&>%N8)79PM`ej_=Xf)\_t7``k+MPl3T6
|
| | | (0/QA:l+=op-`=T;4$>j@VD)=<HO?3J?V3D(6tqgkY=Hpon;aEq4`P7Zj9U\`2M&@
|
| | | D5SLD#bno<Qm'-_?HR^t81:N@:ZqefF*f69\rN(CihBY7:9W1o8K]"scJVd$F&@57
|
| | | B=G"<U3),jfa"]_BKNK'Bd6g-Cf7#C*HkD)9Be;F/JW&,;$$CaVLSInGS;(CWUt9G
|
| | | ?dh5@]NfTbj.=EB12C4_=\6A,*bO&nY@)%b;8W#*B@,.0@Um[oT@oG6fnUf$B6KHD
|
| | | gS?N6lr%)pde7sldEHV^9lqmT0T[B]&:`jlSu'FYCmG;]bd?Z6=d^\ok'FDigr7P/
|
| | | Y%l$<_2O,u)ch"AGG67d^$%SM0D)1][&MTTITX\RFaT^\b)oMir8gJTDM$umK3IMU
|
| | | ?6`"Q-doRY+&CtKbB&j%['&,hV>YJ+0C!]:q2E>UMTlo-56>'Os+H.*X*&Gi't@B_
|
| | | +cJGA/8XX0pK;E,98L"IX$`8/\V[/J>m@67ImTK*2l0M[.ugiPO6?/7NarleJ4T@n
|
| | | c=)onB[Xam<pRdh;tE/)ALj/A+,T!C3tD%ke(8i?20Sf@%;=8(b/,3aZq>F0qNhWQ
|
| | | '*=Fk^2j;CM/mD*FgpqPb5!27/O,Jb:&7e\lhF=qidVK^r6+[Oo`'EdqoZYMVon8(
|
| | | _BP#5qG'^r&.&)BJGHB`IS]t:7P+7k[/Wp@p]c]PBu[$i)OVcf?m[40UE"n6/7Jo(
|
| | | Aq_S#O@F9s(0(ERI?7A0Va@g>7WYQ-HD:%7a$b!)Pm5:3;oc1@-c5FJVQqn%H3]\V
|
| | | :l&9$5(P4?"%I<)L3QY;'a:GfA`dI;0W+M^S6uCDXD0a%CW:u\GmQr)$nUIUYg>/+
|
| | | %&8o)FGH1h.%LQ=FU[DP%0P1\+rXoeb602Z%dU-_nEuqU5mqZ0B>PYuV`Mps$P+N&
|
| | | 1p2T;"?;s0`m!N)QROt,`8i\W&n5S-PGp<c8!;:L*>,;HJ-h[18J)YlBb\Nu`p"I?
|
| | | 00k^U9bU)"Acp9R_bh&DJs)sTK^i+[:P)#RaFb(R0F.Yi6Sqp8MEA!GB5I?dO[()m
|
| | | Q;QsG@aT00$n=\cWnJYeHR$b9OdmUMTN@#>>Hs]2BR:_0juphY)90Pa-O<Z6C6>Us
|
| | | I\p@HL]X.[[!]">:U/t1&a2lcV%uT?.Hr>Z&c-=!._MuPR0c'KAm?\-\<Fs&_<]7C
|
| | | 8S2r0`ui>Ge>[&4&P?E+<0`/^\Ihjtj".smKJ3WHYQQe$;4<PZ>o#l1<ll:(kT2So
|
| | | C+n!`EH5\6`rbaM3*7`&(/dtM;(,8?q'1K$,]]&].LdZ_-R6L'&u1\^;D*TbX!pnb
|
| | | ]VYPa;MM%ug^OknEoLXRbUCY%;(Tn_-#tjhdNmaJh%gT'^/>HeMk;EGVHC+sXDDE)
|
| | | ""oP[`@nK]-A<6C0u>]eq^(f]+<pSfE,'EpC6oOK(TBB"VfI5Zm2<k?iT0jYJfrWY
|
| | | */CAJ;%.2\OcWFP@Wmr1EmgPCP1;FkKeK9T"#,EbinQP6V]Tp*Ni)D,;XUXWEc3:!
|
| | | /[ID`;hf@&+INbEr=_AC-''(H$QV#t3XkNsLj8XbSgH)!3tm<*Jo*TSp.P"IE@914
|
| | | $!B<1Hprnn3J.=)d;WO5[UM!mIZqRaM]3sX@_qZs[PRLh@iV]djZ5/7;.]`fZfF32
|
| | | UFUF#SQ"VNbcFQ+r6/)'1TFp?OYS@ai\K]HJ?k?2bi4g9`d"<sfG$*d1JKeW0.A_)
|
| | | Uuq7:%),J9)`<6&H'-<T:Ye;A2ZGN\=R0$V<-IC;oT5;fV39p2C*-!N><5^?)j>_Y
|
| | | '(7c\jS)VE^`rJ$cpVe"eOmu60XEr>L5NNqU-_cWG;R1U6DEbG#,h%e_IVr^'2:/)
|
| | | T"9$U9WOmcCd=u,]hN"g:CJUF1P\_!IneFt1B`:_1rV=OS8opO]TIs:Zn"Dd0PfuY
|
| | | 5DicS#/$/]D,;E(;6#XO6o;jT,%&E=`hi>cK.d'p#nj+05ZB^<Wut/+s%d`CE"tQs
|
| | | F_L49Cf2!YId28>KYDXF=K8_rED1XYohS\a@[ArQf!Rnc1r3?'AgTAo23jn^:jkLn
|
| | | =]uQ+dO)\/eKJ.N(sXZtTG3oML;Lo/h_rL]2!\Vd-Eqpi0Hrse0Pi(D#'Vqd\mgA(
|
| | | [n$k77U0fV^h`'d4jd>=91N#Yj^9CD?t*PO&$64[(7N]6>%OQg;Bgb^5Z>Y/<la/P
|
| | | 7M,#8^2,Vn.>^%tFg=r/>sj[Y[>!'U_VJ&o^LWM=F(TVp.!]=mr5Yj2@`Sp$ep(.P
|
| | | 3)OH%'m=D3"QVmj4XWSE_j,I#"W8i!=Oi@F4`^NWadZiWX'jLE#5)mu'"^:"2cS1\
|
| | | 0f$j&C$LeGLLT6H@kVr7M8H?;_dc^C98EZ.;OM&ET24g+.TT<S(*:d8(,<.i`C$$Q
|
| | | npmQqbet*IAdGhKN$`$+LrO"tA`=?Q$pcgKWZjbR\B5/E;.LkP05q+\pbtNr'sUR"
|
| | | ]OoS+GYu%a!rS:KX'p#GW'jWo,o6JW5$L@F`p7_UCPJ[dc!NAaGS.)_9_!+<FI3Y5
|
| | | G0D7B[IY/%jA4-'CBF*QWQTUfIe@]$GdhS0:^JfF5l.r\7;>hH@Mp7H%%t_m&gQ3[
|
| | | N'LbPP9!,&;)c^[UEn%5qb$84:ST3c(AD^b<3=N;=A5)FCC$"m!e#cV'/Y*8kk?)%
|
| | | D1S^:>q3up8L&hC:9kDChfpK2_C2O$_^*,4-F]+j.i)@rM1\X';@oMt!l5P-RtB-Z
|
| | | ,*SRLKRf0V7e?)NJCI+H`?@U#,7#X>LW!0#73M4uoHu)J/a!&9"t'J>@a0OkZtH\0
|
| | | 82H+&@]rm=O5iB[XTYTgfOuZTM7#mBoAhb:10@(M=STLf<S1pfKS"FWY#DlfG[c(M
|
| | | +cK&QNGRK29-?bOJo!l0<A0D$BfSi>$@B&,La]K`3+=V<J?Y>BOr5$%=W<5'"c85m
|
| | | 02+*[3==&6k@g4FM(SZ#R5hT3B9'll**>hUiadKU9o:C>=ALj'=RDEA-HuV_r!MtZ
|
| | | WniuhVN\PaNu;\>a,6(=3l`rGQ1oQl9.oi3G'bPeY30U]=BCiG<4$nilFDQpXp(%,
|
| | | r'_K7S6:o<9kQaOad6J4.9T;-7-bb:?_+.>O#](Y)+U7Nm?4a5N^aR0E#k!oG.W!e
|
| | | TB%h-Zj&0Q'W*]uTK(f<==9a&V26*'1Y5fVRJ_(cm=V6&TXlt[`&3LP9NS6r;7[Mr
|
| | | jSYTo0$H@#9T?!PWH+c$8r/,TZ4XdI6GS@cDV3*o3=KGq/XW?$cu@KaV`EI0b6[]R
|
| | | kGEQcdOOaZd:9-'=Rt-o>rXTpAiRfr$F^qW6H54_pEr;pC8(L?J<OlJ0@a`7je-:.
|
| | | XUR*mR(B9,^2WQ$X\#Xh)J3'>;idC.@9P9``_7RHS?7%>:'Pc_fUoCYC7s4mNl.,)
|
| | | HOkJUSm!L-KVoU+1>A!mLhA[W[+T%YRMM56A$&ra&pl/R657lUnO'g4L>!-C$FDP?
|
| | | 1UYlPW\E%dRmj_8+EkVqN4VN4Zk?jFB="WF@Z'3O`8nJ^\=U<nZ7#g3le/dO,C(3d
|
| | | Xa53&ASWepjCB`U2Y`.migi#COesOkABZkR\C%JU_Y-C;s&remgWD4*0tf$ZEd.q#
|
| | | k$[N:'5=LKM4="bGS>)lbJ+-"(clsr3&7-CdbLkl^)DL;<2"r,D2M,8.V"gR$82;:
|
| | | _8/I/_3eTGnLHGRO/#fq^ZY]]L_@433E-sjLfSX)_Ab0Qp`clFc]$(X:;Z-5C*GS*
|
| | | YNh=kRJu=7*b=A\#98>.I"m5anHM(SaZM+$A0tMJ/%!7kp/YL-4JR<OJ9IHb&[5_k
|
| | | ,&bTRlc\:b>q/VC7O]?/_K`FLbDI94bc[b&lcQUf[)=</:a=/RA95E7Q#Ud*6oM*9
|
| | | ettR<P:gsDSB4j#qfUZS.3\rBE[G9_p/jH9DTfl>N&B#0@`)5,bEhO<I/D@[5]E5-
|
| | | ]=`]@EWBKIl$+28<ii$Z4;;7`UWXmMI-!l/-frbOOY@1c^BT)0gp>V&\TnG1&G_I>
|
| | | W;8[=Ut$Hk:&P$$U6Wk=ruQTC+e>?[[Z`ed$si%-gCmS&S?(;4Qc>mCSm?8S85"#\
|
| | | 1j>L0EdW)eI:10d_Lo)(B53dM*Eh'D^;a4"e>7fIl-!E[EHGLde\.&gSQ<XuenXdU
|
| | | eii3BWRK[hS))lZ3>-DJ!bsDOmo-faga0[\?6Gg[[TqXUblXP@dj'"^mctj,R2M7n
|
| | | `>Mfu)9sO\f<'JKrMHqk"ErC\d5aSF*dD%>G+N#a-(]hQN*4.%P=rVno5bs\7G^@;
|
| | | >/N[;Uuhk_dkBa#6gD^ue%J,S"?-uD`QXkYLH`TmhEfFNWd`"LLPm,;?Ii4"g/d(e
|
| | | bm:u/.94pFj6>@-a^4S[^73!jn3^jNk^:r:\"YUKg-]I`fKU8@Q0<q8]L.h1mU$;X
|
| | | h=MjOEU]LNaBeFFoKDVA,UNG0$_s#N50c0Ym0ul:lJ/4lrTNs)>_r`sopr7(UrJb7
|
| | | an4b@[YcC&k[Jam_C8#K\L,1a?EPb!E2["Lpen$arHIf1@JFC9nGY6<Y:Ia:9VC51
|
| | | l78(FI\-hKA0E`^bTbL\%$_#iE<F3e@1tabZNJ#J,p$C4=:F%[Bk1\!ol1PObQPWa
|
| | | _>k\t$q<SBPRq@J2M-Zn@Bd7^1)n)<E)D/6&o<:iKu6d+2?Y`Oa$sQ9R"@1)LQ)K?
|
| | | EO:C,/fP8?,Deg+="TcSjs(JBdVUFn8#-5qJE0rk(s-C\W.[bk0H:ItK7U-_AhFuk
|
| | | -Zpl"aDi)WNTu.P*"'>:YZRU,0poak2mcQL[<`Q_IPhtr.28dngfuh2%V>e,o`DBs
|
| | | _%!W4ad#p@1)aJp1-%1\,B(*5@aU(PODeaE`F.&L\]u(DQ]jfK_7[c4PKml3:mbA2
|
| | | ?WrBJ@"RUUZZ7`=%;PAp[$FKSU^ell9J"J)=QT-n\9\XrA&@54.5\ZG@rsQIf<2L:
|
| | | cGtiW[J?V.+gqa@?a0DYUHWf=kr%qt+L"M%N4upM1("mGWO!T15\Mt_kHYCd-Gq$$
|
| | | W^t?"ko2td2Jr?TpHB$1%be;W9$@i(OW.?P[gJS`*5Cr@k1d6kl=h%fX*XLFU$m;U
|
| | | $&/JEAJiH]>0sQ8Nt]bQ`f]V:X2Zng>4*h2FHG<*O,.c63q6-rUGQaY)Z>EV+DR3*
|
| | | /&]6p/:imjO\52fbooT="1p"W6C^ga`A5?B)C4Zio[':&@g&2D0K<O/ck=k%V,+4_
|
| | | C)S^!]#'J^WS;bj/kJbS(t$_.In<INN>k)6.:k=>:>q[B4J@>KqNe9MX9sRaEW$$+
|
| | | -80\p&6<O2AQq1:9jXXH2<s%S#&'!92C#C<:6RRO;V>M2o+d=#=`(jQ@od@h93J.b
|
| | | <ETu<;]'Fd,"bH]Rp1)"d]&u/@[\9kXEq'W.[F'<AR<KLnFn08I>(a.p$HI80UHlo
|
| | | GW40\W3R_*-4_i(pa+/A1AIT,]gifX*g8c'p,P%`BR!u+[TOV`:>V?,Dh).RIDn<R
|
| | | [j:UA#9f&.BW:HKp`(rdXeB9;%N:h0j#RXRK03+;'[YE2V3OPLH@U"70hD39UokVA
|
| | | B6^Kr7YHi_CXSKQU)D\lOhTQbL7#[-DVK>@M2]EGj_A*bAL(q508&UHeo_/73s,Se
|
| | | hN)CqK\nhcP?2\O>FhA+mZ-5*--<TBUH`24idpZd66i+t9gr+r>cTWfM.rM,gHj];
|
| | | MhS$L\jbtqelG9m7Gcj=*L-*qR]P<uHom_1p+`/Ehei?oAs_sj75gG*pK$*=U%9#b
|
| | | NVaV^eQ;Ot<mSKq$($F7q6XCb6t*f!\b64D:5,^pCERKdBq=G%"m90kQ>;OpRP0Fc
|
| | | LJ\_`71'HTOlJ.W>&uqOT]@!!L3a:@igWqZD+?D6?IBt<>?rb-\u0.TMI41(0nc)g
|
| | | OAu('QfKM:@,/H4Z=K#T+[QBh7/<es<h^Yr3/9mI)Ap=PJQ5%sFYK2g&g^ii+lS/(
|
| | | kqnnt=GIQOK>D$XEOeMO=KRF*66YG]X/Qa`@#JG5N)<]>S1!f,#^fiS/]C+(U,Z#E
|
| | | X@"EDTSCCn:gkTe77m^iLqebd&Jaqa.kM5K`(:MEP_<(t77bLk,omj9jD?R`;ADPC
|
| | | 3uO"$O+rb)0:"@98)]t>:U+LtPfTI-Nr,_dkCG7LBj29QiP@'#D@"CKUqW;9>UrZt
|
| | | ?E%H]-&D.+3CIts(F^pT*YaQXF"lC2GpJ$fbdiSY0_6fjfe"I+7[mpRadhSp+jZrO
|
| | | P#;3A8]7i6jFO.rVRVb_eTirAF2F-)dNM3(Nc5:Em@8u!;,23&0I"HoALWcm6eQ;?
|
| | | Te-dJ@*$U<=hp5W2%uEi.56kS9%)e,UmCXlO%86e=]#M:.We9s:H2WKWDr=/n+r7f
|
| | | iiNcf@2Ej=M1%/dZ;Luaqa'JG[F<Pq:^qCTCB[n9)YbkR)!)g-CnZnXL_=SCb;uJ2
|
| | | BGd.+-:lCu5)iQUarpP`cKJFD2UEmV_)fkUX!&%T't"UJ)Tso^0c2HA;-'>iIRh_p
|
| | | /L.Z>PE<BN6*'QE+OA//+B%E-eLG==7,Gp:Vr_@o-oYVn_*kSm`gH**r3K'',Eusd
|
| | | D@1.';lCbQ-G)rDD*`ubN,m-GHT(o+M0^r^hU&E`B5D">o<luIq]7WSE?"#<.`f.G
|
| | | VTV`lY"@Cn%(>)ulUFaoH185[`?Q3t,p'/s!)i+GV7\<FH^EEG>n7Fe/4+i4Y='$b
|
| | | p(mA#G40em'nq6_R)]b!fLDql4t*ERK.VHJ9hYj,[7oYc1$^1qMCmDj//&5PZFb/H
|
| | | Ad3#[M#8ur`WE4j5%PKRhqo0)=:i`dZga+\=0Qa:U95F\`\RFcfp#D$6TZn:X`(Q[
|
| | | dncWK1M,gn^_L<AHL_O(.YN(DTNmP;c$A3M9\LcNk6V<sIF^"s*uU[$lC?-7beU]%
|
| | | =-XE^as@r0<+OGbXQUsVj-F6#N^0f_K,C`[gbQjW8YhtjQ^<m'H799i!hIQA%Iis\
|
| | | cps*Y_.(BRf3Wm@<(UD'k*)?3^&eMK[`,fKBOOJRcHQM?2/2(#M),df:\ni!jifTX
|
| | | Ag')B),QIW@_5EqHOA>(CFeOPo7;$qW^s&&7d7pFW[n1lc<>7h("ei*Es]Q,Kh#b<
|
| | | -BbIPD3h*r"%V%p$?borXXj[,_/'0D9C*nc/G@%:=LZLf6&t$+>>VUY>TUB")Q8r>
|
| | | 9X$mQ4-CJ7^YJ@m9-='8^\;42+S>1aXJV&T(U^nKbmT9iGf#aYW<U#gl[]^*\6LtB
|
| | | )Co%YpngKtV$UKQ_eH:onnKhu/W&qX3ZZlg/\$4hq-[OPR289'0tSUR8P@k/8E[,M
|
| | | 8%)mmk2>5=me2-f&?^eD.BrH?>r/1_q$\]m!Wk#eG.:8]=]`r^>rhWSek'kQ1?KIA
|
| | | <g*A\$2]]b"u@rUKico1B6*@:oTq[L8lAZ:;PQ]#Y,m(nho]e?n5T"dp!VK2=kRHT
|
| | | .k0n/rq5>6mu6c7F2@Xcf$,pQjX8%Op@qD]jSHhdoPF97G]Ln'Q+rjTh.,$;(L3[s
|
| | | DlBtU8&KK?gtOpZP!<cUh[r)$f0&:Hpe(AGT5,j@^(W3%`0q[.-84kNCR]opf3\-)
|
| | | EhGu\/9r9X4K&FE5KOSUq'['@ea6$)^)hoZT%h0[hXB,[5IbBtO1D)6*UEX8cFr8Q
|
| | | 4X8075bn^%pc`,4ZIAr;=ookhF=2m@.J*3J46`l;#!RUo'j1M_*!nAnk`rBS57@`[
|
| | | ;t@U8)aIm[5qn%bF:UVuh])(^5-+NEMQf93ft[%/5Ecg.M-C]uM'`&?M[Nc)ZWWRb
|
| | | ]9bgAQ3)u]$g&UocOIC:N-QY]<$[?;.1D^L("=`?9I7OVh*?6\]3ue?$6d.%/We1/
|
| | | Qa&*Z36/p-L-kJX4X&dk*%8^,pVU[4_g.$!MV5`=h^qEK6QrHkJ;Zf(/uP*q4+Rd-
|
| | | 8Pk]YYHc046t;q,j!g7u2%HDG#jO<9&C<%g$GL=,MOFo4j4tmV3(4[V*Rjs+iH7/s
|
| | | d36RL`8i>b_M(D,l9`-Z#WtpPOG?79_]8SV#_Z>;0j>!QPT0eU5I<&^9N&K]AX,lD
|
| | | $;qe+Cf<FujpF,S`iu>V#e`CEm%6T&7[Ym@j2/Jb$&KXB5TAa>A*f+/dli5i7reGI
|
| | | e8n*i!]j8o'jP^tiW["gm(hS/5mp[Aqs?Z8J0;3.$:q3f'<%?;A"\]f#tsCqZt-u[
|
| | | M%&0r\)GHMJVPkBG0"cB7[t5,e:^*j*C7&UTT!MPA:CU8VT)R5`u-csjHN/tY8QD8
|
| | | MHY3pRD0[D'18"U[1jH'l9.\NI$QmCaCKin>_P]/M87o"b"0DaZsq%nLVrn[2KX,9
|
| | | l3S@SV(Koo%9.RC*/R5ehb(hFN[1Ak$).^17`OEj9-a-rC[@HU[R%!?95G7M',qCn
|
| | | P9&-ialJ]mKU*QVPb=Oo8V,:*gig_3RR&d$R(SR'ath*nM[PJ%RF8<4r1$A)P!&@X
|
| | | NPUAaZoPhTG,Z)j7uV=GS$Y@i?H>-V$tJDB"E@/"4N$sG\l@5dJITP^U;l9D^0I-s
|
| | | j4V[.R%*0aM?/.N6uGIRLHY:h8=7%>gdTKkl,+s\_$o-nR)LhfWQKU3cCo3qeC[N8
|
| | | _bPl-\L_okLl]8#dZ43,TUClN$g^&5f[#r&%+JTOjGD,s\4s']7LVV@TW(VQPL&%A
|
| | | apcc3R<d!"i0`TU8^nVK']Vq._oJ#8c=Fpg6/g-W),:%N:+C6(V$G3=[glrC:g3W#
|
| | | Pj6?VmS>fncQmI%>jNLLYK_IocXd_Q>l2R+kKsD8`[(u.'b/R`&YG<J^\mcNaHFo5
|
| | | *5GLR."Vg68smj[F,=;H(I[p(ALt3!0LZ83dd[9*"C+k;>p8:._AYR8aKlaXWQ5N'
|
| | | .eP;_/F]-MN(?jKZ'@$L./1n1LnSrT)c[^$0W('#rD4bu;dpf5[%J`D5p,b2d%s#;
|
| | | XB!Wd6W9Hcd![^ud@s;HMpiOM:fU#AAPerF!_Zfd;ai:_bsKqA2]WVu5j^$f/)MN:
|
| | | Wmia)<>?E5I65pMKi<t/TT":-$?/oY7QZ82<<Zo%":,XeN)UeIe>6HkZWL3Wm0mFN
|
| | | ;E3FZaIh!n-OY?8eQJVI<E0K.2omR.eAWoee:7lh=k2$";6=75OH7l8>ZO!U<$^;O
|
| | | b)XYcMoa.@a4R+cF[ap48PC-de;Xr9m<HCHrRI`*7X^(o)qrM);bW0Bf!rU*1'1.W
|
| | | F#mb3<CMG!YaEl;IFSL;=%'Z%`DY41>=`%+eqH`FKm2(lHHRJ]<],2*?#nGI^-I*c
|
| | | ftCb@jdXri@C"F$=ES=\F`pQ.!a+8s=!aY3/W<F%crT-`Q`WnSh1gg9n(=tT<&g`"
|
| | | [*V4@"L5gO\GI,R$eUCWiQ1=+*/%<!TV"DPPM:+%2S;9/PgH_(S_+dOL_4b9R;7U]
|
| | | SYquIg`*)Rl;?;,T<Y\5N.&SD<Q$D?To2pj#mIZ#Bq:s=pT_fI*KYjnK<DF=^g.P[
|
| | | *coB0'&KRKWZiJ($#ln5h:/+'b)"U!%UfuU8DuRcS\8f?grUGTrSSO7?40V1YXQ+Y
|
| | | S_].X0/uLlh-c)!(ttKK2r2a3NQ'Kl=J.K.di-3T?F2a'^!Bc^d,,\Eh^ZiW39&b>
|
| | | SJr<]hdt/AE.Zsn^KWuA&$qU0IF8fA[?bkc>tt*$.6WKurEX`n7J5H#@B:.8fA4-N
|
| | | PM"kH*S9-;<&]*7O)Y-:+Lp8W4c#[.?;hMDQ3i`t`nl<R?supjFhrkc'UU3U[Y=ok
|
| | | l)!7ZT*]*D?a]Q5Q2MmJ%Un2DiV!1U*VeEm+lWWYSo^s@LohPGap<t.X"]6aA.=P:
|
| | | BJq(PM7JHo1u&sBKrm6_&bFBY6VOuNHXb\(;Q8m>qh1"/.Z2X\(WJ,<nUb8$LEL=<
|
| | | >HTpF<]jj0IB:FP+O2t^mQD$SZ"&Ao1sQnoR-WaF_.,)GNIDTB<\?2"2@(p,Pt"Cb
|
| | | %Q7f\0]]3FjM!s`eh(.c',)tXieC-kM!&7^23bAg)G#LamSLT2-n-"]jfTq?)f_YC
|
| | | =d6!p@hYfOU*iBp!g+Ub@c@5(6?/9i&n;Y\RkA=h#%Zg*.h'F15X%8><I5mVP>1=9
|
| | | AI`/tp2EX)6O@@FAc*XrSi!!'gh-O%O`!QsmOREX9\H:S@oBGkSmW$T"m$/7a$tF<
|
| | | $;oqlJ``Zb[l/c/5%`q>h'F+K*VP'l0jkc/M2L'j#araK3S#4JN5'YZ'=b`.:_5LQ
|
| | | #nCo9JHO5\:-AoR?-LJh.VWb+TVJ$Rr@GgbJ5@'`#*RXq5lh1TBjk(.h<GaCS8"Bm
|
| | | 56\k2MD35er"WqG%9Aj25eWK?U?\VR1N$.UC+tm/[VDdj@ed9EbWopuB^-Io('F#@
|
| | | $#SttSm@aBCHJS_<)Jq^kj)r7Q*.Q1er_A4p1^t1MftWV(:skWVX$.TBdT$RM%&Y`
|
| | | *okfY-)"m0_C"NE35sQ7Q2834VOhMmXU(Mkl!DFmWA8:]c0Vm8$:pfUR\WGc\mkN[
|
| | | B`?-`Y1/b<dYpW7YWVUGJ_<iUc"sI*D2=JaIbbp^hJ;sO,AuFVY2O6h*:>`:lhIq!
|
| | | &f#8\c59ZGDHMY\g:ZbHU^n6bm_7F00XpK,f5='sks!.)*(s6k5-6RfP@dlr.))C<
|
| | | ZgXL2l0&[mrm:"\pE7TbVNFmIc(u=rpl3ARl^]K[q33*AF@6?0&%;Q.6!Z=m^M?B^
|
| | | N"3YlOd=S]#+jg6M3eV8JT@J'\/,Ycn<XRs`Ad<'"`VC$M?T#[:C(nk;M]\7Vr%l$
|
| | | ?OZD/;t).F<@hXZWd!ufr<#*9Q32o#<8'lIdrJ`'NnlbJT.&OKd:<<t]C!R9W]Mbu
|
| | | /WjkQQWj&8p?jr8!^ZYh1cDtgTqf[X+0'67UNr)E`Ju`<mLOJG9=D8!qMkju1`4Nb
|
| | | o95t3iWtGM$#\b+clp`jgCJBsd(Wg&ZtDSD>uS%)6n%4h8Ef7nQUJgb5EEi:.,`5>
|
| | | .8%-X7k!=<oe,b+_$/4;&>`/t\.f'QZb?"(K@-7e-BCc*"d'@'6$5RZe4WK=O#'Gq
|
| | | NfC2lF($/4r",8^3qRFF$e5:bntgCVHO@+:&*ZXUf-X=UrgK`<Qh(X,kb[.VBVDCS
|
| | | _u2`B&gFM\Fn'Bnh7lSu!h"7!$/&R2@CL>La%49VPk'Zq)\fB_s)tEs2T,=LF[(EC
|
| | | k>4U27_H6`p\(-K]<6Bp&F1]rE?mc2D`IJ]JNh*U$]g*'7XrRLeG-!1Y%K\epNDBB
|
| | | ??:@aGp9@pg[)8=@\*#Ief^eA#BWQ93pQ`g\hp;qIr:4.#19/UG==_l#:d@LM8H)-
|
| | | 76`3-s!Jj-;h>PqE_taE1$Id$?n7]WHK1hj\$*1EXrR@VHN.WZQaBOZi^*D90O[UB
|
| | | #137&4#t'e+n<]f!t$Sd]a8\+B)nnO0<laNgQh6D[h#pBISTf7Q/!#PH_bb2&d\DI
|
| | | eblU"1iLLNYi95+EAWlo.TaqtWsO-MiYuKZ0l$L]kL&J`PPd;*rCRh5f@)/22eE9K
|
| | | Z^8dkg#IM%P5Ck97#kY-n&pT>c2Jr3o3](L?f)CX_0a:fq!Z7^2qreaqu%bo1I&Qu
|
| | | ?=7(5h<O`1rq7i=C"XYrk<oQO8AbQ.9uQg6Xpkfi$dqrOL\6XV]763:s0&RP?bou<
|
| | | *!cQ&5\pT4L8.Ube7^Xh6,l7MJB2=]J\baRkZGW:+GW>i!uM^b%1!i27jCR_efHO`
|
| | | N+.qu\B&PFNQ4Lc.'/A41)S630_oD?CH7<rLEe8C\7R`=N9H@SLsU0&UsuBm$@pK5
|
| | | 6]R-r"%bph>u@TL7cONFL+Q4@dHNCU[8Ot+T1<d"\_PJG.Ml(GPkn5#?nmn)iWE&J
|
| | | DT*8.@3G>RJEI5JN8F'Pa>O+J290/WGhc<Y'lCh?a!1n=i,'CU:<#.2!8).Ed`q$$
|
| | | $U$Qn3uM5"6[Ju8G7pD5#6QPr&s3;?$@u;f`,(kb]FG-U/ekTF1l<5uUQMWV3JOb]
|
| | | 0E[HGp,UicfODa3KY!<+N(Z+Y8:]E,lbcW?mT\PQUsB^])7trM%/;1<e+fanD+kS5
|
| | | LCZck)'N`5@/)1Ear9Xm$iDcV,Ok"O(ps\qi2nnuTO<qcn;>#g4_T2hf>S$6<h>#l
|
| | | S0o81Nsk+k,N4PJ(bIH,*ZM@=Hgla&0pl5!-^!n-n4F-p&H!tj>bH_hlptP1,6>Su
|
| | | #YR^P*??;:S8R2W;M(4o`%\RA3$D)0i@;>NJmBqR0-$YAL6)N^aG/.V7`iFoMdXgR
|
| | | n6Ha!.-l!qSZm2[0'bXLXK(kC6+]E2:JHek6o$I67$GtO1pVcd/<'_+eHsT9aM<Z5
|
| | | B\BU"\kORrD'J*]2c8$9"#(%oX\-bP3ma*hXj#"f1/eh>[k;*@,:G<Fo&f9hNmq7!
|
| | | =S<FIf>R#Z%.(47Ou5oYJ](b"L=5*1jB9hX@';@Y'[lurliRhY^5QW,KYrr\aaDZQ
|
| | | ]4DpFPT6SsX*4B]L0>a@Au<DJ/=;)BWE(qF0GN'emBnQ^T,kL<UTXAr'A[]H/[pYO
|
| | | QD+i06($[BMufCoM/IBC@hM^=T1k'tFI@mU<c!ULRS@QsB$+rqTWlV!cKD_D`@n8a
|
| | | 1&<Di=";e6Y:_mH[a$EC/1mi<.AEB(8+!koRk)kJ]SY@re)86i43a8%DlAgrSO1ek
|
| | | q'`+4*d"Na>Se,bB2(`\Rl,&K]kgF?Y1"G*0r)7ZnL:>(>bU,p-_B]SC6?t8H3ZGE
|
| | | WLPKfU$0)CI^8Xp<Op&K8/GO@U\o]k.eE4h=51Vo:QG(^I>W4HFhOeKYOW=+60"i1
|
| | | #GDeST$kHaA^*_YLTq8*d"Ej>T?UR3<TJ>1rJ4'F[=/hmU[:ag\e*PmY;DEW@LPRq
|
| | | qt!YOiQ`q5d/;eUkp$Bej/,2+"-ootFi9gs5iO-T=qPFtKdbV5(5.+.HikR.jf]5.
|
| | | ;$MoI^h?,0c9XuDgl+OCIK`:jZ_A/!TM+oFm-3TA=9`Na,X<hR1*Ma'(sn_i+"ZT/
|
| | | Y;EJ)'9kRLBL`+=_pb]')G.7ucbTpT322gLZi_`7hA7spGls*q;i3<3kUhFj)q'#U
|
| | | 3QFFNSFpo)j$Tq0a[E"n7Va'lZpg&=V&m*Jp0`ljBkllEWCXADj!4@H/@$]=PLk@3
|
| | | ::'DM@+H#_iY'c\%%fcT)"K"CM]UF_O-E6G$;#oF:o!RZ5>lb$+82#GA,4bCP0$N4
|
| | | WHc"rj>N'=Tm]NWU4;8U\O2@r5Gf5=/=1pUIRWrZb.4&HN]DM5&)(N[$$b^lPg*\G
|
| | | c:t+&N@mh-8=QS-j%KM3+c(NTS.5-Y\66CQ?po<ZV?i&RF2Dq[0d`>"[9-'G'MkY?
|
| | | /Wqa.bY</g]Od5eSqh1_b9IXnk8RZtjlN^@FtCsLfe/q^MDS)6`t.=s%!E<ZL`B#J
|
| | | ;VgUBI75c@ObMI)dJ>pb&bq-Pa7CLBnm7t_[SjlkQV\<P<LaTm0[l>RD(6\8M\L;A
|
| | | 8"pS*kR?9i&\>!0M0Ci(i\mkdr^n&L#:+'?=-Q,D1fT^7<+["04VFoo5P[^;Bd4Zb
|
| | | 2:Wer9!lss'X'8j(k`o?ALNir4L$ERY*`[3Ann:m,dl-c,Y?4g%P4>3F:q^gV."#'
|
| | | A!N*e7Jtk2'2/alToeF1Pu;=2iiQE5NrX^pSFb*6::"8aV%&mJZjg?9@E4<"m97q_
|
| | | QuEsTaEcA3nD&*CTHZ1ADRSo^PfCjVRgn"7mnUt>VL*4:j'Il"G$L7[7!TSY7CR8R
|
| | | g)n`WqsSk&.ZPC-hLp&KYId,,P7$WJ"F5Af*A5)rSdDq`3HK-O-[p&0H/GMs@9ok1
|
| | | ?W[Js9'9qjeHQX8E4I6f2PkcAe07I0[e`XaWq0+gj.22.i4p<(>Zq64,g4Wl2qU+c
|
| | | M53&=A=ANgAt=CL?7$m"S]]aMcKgb?27QV^j-BbqIYj?'abD/TTVG?r?)fX$.HH=r
|
| | | B'4dPK"oGc`p:@8m.QB4c*8N9/j=$*DOC#gaN*O.k*@]g@Tl>fq"gh"fAhX-eb6ob
|
| | | p!DOHqF'cQ&7X?BYEMGg<po+(5Bl+Gk=..$@^YdI'[jj)ZaZa:dDqY,$;a`n5a`ZM
|
| | | 3\"6lS&uaJFE@P3?4j$Q7P$5s'4aSU1p(%O"(utEag9BmlHj%)9URL*`la1j:<PM;
|
| | | L,,p+\)^TE195B;/eQ\X7]k.in3M"idGQ6rK)Mu+0TX?f+PdJJkn'$X]AB\Y=@FHY
|
| | | OM"h_EX(qU/7>>aQ8!=bVW]uGf*kQ?LUn0]S(U;7]Pt`-L+o5'hrGg%@>22)2u.0Z
|
| | | 4"-sOrQtGG3GIKqiN1>QqFZXBkTJG`NH/n69&iCZ0<riF,&NOd\DK(rpe-p?3O&4%
|
| | | UYF\Aa.&sO.6%)a4"\,!A/+6`lhTAt+_7@IQJOF'Mi8P>1`I=<0!\lofd;<!AARCq
|
| | | 3AW^aZIN#!luC=4]]NfC.As5TON`*(Y)c:`HjH&UT)B;*d?3`8#t(I=on57g6:kCj
|
| | | `Md[D)D1BR-_<8m-;)+OM4?*]ED>kH_m/1AHmm<0ShY;LV0ej"ADqn76KnR2YBNHQ
|
| | | ef5-\E\s&E=RkY>3:j9;^G!p27Z_<G'8&I8+AqWh"uD=mn7uY9_71#0-,1[SS9-@A
|
| | | <EAqA4".5Yc/,/c+ZrEP]m+,ZG%*GniS@]dlmiUoCACoen[jP0a*k@5=gKdRN=\4l
|
| | | C27<U?7jNIBS9/1!p@msKV\0Pn.o'F+DK/N7q.jB">iBig3tI4H3J&5n#1NpHsU`q
|
| | | `8ssE#1W\>nH.n;>`KXG8A9/J,3%TcGtOP%DE<X[TKOT[p8BZc#FtJHJ2ISME\ID=
|
| | | m,i?+=QdQ0J4lb\c-S3p/p)!pkJGSN:el.nR[NZ$.aJUh"Xa<RE%J/hFV(!*XhO!c
|
| | | KYRg*GclYi,9mA'Gn%c;!_9'WBOZ=bVXeIqHK89>%d*A$qL">$FU10ZDYtpH"L0Du
|
| | | m0]e-:O7LC``jj;J'R+fD^uF`#\pTb:hWIP:.4;B^kPNE$4A9r-n>FP+=_'I,`WBA
|
| | | @]""Z8;&UCr\5*98=o"]ZpYK].<&gF_ISHk>_3Ml_C0_c&2`^X=GP0sSF(G4.#@'*
|
| | | i3Q9/n;[#AOYVd`R"A0tSFIf\j%_K<ZmDpU%nO)J&/Hrr@*M=(!5o<`,5UW1d+O67
|
| | | 7BeTtOlc[=Z@=P&OG)C6M#JoA`hijB0B0W"mF[rM!]O!WP_prS;>rt_I\m<Y1"$&+
|
| | | #+1V@D^#8nYYj1q6?+-b+>!spDlIFmk<Ra9@!@44X2kX<aO%7[]QE.9,_U=kE[o#k
|
| | | ZDI`*-E6_BC!8*jo-R)m$M&@hZ;07G^m^4Y.0:9WZ94%S)PsA1-k^GI!sEH)J3mb!
|
| | | S"^<idSt=OO@lb/,K?&&P(tB@[$G`P'i=Cs%f[\j8j"lY5\&rGU*B,"?m/"b/'u#\
|
| | | M9IGF[kFmbG]Fcd69['.^E^Y"/!.LQait+^=S!cQUZ/_MP6WUQ<&Fi=0OlC*CF^Ir
|
| | | rsRg5PKOS<'-s%W*2^Yt?S^WbYY;98:F1Tn\LQYuEeQ$='/ZU$L,+N7$P5ocRgD^(
|
| | | 9SK"+WBaoC"sh1\-t=0Ab,UVFfL\lr2.WO5;J,DjX#<k;2!leO,%iEZBb&:cqbf=V
|
| | | &p6'E:djk@?SX[?YUquSgG`T=Hh'Md8pFpaBe\R"+OVr>,.A_9%k+_G.O9@)dL_^B
|
| | | a$4%R5nXDEe.0@co)DS\AVQL0LX<,%(p53#3!:LHoJ2hIlp'Vdn:M8W#EVZE3(Yr!
|
| | | ,cLc/!2a<a-ilY>mUqpcKVCR1W&rLBi!V/>Xd2,fj=Fee4@5L$CKF%o\KhlJM<,IC
|
| | | 8>a!uIn?@b7u8QP<1%#A"\*Sc9#<P6U6Kc:.n0na[k@f*k/g*]B1Gq11rXN/am2GR
|
| | | W$ZDQ:"4V91CHpAE@=eF0er/Db-kstImh0B:ZG,R<2E5Ej9CHQKbY1O`;<42=%LjH
|
| | | ;,ThZoSfceg^Ot+3X^^;oPdm=G"GZY0uL.C6Q]4301`9&#;ineC2>h.^,(pN;@aBj
|
| | | PeS6W!Do]!<HQ$:[.5pd9'I(&<>>m$U2*E]KJbU+s'quRbQN&'OChK+<)cUM'_bdR
|
| | | *fU]]7RIbbB2ECZ6jDZI,=3;6c-odjb,Wm">iq>eU'N'q`e(S2;.=f![GktUSQ?NB
|
| | | +I/?a<U<#mg`Z8s3P[m;m[RT+>$Z"!%RA/;5j(Tbo3_Y69`h&gWX3))MC<W^6:-H9
|
| | | [NAs1[NMBeY&-s=k/h*[EFXo70U=q4'Zf$o(=*<hVkUmYj8(5LSRD%a.Fqd8.rlh'
|
| | | 4Ei!4?=trR_e^bg5W;%*BVRq%eg3b[J6/Qs3\;XkiZpij)G!5.C"@_oK<PS)0N_&D
|
| | | ^Z%0P9bq%_$sOLZAd``n;iDk'fSUG`h6qJZ,#N"(g>tX0AdWi9Z3&gBen+uL6.F^t
|
| | | [_2SLqCBO\NctSDKq2FZEg@g_C%atdKZ6Z<YUjAD,o0Bp(03bF>@H)i=eZ6QF\_PR
|
| | | 3[-loCuQ'h&Xa<,eOBWH%7!1W,^KsY6#T^R2lVI3,SW.PJ3!@Kr?d+#&T6oY.fY_o
|
| | | J?6;+"MI0g:.f)=GiKZYQV0/mFF,5EGk&UEB(]-qYC!#K0)(VtX4_iBc66i,6^GSX
|
| | | e`_SPM/npoGc%u1UK/Y*B-::@<hkP8f#/rf%sN.34TsGf'i)):UE0QkJ*0O/?k`eF
|
| | | 6$B_t.nQ.Q2g.Jb&><`uQZP6?1RVM6kBsc':1@="mT_UC=92-hl-$Vk$a"l
jF
|
| | | KP<`+=BI0b)Cp&@G'G<@b`5fX06Eq!kld;&PUn.l\9/K&2?6r\@X<%fI=aF*5.E1g
|
| | | =0SKuKP*0l62-'uR'\>B:3S!!I)trY,JrD_YiNYu7q8;/97$nS`r#PS"#e*(=Q5I[
|
| | | S<.7q1/=[*8NTUIkV%O"-PN$l#6&5CQoPW$,T.,9=6Pa3Uts\Q5Bumt(lmhb5EYZo
|
| | | 84G?jV-H@:f11FZ+JUpuVQqN"N^]^6M+Vl0ogO\HqB[pECH0L2`<O5TFs^\u<(ko2
|
| | | .6ohSGF$e/6HOqJ70-X[G1m!rGiEWXFW`_*N&0.2O&WSnH&=8#RO<kZRKkH%\Z$]S
|
| | | ]:)m1QraipcCI5R9V&W:7V1Nl6g("-cnlr*i+5oUq0AO6OA$n<Ql2HaK%llnSXOhd
|
| | | 96<o`K0,TY7@7oP?p_=+K=acoO>b'qVC3fu!om\mL9#CgS2Y]6AL\lb/VZ2W9["8Y
|
| | | oj/h&fqbBL?MBIRYt^U.`]E85D+#@qH'>+O>%hnM;?BXkQ7VBk<F&dK4aL?tp!\GS
|
| | | RARQJUUlYeqMh?ic!+gO-DY`H.><bl<M%pG['Zg'fC2<jcRE#OWW`t\e`!(QHs?*S
|
| | | bhCHkVntT7OF0(!S_@C;Y)l&qVleNB82n--qY'F4Ml1^H7/Eme>$nLc'54/mV&F9R
|
| | | O]A4RD4Z'f?R18$EbS'*l9F?$*XC)rHIP6WKPm8$ZifMR"c]^3lrugr8_YY("eIb"
|
| | | ;C!0f?KpdV[Ge-4(TD^ZUUpoC6qsn2")Xd>Z9qt#Lo,F7]srmn6&j_T@m[gu?>'g=
|
| | | DW31X,@p`>rf]\;\g"68cK?\sXA)$Kin@Z1gVf\mK&>7Mf)*k+6QL:G5TlP_=l[JC
|
| | | lT`$dMKmbl,%B%P>:qc0m;+(u^Xau`S)J0Fn\0/t9UH^33oRna&IQfD]pN1r74^s(
|
| | | =1lmI_WBIg0+kiZ,0[8U]1ZSF<PE./F1T"#;1&lm4.jIO9LS@YMF&h8P[l:4;Cq?:
|
| | | \J3Z9+u.,ben!ORa$ORXqT$YAb!(1@_STR!o*'76$+s9Y.O$mq48ZZo$qlre_,sd$
|
| | | Xc^_K_nKBh7.&aH>_g.Cb6T<h`jc1oU:"eg3?Hsk\O(0mNhm]mgP'*]dE^Fk4-S!9
|
| | | o[022^jNE3gi7*7p@\0?0tF;\AR%4adF")":j-C<*<4(#bU?_Ud&bX@I4Ym2C!N7B
|
| | | ?#a/bSNVqDUBuug`M1\5qge!/rmB.><kJY%mJYSG&^/m54WS'%Z6e$Z/5.TD<U#Da
|
| | | >F%5ME,9%g69CLNl2kWc5;jIH9anNoN1n't+`(eO6]Xsbh6cZA>U>n"4'ek"42K%6
|
| | | qEpgIU-q#Q"1?f17=2_;fKqgV*&k[@(76M:h]'PO6c%XN$/`fF]1$esXQRIt=Nd8_
|
| | | ^oZhSS]$7(##r:/7YTc#*YL@/XiLlO_Xa5H?)0X=/l_eCZJlDP0q*rIMW=VPO#SW:
|
| | | a)kWsQ.XiVai%EG))@2aVDZRHi;MP<CuEL-kJ4L-#Bu,>I6;`5Pk6#Uk.ZUUSfTb<
|
| | | "i5B!6HEHq]>_R(_qaY\.m1N2/LB([Y2fIY?'qY8SlO5ge3.-Uf\>T8LQZ=7dFeHT
|
| | | L]4(5]7nN'YU&T=_E@*`_gm-3^Ui5YljUKI528rtk&nc`\d#TET!s6b#'jmKY#)+f
|
| | | "9n<_)b=S_mDmc+IZ6+T#Ogg,HCg24hXmU-lqF$H0])Ql5%W(]+35Nqk!$brT*U>2
|
| | | 9A-2O5ReW!LO)dH-FsC=o)BbD7p%W5KC]Kninm/Th[4JikP<%,n1fjNN=k8:@FIGF
|
| | | of`3!r`W#mU1bq(10E5Qg%:f9Qnc<A1,NsmCmsR;bnj'r\OqMQIdtf#a1DS,<ibq1
|
| | | i7]:RTqKJE/fP7SUO`ElAiLS97UmU'JCt!U6(nj`T[7(!*"E1jOTDmA2AZhB_Z@D&
|
| | | )\7bCiik/=G\T+$`oF?"%$!t.Pg/<p#aA4=1E9,$n]:?S73n9q-ITtX$=F2iJqe:(
|
| | | Y^i/bM[i1n(sK;$3#gQ6ON?Y*58/cNjn)2GL>**4:8tL3FJN>_);#.'&\,jA1;/W"
|
| | | [qX)BdtWKa0@pON<j,Yf="DY6Lq%(:Xhuh0/1!>$/fG3((ek3U7<62%LEdC]cP9*D
|
| | | klt#DLu`>LQXo#XrJo3>GdQf,"-KJWWC4n[ZQ'n-L*=MTjn+a!1e4[7R#Lo0No]1_
|
| | | f<+9AQ4^8h*\tM%WuVQ9##$k[o)+eka3qj7g8+hVQLCWml;ZJlTqH5U5[eaAUnb!s
|
| | | DNR59Mu<,M!Q\l<_1A*Xg,3<]Nt&jT_ShEemjpNO+JFU+)_]A7DOWq0$4;NB:W-(c
|
| | | #3r3*Jqf9F584<1Jj1!WdL1FBV%)b*)[?tmHlKHZ,b,YT8IReK_+NK"*/6c%7(9k5
|
| | | Hl2`QDI_K/^Q>Nl]u<fY*@XU?Eb<t.;H0&F[K2?Ve]<n1iYb#+>^%7,ZFF[6XGK&O
|
| | | f-JF2"%FijKPLdu<+J=ob0n3`g;=KONuPh@<$O9@biGHq,HsQN,L`mnPlO'FjM*C\
|
| | | ZKMu_^+?nZ0qp=*C5Bjs3ZVT[b#1,88ZiC?\(,0-CkXt9SJ9qnO1[t;]'\70`]NJg
|
| | | gl:(1h8%Jen,0)#7nF+2B\I>2_.bUJXd*KUGFC@b#!n&Z.c)S%gJ#.PErc).=-=_1
|
| | | 9R#Unjt8SK:t4Il!j9BKi)E'5Tke6u^S*r.`"3DG-knH@5Z!+`!C;6$.LoTh6&Z!,
|
| | | 1+'jFK.n!nA[uOj6,ef\.YD?t-<_l-H&/C\JO)P[1lUfU5ctNj#j+2/K4rCd%Y4W"
|
| | | 1lap?l87gZ0]"em"%_3/%&8pK[#ErD_Di#-@+$cg4)j%8"i3a.2$$#r=&oG+\3S4f
|
| | | C?W)YjeF/EK#U(Z!f'p'ikXE)Z,:pO=$TTV"V*Y<4<1-/Jd7V5#YmmQMW"QkR#'[!
|
| | | #W.2PBTs&^K3)t:0RP5Vq#h[=);(`9iqh@_aY\j#0Pu>Xc@c45+J14@=#lT@.-_$2
|
| | | GJ$#3YqR4Q5_;JWo9POD0uH!F,(COlo"H12kO82[h3P9PauXh?4Xc6!q\iqrZOV;p
|
| | | /'lK%4E^Rb&Tdes0D5$(P^rn[U:bILGsS#77.MFn$7(^=.t`FAB1i937ZZs0*QUX$
|
| | | 6(0W\E)m;d'Q@[*,H6*gFafOq<t'm&>DB>q$,7</!b%Q^JdE]c+jp]cNU/BN9'-o&
|
| | | iWa0(6\\,CW7jF[U0qGuSKjr0(;C*'lse(G2mBC=R"[mC%Er"7V(+,`-slhC,R8;.
|
| | | Pf+^moc2it.>3h8!Yp6&&mV/54X`nY7!Sj!j;Li?k3Y$fe$N<h=Tg6'ao%9$G7Z##
|
| | | ;fW!Qad;QG&])$iH-n2/V0P?KTlM0;OY,QV3&jqb)4ZqpMH?*di=jP+*Id(Cj3'5H
|
| | | q4n/,<QSZZ+XGYlMY&o$nEn+M,1qr"^bp/Q>hU#-ZSY:Ub)ck(orq#TT3.UR3D!Kl
|
| | | Qq>/2Qi,X,LuBmT;`?[q)-Acf\fMW2h$qH,8<Hf<nkZ!^*+iI;?]$;M&L,)+cT;+c
|
| | | Drd83PJ'4ld=4;9(3CJjjUN[akBp&c7`fs&(h.#CHrEoC5F=K^B/D`Hcf-oUW&4IF
|
| | | AM&EXnsIZg-BS[=Z'R9Q"]KNX'd4PIVSL%W<%+juTn0jR1K'CNH><b#@`tak\<B+3
|
| | | d8H$o?opd-%%-==oBMTHWi@8E9tGaL.@j;3"_")LMLtlmF]t2QL5FMsm36"<i^6<,
|
| | | JjYFg+N^T(4::4A:1/&ecq3>+`=bkrR9KB[ar-R;C/Q)\,oZ-HFH^6!:8jpIJd]hh
|
| | | QBkrjRBs\j/EFH#de]-?P+s3J,KDrg2NU\UlSG4)!CS_=C7Zfl;2?tmVmK3a:%O].
|
| | | 8ND?nFAd0VCR"FT>X,CBk',W#R1:jV4G^46ON76h7@gqK,g/g<'^29EO@A3BUja(X
|
| | | lbc4F_MaqK<fSDV9NeH6e@ZP$=%maT&aOa.I>^^$.s^l>l\IF,#`a@8[?lMAK=H+s
|
| | | !T#e>-P]EtGbumBXh;j!:gT*G5V?c6X1,8!%5AJRQt!ZAHP%OeoThGFf&rDl.7`WN
|
| | | G,'-tr)h.3N#1T4Z<--:cFSD<NQQmpOD3fL*0c`:.Edd;&;o&=OWSN&0$6108X`Zp
|
| | | 4S%o=\1<;?=j4pM8Pu>hQ`R)KN2;uL1?H.DF#[asJrfM>_Tai2iEOK`(en9FN1e%F
|
| | | XKkl@$O29MfE,UEPYn1g_@S7q?A9o2)hIX/Ra?@hINFSeT4J<1cM<Z"ZoYOZcAnHh
|
| | | g)>G(SOo"9,"0fCD`[0nWgHX`%pu7$e"2`T[rpd>bnm24>arf#YAqTQpTnF9%90O=
|
| | | ar)^Ame5LX"_(-!h:gUIpZ]r1Y[ItHf<d2<mC4s'OOa]glM1T%A.V)9*kpJ+ms,a!
|
| | | 'm01aR3:V=r9`7`V3"DQ,NeXSRBfYOF$_uT[uoF^!Y$RL'cp$R?\c/c7_d9S3CGqQ
|
| | | e/!I%I>u?e+^?'l9d4)b%HdpR3D"5]RBhh^V^=<>VjJcPQcWMN#/eF'MK>9,KI6^_
|
| | | js2aUT[[/R\PY6CjckMlY!td(0+a3r:R(CnLg([^''J(\O)f\:/E$h:/B"0>n?_DC
|
| | | qDh'jV50>>Xt@c([lu4r-LofC!j5>(1I3ZmP9JEhc]:[a-%3slEh,IL8J/QZX%K:7
|
| | | N7jo9D1jW-5b))B54_MsOOPYj[Q--Rd_$JNn@b(JGGJc[qtFYQmR*5&1_nNqH"UI^
|
| | | ]b^6UQ0J,=C%T,j4E?q6]"!"q2'2[HG522f^)re5N#gaM1JXTl4]aohc\NVq/+NRh
|
| | | rp*%i&?cT<lFeWS9Ku)FH8u)grk^fjD%Fs4naDjU960?rsk"S"0W3G;MLa9lrj
|
| | | V&94b@"S_0]f/kW18,J]1Z\s`i[d]s-@/4s;ld#,Bg@eRQL"s>=KRMfoTZ-5^^/W&
|
| | | \o/:`NJTb0VL)\k)24oW%OQGD/Q<(Y.sm;DPW7.tLuL2)k`lss";_tm#^d\OPTR\?
|
| | | $+5E"Sh(utliN#2Ks;hr$j`8\gP\;u1SB[86DO>bfX!j-Ta3Wb3D:r_j;9Ek=$mRM
|
| | | MMr&WBad46XGKj!6WiEeE/2%F163,*^,W3Ub'1]/+:p?M-PC4$K8u3Yp;@SVNQD>R
|
| | | $_,&p0+H%q6tAGJWntN8CH\aXV5s_U$lM5gglZ\96=`hZ1bli$KF\aM_W3(0+X"U:
|
| | | KE6_tN!_GVb'#^h-,J8I43G?*R$8a"YsYS-VqDlC45))B[>Z&,493qifg1N)A-sSn
|
| | | &qO8G$h=l:8#]?>NJ_A[F8M'c?4#D%&jX7PJ:pC6E"1NS]lJ#)oPG!EiXM!L`ecB<
|
| | | nMcKh@3=G8_Xq*Q$:#'Df#>IHa5INKoO<W8A!=bt80Q%ue6jJ@pc%Dm-U_R/Ci(F`
|
| | | B*a_3aI6i[qL/hJM8s\D*dhB%.FFE&O:[Y=/En-+<0.]:e&N_l_s*2;gb>hrNQ(OQ
|
| | | (\DL#R+TNrLT_j>-"@\3OFiWE@R^oa60p620e((pEX42D2n;I>69n-kqa;F'a,GgE
|
| | | */7(#_`-fiMdg=U0\FK=%][&m_:g0IHi-I.fEaSLOs#B#>::#gZP,Y?M!64Q+IL?Y
|
| | | 2NAtn824&dYs->DAdpl:#SP+JdYj(>`#)[sOt8SPI)-2S2Qg48bET]aJ=4(pCWhhD
|
| | | &+mSmR?+,A[?m]:N9!Tp!@s;mk01Ka-ocu-[*&cDk9AR!*Ad1YN)WN6#*G#hbZK]m
|
| | | P`eIf]hBS5[ucNi/E;li"t$pc:'Aa"`4Sgf-;L)?LcjQhUM,V/.[TM)%=*T3K$Y6G
|
| | | Q-;4P56UP=9_6REoSZ<kNtH[DLk;<$1<X@[bFC=#`)"QMp_ImIYUJ:gaV)h%LEAh^
|
| | | 2gQ@cJ]Fi_Q'/qaLtr7pC=Q.52GAe$&TUIi;&N3Gdh'J-ckqMId`%?bM9k7TS><l\
|
| | | ,#Od#@?N2W9N;if;(NlTER@s%d5[AdC\6#iNYj!4V4d,$_&3rP+H,Qn9C/C5;@KNY
|
| | | O>k[u%_LgEr?ou=".rb$,3t-51=hCY+HY+sbY^=Fh&VFp*m8<F6L>Rc)QF0;cm9T*
|
| | | cqtUFda07^#Ig^L$^1c$U;,'Zbs#u-U>d4mP/#3,C6;L1;CoYB/=!'9c+)!Ue7!@E
|
| | | X:3@%6dutZ;k6&_J<!UHUf3qVO'N"=F'mDCc&:h(d\TiuN:N+E/CaVs%kJ+:rCp:$
|
| | | 1QXq)$-=5eV-CQK8i/70eVuFcE/0:N]iAbp<[C::NDqi/1PlP5<=M.>I:uU5pI]R#
|
| | | <aA'VogCYH@]o3[e<LKn3I`sa5seum`mF+2$N(9*-8&`eUgYO*N$]+9dj/I!44SYN
|
| | | =s]tR@hh.NPO3VEGmK=m;(a$^&La8K]3($OeC[=:VPCTOT\PDcWn:0u'1I3oaQ4\<
|
| | | KaCb-$HWdC#f@Z*cIiKK&6/sp6:G"G;HW$POHB%,"bT0ge#;LJNK`M2K*GJOJfM0P
|
| | | =>VWi4e)h#FVjVu=;@Qh)uJ>SriJ&G&(Q2'd19>MNeise(\Odh23P+IITgl@=7&r'
|
| | | Fa?`#e03q4$k\31@5+U(_cV`V(V;XP%:n4AKt,O($gSm:;%1/rEf1BefLmNVQ%3"k
|
| | | O$liofgWS/`HbMgSe<L]Ntlh.ilA5)S^^*M#U+sN+jpoZFjQ:A\SG!/ouR['KdY^(
|
| | | 2=7GI8j#l4X?*#6RI\(uBf%1_/$a$FM6U51!DD7ek?Y$f>eQ?%i6)b&*NoJH1M%\&
|
| | | MmK-@jOl!fO/bfAJa#/r";HCC,^JV\Q0ZQi[LWNBf<Z[+=m'+e:P_%7'<o;F$JLF:
|
| | | #L'h_3O#SlCUH`<.:2l)O`Foe@.rJ-IBBTVTL*IW.`5TGA`+5t?XTtfP3t\c@,Lih
|
| | | %?_.Wj'^dno[aGh?sW$TKI3t>NM0AP?^jjt-4_N)UL)LZOoiTJ.7)"6jJNb"M4OF.
|
| | | JFHrNh&OR:3IU_MNWZAEm0rC<i!&XZ`YmYgJD]3!50`Rk<VPH/[O5YIO@$cXY^rnp
|
| | | g6.$P.\N!bXs43@+C9?c0Qnt*2,U")'&ZX]:p)44Af?N'1=e&B+5uB7VDDV/&Q.PN
|
| | | O%Yr%'G$l=-(^4k[Be;>>lC7YZ!cZL.4dntimOs'24d8%%'Z[r>Y#2k8E3DkjK:dY
|
| | | *\?2d8729`=I)ArhA80kZfId?#TH%c7"5^K;d`o%hKBL%iuF;+s5C<"gsU6frXN@g
|
| | | Nj;eOj(7<0`a=t@0Op+QW9c-Gp1+`",9CGu@AW&IEu@t<Ic:i?Z,@GD:1R[_Nf."m
|
| | | k)r?]Ea)#6X's[Lb7RL`p2f4s;Pc9j5*dMPdU/)j%H!W!:jQ9?%<H)grk+?1A9p)q
|
| | | `dcc++[cNd8"GptXO1])"Peqpc8HmZ/W6LJ$"=AJW\p(*[)D!>`7j=p$q0Jji7-Am
|
| | | L1ZWW@`?/s5"5ogH>!TW-oR5"Xg&>cf&o@bl)]0i%7df4p0!QK?X`p?8lH_70B_X_
|
| | | 6G+ZVEQO9lGA:"s%."[A6R]<"V29(F14\%[E;pGfUH/R9%=l0uri`i>f-)mS/<IQ$
|
| | | 6A;%"cD2HXLcXuH5lt17r33E"CS=_/<<J)WAo#b^WZ`?XW=0GH]b0A89=%e<rklgr
|
| | | n_K%*C]K8u8D#)o]TU:JiUibKVS*G0pT!XCCN0!A?2,%`&aMk:@OBQ?\c-G@\EdT.
|
| | | D/'#e/OI4goG2Obh\mBuCq0h5Ts=UQm'sh::'p5i"eRof?S9lGX@TH&T5B&;SW)Zn
|
| | | rXWG'ea#3HOl\66L>Ffh2/?$ICREP5rVc.BhG\"am^CiHk*e2,LMd8>T@MVYmKn_.
|
| | | i/"I^Lj7D+Ie.KBOqNf:m5[QnNrEr,hEmVCU*fOF*qflM)):c>3%>+cb+9ofM!LYV
|
| | | D":dELC#%dbTR152gE8[`k'X6%P)GE$l'Rt\QnMj"S"PlmZ_$t>W+5.p*dkbnD)p,
|
| | | -KGKSNLi4\ak"@&Ou"dF(iBuF^I]ts55\,`$Kq^;Uisr+R'Uck*UJU&%_/kY`7kQS
|
| | | G\t+&Wm<:l<t$oi=s^E?DIh<34UpA4+EA?#%8'\I/hlV8\S2!c5q@*iX]+W`Pn;Nn
|
| | | n\nn3+U5;D4"$(/d'6"kmeh.@+7QXM#Tl,>J@Nt8&b0\g43]kWB-_MG%Ht8mEc3FJ
|
| | | gNW9r<M=UQ+(@\K6_eViUKaU\ojSR#^kV&-"XjSsC_B2K9[msEVJLFC'C;`8D7<VG
|
| | | ;!eb:C^krY\:e]`=u'rUP$Z-D=KOQjY*/[WEc0QQ<4t;Xefd7X-Lj9s(=<EnCGsR/
|
| | | FiS.Inc!*#bERb'fLoUqG@1%lbB!?$M*GBQQMpNLG]hGNo7)/\Y*G/W?M?*TBnoi7
|
| | | rj7VCE?W(-G2:^B`hX[J\MoMf%\?=5l<4fZLI5]>U?m)JOnX)b9Z-%VG>Bb5)k-Ru
|
| | | EUoKU:oeFAmunM@_-E!`BePi2mZ!#\96+j3BYB)o%mA3FTkT'3FUmY455j,aPOeLh
|
| | | 'fW$+=(c;UR8lIcE^DTamr%jEknf\NG/%s;Din[6BV"=lGjWpQE.RKj<YM=ACGsoV
|
| | | .R<J,GnK%<OK/1\?`p(TW>FZ]pj[;nGnTCG7Wo?CoB)NH8&9,/U&6j`XPjrK^CVWg
|
| | | l,0dte)'p[QDlmIaJ,_s+V(I_dWb/s.YqT0+^/ec0"fNP.D'NKDq<;$]Vg1=dW'+$
|
| | | iAs$[eVF)[qOn&cr4b]G&]^QZb=6V"r[3+ZMDH>QBRWd=]2E5Q0@.d5Vb]h2UCh-e
|
| | | Wf1h.f*L(cbg;$:0@PmHccar1rFm+2kKtZ;k'YU3Vh3M!ccMjXG5NP7De/FRhrEK>
|
| | | ]Rd#3$q8'2W5)pd)8\h[J[!dG+>s:U,?PN4@Q>@D#%Kr<aC$i\7&#dJ^u0,LNXWqf
|
| | | +gctN16.=5Z?T&^C,?cdjhk5OjCJIY5j&fZN(dk))b;<Mku=s47iF^,<4MRPMD_/g
|
| | | T[MPY/fP>%en]9*4RchcY`#M8Rio4M2]Ts,,6>m6*sn<%BGGb'b].`a$jG%0`=bU0
|
| | | )rKpj4;JS=;[$%WJc]V;,W?[#L;PFQZuJ$WRr\=eV:q1R[gknd%3;re1SE"U1?#aq
|
| | | ?*tO[BHql$ZJW)-Ahe;Mk-&GUgW&QJNKtL?aM2S*0n(toDog44F4q*`\j*d/`qs%Z
|
| | | 7t*<L)GdM=I_a"3$%Z>O'lRY=:!8)cD#Mbr.Pu]8/))]73)BD+)$Wl@IbV2I!+pd5
|
| | | n4RH=L+R^c#G\671@$cV1^s=7%;RlI^'kqnqD&JB>0=/0b*\bekhokC-*7g;(C&,`
|
| | | @^dW1$f&QSO)fjmV.juLNeT;'9-hMk$rX8aN3a@c]e.TA`[sm\1=8^0F)%7<lk9a)
|
| | | U+Be"KVbue+GW.E1=R:u#^k.!,tSI]QnR^^5rkVl>jf!UB[#TUc',FA[j#o.Yqa0J
|
| | | A)\C_F54"35ZDfBg<.[a9hNEI]Q66b;G4%2e#TSq":#@aHUB+m8qBqj&"Qig-hRQs
|
| | | T0cI.%m6NS6Sdu*'Jc@A:/FT$fiUdMd9A;IoaHj>o)N?$V3R<g.Q(30;QWo=HRBR`
|
| | | N^.MR9G#!O))S#i\DX\b<3:4I'51e..nRE?(C)X2%14nT9f7=-2r+Id?L>>h__I+k
|
| | | D0KB]ZJS.-Mu8J97FF_:Gr%FFHYL<IX'(,3X+dp@TTf'$goqOb#7?2B1Mk"Gp1;7#
|
| | | jiTo\Q"G!k8TA"$?uqW1c9c-,ed`$]TWMBU7N,P@HQsqD%,)I80F56L*3kX,,H1mg
|
| | | Z;-=i%E.Y5>iDQoN&+&LgP7IrAm;JtiPR[\^_b-Z\1p(8b,m@3Rru5LaPOqQ@FL#u
|
| | | \3Vs3p;&Sm-P!_lHHueUV.nM^[3OAOB>-Ye^E0]$3H#\@-OFN?UUBEs-c2S@\mUG8
|
| | | >oGG[Fin=.O6qqLPK24U<?&A(G^"D^VqW+uZL%QTDrWWWpP7C<F2k2olONK'em$O,
|
| | | U`3u<C(IsI.0R3L+Fa'?)KT7.C\)o]XjsPZ9=EaCh:l.NVLE8ElR-E?s0hI@Jepks
|
| | | ,iHE22G=P<+!X>8684/H6Q?[E?Njm1O<Spq84-?Aln->H;CMfD&SH`VN:`4a(>h]I
|
| | | P@Ek?'<p[iA3m6j2QX=n3CjLF@>P@uA_b$Ca&NT]EIT.MBj6om)\,N!_G@!^\soTf
|
| | | $I2eB6HT&;6;s2ndj&'j7*6E.Z3C`o.sllkTa)NGYo$Zt!eLWJ/3EV<KhX[-BQ#VL
|
| | | +`fFV+MeY:.7LA/LZDMZdRd3;N5RU%Bcp!k<%OlqK92?rhk5(F1B_DkXuC;i(7D(#
|
| | | ,l,>:Z\ZrdjI7C>i93.7*,X[4I5=8,:pcT`hTeK/13"ib0:1-=<h*#0A/6ObVn"75
|
| | | ;;Q&NOJY\TkXHTjT1Mn)SkA^c-5D\W+Cq^B\%*c<juRgW`"#6KUMN:<_,-)Q&L8`+
|
| | | o`&7IcS[8M,d`sdps+HU:M%s-RF_(->/FYp.O!>+12Li"!LtS&-<.O^apef2S0t=&
|
| | | hk&@$=k("1Q4YhX:o?kdW177iZp;3!=3,#&Gnhh@3ePeIg;f2"A"W5#+O92M4ptpR
|
| | | C6D>=QoX`/kM67amuEb^$0YD;YR6G.79#cm02<o5"uIoLU600m:Ye*BWO3du)WVJ2
|
| | | Lh\S(o\dOtC9HFSg/G&,h$Cd6<?E!V4?mA\j@98HBSg1N0?Jd!Ok'S%Ats3aC$r'T
|
| | | Kgbh(8N_qHno*.Vn;^9:H`n_@[TIbY>ne#VCt,?&+):"VM9>!,29*g@`Pd2kh2!;o
|
| | | @a>ga$@OJ`0X4T)rg7I&Q.!#"Xk&0[)S9'T8GVST2VBq=gAbD-c+L66*K!m0TOjc?
|
| | | W\*q/N%#\'D_=sVX#=N#gljG8CX&&U=!YA]9,:^tfbPg.R`gf)$j)M^n[eE,o2HMe
|
| | | ;[Ar-?C-8V'""t0Y0">gGM2C8)Y8))$$fYgZ+/13d=%!0EdX)qN*pd3cUhVJF)Hm<
|
| | | \Al^2la4@=l&Q!Q9(,TS7;+'qTY&\EJkiA!O<S<TO>+-a?5`SJJOhp(0m'mN*iljs
|
| | | 370!JM`16Do$\`q[#`*EISn?oF$]&I!ojHX$qn/HMsPd4jSW/FLq<f0)'QOX8a'gS
|
| | | G!IVRPoO1AF)`M2#fOdX+-BI.;R9\<c.L<bREU):F.R>Z83UeJ$I4P@$WB4a9#4K9
|
| | | FD=Ff6ZA-n(c(tg%5Y"?24>NA1E9UqC)tB%AB'MN(4Lq;L7:g3FHi!eqF?ORUM-*@
|
| | | Ze#$#8&uS9?0qr2=,#:sC>)b?MW[3/HdSaX4%*eB`;S9oJsY[-;,I^*?^[(,<Amb(
|
| | | [o%E1/s_uOp6i@a8V:S"SX>\f"=6ij%'=C;A4\@Rj.o:r]P_a_\lV4-/iIT#*V@eb
|
| | | Nm4M\gMKMM&m)M8)'>M+JD64a.$`eSrCoBchCK]$Amp\ui/%,AX*oW1dK/dn8u3kN
|
| | | R_'njV]:^:@"n&5*oq"63%\#9H>s#PFu`FOh4$7iE37Wr:_r!I4'Rs`mW6+ap>"JK
|
| | | CO5Cpcp3H(Ze_q*`H"ObHM#Ltl'oNEQU>o#QD=PbL]a\u(Fd#=B3\Y&)DaOpj@meK
|
| | | ]]qWCrk\4>`E,2afD;=$-aOFnb"^FM\g7K]]m7o/.U_]1:8@76kfck!(0`s?o!n-$
|
| | | V>=7Mg%5Ek.^&fVj>V6=K`>cV`TF@OWc9inHag@LCFV(TmHZofe*9(D%oB:(3olB\
|
| | | En;M5cq<:eT%Tu+?ZJuU?ZS4j]@iBtK?fQKM"Y@]anX0ah7@7,l!uCapMEjaGGMM?
|
| | | Xs__FrPRMU#pm33!RH#aQu"lseaeYIK5jco/Q0'C](WaDH]KZ-5!Q:CrRkpemPZrK
|
| | | AFIk"CCfcqDY!OR4S6qWocOqYCdLRF*]$-%=0831jD8(7^?$l$B]H0FTO>CWH7.is
|
| | | /`^G=K`qT)"U'Kc"R_"&Jo'H7NZ_fhQ`sFJO=25=K&OU"306Dcm?n,EYiRJn#OjE1
|
| | | bc%r\W7QXX.jOo@A6e)p.1'J=->j%pmL2"*o)`e+#p^5$!\?sb1uQ:9![R3jirhCn
|
| | | N.8_t4V5?2ONq@[DZV901SRu*81=[Wq$U$b$]qU*b#7RTK^pgm,%\d[@QNhZ3biEn
|
| | | lqhC%UHZLjE%#[2"`W9.K<1^)UCsg"&nio#LdIE&I00O]:e5UjE/=_$b(h0U8'C6X
|
| | | -"QV-dgNC)=0Bn+DP7*k/HR,Z?I%Dm@qPl-n6HOjLa/iVO?CS&V[VU,&[@?m:JP/6
|
| | | )!tg>-q48ABCo[":t=SO2_2*dX5O^DCb%'0:MTfF-CD,T<$?7l*/!5uN@*3X2]%50
|
| | | 5jo'1i],-cHQHYB*iCbBOII8FqZ2iUX3pK&.ZGGT@S5%jAW'h4Bkn]G\n&)XXGX2!
|
| | | ,!)D,:E!\A:9f,_9jo+UL,h!a*XWJLOIec(;&q"EBC\D7dDS#m/;J7$.L71A%TaY7
|
| | | cHl$$CsT%,KoC?JZ=;pp(eoT?jFS\pm3G$d@tYEUEePr/&7#hm71jJa67O;PUF9\;
|
| | | 7`%V=nfI3HX?9r[9LmZrZ@4FDS04R`DGkkLk_:SM#q_=7ZNfL:U*hLG,$a0$Xs/$U
|
| | | "'.MsUrY=X,[r<#7a!8jFs[;t0@HR>Js-UPGm7,%0_5H&-<A2coI5su/o8-PA9]QP
|
| | | 36=Kh1I^jndj!93QJrP)1=2sLAiM[=`$OTK0p9@%WI"ZoFXjIn.>`g7ZOn^FjYsM$
|
| | | 4@43YVi)st58[;/37?#+7^,0U<B*F,3@D`j;hC7NISPQZ-Y=k_Z[FX(Y#Qh0a3tMI
|
| | | 1Lak9MEUO,4OVYYjG>t\oH[A'.O1V+OOB[G#mU[G.8r_B1TF9(ctSZt"#.`3L$'#R
|
| | | C5`A(JYY'%F:uuQ,s]rR.jAGVKPa%T&NsdY(@uSN:!54#+<cW/"[k49"ceimSkoRU
|
| | | 2RCUhV9(+6*&A9gf>?BE,>.[:=J)?lCD3qNV=HXm.V$X".PsJ36Wti@+Z%%4Cr@\J
|
| | | ijgmV&@-pm84[GV-T=I)mP0lk*o[P[cL46pX%"RP1?g8EoO)sO`^]3M7$@^GUM*.3
|
| | | Da&qn9+d"FNp0/8eGn$_,B17i'U^AH4\4)P;:>P9aBqE6i\hKk23W#LOil/G$7Q[2
|
| | | 4i7&&1nRU^SK+tE9!jIG`/`[Glo?ni.()5log;>*7oMl?8u&(K[7O8p9eqsh<V%jt
|
| | | 'Z<:7k1T*F4`k4*a'T:`A6rf*TO]QSF^%9H]^>9V:A%MpK&KjT79:4[V)89A<IF?P
|
| | | +tf,k=!B(pAZ8\V)_/3U,f56sA^9%",^n_.W3E6Wa_Hk\,UB7M@$?]D2+WpB#sX6B
|
| | | ?Ie%cAf"E(hZepP/P[s(j6VNnqd>('4KdC/doBZ%VXl'M>_?T]-^o`EF%1iA.**Vt
|
| | | XrCY?7Q7[Y->XUD2E=!^ZE%MP`*tES1MS]W7q60^AHsYq67$53Y<S3j<7C9R6MdAW
|
| | | BcSDWa@u+_Pn_dT<mkeo>HH=!K'`>-E'GT0.W&R?O,mfs*g*`l>&1Rb@TL\"mq[lB
|
| | | HH92][]IA?Ea!9PBu3R%kNFdH^b*IQBh.i6%+I%2PAFf,`1io?XF<qJiG+5coP@o%
|
| | | ")>kf3p>m+HD5#oKe7:FHI)m>YJt6MeqWTb!55iQ=r-8CVV79Z@;5GjXeH2@2U9A,
|
| | | r%9neQ<(UMLk\R3=NBXL-g]eHaCB&nO"9rlD7=%+b6CVJPBWrJ4;(Y4/K6O5F`4=&
|
| | | ?R/s771LrZ#fdSuBpQ+k'TgB!Ui`]gHI;$C1NHC19M)&Zi[etA_h36Q!*ogeH/ch<
|
| | | `Z3:c84!ANBHuOB,n5;mO*1q4JAjTUGNc3RI:Ft\9;<,(,qWYbQ[k.UHY,fT8MH)3
|
| | | 8jERH>4a=s12^P'J>W)P#1r[',2$u2-<,ocP'B5u=@[l5Ob3a@8OY^l(ciuhMGh?-
|
| | | /4Qq'kTWja.cf5N/U&12j#;YDH#J;a=9`N9CuEKj3F*BE*Y[mA6\&s]M+/e+=%1&9
|
| | | G-mJ+Ko22WhKT<$%/O3g[qIb*CKFo@G+*]dVGrXaKn<6[\CD\E8TMbV=mG?],i!4g
|
| | | 6;+*dNnAas==@J,&65IgACDN6\#M`]B\"".G_dr(Qirs(A6P"W1WAM4,e6&PKep\E
|
| | | Q_J"Zb98PD?Vc@ALH.RK.L%)RH[F"c9(FTSeR_6R=?>S53,W?$_n=5M1+NbBQGsq$
|
| | | '=4$-^3kMeMj1?0X/7N`^3\q]ZPej0l38^berpoXQQfFgJs2J,T:+kOf=2$#V_NDe
|
| | | Z6SK;Htb*k3PoNdIe.j#A`h5uV`%$KO^Q/K&>o2m=[85a$@I-dPeu5mG9TXSco'lT
|
| | | :+"^eR4a\4UN$Su5%OTY#(Fb8'\%Cu7`RR7=sC:DE0@BKU<?8&3\iC8';LU$F%C=C
|
| | | 1GI9nYG%gCb\YdXm_bcF6"SH@BDB6*)0$R<856G;:,C!1AuJ6kE8gp>CInBO=[nET
|
| | | #&%%$LC(^J=MS0f0STk<L?!e0Vm0JtWtrq0MPQ\gA:SG3&84O^I4#o5=M[Q5eo6O)
|
| | | N!Nm)Jg4.'\jf$c`25<mp_'a@*\2t?1\j#5Vq*-)>GMfiIKurT\8,[pqG.2$C5-%U
|
| | | q\")'K!r+ZH%HJFk!<dOqMdfLBKGG%8CAZ.2kuR/G7tZr(:?WM`f?A`92X5i-F^6^
|
| | | 5G3X.Agt/Gq[Ku'Yel/RF;k7gPK&#%O@_M+[2Wc[5gZ&ij)c5%Y577%)^V_8G%Gr(
|
| | | dphRO];)Rr9;u+r[\A&K/m#C#%]kWIO2NN-_br3M[g$'G[H"s-gX7IgduikiHg;9H
|
| | | gDE5BCaDK#Vjl+n)0WS!<.bB?0g"qLdko8%WkkSk<@,r6g)$F)RDA^rM)kPj/&YL)
|
| | | W+V#F9:RX144?H!FM'r0W/!*B!`UhI=2]hU@0?A/a4J!cTn,=05oa75ldAP`>J2"n
|
| | | `8#FG0Aja-4b1qX`[D;8\_k$E?cW=+H^c4lD0[@Abt*0lLKpLUgn\5>b]@#m033\b
|
| | | OQ"4]b&'i%OnXjPbD?>pWB=7b9WRNG]PFrF(Q7feDHt3M$MVf$&^HkK8,13CiZ,nL
|
| | | eK2A!aa5V4Mb[-M`$1RObL`N9BXsn.Zc<.DKD_TBh%JJs!a9uC]MN7E6]oJR,[%$.
|
| | | WT'X?/tsg@>ogel,'sH(UIE]DW$i)L5iVhg,>/I*$7SCLm5!N!?#Ht(FEJU$_P9_Q
|
| | | 65h2AFu*feea8)Ior6PX&^Hq`fR#R1*Bnp=68YU#,AA+IQ*`]&Zqd)A@di38h0n"0
|
| | | K@p><-(Vm*U'eqTp7XrufV`SoC%`e;#MNZ"0l2Wt?1Zk90Vf`c8Jol4U27*+"snHk
|
| | | g1,qAE`(Vel/9IBY@J\:V=WNW%l/Q9H427^6kOIQTOYo-hM_"UI?Id.6`paD1o\5p
|
| | | m"Si<;;$r9J\GHth5/p*5?GQLe\/8^!Z&k+/`D.ukPcRa?6eXMj+N9`iEb4#BK/<D
|
| | | Lb/Me;?`:6hOp6As$l(_>i"l$IAUFVC#FF$kGjD:h@n_:aEX7t-I^$&,H9:$KAF8b
|
| | | HsSbd*ksP"?0"1flU'LpSmg6b<PE<u,ee*C*W54$Hm\k$i?lc+M@_*>epF!=FGE$0
|
| | | o-<fhi.2!lgHQG,/Kg+oR2\?soA1*,?:XNdeB0=*f"Vj>!cU7Bm]^%XS6Tk'-U$%t
|
| | | YWLJ.hCD+fT-,do8t/toj_*.7PlKNnZ1>XCW(_r_?Z5Hil1jB(NsFRr12b6!VL@?A
|
| | | qE9u<1TM`BNSR+,nlt0DKco@q\BS/>o\Z^=_Fd%&(pX(H^rX?oC$7Oi_>^'jYUDr?
|
| | | o5Y%e!&kaQL1>4bcp0B(%Rn9[=PQ/Y"UuWliP<rZ0ndE__bm)H1i/#f7\^R*g,BEW
|
| | | %*#%c"H"T]Jdf[ELtLWk-61/T&Q,(HD$h5?L;RGuc<hfa8S%@rZs"8.V+%-kW)Yrj
|
| | | 3KI'IO>nd4SN.PsVUO0;$5[+ff^,muOLSgW(r@cs$Ig8HD]6PHUPb%O%1Sb!W)QAH
|
| | | ,4gC+i<BsPeOh9:^.0Jig]bFPF-O^TneiI<@qgWa+iB\#Luo$^`ME^b#-1iKf1>+8
|
| | | ;9%HO6Q0h+&LaI5DE/P+0!YMt,"FU3%'rd0`0SFUOjj(mENOuo>FtKl*GjSu+hj.u
|
| | | ]"NP@a,`e@lj"HbIdWLU)L8i%iLnm:^;!0e?V5QPQF"Z,(p,s%<!'j#NO+H;\]WiL
|
| | | J\hn+_Y_(rS03_AC:!4+6>:sh[t\WJr1(S7r'M't0Q]MbL*<ja]#(V6G(H\j@\0=5
|
| | | n9ZjTZ&0B+m]EVFhASosK=[(t8T[`)8BJFK)l8\Ni?$,.j0'dQ@E<K6a\5q\Zb<H/
|
| | | (lUs^A*jg`CER<'6Ks]f)DR%Yf/C>PAE,NP'4b_RL9pN51+9:nm"<>Q)W7^=F)YB<
|
| | | bq=#fj3%`K#_K4<CnW:*[%M>12R6:'R8L6^)'IE7,Rh9)1`ZAk_N2Uap-$2h`k<\(
|
| | | i+.lmc^U`8L6&^!UfS<'ogp]O>`'Jte]!S?WAZQRYZZ$91KhI#Jr=1gkT]1B,ZX5\
|
| | | Q%Tp7@Y3@CXaH(^G08\Yd8p4pFflC3SSLrd%</YLo523qVtUfrq^>O@<ngF%q?L1[
|
| | | epE0*h\NjfC=]E1%tM:$UdF"Npi("#\J:jsd&#B6F'YS;>?:nbCDrc]4U?aq>rq24
|
| | | `hBn5c2V55[]5o=8h!3)h:e9k$'JZhAqV*OEf6],/jZ>YU#sGHa)^$n_n)DrpL%WX
|
| | | /<jXsT;B#^?Z0X3,DW8V!PS/P2R.Q?LBa+]b9*Og%KV7>ML(>CD[p(fU=#BP.CipB
|
| | | -u542=9^`)j2s-5^N!,RFd'6cSl&Vp9Fi&=f,%oUP\,$sF1GlZ_N**rEf8"oED9[,
|
| | | i7EnsE?/S1.bi3<SZQsBG$W\fKQS#b0\J>]f+<kPf\S^CGmiL+KP.dKXF`OGL@OM2
|
| | | hP,_iTQ=LRl)8TBe)g,5Qc'hjT#E_WBi#%cH$u"PeqX/$-KX`p.Q8W5q4/*b+\(jV
|
| | | (ZJ-c8g>p'7-/PK#O$<&":6dK.L),]Y/(N^\:0L8[&`=mDBG:X2f>$j+sqEoT+NVm
|
| | | Wq_?7=6@g?F"fobRI(`@9]D?T0nrN4O:Z#CL1-:?E<cdAZNsUs?9A+!XMPT$=/_So
|
| | | 'Kq)Q@DinB@,GA!*d(=RiA]<>;;dXoM9Vj*Y!?t/*(!MQ9KE5CB;kB-KLe*5<KrsC
|
| | | 'SK37[ijke!$2eQ$mQWnNsb[:2^4DOMg5dTX,1(0`^k+q0b#FF]]L<WGfc5/`KKXo
|
| | | N[LK:*XET?4/BBC.![fo%)F&`7MMs=Gnb#QgjGAYr^@JE:.QW]Rm-B%=%-8#/gTe@
|
| | | O5sVOV`*,PjI0kH`,M?=3>Eq%gp\X:63JR5S6k?/p)m9NJ]rsgc"3&1Qmt]g.jF(&
|
| | | j$^"_K[f6&,2UEZm-#d[W0'hQ4#t_fLbpm'EYS_R4itm%2+3%B_"mpmB3bQlF:q0.
|
| | | <4;;OZuds@l2lSb>!lPRlXPuUXtD1RZ=EN\2T<Ie1A$,=VgS*3.jgDm,!SZD<>dB)
|
| | | )N#1SE<7RT$mASfRC2VI8-iXd3q2)ne(S^u'u1rj;!g0(b&BtpF>u5_J>j0uE/glC
|
| | | 2'@SgO;!<"Sgo:OEMduH1KQE".f;9)Pe>fb![1Xm'iUhP*3`H<.9mJ];'T(ggX5gJ
|
| | | nJo1*,0;6d=$fN5OV'@#2'T+STO_8C4b9bY@Yu+=$XaV&"g,jr[[NZ`*>b_EBCqIL
|
| | | ,3d[dSC6JnMM8IZjBf2?'hM>gf[X0R5,[[;HU&?GeW=g6D9*?Q6rG%o=JJELCD"`h
|
| | | jO2PcoV5u/3V'_(NiCfdR<0n3qPeZ^F^1pp_A5kp\4n<19saq2X_k_`FBP.Y-&u0^
|
| | | 'chM)cISAnKm--8jg(o_e#XH;k)_;A%2R2q05EmP_9Jd?G(+%-$]TUL'r\<-lKl[Z
|
| | | )c1?TXg_0mgK>k-FNmtEOYqUUh?#`EllHtHQH]u2HHfJBq/)XB@a<^hE8U(1-&f13
|
| | | Oqp[]<Y%Y[Sn.Y[?s2fUE(S2*`7hm9/'X4cD<[hDMV7(WQ&gp9k/K#Zfqt5%p`0[@
|
| | | bB7'[:(!j`N"P9Y=cF_>;U/OQWAl$0s"H,n05kUEFiRY5<amW3+^H#IL0=$0j;!*9
|
| | | .rH0K6l.mAS@X.?aUM*-Uqo'mr<F)R2gX#45IS5)R18;D-TZ;0e_NM5MVU@)PW'_j
|
| | | MXc!bb6HLAQA4:-?SD)0\<WE5lSSP;]*S?\/ED(t(%R3bnqP$%8;43_!f2Z@)1djl
|
| | | X&hp+r.JqcbLJ[:ctgdJWA4t<`O^<dmIDj:l;!c!W0K$dp6Oue-&p,:G:ueVk?=1(
|
| | | YrrC*m)h@Uk-a@I."l'3d;%BThpuJ;#6K+5XG`Aib]KQPcO*kJ0k4Y2V8-fO,pA#Z
|
| | | ET'hZ,mU+^]*g+J.F/soA5eZ\*1t<.Bfiin,4<s@.h$],+FtLg'5m.!KmBRFQ5oVM
|
| | | S/LY8X7$Wg:PdBgKC%#\mScgghj5F3Rs_eK/`=R9GMnp/O_ZmYV,gZunZu<J\dr;M
|
| | | *>7UT7:b2Q_/%EYa`9HVHqcR1JN-G)UD:_)rf6V1:$B+.GLTpUg$4AD?*[-eoL`;7
|
| | | !ZA%.q)I`s*TPJ_6Ln]#Mtm;6\W^Q64VeM_[P]Aoaj6[CLB+W(__H`=q_^h!QcZ]8
|
| | | 6fHHBEUTHa:jW-Rm$;-MA`!0q6-4Ds%G&r%A.[SH*tNr"fe?-RGHH1S)s[EUK)0,Q
|
| | | L03?)7/i,&[Jf:6r02ai]X.b:*rcoK)RO6=J)3[:(<(aH^7,Z05lH$GbXQV/MgLSd
|
| | | ^4F3J)Q17fmQHd8'@[(H;uOG2c+[uG]ArdkKAaGR6'&VSY7oiWo@XVJ=[:G;]AVKT
|
| | | Z\#nQgcg7^OFfe_$g0[8RZ9J`^g%G3,T""dm>l'!ON\G('EC>h&O/(a]Y"N2,S)uY
|
| | | #X;u+/E<NcM#"7%33DMa^tBTjb.0iaRYgi$Rh1l&ZgA)DZGM_8V#u=,H(`$m-G@>M
|
| | | %U6LMS12<ritd7pM1Jp:"?.n7d[&744fG'4M:f_'h3;_76efp+&Y=nc3Y!,k6Nf!T
|
| | | C5O`upQ(acM^+4;@eU/Th^F?N.eD'+TWSstnjJE3X9gPuYfA/-a,pBU_i.+q`)ALO
|
| | | 91;d=_pLH&o.5rIMPJq0YT*'DR$&'aJsS`fPH-JWCJ#+(Hl"$U`Y5jBq';FP"\#)H
|
| | | V/r"aUgk%!nJ4+M4fMd+,@1]BZEX^!(^osDF<R81oJ<1j$q`cOHOl1TcQ-6#\Y<#q
|
| | | Hu>h!JN7aG`C+AM,\]8XQH!Tq+WG^Il!B;L@D1H-a2(1MU3n19d79F/\M3-Vr,tQf
|
| | | OiWB9a"WO63C073m6).g`tX%2UW5k-D9$aK]Vpb%3GLlRHEil)$u@;LH8:SLr>tI=
|
| | | _Ko"TTeHk*gUX%[&Cb!L,[q>c\0@mTP"UDHTpZUbUrHOY`LKFZbDShm0aY)_4"RC%
|
| | | ks#dpU5Rd''Cs9YA?X!TJN,q'`QHuHFK6)9[(^!Fb2ETFd#5L5\4[OC6(*a+.-!s_
|
| | | J?5QSRS9d*_<8mZYH<oBQ5XS[M'fg5$_0OJ9IRl^+V2eC\[XB%b\Y3V.agHdGq2S5
|
| | | #S_="!9L2%bq0&"7a`$pkg7LPPp!_n3&2&Vr5Xf0fG7tE9m#*Qj0Fp1?QE[pat&1j
|
| | | )TJ=>+ePaA\YB$43<;bAN(B=jX][*:nmAm0aUEisL_So0!FupL&#-/BNpP[raTtM?
|
| | | ^q<LsO1KM%iR9#46P5`%$2M<]CD>)gEZHji1fX4j@W`F(r(P8o,R""3$Kd?@!)Ham
|
| | | 8K'S,E/]^*T:8E:#V5bu@(<3#QjE9<_i(\"+kfb.qP_O*:t][k>mq"0$.*[AMSTm#
|
| | | H%]$X$S6)>:gi7bj>dU8a=IC/Q+:`Wi3"U4R@=MI1j'4d@0r?QQI61!d*](n'c51X
|
| | | Lc;:.STsRlkhQM*5#Qu%/O]T$TprrW6]#O+$@,BEj>Dm\q$=;M`8rb@qi`>.1l-!%
|
| | | U$.fR1c;N7".Qk3%1FdcM<.Ub#fP_(&%r4([6I$:!KkMQ;p7uP)ChE5,h&81*FV+=
|
| | | _'i5&8.@FJ7-oYeJ_j@;'F8P@e5N6EeL_f8!>a--RnYA2S<gd%:`Uc;;UIJ7;oo]B
|
| | | >Sm<$$ELm,ZV"'U0b=qpVtl(sbqqV;8VgNg;e8SP"*bt(7ntXD%U,8tU?Ft&\LD@u
|
| | | %QL?:WAGF)51\4@M30C?*GNC+Y6h$eeoXY4pr8d4ACWP[O>TVZeTD1do2Y0S<o%a7
|
| | | %9ul7<tBkoePXiHA&Z6pS=9sAeH<o*_GF>ondD"$T+XH?\GK1*))!HHe/`JIHT7>'
|
| | | =ft#tZuT$09odWBg5%L`fc>e^]oSC.*=d@L=I?ddq]N3bHs)GmZgdAu$LJrNOU,Be
|
| | | SV`EHdid?>[Fn_<fkV_`d;`=M_,,upg"iH%3HDS\T\3m$f\$ZBZ%#plSrHaP8DTcg
|
| | | SZe/m=B`<iQW:>Wae]TT6JD[H>&&2l!dEA`a#GdHYH>.cEY42NQdB6?.\(HMiK6s)
|
| | | /R-qe.QF\j=qk4%ADBliS8)$Y&DJ1&W0[j:`rW=dO^'[[5:[J\M^9g_H\#G?hHQ_1
|
| | | fp0Z)rNO`#eD#,R>%O[;7Ch1GfirI?>KI/Ec**f%c.i&d>Wp>9nUt.)bTmqG>%P[\
|
| | | L#+Q#`@8dIh@72crQ?I.E!UmVP+[uo\CN=5OLC/6h),3Mc+r.h/RKMFgA.e<c(PGQ
|
| | | _[gLE;C0g+nth>W7N)0>Lr*8$H;Gr"f&*%-$G_9o9+m98o\['R-JeUSOZAT\[GWA-
|
| | | &0f-H"p`n*oj>=B$JJ@j)Z!j3Yhu5dW$7>;E@tYJmC?6B=E@\Mr@j$j*0*n9b$kOO
|
| | | `@Rtq:6q`9N*6*ZjT[rTFlCF'Y3"Qg;L+dHlF"mHiZQd-;dA-IS73Zs_bL=LrNp"T
|
| | | (Lc.Z2,Mh3ppf![mol;,Np?-B*SiYt0F9lC?$7LQ2@e_gB0UX0)qiqNMre,^/X0\S
|
| | | (tKsAeGNVAR0jU9M:j/a'tWAt392*n@NoKa0osuhWN*gL?*64soK=KhjIWG:A(cCm
|
| | | lZj=&;2m<:T-D&iinuW'&6pPH)T"i$Yk][3N0DXPAQ.uiiESd=FQJMW?GXXW:*L!F
|
| | | 4C5p1.i)$IrUX62+rR@&=XnaP(n,!26JZN;j+]j$h9k;&X:6nkR_9&>;3hS5Yc?Xn
|
| | | @kMO@IM<D91?NIQjLu7;aPg\?<+Ne;8Ch4N!:J#kGiQM=hKk1B8?j@2^gm?cA5S7r
|
| | | Tj;5a?>$g_jf6gD2HCd^Wep^1kR#^CmHnQ=[A$9Lh`cbUp(Rm%VrrcV>cC2)emi7q
|
| | | AE_<4Nb2p;`a[rY6Y?%S7n/f&[W/8VEou-p]j>/-(/JQYCgP>aaa-/d-'&WIY:_M\
|
| | | .&FddYa?jg0cPig;E5r&63-)TJ*LXFY-O"H>W<"\VOC*Bk5.bc@'=<>M<R+Vl5jKr
|
| | | :9Ka,.->r_Q2qWRIC<E.Y0r=WCCK3Z>sYobJa1o3CYXo8<e"[UVJEl9ipb$)fad&f
|
| | | V<_WgiSL;eCB3WZO'AHo%J#C4>eOVg.>m8k+(`E(:=#,QYF#2klK4l.hA6hpZ"iQ"
|
| | | TanDCAttgSO5WOrOe/7Y7[%\\TheDQD<p"_IVe8/ZnJ,lCSUalh6c%YRqsh^ib$\V
|
| | | #/f`/_X"I*R\$Ho;KfO(3TP)(mM7qF-J[p)aGUh4mFB*bAYe^BUi!LD,:V-^HI,`r
|
| | | 3Q9RnS3WiE7eQ4:0IWdVMC%1qB)cNZ_W&Z]n&W2snlcL/cQ]>Z%UMe>*m]^gT@mOp
|
| | | E-5D^Y'I<bc_#?)j`JF[nF@6LD!mV8N,X=h^4_^g98P@IB-qS;)3QOfltsb>E7P'U
|
| | | 3<mm&jQumLn(mGH*j4uZM/@.DE\>hN58Nejdr@SQn:g%=+Zf/V$_%""Q9d!>h[FKD
|
| | | -==IJ4XhXrVSVb3+DU?ZnV73cG;O&\D=A=DRBI7kp@`OKAa[jc$;S`_Gh__Jrbbda
|
| | | ig%<!qge.m209p(B0bd(2YqC%$!_*_En9UJk=BXe94t-;F(Ze7rtH@u6)fTCC1B5-
|
| | | D]%k]gU.P/EYd[+(HH3\`Gs/-867;6LI(C[i+oM!=JgXl:F7Rm=7mpdFmg(9?U9m:
|
| | | ?#kE=EfWk4m\Xs++S;9cFH8pu?S(iPd<&FunL#7AlABOF<VFueF`I90N^S&G1#eMo
|
| | | mE\l*pBkiBFn1;kpH@@*a("Tt?u=!bN=F9Tf\JkPfkK>"offTorU_i>RH#"d)!#F^
|
| | | =+Z;.0dqkR-*WMV.YR9rKZ[qaP)TKeJBrIMUtD<!MFd@LU/(%m#jFnE6KE"Z._th?
|
| | | L#C^F@[E!u%JP_7rbmRULmO5lpR<H-(jVMNH%sW?PG>Ue*+2BQq79dUb6,:e!VltW
|
| | | H=<E3^Rk4%UGjdR_pG\0:TFg]Uj4nqG[;SM3gk:iNaaUXCdJ&dU)Y<nSaR0=.R0jJ
|
| | | 6%!4IZ49C5("IYDR/%D6]G&hB.1#X22mE1Mm9r8N'N_qWLOF(/W$QDK@$nBKhm#S!
|
| | | O,WOhqIcu-GK]i8CO2V\Ge_CJ-`RlDZk"P*@ZZ2DQb3oR^<g8uqiAT4,JEI\]6qZ9
|
| | | oT<#bhml)B_gDbVID=J!CJ`'tee*?9#Ve16GLPPZh+X0Z/`4_$-`qd:cVPG"GU";)
|
| | | -ZeB^P[k&lZ-=joLV*Q;Dho=!ZMGO[hU?reoQl:)rssnbGHd$MmHj<6Idkcb5PCm#
|
| | | W":'kL]Gq6+;kVXio,F/BJU2=!CII?i*7uU%#5B[Yf'd+(dc.FfQcIt/s/DlOD%$3
|
| | | )%MHgi@pZ^87jlCaCJd8Ls@XWR8"u[Og)?53>db<0fZ,[CClVfB2CVM+r(Oj'Z!-r
|
| | | f[rG`&-@S_O`8BP3?#mA&j_?%BcsU<Ku7??_KQlSN?GW$rEs4r),r5@MsLooGo'fU
|
| | | Z?^E9@tLmd/65D$U=D-0fPG_.OP7u<*(ob0l\3M,7*4B,'oPW.[@*"\`YcoHVcP:,
|
| | | ipRe5/b5UB`FCCJJ]2B7NM)7b'Wkna"-aX!@'_jUN,CT"D<N3nD&\Wq*/s6mc=jhL
|
| | | ;p<q7&_^9TMoUcGYT%K`9;jen?ho"dOPB$e(O%sdZ@qSZO7U**^G"?Mm]<Tj`:c<l
|
| | | 6dXs<kb<gQL-_2;gS!NBeI9:`]JBCLY(RkfL6#":Osl1A\GjG2o,<am6,Zl^3$GUj
|
| | | YJs,?C@O<_]L7kd0k(X,0FbT=V^@3L%a9\81JJ=rX?mKT_b*<I-;(DI)"G-C7%G_c
|
| | | M[Yk#6`l!XKSHf/%^H;E"NKWHBggc:/+.N%K"=^O0(;#B,[0HDY[eIZ1Jia#/&Qq_
|
| | | %.ce?'_=T9P!i:n\gTg_*6_%O,e5,#N(g'3.MMHu7C-2k'Za/<D]GoZXEkdToV:SJ
|
| | | 8>rm_'[tG$^s5l$I9*,AZt#LL`/-n.77qUM_^iTfS=<kN'(jF<9bYL,2MSPc!CFqp
|
| | | D#H+n.MZp&2sSPoY-4mIW#Iq!daGb0JW8;$?.,K_fI&A*s".S.`V/o\YI!/j?nFNY
|
| | | /`01?"a@LZ.f-K]b>!Y`f.6-j\>YdsLr%r5-19jN0J4RMT\/BZ(p*/F:8l`=XlkXt
|
| | | (uAP$j4T`42kkQ)bcBP0)YtB-JYjF]TQcu\)SGb(pHd`k'$,en0E.*-^9i"rO(_2K
|
| | | M#M)3Uk]4S>4_38;n8C)\j2VeTVk%o<l)-/HCPeLlI?"^H+9tM/IZ"nElceXnHSud
|
| | | #8:G6XR++;Ff%UX9)=AKNl:*"?I@'9al[>%?TW'X]T4X8fh@=Ac&3%-O)P-#B#Ml[
|
| | | 2YN2=d^HQqfptn*V'Zi*PM1aW\r/%5]4:`7pf?98V"iEeKh:R@j\;WDapO"Fl;To6
|
| | | _WH8Z',3+50+m>C>k02fEQaZgeM*r2YH1].>L0k0nU:N0nZ"`VqXL*dFjC"_`9e1m
|
| | | 7c@1[SQkO@aM5--7$\`/?>kDD]@IDUh.rr\liGbH-$ogOX3b%I*SS-%Gd`pu*dWT:
|
| | | %4rDLeR9(iJ7LZ]S/'IRMs3Q*L!99'dMTX=)*h@.UlQ?PC;lm_'-O,b[MA?[VO0p]
|
| | | Lb'GcQNckNMo7u;kOEj]aHBke"9Bgr;BZd,.Lff+5Y!P2M`'^?AIuCj+L.4[7WUK9
|
| | | T[>o^Kt&+a[jkf`JRW(aI:3hWfP1iU$S"]A(n;e]]a>)d+D5p;(@tl8Lj9b.Y5f,*
|
| | | #pd1kU@_#+XI;_T(1q+DQ7aFL9W#*,;&.7G,[eFa'Vi<A!P:a;ZFI-5EfDX*A*K/T
|
| | | b$@W&geNu"\<[UImiLKHS0[VM2=cEO+ur1e,dQ/[F!QUYaXX2nS<'*c^&q)$)IfO7
|
| | | )Oq"X7M32Q-B-HE,SR%F:/VXbbk-aHAE:(oY]2UtN9ud]jGcf174Ms:PEVqRe4PQc
|
| | | L'l<ZTa#4)cq.:d.!"YYkoO/(<OY9S_ipBT3aS[-F%9fC_D%p/N]c#M1en>hV)1MP
|
| | | &YbgQaF+=OPf@Of,&gA:<B-N@*dk4Qj\P)_6(`6kIh],";5X!JSrE="8?")g%=),=
|
| | | `<:f=H/:lKl'W]MH9<pmW+lh(+0-)^J(;W]N[Z_MWXSkqQa:^S!L_f9Fk!7g,K3k;
|
| | | X$S]:ieJ*k="K>.r?+P3Rb/m@@1'sp:(u:=U2i*(M9MBgKS\h)"A^:=TJ.pq@S#1*
|
| | | @#<%B?TXQWXBG[@BaYBAPVKUN8;;O$RK4V1PRT!.B[U)jM7EhN$:ptkqPK@.(F'JG
|
| | | )4=-D?L@P*\0T<9=U!;[B:7JOA69d7o#>DSBi)D("n*-mqR`o8DD29PhGYrG5mn\q
|
| | | 6En>[eKdmmiaEWPLP].]ckU066(04RhYF&P:0XJ:*?^--Oq]k4JElP,-*oT>f)',^
|
| | | Dk5oD'mdQd>?JM1^)4?Hf*3)&aC]5XVhl5V]+HgH?\m-h?MD=8__ri2eNk$c7Wfs/
|
| | | bHahCD4J)r0KB>6'HG2=+:U^MnJ4Fq*TYIa^Lm]KSMDllT!X_AeXccYfjS]JL.2:X
|
| | | rs7]0@q8Er4$&]JYapSoPN7YPE*1nU:Kuk<ZS$,Dmf:hj]]u/a_ZI\Vb<"PImT_PN
|
| | | `m)(#L`Lf-h/8@7WfiJU+Oa;21jQ,Q8-IQ-q<iGtg,(lbI*Sp)Q_tFm*Fn/"P[=Is
|
| | | OiYpbP8T9+(ddU:$P^K,(nDZg,VE[c\MM`:__1"t^dBu6'/?pQhj"XtXj1?m/5<]?
|
| | | +Urm#F.5E>Z+8!5c#'D?#0>AX..cgh)ek=2+k_3]`m<'IG..LsTt=5XY,Ph@2Um-1
|
| | | )j%jQAKA:hY4?t>l[%maEP1:Rm,*0)EO.fM^NVmEhtE[UmN)t&F_44qq);dsP"*'b
|
| | | oU0'&W_?1]Lg09EU#Y^ZhZ0d2QhAp<itY4H(A=#+q*-%--]0["Al_cS:@TM#l,2Hm
|
| | | EHaFP1#neQS]Qh!PF%/,TR@6*nr!!@q@-eC715]$UP<Mpant?CJYVi-gdc[?=*P`9
|
| | | G]^l"ILbffkadL3DSD7a4%>2]/ILj`0#,oH'Tki_>GUh\<X:QtR`TrkH`pn45.c#9
|
| | | kb[miaj0Y:Gue8(@"Vq[%i$Wd^Q\'n]#/b&l-FZaqBV2d=`[q6Fo5Z-n3(MTQNAPZ
|
| | | 4*aKk`K7(qmml^MH.XgH$dSUPCe2C'F6rmiN4]:!*dhm6.=V,(r#]:or^uN"88$7r
|
| | | qIEdC:Xe$h&&RjcI;deAbGfRE2<\C*;/H4;Rb>lLq0t2ZPW?=;s1@pW[83sH-+tLY
|
| | | T$aTf`M4K<0CU402#a89/8,m4/EH_>E/;e#r9Fdllh2rb(bBV&!K[<=YUkq]E2`7Q
|
| | | rTdMd"mG!N(+BeT!ToOoO:(pt._"n287J7lcl2Y:IQHrN"je[r:ft1<CBKX5im/,9
|
| | | iilWr`:/ECY3QY[Ug.m.P-<.fB<U=VXbcKT,6AF:6SI+!E(H@0km8S"6L1BKY[Y',
|
| | | rs;<t$';HOOLF]].QS*=^/%"T-`m^e])`=fCgr;2:u^joN47jp/OB[MOOXJgTQ4KZ
|
| | | %uB$PciQ"U$P5#\&C;"#7Q1oui=(eh.AMhQYmUn8&117!'(EnRY_:QRLrmVHj)0Ue
|
| | | mdMWdR/!W8b"]r0#uK7b/IJ[9$LB2"6u]H:Bbfr7<T<A^j)Cu;D%GsnlJhl=0n>Ms
|
| | | 2&EN"0ThD00iDNA:6lJq/b+G!;3iEEQPdi:#3GPJAu)c\[i+N+)X<VM;8X7_!\GY9
|
| | | )"G!LZ!ar:fYHM>*)P_9;.:`SB,pI,[;k1LD)3)MpA=3hr%V%#_T'BL4@@C.GO#hE
|
| | | #*^<j%Rs+Jg5r6cc<TP\*-eF(,7N$FMo;T&AiTt17Zj_pXZ/BJdap6$\PaLp7./O0
|
| | | =K4^-Zm8?kEb)Y9BH\RD,t]C(Me[Qi'-]1f,dMU/dVU:KGV!Bo,Z3;F99gppOX\_8
|
| | | )(9,AWiIMC.^tS:DK:L@N4KGe3pEAX?Lgr.Di1_IL@_.i(.lll..mBLj<HFel*%Ut
|
| | | o'deI)!RjIZh!0OnjFd_;F_)Y0S4D7P7UYaAM-A3R&j1LNC>F]jWt3o`?I:;ZS&eP
|
| | | -G7H:P;;5?P;KqhLG,H6->@A:,3&`&j<B3M1r@UXdk53)RkX'q.'k%]ikI;VS<P7W
|
| | | ,_M&O;`6$:qF8]*2^11<'1PI9CGog"3Q4NRF-\fWO?bBqlphJfPD$T4)Z%d$43rgE
|
| | | V:]^L:e;n049F@mPGZ@+QAfl-8L@FiN!MKYj?^+S/]-$Eo?cY-2`Y@^-W?lcB,*!B
|
| | | .55B[VN.)g6tnoN(<&!&WmcVEBsd-%B*f7La5gXI@Rr0cmR])=0^N!2oA"Z@=?XOA
|
| | | 3$KY1o/**i"ZgE[h=NaoW?4)kpG&ZLpp;BQ<)>h61G\":3DP&o7O^78K13q.7ak=Z
|
| | | oP$c.4>CPR0g[fF'UFf:I7'fDRe%^to8:M]EAri>5?*di1c$k-EB@Z+2(Q\:PF"WL
|
| | | mO=tg2t)YVdk2jt4#pj?0Q&d8o)Q`R'Y1U;GOt)N,64'Nn0\nA0XMEKEnYE(KEY9#
|
| | | p.8mh`O9=AhY';O4@5JZ8T.NPkq4\KSI]85F=&H:QC,'N3cr5Q:>."TA7!`r,]%pn
|
| | | Y@K;@a"lZhg0uHk6b?(q$SOAP,\&m3dk:`DB(eW+0_LBjFbD=OK/UYeUebQ'dt3kG
|
| | | SsbkBBU)7;1`]T[HU!^kO!_JCo7hUUr(6,$>c;R2Ji5LX!Et*l:ugXA24RT$?U]R'
|
| | | =VZ[6Q0'[Y<Eh>8\MO.Xl!%32,@H`F<n1D;bI^p+mlLo+8G1.pZns.1VW2[&6Uk]p
|
| | | 'i$Sar%DN1=i='6p-;@Fp@mQd3b,fL(!7`H,reI><?u-_'nKj#NDMNB;3aV9imV24
|
| | | F^>FYjKo1k<Mjfbf/Qe=<hsPt'L=mAZW6&HHIMALX0ZMTGqL@Y+a$7<;cd4#6#,Y"
|
| | | 2H59AQAg*q1H*U@C@aGem<<>tZY9JZ'UGIF'AG=\!CMtk3;#Vi6Ub7Z_/GTQDroeK
|
| | | ,E6/A*qi/gDh8,%e]OJM(F9hnF;:lGe(\HOWH*^%/_/$A2&`^=:NM,Y;Pgfq<?VIH
|
| | | a<t#j1?8;jAqWSFcS1UE2Wp<7G?1[&9PG`^F"=Oj%e/Nq4AC#NdF#BX(KPuDAlP#G
|
| | | BU-\aF?`ju<c5&0%b!Nt=/-bpLc3eBHGs/%'_\r?06[IgZBm\3-%9S905lj+I+1;@
|
| | | 'ZtdSYA1J`AOPp3i\O#FW2s'TO#.JgaI_1QGAAMG1)Ii:'>.nCODs283d9qOZ-R^F
|
| | | 9l[XsU?U9D,%l@Z[P)dWBil*t0l'8!,[Im@7i$QC[uba"-uqY3h<i:(GDg*-?[-cn
|
| | | 58+oY[2)Ut6"bD'F;?(eQ]XCsmOm-n*9'#he27Qm9XH!(KB,LKR#iP5Vh&ekM8VDd
|
| | | VgtY.I9k;R3*7M-b;c,;S48Aah'\YN1]3$[kd-5E81d.dkoq@>[.oo7NN(GcnhREd
|
| | | ``"a71mN]M_T@hHqi(_XP8/.3[uhjKX=[DlHmWH[=&q+(0-&t#=`XmkQuqXQ<\Kf@
|
| | | BLdQ8FQ5(-@V&Pg:%+Kt1XSp@=a:iqGQYP5pIun!TWY^lFa5GgR:+P]JQ&<4ap*]B
|
| | | GPoSb"_Cb:<>fnZ"EAEnAk+DF?,qG9f*!VJTQh5F1*S0$H(^H^4>fPY0PmE>2VK?8
|
| | | WfaN&=bbb%BcBaTa]_i'/IpNpGTsa$8N*m9-m\0%)-L\(a*Kc2GPD8G3Tqk8La:Nu
|
| | | ?2;uK.PZj(l^Y;L?dWYZ$.YD!]jM`aZe1UY=qWl>?qD^\SbKUfQ5uYD6\%'?@el8(
|
| | | F9uFPeWb6J'glDrieol66_UJL?),&e=qd2_AnbF<3Q(Nf)DoS<+\:0oO]e9%Qa:<u
|
| | | ,G?@.M0=H:7\Hom,A=ZWSObDAQOY4Z\!<<rQDHKYmh]*;%r0e,K,AMrp:%%hF^N%u
|
| | | RouA9!b#o36*6ThDi]g?qQ>Rt-_,IF`pRo;(?_hEj(rd.D]5I5f9B4%eYu]?XdYFJ
|
| | | )4Oc3e1kRkF^g9$`cfZgKhWHAg%eB`H?=9Fd?9hTW.PF7pUsJY\0sCVQQ"hJc"!%K
|
| | | HrArlf,8Eka-]D%;!.s`LSBR#MQi`m@U@*gQhcWL3>7rdQHL_IDqZe+75'3?qjPRB
|
| | | :aJ!1#of#g/pc']ZtmI0:,[>9Kq-3Z@kdkPnR&o.]6='AN^oKA4"HoA/sr-aT6oLE
|
| | | ):bA^G*iI_TfNO#`.lukhF[U-TGo@JQ;i-qS%tI>;X)#g=tYoR,1AS(Y+p2S:m%O4
|
| | | i^^X9]FIIba763V:fAeO6^m>;Yj<hgp7Q^FVG-E=3ZGInU8$a6Td)>:r*V->2lHko
|
| | | BpMbm,8\4LPri.+Yrkc;\ll#Tn1#Zp2Hn)"H]ols8#m(GH(-%[j12WjZ7:6iC1P(.
|
| | | >D-d+!-s2+aMNV0B,qYTTPJqV;WG;Q)WN[WB=lfcXtG<$A#4BR#W2FB7i]nJm.,FS
|
| | | Jp%!F+N.KF3t\a0D6!IUpq+gd4";Ykr'dq6\t^h1*?n)No;?Xc[_dm1&WV/`/(;+=
|
| | | dq=7UgKPu72P$[1Q7J256ni"YbTOBh/;d4M#I2d1^"-X.\AV!:rGctuC!IDU3k]p`
|
| | | ,SAHeQe75%F+!s>3*4[@Y]kL%VLn?kp)&0G-89k>;`jJ62-nk!5L-\:87O9C9L`"V
|
| | | q:k(8b5--Rh.P(</hpIhh'2=32C7(9Dh>q],&>'8n-F;qrSNEJf[#@Zh4/7jp"Uc.
|
| | | Dr$7Nr3!B_%3'1-7D'Mm0(:")pVI#@em^D0I$5egm_Zi$Q%_0J@KjeH43*nKUqBGO
|
| | | hB4o&9>p*5j9*TGj,`4iKH^R#3W+N\@hr#@:JJNY@0KbRrM[(IH/qH<-VS3Pr0$FG
|
| | | NGSO&^U@@u$TPD&/hJN[l!l\g^&L%JTO#QX-Mh$7$pWSV4l*+6PT8;YhRCF70/5V$
|
| | | lH2qN=cqtOVoH?H,@6]SSu'!sU!ih/`BL:ISrpJ;Om-F6A3D0I5!eCZA(.%i_WS.%
|
| | | hE^kA%!r00o%:fY*Fn5YY!fRjk'^2#.=K^gV8?]Za[-9P0sIo);QA`#ot4rfT2SfX
|
| | | U%P49=$LMG+)pRV?:>r6N/:@S9O$oD*VD8W4&i(=[h&9`C.$LKgLT:92mtLaUk$3p
|
| | | VgWb]BMnV`G=1MhqkKT9hbnFnM+W&P7N]j.+'?3`bPVSUp.Al2hi[gBoD1%B-,6fM
|
| | | hrXgP>Ta,'T\s9%2?JVC0o3>Y2h_MA6V(>#DDiD!Tb+/1e8-mr7"rN%OMkuQKYkb3
|
| | | 0nA7J$^(sqOEirB?nm8OA]"P]`\S![_rh*[JCJKYR7=-MR.UYu23ULa_jRlZ?nNFY
|
| | | `pd.o/hAiB`+l'0U^E`!(eCZl@>/%1/fK]t[ZSA`Bc!n0XohOlb2,.eN5lNGPU:Z3
|
| | | )%L(6+dKdr,*$,f10_9,BJlWG.^GQqBOM[B=<W<59ch2jcfQ_*/)HF,;SD9Dpj.C%
|
| | | 3]EAOW0Cu?<,Z`6cuOc.p9M"dgW9-$0m(3NQ\E;XI%de$fg3h_H<3:Q\7KI;<^q6-
|
| | | #)\2n)N8jh)UFaQ"RgZH<NY,5dC1))@%<q7Y?rCl1,%!h^F1X"m%1.K>>BmX+e"q5
|
| | | Z`94,*3O.b-5e*XpgjRpCM71A^Tc/3`NcU60+`k5Ri;AWaG`HN3,gqh`5S_j?Ao.U
|
| | | ;@q3.!bak:Yml%@OJ$CAgB59kJfu9].$E;@#0FNE#/[T*i2O>^Z9fEdE'#Tf^iEW(
|
| | | [`Sp+Pq7Y5Wuema@A9)3"tNo"RA%uDbhOhOCQ.\9Wj$N`0(*Pb,u9Cs2O$>q"Shl$
|
| | | 955B#:gnBf(dQ33k58*a.k*rh;fqf^3tqebc_tVuD)BY=FJD#(OQ?J&;ld]H(fI>5
|
| | | 7m8U?D&Skn6#^GRdY^C\?6Y:!o#'#kgf$)1<TLlKb\O5n;C%*(`t;2MMA7`jCO5#(
|
| | | L!t]<-O/ne+Iu>%])]ZOl54"k,>j\X5#Q@3)TCE3Rc+a^[=X/661"9g\lNNCXOCAg
|
| | | Pc08A/Tn;rgNY,cg<p`],l+pP9tp,-/gJbJ<]D;'k#Ml>"R.t.9h:;MY03;.0GoFf
|
| | | Cu5M-iK2J@5#XdSYAE/O9.?u:jY/?hYb><`F6<G=)DZ-723[``E(r<tAf*fiZomr^
|
| | | Y_8c&Ui`+g$ckC*.<hW8r9Z)G;'in%Y-4#u(%"mD)^'$[_@IVV9FQ1g<^EHI3)k5$
|
| | | "!XEH&jkIAM%3dYE@=Jt[3=8-+M$30qDc@^.iQC7<`Pb)b@TCC&Z"n(Ei##El\+B<
|
| | | eB`MqQ+oG2!iXn<ZHigM[#JXXZ8jjgMY#Erroj,M(-[=&M)Q*)7Wg$!cZb0k`G`>6
|
| | | hl%B<'_f(/EA""J82!cBKSO25a+rgH/af$)9rT5d8Aj=P_M@lBLW,6YgokOt5)(Qb
|
| | | J[$_;M^='<,!*&,S-O!_+chdQPl-F/"(;A<hCBo;\&kpbK'e88+84^R>6>rnBpINm
|
| | | 6@c$A>-*0H9m.7q.LaJ)JS'hMff8b;6W=a<.hEaA]/D(ihJ=qqWoa2RLk]rkZAC4<
|
| | | %;hJbQ@i8&kpeD7!Oft];&,<e5Y\db1:XD^ha(?hYul]1`@U01O>\R<_;I?kLkX+N
|
| | | Z7YNo+rs),RF]T*+bhT![5BfO#[nH:M7qA+P*D`q0dA;k+rWCrT&<S:Q]Z$Nf/OK&
|
| | | [:EEBF)k[(2'ah$f)\uj:)Wjo3D-%cdQ*(.PodGj!^oiZ+A:YK`l1o9l3L6!QA&Va
|
| | | O[nI@b/krqXsmVf`7g)\/:Ms6"LouHHS(-XVh#11@\r^crX:e<RcVC]S@N8e?(Bdq
|
| | | `]eAZGSm5K_1#&AAB:p1?qhZ[m5;,Ql7;,OA4U0:IRVXY:I6Qr9WZ1):L\Fli\*G;
|
| | | *6jPF5'e$Ei9DAbgn.$PJ@m*/6>3>BS:kk9:Ije59$Ij<957<;#UqnBU`k6:.X`VP
|
| | | mlXtr@\/F)l-C'ljJf/VJ#0Z]d77<kAjRo@oBHe0ncVI\Tds-L``Z*'J3bH<i#n:7
|
| | | I1irnr1qS&-rf$P(3[Si;Z'=F77sf6@WtrmXAu)f?8sAH3aV%Pflb[SmE="bAf_>9
|
| | | NFY)0=-VqaM]H%NQ/4eF--JWO<I?fM%_PQ4P@<KgO)jd[)qTB!A6K\!,,tui.X;._
|
| | | 'R\Mo2DG$$$*Ij86'S%*fag!_"Rmhhd[LfTLt^@5^7F6\T/0&;:%bhPAapI[OIW&m
|
| | | 8YgE?8L&"l/ASh7@R0>I[mghp<k%!$=-G[]ROJ_LUhd?'ULi7QM,Ni1EbfqBYo(,!
|
| | | #k(I!C-h<&;RZmS,[VtP?5Sf"[5"!F-(+"B=n+Ve0Fhc!orESf=cB[59*/Ifg-KPt
|
| | | (Ll!LU<l<6U="]29%H+qProcQWo6B*=BNC9WJ,W$b=KMXPpft_<h!iTGUuB)$Ufj8
|
| | | kA[RS;KZta@.^aHmsQK:GlfCbMH%,@/eEAP=g+!9@=TW2O%\qRm,+#PheCoC]IpZC
|
| | | &?Ig>;f,[7V4S]6Op,oA\OjphL5":QgQ@=9af/j41UI;`?cit"a)(i1jPklEZ%@W_
|
| | | 'lpB%_RuV)]j*=X$S/-l.TGZ3qogO8M,[NjP-c+M\X#AIi:Qen-k87<=RT(Kh#Lcb
|
| | | *Ve,1lV)$:XeJI/Q_4t@:$O95>n=Z=JN*.J-s]P,'.i-+#Kp7"SUE)Heh>R;WoPc@
|
| | | \>b9mM7#>q73,$?LQb2s/4;\sCi,teO3GckR>%:t9?CMHBkq#/VVPg*cA]5+Zb]ei
|
| | | g"ktp.hUR?,"QH/(%fm%nU9>$b4X&B%KitT-NuQn^P&%,D8Rlb#Z$bkV!m#c/FI!*
|
| | | SJSVa^bV7l:ZdJnlBrE..>>g(e3uMI:od@*<B@/%,B,V(%IdPt^`3[T.%J5e9b(j4
|
| | | DCsQ)"C$XF_H2S>_,r&^\g@!E1gKjK/gHHUq/isJcrFW'lMX5JE/C-`HL!HP*4YL>
|
| | | Y)1Y"(JSj(n!M.JJ'3dU2si0Skk#h]aZ3OOljJ?Ho+GIb3Xdq8;+=/uk@_d/.JPV<
|
| | | om_#qore-!](&=)Y=#t5_/W7&XJG<Sn)ETI4R)5#UlHpf5<HLP__^BHP_S]B6:X+G
|
| | | 6=&31Rh]DGm*2_k,m<\Hab@^aamiFtIE8bc6@<0$Cp?dj)r'%f,LCd%[O[,3PK`,Q
|
| | | a1ea`9dQRn*5AW5@qHJOl;-ER`Q@p>9$c]`oBIbHM;N<V8gOTNQENE?p5NhKj(_A5
|
| | | ^A0uD]De9mZ'r3R\4Qf_LsEdLKT$#r&C?mX"-&L3b,#tb^mOB$,C^k@MBs5"]dlLd
|
| | | kk$cCd_-&$1l30\dD!*Mbm=s9#udCOY`cL>%7"mI6%XAFJ@l;hMo!3o4Sp$A/0?:`
|
| | | a;<>J'f3_.5aF_,f=V+B$eu^3R1[%LcGE^UN`bp:Z`&de-pkI$R:EL_\GF%X<[u<I
|
| | | WfRcZ,'LMQrMAQp#S=d=@5J6@*$^\"$F8C'WN3k^W>aP3(NN!_#mlF[*$Z.&Lh&>1
|
| | | /*"22!Q1Vu]trJk#o#_k*0_t_MGtY8Gg/<pr!ID.+j7@,jA2h-pq%C-U>/V?/456W
|
| | | jM_t7Q7K4t,4WWl;a`S`_q[)eHGi(q]G![`,?W)RWF$tT<t+F_N*.pTEB$'/oG/uZ
|
| | | -\I?c=^8pc]"eAs7EW4kLku[FP!mG:2,jG[8<Uq39tpHZ7JNni;tl:8fgJeQ5'Z]f
|
| | | oIGi(`lBlY7ES:0CP@W8Cr5MHRLB'aA/iCuD82gd6F(5@C[]:XHjaoY8)-KF9IR7u
|
| | | r=T6,SZn!mJI.oY-9%^2T(IT+@(Nq$Y/oZSMSk[j))M^H*tR.5%d]B>g\eZ%gW,PH
|
| | | (uu=LF=Wra?:GnNakRb"8\QKj^S)6P`YmX/C0[9ZY<mc%*UHlULs-6;UbKBG$c.A9
|
| | | WGJH+#+BWjb'GtE@YMYbYY'c%,@Ke/q$dlJ$R^b)Nl7_<Wotg/Pfc7BM'@Dl`4HTO
|
| | | L'sZpb!:M>6AZpt--CIi%e8gK%&=1JING/H_0i/oWh,#\5>+i./)7t^OHH6+?(RdA
|
| | | b4u4+qL4T<cm0QSSNuH_TjJ*mRidjdb^c<SXOdam)pI*Hb.<g2.'=*WPDfW29\`gJ
|
| | | &HP6=i$;b,$[D,7=k(1XWCkCZQ$RP2!qac7\">.J8j)9m8l5m6`m1;e-t;,ZW.gF-
|
| | | oW?nDbp];"qSjRM:JLnT/$),SXQ:PH2$ot\c;HtP$6hspdZ:ou/E!!nCs]3Q-jbKS
|
| | | 8jK_A'#UdBb6bJ$/7eoXX+(\l*u'QQbcnr7:u7)"]t,(a+oM5[Hs=t!0ghcL'f*7Z
|
| | | qGKpQ""SX]7O5:5M*@Sl()fLT`FR.C]*,$h)c=g1Wmqj,G_[h*V]6]sbR.:OPp=3U
|
| | | lcb!HaJ)\W)XJJ4nA@h6Vbot,>"h=).jMWmSO!r_eLQHV7jZQ,61$D(nmIFk6;nmX
|
| | | SDc,!l>TBNd6ONg%2$W0`3bi[LEMIk'g4_hZ48=Fl+t%`Qf;qS]MDG8^_\HY+/Lt0
|
| | | HA3//1a/)o<1,"1OI+,'8lLhZe/ZsHV+QUXNZ\n6e6*4hNC8X%.of3Q+;$N^5`MX%
|
| | | R6XAMM4r$3i1`qEK!^Di2,kCBkq1'<)GZc_O8<dQWQA/OSk?R&6<fM56Cs!4=h+6q
|
| | | WgPHfCpfXn;,XN#MBi_4q%VEVOeb:>eS)E"U-:(b1_A(cd3Mst@$jchLE]/kMT[MH
|
| | | qZW3!>Fp6\&/6NQ^rW;01m!]$OC\3Ge2Yq<"jj3k(G.gB>Bb=o$%.O)9&/36a=
|
| | | oct9&;io/KW_6G'M@?VDd']#H=f]os<_"/\LpC>=#t`fj240Oj;(XdlKbl=PS<.R^
|
| | | %#Fs_j7K/]1KgH^8G-sl,r(ZWXW"ld,Ip=<4'Pl&PY)SSV0TUR[AD<n,LhFI;YZ4u
|
| | | 'rS*d15O;^fh%,:1At<\2]IR4%F(Xs6)ofmnCZGPc1*NPoot=[57fg2Z$em@Yrmr@
|
| | | 2PHC('PhPbM#3QiPT[q9`fW`T76+>\aMJZBeCd<i[80/(7['s/<@L1<9nTO,^KLe_
|
| | | %<8_TJ;;b?\(sTLeWkVgbmmb<-l)fc=G:/sWATln@+TO3$YucndfmQ2DA/"O#jYKR
|
| | | WaT3J7bhEYN4#!Qh,"o=\^r-HLsc'!Q#Kr(RhXCkf28\V?#*)IKoJde\LD0PC5>q[
|
| | | Hs:RH$&.Tn`OVD%A_7_$&"Q&Ckc7XtkmMp(fP'LTQ!g;NM-oX[<4#Sl4K;NC.[]W"
|
| | | gbYO^,3..6\#fZ+Nc#*T<?bcuL>Y,4fnlO8m6b$YZAT"Jg!"bL$Ir;pT,Qh:=qOi&
|
| | | hA+KVQl%!R$r*q[E/D-%SD'pRN*WPhJM&R]I?F0!Mf>rLFUJOsn-p+t98'N#dhj<5
|
| | | 2G5@R;pHVPc7;*`$Y%@Ibd--2;HD0*YU[XANCfF/M'ujH);&4,+YtXEPY]N-]$!_D
|
| | | ,a/V__Yp`k9LN.$+pL-=jWM&'Ht2,S>HJ+O_?lP/b[T;'1"oE."K.*W#Gf0fb97&.
|
| | | ]8MKME+AObTa"5eOm:9WNT;g;ckE*HDE,>*Q;+ZMj#c737N/R9ZA=fL%mF/EXRSWm
|
| | | dB^>'L`T5k9K95m+sDX3?hQ;8eFY&Q1Q<,hc?\g;AcGJW)H:le,,EYPABO$X?Bb(^
|
| | | A]&I1OG.+Jm,V1p'AX<t(o:fbb"a(^'5IiHOtfZ[<4"oNPN_%%:kC9O/(I;.cg3j#
|
| | | KiHQ<d`C9>kT&jJRSkfYJ[O:/19Q18gf-mn(bsiGMS-gBY!(q0H-<W#k.TVbaR3\t
|
| | | WKY91XM.ru(+l0sg1Il0',;90'-66M4Nd_bZOUs]gi:L<P[ck_i`*/Hna'`i.;%XF
|
| | | OQ<FqFu/9O*9pNPg:=tbJA[HcX@Gjj--:BT!/PBhdhl)hhM///Z:*Pgl\b\E=l?p.
|
| | | i1'#1s4,4DZLE_tYdt4%h30J$caC.m::o9V4Gb3sC9,/);0"YI^dD59M:q$,\SgB3
|
| | | ID_)WZLL0h<j9R1k724"CUmeZ8HY1_fBTA#@F1H.QE$D(gH$+gm22*mSCjW<Weo+r
|
| | | loPpJR'Z/[W9k4A,A#B"A"JLNG9RVVl]/*OaSkKSr"?MsLu&[Yj#$025.dJUOs&*=
|
| | | 39hE-.^i[G$3%pZp<JiFG$@r"C8UD)(=J$_q!I.<m80Jt?L*Y8k<LrmXG-J0CROTM
|
| | | PcZPJ2_O5ROdhkCV=$Ch(O;-[4(V+%JsA.(m6U7O@?lmKcY_V)#q!ro[;'&i:)DL%
|
| | | lCJ)n>$DBcD;WA76G\/=\?YMf>:dLSh^m:DR#7.5$b'0KYMTZtq,?g4a;S$Tm$\q8
|
| | | 36hjPZYL<?LfhrqVRsCD%[M:[N'hH@RoaVj.?NuFCD"o0Z7KbR.-c7*Y/n+LZcNq)
|
| | | YRC$kEmG45+MbM%/@513'&*Hpn;XtMUD&P)F&rVcQT$R*b+n1?(AO_<+"S.2h]Epp
|
| | | o:]C/\Sq'-5\)kb%dE[!ZMAR@D"KhaEDK$q$g>NRn?n<<VXcb1OY*aq3f\,?M`^EB
|
| | | BkY-L/[)IPE:6ZZ=d7*3[IYToB3?N^Et@l?%GYpjo[K,r`tF546K]'9#WO9]PC=6V
|
| | | :(F8VC%!^+bDmt54C7J;!Q3\:0iB4E%>Z*>Q:BbPa(6'2AkCXjo1rp)nde;P%l#V>
|
| | | jC)aFD3hA<F2&V[]5Ba7ORnQ(GEK!"%&fL4=X@4P[eI]J&e4tWms/pRo(=]$Z+"e2
|
| | | 8kO41h0;2bZN<J+[8h:GASJnZ_@LU/=YNp$"*T00oo!PUIqT2+(3R2cp[;mC+Y\-'
|
| | | :3M9cP#aSe^L@U5G4\(,pQ'/UJM;:L&<*QfL`?&3-7jC5#*g-upA];\,!qLQN\j7O
|
| | | R_P]?E\7$Ibk`bZ(1Uiu5DU?+JH/M,p(>'.]31-m:).59--rh'.2fRZQ("Y?ZjH%V
|
| | | OF^X"PmCL9,\[rM$',BO[u+'X2NaMg0<mk=LjTH@q`q1Z,Y@&.SotUB#Y.]Sn=0;'
|
| | | X,XTq3SB]17"jc2aF(f>AESYniS-\c_RQS%HZXq"s1&kQ3C:85*[ej$s2\EVNI?l(
|
| | | B,"TtbCb/>:g;PW5K:/78'!\qC])X"HU$K#&LRK31ds(YrV+1(>;?$<g`Z<3fH9B&
|
| | | O4rM9idDE<rJ0fhPVR>Flef>p9D@Z.q"];].u@2?qd7#H2mbJAk^=kgHe=_mddIP?
|
| | | 'pA?DK4oc:L1:7g\8j8?NJ%BWZkRC4*/m8ia:o1j2&_J[&@cO]BJPE5+E12Fi,]6[
|
| | | 5t1r:"AUHmP=c%s0lY'A2iYc`E$92['MT,?L-pNf>[fQ0L^%p7W6fAoRLMbDO_D[C
|
| | | "r`:-7Slt-Gs2d9+B9S(ggDuW;Q01hAYuR6*6lD'g5+Zt3NZ@5d3DUA>VmF[@Rk`D
|
| | | p4#@H;h`hCL#Q2l(I86M0`eWrM1XbBd0ttIBeGt$//Bd-k'M*H%'ga%VHZ]kQI>EC
|
| | | %/,:fLBV5\g8[]hQNe>Oo"1$]6[9$r<Q@3AV!Dr-T^K(,MH('i1Vd17_]CI)Doh6f
|
| | | /j!nciY.`=<d?e;(MmtEl,5#Tra-&(jlgSl\u<YKE9k+g(h36R/9A]/^?dZH]=nbI
|
| | | Or5V7!c6hun+p-+,#Ef.#q[i(7\ISX\sEYV8h7+a,##?nl_ndH9)qBk,S\Zd0">eu
|
| | | ,CtI_*/?*B>`Zn@P:2/U9>#Th6gVI#)92![</2gFCG-f%OqJNKaqD%N(^(65FH=Sg
|
| | | ,Ohr]OYT1]To-G.q(;-rW4K.tb.?c;6(5m$/I5He%>M]nE"GaEN8BJJ#^k^:9Pd%e
|
| | | (FF/b7`D7Ll7T'=F)-YmX)jgEbKmH!QTu`F/?n25C8BRbdjs4b^G$'-5qtiF6PP]d
|
| | | eH8L89%!KD>+uH>)UH=G_d4=<'?VJ&Y0rSj@]dpZHXFl(_h/sTa@/B8/BSoeBsdT<
|
| | | @\PEUjeD[_.OtM@g?U.qD)0]mreRkGqMP$YQ4:nS>76<Hh^GJ2I">W4/bK&iX:di'
|
| | | 1c:9o'-u2aYdRp5E_BkLME7in99SlG#VqZuP3tL@)W_@(Ts/FI4)tNnhQgs"AB*D?
|
| | | &e`Y9EjeMljR<^tRU'a(QC95\\s%J7M=^e2WBm<Y)l_HcL6;b06C3e=Y&4h4-negK
|
| | | /3[g\BS'H5#\r]bXo?%gBU[29WP]*EJ>=VQC*,np9]"[#Ah62Zh1goaWq\Z6"FeEo
|
| | | Y>cXAX;aknW1f49cC1XH;J(jWW_d+E.IR3+Tf_\RT+%ff`G63%a]]o>[+uEXX4(jr
|
| | | +`HbPKM:ea0iJ.BUJT,Pl_p*S=bTG)\8`iA*.CU`?++s44Ye'B%tr%ce=T!&X"<We
|
| | | >D_psl9f!pYKc>a1ZXWGW6B54DeZ;D/5_`u^lH$XZJC_BXpe6(+MX!"eZ_WkIZdAr
|
| | | n-9Gk:_6H>;'3?90l#\LW5oP4baAr-"h9O7!,V$sau)?G60]<i!sQeg&R7#0fKj1)
|
| | | ADA?8,"m@q-%`Ek%%0O0`dSPkLd6.4ZHmBlYcL.s@)Lrme3_,8'>t$7%j:d'J*32^
|
| | | R(%\A&S)l:#4;l:7>h[c;:6V<egj-JD['/$(F*^CLGYaq&*!s6LesK?,fLW<T^5d4
|
| | | %J7EJ8#[@t1'0lO&B)V0b8Hu^HZJZ=)T52=Ef%FCKs:@32</@V,V3:aM!2jiG``B/
|
| | | S,t1Y.N4IOmWTI%7k6?;[_i1[?f_u;2pJapP=ZE5,.]q%Yq5gb72SQA*#4`ZI.!2@
|
| | | $Q@ib<gLZMFi=K.6Y$S.?P$*&Zal8$jndk%EH(>>n7nQHMq''?C/[FZq_h:*5C_"t
|
| | | l_h6noj(h`Ci+2J&7aScV]pOuPI78N\P3*`"Cl,io\W1P$TdA/7R1N+Ike@Y4%tlO
|
| | | 3/"6#9:.iiQoqg+<"^HR$(il.9aE3?.UgQ2rBTAah$+$D5>TCT8?!m,DmY719Ng(K
|
| | | d4EU^F+D6RpUs!:XQ#nK6#B=C2`E-j#,[S^GSmF]'Ft']W6*bDTt-3;.L@2in5`rD
|
| | | <;*S.<1YDY+b^rYVZ>o.(9:-)s1jJ"=J_L<@&16'9tI$%MueHd'tQZ;["T6m$'Ulr
|
| | | .%[/i@#!i=I"V$\Jui.\.?FF[O2T;1=GlsE)DOT52:Y/5gB_>'h398RJr8-Dr'?J\
|
| | | !MT45YIEdRI&/S;.FTJadKp"8917GU[$]S[+O1%GR\EUnnJd&aqNhPg$<&+8'`an[
|
| | | '`_-:$A$@\JdZH(_D,p2!DkQPU,J>NjC9bG7<l3T(drtLQFT;Ak(Q(g!eEU+%3_7"
|
| | | JcJ%J6bm+>TtiPj:d>u;0H^cI_YOIu`Y_(9Bas%3=,)h#)D7CF#ULJMKFgBb!C1]9
|
| | | JX!9kn3@i[*WZ_de2N.ZkCpeZC^hPD3FE7!JM9nf$\5#h!g'?!J5A\F#jA@pisljA
|
| | | l<Faa=mhlU%rSH@m00BXp8X2g'L5Lr~>
|
| | | endstream
|
| | | endobj
|
| | | 27 0 obj
|
| | | 57122
|
| | | endobj
|
| | | 25 0 obj
|
| | | <<
|
| | | /Type /Page
|
| | | /Parent 5 0 R
|
| | | /Resources <<
|
| | | /Font <<
|
| | | /F2 7 0 R |
| | | /F4 8 0 R |
| | | >>
|
| | | /ProcSet 2 0 R
|
| | | >>
|
| | | /Contents 26 0 R
|
| | | >>
|
| | | endobj
|
| | | 30 0 obj
|
| | | <<
|
| | | /Length 31 0 R
|
| | | /Filter [ /ASCII85Decode /LZWDecode ]
|
| | | >>
|
| | | stream
|
| | | J.+gME)=>9"r`LkU>_3l5WBYj7Dj\tJE18F)1b1"U_H'n3Cf`onhA-N!\-[5ctG6q
|
| | | E&SRBL6?P8/8Zdna,5U3dG,F?'G+$:F/dCJ-QJ.9Jrs`f?o&^\Ku5W1i)3i1&qNGQ
|
| | | lkk`iJJqqU!`b30-Pm4[#B9ah-8lDK6j9m_(s!%&N$\XR:tk[s^'H)AquufoJMmRe
|
| | | @&n8+iGuS;YbD0.`+bFOhX+HN^*=@3Nlp^/l%I5.15S`co8u=(ctPBV:'WKS9Zh3/
|
| | | R*FdR+k4MR2k5n;P+efg1q*mJj#muPn#\ShpUfqrbi!%eRS/8fR+TDe3Z<3i:,'[^
|
| | | /<e222(^N9.2.m[-StlBYekJ8&4g)*Tp@;iKEFK^0T:X7d+sYS!6@/0,I@<F1;SKS
|
| | | W<WGhW$2KjLh7JRb/1Ng!CMYW_D!.;C`"pBEb;2'W,aKo$K2!?YTR]]@Yk:^:hYTh
|
| | | Br[u:.BA,.1BgJSFHE0;)G63gku,NeVML=G&4^MW<;@n5iX@:a_*Er9N9Q8A`[Yd5
|
| | | [_%6u5[bF_kkr">]&Ra52@\\ki.6h38DFb?oADki%\n)onP<Y>bRdQ;JEf0hBJ<X1
|
| | | /P^>4"U+u`/i\ld/He1idi:WV7Z.lfZCoB':uhg/EnJC:l^I,C/-1p1#mU!7D&rnT
|
| | | Li.u'aaeA1UssX&Knh.2V\bA7,944H$NfmdLCWCD*!T&1W443(XAJXp6(i1NL'akR
|
| | | `3FGrR'8"_EYSo7G-"nN0NUM\FU#<d]l74B"j(=UTMT/;?=B'VP?ZX]YB\t"%L6_*
|
| | | !NjAfgrtDq=b`3?5eO*_bTrV228jDkitk`TI:<S4c\[A+VEc&nGHH@>]YVJ6O5ftE
|
| | | dr-@1hBQXo),NU4ZJg_nQt+[tIgH;4'&fBlfTQ4OkZ;W'G[!4XUO2)]cC&7L!L<Yk
|
| | | WCqsRWS86_^4b@orj.AjN*6@jU0%QL[B7#XH!+]<X_jkJ=b(2/iRqh(T]g2d[:i`@
|
| | | 4AgF,>W-Df_cXL7(IDks8=JCSh/g\,(&2a'E5Aj8(b,$Gfqbh#CD0i_<[_jCm!!oF
|
| | | P3\UO.>oZ+ghr<[+gpGLneet9^it1?XGX#/\6t^sHn]OS?hml5*;TP2_._XjUcFmL
|
| | | mbh]7q9:S-RbMP*F+5YgNkHn83'I"6T_t[\<GoLP@qsOR]K!\e89R%/=9HWoCp@3T
|
| | | F&54)bHHChaJYG.$q-5f20?i0>p1U;dRgMR4cEDLK.%B5Lg%2D:)X4u,*Mq]=ueT>
|
| | | )>k'*o!fG3k<-qtjY?tib$g55FC<Z'6Lku2T!@E0cY=-2kX>oI'%R8+g'tt;P)EdR
|
| | | qBcbQRDMLL$mI5!J[$C>_q5/m=F;nV0\-EB`HK?=905Ve"jO?i@1qPZ0PF;\JMP*t
|
| | | %Gm#0NbIQ9_o0_<<m&!oJEB%`Fc,A?1+5LTb`ag(%!*EkZsU(pr5Rt"RpYtGJ1T3;
|
| | | ,,iB[i:K0\-b7L=80J1?W=)eg7LR$K9[07%bCd$ImQ!`9"lV8YJj`<*][uT"@<B,B
|
| | | &98CN7r^5XbZ8:/nm**cHOcRA=I2K_*Q;#f>G?a#Ke-rk`$gm/LmaQeP=?b=28;-"
|
| | | >b[F\8l*ZDV'Y.gr+,)i><nL7XN53uH>%8],'d/YA'oWn/a\jta2!\5'QKbjTZ^.I
|
| | | 7("!SiAm%bR3Rk.6qNSKU5RG5Zj.ugjcbFZD9.9*l!lT5](7*MTqdq5Po_2DCEf^K
|
| | | CbE;.\7iQ4AK]gV8#fOKkpS5hZOOpoZ=80Ym6WBU3ePkHP&i)[eZ'49H6]ueM<^8=
|
| | | Wfuk,<Jm+JW-!9X<@X_>k#g,Id<_^tLmV4hAlIFcorKt[QG&_q8>'GAW$Yi7dCO!u
|
| | | >!j%#2&W>nL64r?U@Ue'FegPa-V168/>6t`L=lVU:`;J#,*_r!fZF,,XKiaUkam/n
|
| | | (t.6:qt[UXVL6LRF(Rt6!0khS"]2P8Eoh,9UXfci^j03kBmcOC'%4/9aaAB,"WaR9
|
| | | ZER#*JC3Z(k(SqWMcK&?1ac"9?.C]D6qZ>"mPN:[2Z\fXq6751gsi,8p++pm(N&S&
|
| | | 8\6msDqYMI&0'H%Sh[1e)00XIb);0%Nps83nmZm$S-40oh8:Bpq'%Li9#6Z^PE?R%
|
| | | ^`F+:07_]_/X1EP@`3\,6pM^>LU>K1*-G<Q%T[#t,p")u_HO#B<aaIY>pBAKCXj-B
|
| | | @l-+70j0f1c<h*VGmNnqPL!E7gCRn9U>/bo4N$>+/7aKuLFtb4`sA5Y&D4mSZ%bN]
|
| | | 77SdtXAajI/f_s#RPs0<BL&fqCrB@]'"6KSA0Y+P?l=-8ZH?1#R=r21%C88l`-7=[
|
| | | QoSs/].PX4rLdF6$B_nVm_*2TC+nXsVjIQF<NQ>8kle<4/E/@XfecXu[Y)VR-)BO+
|
| | | (dtc1Qdq$V:*PZ4A(GgrFG7U4QiiH^F^Zr?)0)i24_76NgqhYTXiG4Z7B6cK$JD7M
|
| | | DemU#Y2P\D>+,,%0Xi&kFB6u2H[06?[;UY?]?Aqd["q?KI][bo0Hr#mR]ec?;09GD
|
| | | ZC81fjS.1L)1aa(R&_LD="h@HKg!I:$?#>],e.i[3_):S,hK1DS+o&4@n!FqPc//N
|
| | | j?>&n=RUm.jDVo@$5;Br-&lk1-c)>a/E.WG'][5&#!#'_b8b'.4Nu01H+'qD;SNgK
|
| | | >#EQ5.kBhoeZH%0pj8t<S'\2"M`]L#`Hmj(WuN/EWh,#Nl5*]2?$gn*Rl9JE;5e&Q
|
| | | ^T*S)I!chg/AusR_bpQ5A%*7^N'5hUA3C:0HTuE84'T-bNs*%bp?6QVU#S9<Qf0%K
|
| | | 1%)'6/\M5WhYa0hhq'*s&C2G`SJ9oJb^W3H-`OJc40N\WjR-)%d,c%<+O/-:RrhZ*
|
| | | `Vl\>p<K/\\1Xjd>)*^_]cN'b/?S1%DbuugnC4#c`'lI`Rl(e3iVa6HYroe4R<IUW
|
| | | jr_"<A8]caNea[9\TQkPZt`$++lG.U.?V`ul`X4lH!f,n;i"VgU2j@hlA&Dpl9K`8
|
| | | pgZmC.E,nrM)]O:m/Q(@?qFJ:67@6N$mC.6!Tn3N.BNJ]4T2JgeIUYR&2r7gnq'H7
|
| | | h^/+J`aiIkhZ'CL"6ZP#8M&_;1,;0/=_TF4D^8]-,at]a8*9ICn9/1.H>+Q;T]2KD
|
| | | Vl9ec@],&-#j(:1L2<!0MZj0ZW(Ff-&:iPQ\HHk%#R>f&$%fkY-NEK"+tpe[d$Y9^
|
| | | M$a<[BM'odOOjBMDIUuN?E9n,j@op$Ya>ma"u$hu:pg4V_#M1a[--fS6S*j!\AVo;
|
| | | nAA(9-=W5eP6?rp[0'8,W''u3OTWT#-DDhgn=]cXrr2FME%s1\0_6!:hH).5#LM]K
|
| | | YuYlr'b/NL'W>"E6Ms!o<>4A-&l>D=OYG0[,msrYGQS:TZ%isSMMbq^Q12a"B`pb:
|
| | | Nsu\D)/1rEZ"F?I82R%c%?T^ucI?li;ZSRl(9s8C8Gr`iJJdWY'5;k+cqZ%;57=^b
|
| | | `\6?n80me(dgtTRO[ia6&`".Z'S9&]+>Ja]-kd<beJP2f?kNh^&99W4A6,u.("'gg
|
| | | Osjm\gDa$-HR=L@OI$lj4!=r>,S>MKiaX*nP7+9i*^t0";HErTnCfUF$td_)V4ucX
|
| | | W<oijF7JITcra]hHRCRY&uY*KY_[nYl6<M$0sE-gYsg!1L,%(C&9%tl`TZ8YJH1c"
|
| | | .gCPFYS@jm>/o\SQU5+#ZFX56o`EPn/LkrrOGOG/bq+]?-Z\#nnnSSQYTZoP$^.=Z
|
| | | rP\ed=!n!VjV[4eB*t9u00eLcbJmTp)*@S(Z>i]pE![&UU.\%j/1?GU&KI/:l
|
| | | QH85i?E'[tZ(tqb.`8131D<#Ab@3IBmkhoVJQ#Gqm>Ws/>r,!+!6<D,##:;?>:'RI
|
| | | 2*r!h&1[X1B/lWX3:eV/6D4[K1fgYdK#P&W-A=KnVF8MC3[?WWm]d%Y:d[PbW!CsV
|
| | | @\uL`K/t8OeJ#eiBI%WY\nNT[8s@Xd$]dJ]]/EU)C'^PQe)k9GgH6g:4EKX.-Xf&g
|
| | | ept+-8*E`.UR*n`_*B;r5]`mplC0tNo/NI[4u<7E".)?nLcoi8.RP\`VCP&REs0KX
|
| | | 7kbY8"tN*c6>20A_hJGpOZn,*8HGoR32aKDoQL1sm#L9TI.UNM83AA5lU&\L.5I8k
|
| | | /4M)<DNge5^+[W8'Oia1AqZ/ZiY5:rnn_nd&PL0)M%m+/9M0>[$@pX#lm=3Yac][P
|
| | | 1J)\C0X$(]NHCKYhbM7'6Z=JI".%-0M*c"^:"7U0l6/D$`Zc)_^%8Qo<>RZ)rhXFV
|
| | | :W-I6e7CJ%#uC3@8rmmd'X^_8WCQ4a3!LY"KJn]6DH`rcrM]j^Y^TXA/Pp=\#_M#8
|
| | | @UbFRb%'EK<\`\km4?QERQ3d;iA9jmV]u*b%n8F:.VT0Te;m^QW1$Y_,&'SV'Q>^_
|
| | | )a#rnG%6b"PNtBmEr`Rd<pB!:Jgjrh9NO(t4(b40FDuP]o/NHeKOt*CKnca0+P_cf
|
| | | jm;:mU2Js*i.6e@8'bZDo?_Ong;O[mJ$C@\P]4`@V`b@>3b3^V2@t1V2b+9T*#("g
|
| | | eKcV?>6rcV.5i_,@\I=tf3<DX=#N3H(!fATF'I4+_%Z0%JtHL_IqI1i6?&E![DPse
|
| | | %pfAe-<:pj0I8cB04A@Vlo!]XV8#T[04*3*d7?8WUXrfEmpM#U>nN3,B(KfEmp(#l
|
| | | :fJuX<P*(AUJ[5m$&XX?eV7l.Vb2*&=XMC(7K77\^2c$%DC/n^PgJ^haWBlR<HIPE
|
| | | "s$pdGXh;\4Vlj(V0p1)%d0\'EX9\\e[]ZY/0V&Q5H(h68>elKRq\`@CY(p2'<&uM
|
| | | Ga#$i5pP#.n\@.d022MEA%+!8k:K=b7rlJ0X;?"j1:m]:s)l@2A_2Mc-XV%NTbZr2
|
| | | 91L3eN.6*;6$`3'B@i2`'q/M6QR0+o_\Mo[`lraG'gX-n6?"5o=)h0IVgRd`?rtm#
|
| | | QT'&rZO&QA='&4UGHGeX_-1c:33A'M#@=D%a\%Xf=@]OF&MnHArAB:-JJ!T/-$6]-
|
| | | %^hZG4W"uc$<5@&DI$-=EohbcjBI7M5Cfre@EFh$;c;]=&=6iEhO%4>ZV$$rbY!ng
|
| | | 4-<#3.<YnLEJBQR!jFJ6_YJ8UTI-cO1o:\&F&I*X@>Mn)M#q5pFZ!>^%/ip(>*G9>
|
| | | jOVJWio!\15]36=eML;t+CLRl$*:YHfY$'B.WoR;7Am,>K@mK+rJdO"+k&?2OH#4^
|
| | | 7>o.#@F,A>9;Fme]0k65DDB0g,N*OO$9f<1.VnF/7:]T$\Mo/nM\-rHKZd$;@*$a3
|
| | | P6dM==+n%"[_;F5L4_O/OJ_(JeVB-`PZ[+3=]^\aZu1*[<`VUiBA&.$r;IPr"Xegj
|
| | | =`efU,rQ$q49pXq=LXX@eV3\0L:MegOdS#9M3f)SMA2&#a'"%^]O#ih8`aK(-2q^_
|
| | | ^LY[YmGm"]L1Gcki(ZYOG\->P#G??em?;eU3EbAY=RU$.m58$fO/<)NWt].@A6@Oc
|
| | | a$o@Wjf+AFZ@P!KOk<44"E%lt\t?:419Z:k-1OitEMCNc'@-Y*D9c]?W.2a%1?'G/
|
| | | g-SnW#GNkZX/<URob4.$Sq+C>7#6F^8*$FKC3SBL]GO#33aetFL1!=gV'[mW9=AKq
|
| | | ^5E:/Ue7H3HBc)-:cu\>VOAu%>!&]@E)en4GA$]FAT#UM"HQ`7W2L3GM7]YfOf(_[
|
| | | IX5q,>-(=b;m#n#U5%ZD..sCUr\(2\?Fm&03^G87\ZIpoWChrH&r_uaD\?OV<>o8*
|
| | | 9JlD(I\)FMOuF8'W_/@>o'e^oF6.6Ub8mn8p<cR6-KU&rV_>DdS>L9gH7GD>>""!p
|
| | | DL8KJUd\%"@W"fWJ$o.u1-9OiGh,@*+E1!QS2gn5>$-"XLU>:;(T@Hj\9(>PDZQW!
|
| | | \GF^4)^fg<LT(]nZuM%ClnPKYXFf3(o?<Lib\geb10B0*a-ruc4/EV2[@d?8^)JG\
|
| | | \S8_Y)806$E!E#9AduD8''n:ZP!U+o-^@1iCl!GC[UrIS;4=",;8M#oY:!2XE>(mS
|
| | | VJ%5L<p9`T`MASX3PugLOund>a*aesR#puaOA*?mV24T?*33=-7_3Mc8%6$\&o^J4
|
| | | FTpI/L&XBuD4Mk^_o"NBqq]:2M\.A'fnp?2-/l\WSYNYrid;`E=I)FnCmk4(KA-?,
|
| | | 4B9;qTiL(h>+6Ee\tH0qTu5%,6<_j[>:,@,c:7_ga75+7S9`2'ID`tU1hn!Z4ED@^
|
| | | qorA[]-oC]'m[dqmTj(.Ug1CQ4OAVi1!CTrH!J%f.HYjIXsWX:Z0;>Hb:0`1(nW<0
|
| | | -2amO8dqRKMm9'+prGup#JTp0=1'&U=l!YsZHLd'Oh\'e\m7q0>:6m\[&M#b2-YMV
|
| | | ]7R$&JTAA\'G[<la+2P_:QF":1:3X)ZdOESZG`K1n[-,[Jf%PW7!#B1:8]5l*MH:V
|
| | | 24sXAgfOS68F\cF7#"\CW)6&X.!aHYn?V2Z0]^gRAZIUD')s^8GfN9\od"moFK)YM
|
| | | ag7k)jeL[i>c:TH9#r3$b4o;W._tS#m\;fe"EdO$ESccIOcu^%9WINg*HAe!1W=Lu
|
| | | F3]G%rcm9mCd`d,hCpW)6!:S(Iss1<QBg:D'5eCCJVE\TVJp%:MG1MJ,qo[tJgk(#
|
| | | &hhV$l3J'^.)naT0PdTt0:f)`LsI.)j-J5a.5VlXc!^J$ZB]IAF/.>t/.]KMqNlh/
|
| | | 9/.A9^=..trt>(PlthF?eT8jP]_'e,50!X\(XB$M8+6^'lVb_HA!oV5r6\STjNd9m
|
| | | U)DH9>;Sg#K7<:\@]/h)ZX>Q]o%sCR*ng)FU[M:'m,l"O?17&lcffYYG]\Gr1e]oN
|
| | | =B7dGU@b`?8P>DR4LZAnUH-JkV/,+,*+AXc19IP4=TlO.p/gU]J'Gm&(Q7`hF5+7W
|
| | | bbFe%$+XT%TR+@-1j;R[`J<nP!'JgZF1rGcVl>V>SLO3sq0!<,-U0rPT\pRC`qm1J
|
| | | !WY%rN5`\s^uSrI2?JV#EKI\F2]*#m&0[i7@PSk=Toe5Pgh?hINQ.^OR+u^;N^I7G
|
| | | #o!_=3>`4"OL\mg,ntn>U[U7ug,q,-_;o*GE6;':Q&Wd-iNV6Z2kl4bK41RU(39XF
|
| | | #8EnGJf$?bMh`!tR"0!/MiL:PBi2=VA$V,2p6^*Udn6*3XHmWjWXE[QfLH]KPtLET
|
| | | ]ZT4f;66eHCV^9/&ZdN'@>GfWnTVPuk9#2q>I'P7reD/3);]p53o,t4?l9EQUG9R8
|
| | | '5<%.7[qXTc6"2HmW3WT>cum^)K>=N*@=a%0TX&)QhVhr@9A8+H=Mu<8"G:coVESo
|
| | | rc=,.f2jjn\0Y6j39s/1?7NAV2=p0X[W-;KAf.:]!nc\JBddGP5Y`h/ej$/s!<k;u
|
| | | Z3[6LcT@*:4`,^7YIeN,@'[LC)PX2l$8NTR3N+WLW@#Hg:8C9O"BQ5RaF`pc0&`jM
|
| | | N^HG*38#bE.\=5kE?frV2N(4sW2OT$$JqecC9/6q0m')F.8KqX&3@,.S/B@d";%KQ
|
| | | lQg`E->8m1Z*RklMVX#LjBSt/n,)7XXRi.nbe@j(D[)q%F0Z]Z#rImC\l9sb._O6b
|
| | | %h"-X.XpcdFHYAd`Ud@/6I6:VG<*9O.bYk5Z.21oYd.8&V^F8WUFeI4POgH'kSr\S
|
| | | bLI9j>IRQo_cP#;n8hAukSoRi:GZPd*!S5UGuQ,Q]H]_R.BP(\T_40q1-SZbq^p""
|
| | | >p/W/P-qPfgM8"$Dd*qCeJ]Zie(GigWbS3-`DScIVC[c!+U,o13ZEG'pXE=&cq7\]
|
| | | 6T'#gJDd5jD%Q@@:6ILsKGUAs/W6<Q5V`@4ME_,'M',&$:$@*m(8FJW2E;2=;R@j'
|
| | | 6]/@<ADssjNTDdq=rP+XL_M@m")ns-N9]&-P2to?$^6<#k#g;i)Ap[5!C@?sMZa*S
|
| | | jf[i6G`7n2,,!2C";q,%q$).S5*[VdIa#<3ih4>pMM&DQ/VO6[dPIZW86XuWiBW,X
|
| | | %HEi<3Xd6@edr67T-=gT_l2?FNe9mZ2Zs5-bRb4.E8Wd;JOm@%#u,_@NUVfd2C`5\
|
| | | 5g>[V,H/f0%j>mi.LeX>MlpRL5*=4Z5ld21%9l`0!'XN12@sB.r^+"9p*Osi##$P%
|
| | | Zg(.?R^2%DP%1@?qAn`._l[+$g.q*o*s?![LY"5.cLeq3a/s`=%_6<4:cRpV(I&UK
|
| | | s-N?YIcf&UYudS"MQ&^',c$<`=9a[+.m&8mM7C?_@fjnjq`V,^JuAa8%7use/VJ!:
|
| | | V^IjpiA!GRVLe\2fL5Dk.Q`/k^s\OC8tf[83.&eF+!/mWGn&^H0*N11P;:Eg%uH!W
|
| | | aFFgiP"cT3d0Y(e2BoD\2#9iJ22%)e+@E).=OqM5N(>!1&@Rrt8j[_lB'c<*a6<Cn
|
| | | 3]fAuBGhhd\4,CN8-We8PFBCTGo:^&2UDjL_'0ZrTEHR'-OrU2ifI$dI#sF_('bhb
|
| | | 0a*',+d16u7\l3%I#Uuu/4r`i&4o'R9>Vbs/"Qbg&u-/gHrWaY1mo@?HS(sk<ar.Y
|
| | | jW,WSPFd/.J^WnL9@Z<<=ZfG/"I^XZBZA0HXB5T;BUM<1BN="1fO9P,8X-0E-!<g[
|
| | | S0dg?&]9;M8Q-$@l+IePeehO8%.?&fnl7u3,<O&I:5uTaO=cV.Nlc'7?).cT&dXU_
|
| | | 8P7TjZLWaiWN?Efldh"K^(`p_S=!\H-%td-<=mZ7DkSp68^]Ll)i6[H8:m\!PO]/R
|
| | | JhB<>P.Hoh5cVt;\;f`H%OD7+29GToGH&O'M"+5Y*CY'cVA%.?Y<";NaM)K5ES7"h
|
| | | S;eoJk9Wu7<Jkp6PJ]DBgPT^m3jbK/8%<_m&f<=)-=jD/p"J/\$!j+cJ<L['=^?o]
|
| | | GcW/r(Xr/6]j#W2#8'S9'iX-sCdj5a79N5bFO$,O;$L")dC5[1bmBup@Tr0/P+,oL
|
| | | B;UkYZUfJB'e<!lX/u+B.JD4V)ace`V3\8b@6HHQGbhG.Oc9sYI,!rG;2[0_D8c#"
|
| | | dK4[#&T,0/m-Z,s)#%q7UaBi\R`#ghKl^7:g*t'gkL`kd+CH4/U_,r-<mqCD@n!`9
|
| | | N@_re\Qr`>h8k^9_*Z]lHM_O+KtgLAXV,tfI+:r"[!,.BPDe='$R1:+9tE,eMZTqn
|
| | | rXp]D^C&UT?<G9+ociRD[7<i9@E@4N_'IJB0lf'k&:0MYA7FoBFT=mNN[Ch\ZMW=V
|
| | | 4BH)OH@+<9%*f4Po1``YWeG>k*>4&CYmqk2Fa/a>=[$8Vr!][7]!OpNGkR0BD(2<i
|
| | | \7Nl>Jh5Gr1l1Sg74X(\-[bSCB.gK#Rmg)7hIK`N8bq&H"'S@6dk6r$_'8bZTCV[M
|
| | | VP`60_pt;gbQ75j..8PI,+YD_EeBKiT/rfO58]2"]co@JP0*Xj*(`"HdnRK-RCtb_
|
| | | o9J,]KJu6^o0IHc8NkP692#nT;F+%FDpisK,NuG4UNPiQf/ahghhY^BZQUaD2[GT3
|
| | | ]\f10DFfF>RL\"es.3#PHbH@*B9p`C,&a:,bI]D2i#'qJ>%[(G1#FIF98.qnG#_/G
|
| | | o6T?=:H`h)[bFn_;eI+K=OWMmc5NH$@JQn)2%4<>Yk(NVSMa2;`S'*kLPoWtg2cq;
|
| | | &3<qR2&(JhE3\j*\%@hIE-Q</Q]rVsd4PHh6L)^Y!J>70?K@E4D*bM"fsGT!_ug'5
|
| | | >EB#KT$M2D6dp%MX;%;jBH7Y%?Cj]g6R2ll4/AT%*1&UZ90hZeXrlY!\TXB;,+Vu,
|
| | | nGAl!qb&Cg);eO?_fO(lQG#5C2!C#m(XY=\+mXeF_;Q>f;`WeI5RM"'6*CAHXf<Hp
|
| | | h%)3<%a7MU(Hh8/je^rM2re6;[HbF9`(7K:UXT>H4#gH];dW>H465/ESS,!IAFHn4
|
| | | a)rneha_E;2sL[`CZ$(SYB/"1Xo)<Nlt'$*Gk-4;8@^#34!2?\*i3It5>(d?QUc<&
|
| | | )q)lKs'5G2R,Klup3JG"g`,kR-R8eGpHQS=VQ\G+%HI@M#4TBUm[\]/jAGD.-9Y92
|
| | | YB/28J:T;Qne0>"VYbDD1CXhPbeRV<Z1GlGEuVWR!'D2;\@_s@A%T8R)*gjP]$";;
|
| | | MDRB(\fSbQ5`mh9bP!c7#+ia(56I7GTXkPPe0-SV.CeZ8S/Vn=e.(^"O^c%_BgIPo
|
| | | KYe"dUsefXqH]50`kfhs[1"+_#rR_,-kcs%LcFKN44L!6-ApH/'H0-Ol?J<:3^XO4
|
| | | .04dO6X)nhLC1>kMJ7dFX>($El&Dc(6UWEA`%eT/0Z0:WWsIrH,U*S32+/>s#m<E/
|
| | | )#V7/hR0^BM$u#I$:CS!8MFs:)fct;^l?4C@_kZp.kFQ(TXI)Vm\,H:%#E>pj2;Xb
|
| | | </R^gUL[:Jg[;q9(WBn6U^GcUJW#AST<'eY3qBi!.7(4,>`(;H7Ot2pnj]<5-E>3t
|
| | | $_gcSP\!6SSZdl&)0hB6U3f#P@A)t#`q%s*(po<6.)s-e`Ya=h4@b4ML^9K<Q>h`#
|
| | | 0U*$PG"7BCa.-6Jb\%Y.;Sk\O#Ut?q_,V$LJ@>i>81O5P6feV:Hq)g-7/8H+HtPo@
|
| | | 1dq+paAcdopngSqO>0^p$?9M_4B.-*>-c%,7M2U[RAWQRK:u0J&.@SU1f'nR:l\^<
|
| | | #\rV%'36OI:Q]mm750RT$?d2,<=)!rVi5--r1lpt-k-2u_IT&A1jo^q:WWTo..!sn
|
| | | UoVQJX,Z[>W:U>9Cp5A,Z')2CRL/K,')'>PX9u&28X-\T`35%dZ\o[Ea1R8P]VA-@
|
| | | JWH%SMLn#!(l1@\H5_IH`FQisanJ=;cm9C:N-"4%8>H]j^FqSh`CX[8Pd)p1+3-X7
|
| | | 90#k3`&T*MNQdS.`&NRLPes@s\AG3o95Bs'/2&HbFV$fo83E_9*,NmAL.=A\#o'M!
|
| | | 3G1_Gd3Kos(=Y4(]>I8ShSbr5),/O&0Sl\b?HF-@c?PigoZa18<@I@'7.aXjCt?\?
|
| | | `!gb/Na/_YXFX!f?lr5%'H"8+HE/;"LV`<6c_;k`fT46U=gI8lYrr$3I$C<5q+#`D
|
| | | NTpPNMB1&3b:6C2NP%26&@#&h^Un$U`SB9,#fj7;qp9FFM4u7E]I>A4/YZMY%!^*_
|
| | | "M%@_eZE;D*kK_9'_Tisn#HRo`&os(iV!ZP*=2TUdHcrh]c^0h&h[k*0!mI_jUVWI
|
| | | KJ_3tO@:EQ.8@\eE=tD^&,U$th%Vmr.T5!d;Y:c%Pnq<s2U_O&#eSr[D%/o["3\ea
|
| | | d>H>DOp=-@N?K^0($%2MN/,i'S;\FgSUEVoJH1_\2_mrW/nk9[]bs1p-S*QH_8Snn
|
| | | _RV3kF/lI#U^VsZ'g`5G9ulho`8*Y<b]6[@XJI\Q0;V:ab!=FtVT[J:<G>,8H_A!9
|
| | | 3t/f%;cI[7XLB@7a0\On;m=T5/NhKeGK>CFYoR4&h";gMPgpceO,[RI<<#ts&t.Ne
|
| | | e$,E7eQ9,qr^rVGVNi+(3c[fUOOW)$dNmDK@1-.5[o2=-$)3$N,tlB7VQ58Pf2W^?
|
| | | \WTIRIFC$X-]#3/*ICm"UQK*`dIha`F7rKLm8>L'%LF1SE4R^YK=-s?f&\;]k`iH3
|
| | | X!2)\Nfc$JrABP@UHB1:<S]Q/JhP5M*>Tr,f$'N->(Bb8AfGiV8u*[hjdZdegdXi!
|
| | | =/%nlXP?>D7omOm9O4F?*AuOJbSV'og3&rJEh?O"__X.&Yl,1k)o!fd1Ep*oYm@g5
|
| | | CP+U3>,8LD8W^3G$?/qkA(lI9eFLs\`Nq4DOq&>-9YcD58>?G)?eX#Xf2;$3BiQ>L
|
| | | +cE/)9U&l:m26A?_CttHf:^IFI)V^cKNBJ:8hq\a"X2XujK:21fMY.Be?MJ8pJ9n1
|
| | | fo=HM1e$.f\6WL9*t>Rp9sn-&gfh;%:GnV=NNSuhQqrTZ#b)KgLl=,0*iFiiW`%qO
|
| | | 8if;olSL(R^bl\DPCDAQUs]ElhM`[AdQj/2XPP04=3NL-9g;HV]K^48h^[2R?/!2=
|
| | | n$Ob,X2<pb(%!JJ<D;IC8(HTPCMhpN[L#Cr?gR/XmJpD$'+-neT:P0'%HXV"k"mmB
|
| | | a])0%ClKoAp+1&O$b7,4\>Llo=l?9CV"n!sQ#fn9a,s+/cH-LO"d`1\\Kq&,V#@_d
|
| | | X[jN.[bkLd)+m(Cd,j)T":t?/@I;HMFLA7,E2dfW5)pMMK.j1fLrHe*,%U1!%)jI-
|
| | | #NDR-]Cmc7%=X/&dc-@qcN*MAc5`h6Mq:)I07Die,hs6MZ\T7)WP#!9,[4c7iS)MD
|
| | | =2:kD@c"3jIZ"snVu@oBks.ij<iLH3=HK;61*e7BP#s#_i`4u1W8Z":LPq`6MbP]3
|
| | | ?;)T5W+2'u]F_+#j=)L/QP#6J'iGEM./7/]#M<T.j:KLoluERRC99*HARr&UXoW)l
|
| | | 3b)2_AIXsaD4QJMGN;/+fqdEc4lS(kWEe3$AGUeX^1`sIBu1O[9_$`4od%:hYNFsP
|
| | | B!-!//Uuo[BP/H],JH[(EeL5lkcL"tk#B=01:S_b4.Tp+#a3En!;McGE\cJd7Hm<H
|
| | | =P.&Iq'`AFkMC?FB\lE/[U$bH'X_[gGlP)K/&#<1#Uom4niY&?UG&34ioZ<HRQW':
|
| | | Nt(a@$YjhJ^k9iX$nUcLh!NZ%l:'ouPA#,T&-@=i^4abRZYAAaQPQ#p`X_2)TFRA;
|
| | | AH?FXnB\O$A<;OT$/%,ag'>#I5b`6`C7q+*8Adk+WPHTTR<X9*0!,SsWhm4hWW'1j
|
| | | )2)c<SJX[_lS4-/i><(sRH?-0:+F9KRI**kq1otgP:jS4DINo3s$RX28NIlj*E@ug
|
| | | FXsJCY`S/9A4`kkJ[dhCO^Q-uRPlQ2RPbS`'=,uA,hbRSc0ZE1D(7g(Nj`:]lYS/1
|
| | | m+&iaQHQih-1*kBa1fl:]!,q:K/.?$0p^'op&Z7EP%1)_`GX*>jiIfI2boCl#pbu,
|
| | | /03RC)@s@QlZUp?>VHUkc4NU7.M_:WgT6W#FmJ<U[C5Z9?M"NmLuDt4&qI`89CAF@
|
| | | >DP8*lI2J8L@XXL_f$-A?LG2[:m&+)e/tRVMGT3ScC6%f>IoR<OJM&XnAB1kQAO<V
|
| | | &eqQA0))0geXD1J.Bo<ml"M>K!!r(UE;=3/b?cXAJoGtF%+q+!)6%Ruo'ql'n6qmW
|
| | | 7huIJe%OoFdmk)`ptR^R+[R7h1@Fg$UF_INVi6<.U^G>PgVF0:aCfse]duP):q&l;
|
| | | .N2YE.q%'bo;qD>@;M$Xl`*o6ih/=_Kkl%:kPmJNOgpPcY-mDnU$4RPj]o:H3_;Gs
|
| | | P"<//idlq[U8ciR[<eJR>TJX'o5'0!;gE]?S!h4M\>adsVLYf_mn?\iKU"%rcL3#u
|
| | | \G3\pr:EX0a&36mIlg9(l?-PpoQh?LZ?C?t%eLE3g8@d=k/n4J(j3;_9"=cdr,Nmi
|
| | | 0_DmPWl1lK.nF&@:@!2)8h+Kd5*,DnOK$'YM9fN;\a]<eTlh84B"qPfLM1bDD]j#R
|
| | | p4$Fn&CB?lrhbLK'_YF"/:4+5-P>.LoRUXt!N6YZ8"X7qpUih:c[^(IFa(bH-,2G_
|
| | | 06m6kH?>3lM[#WNfd6:,T_-ZCX#rB6ophpfPf*5]GOgQ8!0a$p+a$kIMn#e(6<fN[
|
| | | Ed7^eq/9GT,@?M0PP*O\-]3!;HOu?$?$P76;cp)GJD0]eT#2WKf*Vou%a&VE`M.>q
|
| | | %HB20;L-4r7$J9]aH9%$U1M;VXN@u7OSYNH'V>0TL$;27EFGF*3WFnoFVj8BbeC('
|
| | | Rdp)f_N)j_H?bC`6:tAtgI1eLmLQ@m+JBo!qKh6"iACOk])AR.S85X8_jUjgR"6ut
|
| | | 7aL;BT6AKWZ9E;q:@-[mWQ3"-^CID*EW!kBQ3XuHR&g0e"mX\q-(!&-G-**[Oe72A
|
| | | HPPrs:W$+tfEmOnr07\,fAQUpVT4/rOSM.im<j4DWMEbdr5*GU-KT>nM)&);0t/f<
|
| | | 7sc.YOJ=i&Lj4[Ahs[W#&\9_s'Z3*2qABZ^hi8W]Wq)Mubr)>43[C_7nqoY/:]),]
|
| | | )$g5tA0;g"L4\B_b[<:>)Z`;\OPjA")iP"582O"T1`JejnI]`UAIsed`WHg/dQJ-\
|
| | | Mh_C#aNcIq(Cc+oR-Zk:2&hK^E*9!4Bc!<KV5%bkr+%Q!;200`r3freN!r.mEN$`S
|
| | | 7>XR2OBSm:6ogOR,*?WAKPMO4`1TpT^qs>8*5a2"O`8Z[5.KD9[TgQ&EF0S`Tm"Q-
|
| | | -sSJEhs;/K*3U*()9T5WMUkD]PflthUO%<4V[o+a8YQLcg,(Y0$tZ3%`5p[T)N2$+
|
| | | JW(7J2:bNGS&)PrK.W^!m(6AUjDVW[?F)IoXJ0XEg=jS)^&L^H_1RaPg<Mi<EQ[*3
|
| | | 2Ae(XItQj[N^jn&rniDnX4Ai5Tq$%*9YCjL%2rpK":[CU]EW6\3oITO$YG2J!J2)T
|
| | | 5tQ.Sh]`>hC`Bp(6:1o.XBJ*h[6]I.U8>*CN<t@OWlgW^JV\@B_.nRFK-;kA6N8U!
|
| | | 17B+Nmc%uW2_jB#(q3$s;S#<#XA[%fl,8=;U.OqLp)pX457GGMFKYC)aUBBe/rs3(
|
| | | M89fd()fbC/.NN5/_Z09";#6X"&/+iBeHbe,R"5RCfA=lbAO?2J\e::o%YGYRarCM
|
| | | CeAB)Vr<PKVnXdGK(mZ7U7/eo#h!]L4383l:eg.8.[3o9n7tb2cPg@jdSF@l)oC)k
|
| | | LAslej#!)TZJ>%X0e8Lk/Z#eR,<;Ij`>%-1iQ[Qh09.#<:K_ea>37`bKl3>D2%2G`
|
| | | ,Z9U$D^P(&<#I2CIBLQ<;8@2h3HgZ7g7Ua=BkCFGAIDhs[WC26d.Sc8?+8/_9*)F6
|
| | | rD4G2p7l&O=]f.:8g0Lq^L:8^XlXu?DCiHuY;(bb2_QRXYs5h!N$V4[fhOr)ch/&/
|
| | | aYpFW9(P&Ec8_EGcYMCZ+R/6]VF;C;c%j#oli0.*bsYm=43Pu:2*%pGQJ'7B@[@^B
|
| | | [BtN&<ZkGOX.tJ]eD`*AL<:J%qYFnr-1fmoVsKZ+E.t%`9,G"h;1"D+3IBg12=BZk
|
| | | TtTe"(iaijq_O3h2Qdsl([,l4d&\KF]<TO;ekFSGWGp9K^bbTui2cL^`q@jL>jb<Y
|
| | | 4VLlUM"V9Xn\liFFC(:">t75YW86Om`[mXH2XhmGm5i8Qr0q!7[se8]`TnOOE>@g<
|
| | | p#R4^m8ml<D+j^F3U,0sa`0j2QE5aVaC_g;UafP0p?fpS9DKfZT(j0Mc&@YtBD+rg
|
| | | Tf",HZ%OLUTQeMXnpEk`s0qb?]TohXF(A/G]<YuE<"`;YCcI).-_=>plktI(g#O7:
|
| | | 8I+2&?W@:b[Qu`,rCm>h,k'fHXs[ik:?(UbNZah'W!j+YnMW$R*ZCA9D[4OdK7^90
|
| | | b!Qk4V&W@[D_W"VXd>,<>Vg"=`)7KlW&kDj]L[7b`SNksl?f21r^Q@Ao:SV-C_2dS
|
| | | ,Y*j/[Ku(_'LLu5&a65Kju@Bkas0obDEaO+9'2.uLlcW8XYpCV+pqk0O_7,98')fT
|
| | | ,`J+5$p%#%U)a;>Z>(RPXX^R:?;73:G[*fY:_8IOfaFSbQ4_h;8J>G0,uKaV%kS50
|
| | | BmD<VKX@(Vr^="?7iY]bGpUE)7Aos/Tpm482Ts'tbp(+[k,DB9VE/0Xaf88Qq7)KK
|
| | | L1O*-->Y$QRr@mXNY[I]-)OmhI0C%J/u@YVT:)*_7(lqF=nkOJI+:<S`61f1rA@m5
|
| | | 15>DF`jFFd*00QI/+b6T:\F'Ij/[td9sFAf(]>F!ar3ku%EX]2&nO_Z>BI6*_)4\%
|
| | | k^eBIR^#Rn;`?VrBWUtjF%H$B>$bs#HX`%qefQm"6:GTlGp,ucV'"c`02-/@V<8H1
|
| | | e+Fmo<E%)?9?FA1'6-a()6-d1XeRd!I9BrlN1ArQLt"I;1*iuAX42$T."Wq"l$Y"V
|
| | | Fbu8_fKtY]OUJ4r<9g7BlF2gq]VH\(PuMd>;sY+V1_rXN<0bm*/6TCd'ah,_VL;(Y
|
| | | 1i0NGfg/e.Rn[T!^8[?[QE=VOCT@mq.0T@T<dS5e@.cI\Z.;4f=3X.qC'Lfg$@^Bj
|
| | | Wg(_E/%@3S'u)LoA?$(d\h=uP;d+E6M1TWR'KWO*'*fXoA`0?fiK@K99f5S^7&d&L
|
| | | UmHZl"_I(+HW>Cf2/=I*<fQH!2>ooV'gmEY=`phXP.jrU-$\IPFZgQk,MhW.KC3"\
|
| | | >SZP3;Y%Csn8-F`-G5&c.h%Y:)0-mOg^m^U[MM5[+:NodYn_F7qN&#oDBOHFY+f)e
|
| | | "-@'p:REP\T]-$Q;>)`@b8Qe=EjfuO$4>^A2ZTUn)=ikDaTO@K@j"&'LdjA"Gr.;Y
|
| | | TG.rhTF/Z3:cW,q6'VIq7Nc=(.L'^F#Vg3K,35GLA[2sMJH/Y-H(6VOTVrmH:acUc
|
| | | Ube1l;AB:2U`tIJ1ZIn->_s'dd!?BRLJ[1S1sd?T!PCLK:uhla#]nLGJ27F,g_dr%
|
| | | Bas%2&-hXJ#QpH:%KX@'#Fu[+EG-pRbH!hdr6M&;5^!UqYW;t"c5Aok])b261?-ZA
|
| | | P^rgKc@CEkD/e$r)*5@J(onE]m%jZbr"VFCe@OuLP"U[8%+iSqgK`)kPAV<G5`/CU
|
| | | 'S8ASFJWk5Hf5IN;[S!do*:\6.YenISln#33At+c#SB69#WNhV#.tl6E.VL!Tt_$^
|
| | | r&fU(m&Y)LWN>+HdsE!bHuhn<qk]/J,B*-<Gjb)H<<bApE.1m!8Et[Se>hV)"atU*
|
| | | nMPg:@T#CMG7ceK+ApJFR:*C3^A;pMJK3urFO#2'R5rl%>mm*DZhS$V7p+lBRrU#h
|
| | | NRW7r4maNIpiN(qbkdn[0W*M/E;l3IHa-UX2&^f3S]BFZldJc1Z`rG]%GZ9M;WsNP
|
| | | e8g"LiB0tX0"dgl^on!h32G,+a:#q1;Bf,Rrtt62mt!%p.S2c62>'B0P'NA[;8".0
|
| | | jIEuT/>A*eMU/coko8;>O(_Pl[OEkX)"7@!gf&Xi`om:BP^0He@#nOkG.g7rI(Apl
|
| | | 3ii&N-kkkC;AIj\n[%t>1)p3V]@hGTiB:^<d<?+dmlsTd38],5IXeiaHc8JP_Ku!<
|
| | | hX9h2Ci8>60ECs%E\D'QnF*[^O;.5'U@rN4q4dTR_U]s8rq<PPnddAFc_UXQMY(A\
|
| | | ?P#!ocd:a64Tqu7peX<RY?ir?W;fY^=V"Quj)Wm`_OCNjg[@n<NWSL,Y*suJ?H0o+
|
| | | E(9Jo4Q.n<Nt?(""kY8:&:NnC`[!;h%RT3;+BukJ+jaj",[`8UDZu-h#NSG679XLV
|
| | | `<_D7#j4$O!auC1,+PeQWBspc:B_&Dk4>=C-uX4f@tOY*j<A'@"7Kk5mRIV9>%J7>
|
| | | $d^#O,"2BkI,?OZ,D_@O:&]3+pB]c?Dku\//en\s<'X9k,9rFG![A5;Y7U+_7OX<.
|
| | | Ye't!=?OoQ:Ma4h@cV6bGf;=25KF7N@RathH>>(3,#M#oEI^!&Ag,#f^-j+*a1rgm
|
| | | i>I4Z)9sXkU/;OV1agBp-LM^9itiUd^,*XG,4UaQ$>Lg&I-9fZp@3_ldF.IB?rSap
|
| | | JZ?7%&9T%/=Fu11*C=N^OfY0+XDuXrIV@@Z@[LL10,\7^3mkU'Z*>>OQpr?0)U]ZQ
|
| | | 1#OC2=K#+.+4:kYB6LT/!)olk+_/_F&\KC-2'7E>Qpd2\KuG+]9)+%\)$JJ1nms%C
|
| | | g7%QZ+`\kHOf]N2J;t*p3^V=GK`5Z%HOWD'E"730,4ujC3'-.LpsLq'0pa@[!:I_n
|
| | | 2[d:u%&uVS+<opj$n=a(nTmo!]e"j%Yi8JOCSrT`lQVLr2<)OtNf%-gU*UH;`%Hok
|
| | | LastghBkYi`6><0dbHK+?;'>6p+jEW!mjU2\i8$618][Z,#L+7^dW;K:9-N4U3nR[
|
| | | 7kI(BX-.__EH%]AS0DWZ*YV@C'(Ca!:+;nP.FOD4Eud&WW]dZB$kk-Dl*W#-Id7TU
|
| | | :/].XP0D]jR2hE5/X#bojm]3HihY$6*[W*h;Y(snN`7e423JarF/(RU%3dP8/9<m-
|
| | | L"RT3)_5Wp/(9Y>dXO%Dg.I6,3]"u6F3u:d"?_kR+VVgA6?#Lp\M+X\-)/L>':gB^
|
| | | p9.AZ,89;B8YnGRa!,U73!r/(E:A[9(.R:-6"9Wee1spRAHZOEKl/_h5\qp77Z-]T
|
| | | s!(Wej,>-YE$D&u6g#"d65WItM)O?%GJmi.U2\$"=Q<>E23U!N,Z_HB%7l5Q!Ff;&
|
| | | j*VufOBbQh&!P`Jc4D_/+A0"$5GJGod;V*F6ni9n%M63#i^5.+pA'?<r7&%a&WWhi
|
| | | DL95//j`JW&Ps`&3=/$j,%Ql.Wlu[)YtgE59M!)Kd%O6e@'\c9>pC4`<;8+WeFTW.
|
| | | 7WeB"U;[Ut-9QD5:!s2CFLl9t7Otjp98i1:1sTo(8P^&]pJk'iPf?s-aoPJEj"K+\
|
| | | ;qU]?Eq2s:.l0:67r0NU0]PKq<E-Lt#`/4THSLe7Z/`"PokP'J/mZF:9gT9L!nKmj
|
| | | 0i&!8:fX`$0N,8E7o"3?/%#=6CI)$Z;d2jDNqLDLC>DO8h]p+iZrBCkjm[C(\kke@
|
| | | 37UVTn<I?iDT8\CMO"61mpT9A>XX[I?YW;/7mog(6XV.(7hitY6f?!Xri^ntGB-Je
|
| | | $A^f`O%a#$@>DW]p-`dETjSVc:)5m0e8A,@MdjRC@hl3k<>M5?fj[B"?</.V:VC$l
|
| | | @g+*O>;c&0XWLL$ZMsNA56Y7i1&YH:G^%#e9LtUK<[:,N7c/@@OHoIYFt$\5.:!]F
|
| | | ?red_-_5&(2/?u5,5(V>(0+@HWC$&1rLs[.;9NQ\rqt@6D`7)\,*rU:m97gtDt'H>
|
| | | 7]BmYLb01LJV$eq2\TZhF`F@0E/oos`eK[9&g4Y9@]*(C,6`()&TOPODp@<\=%-R5
|
| | | O]VZ_YjRO;;1>/C)+k/O.hMSNKd98L?$<[H;MqSrJe!SoQp1\<:1tJ%Oss7_beSF!
|
| | | 6j#5LA!M#O!a\lo=Q<[d-pTZ@EI,%UHNZ3"=170*pap[YN9Rk;a?pWmP&8g;I,^c<
|
| | | l7+Ns?Z9$0;sGQHf?W3\[UYHME%/kCFq]%#q]FFOTGLaT2Y\j?+_Hsl+O9m5d&AiS
|
| | | R1I/dr^?#q7E]0Tq*b[1+\qrR/jViMisM/9n.^Xd<`Od\msamb0pkG9CN0`Voc+ZR
|
| | | ,icjlQt/qDB_']9L,(&Je7+_:HV%=7+F&EWeO,!H!oc&%Kjs.rE#"4S-&+CL3EVu.
|
| | | QpHUfEIuI];Y%S+&#E@*6K*Q),%gF</G;0u(Q<s;TW.T=0]@i)QCLCn==Z%b0g1HF
|
| | | UOqK(0)03I'U!l<FbSKJ?jk=b!`b$[>:0#f0IQfac6JHQmX807O0N\To0RR:JW<fi
|
| | | (BP=Air^ct)3_QDNG1[t3ADB2h+>OlOK\PH/%Aau(dQ^(igEai#/+A;(,_Ld,&/,j
|
| | | &CFB4EKrk!E#E[j.JJa9+`/!jQrHqKU`P^T^44I"r-2Hm$MeUcW)T-^3B(R=eH:NF
|
| | | *JPA!3D2Sm\8-#n,j]%FKd5E,YH1GJ8"I.SE&'1T3R2A+/WrNn%JdjbQjuA0M4YW%
|
| | | G'X70(kGiCl:<8bOX%&>#XC%]PDBE)JER-qom`:I<H'-V8"".EqDF<eV*u*G:AInX
|
| | | =QcJl`MC!sEgIWTJh*T7=SY!`0fPYg<g@kQ.lCg(R3ir7H?:@"H'[/fq`&dmHAAAD
|
| | | MHbCePj8bb>(A;%8Yk'fq+OI9\V.e@;%!/AZhHVAK*tX>F?)_8:87l[HCj]G2(WVh
|
| | | LK+MYR0A9s=(<.jZ4`4QWD0H=2JkEZ*Lc-=P:M`-HZ1LhmlLW6GoSRHNLdZbDe'nC
|
| | | Gc]_h6ZbZM-J9Fk,6`DS0JT$I.ba!'/%D[j+G$EGZg(^Z>0:[08[<"=W'^$U)bOEn
|
| | | ;jB__]mC?f=N3]HWL?emTAu4]#R%Kn015N)+`n/%(9'n?cZPH]-(/[C1p\W6&\4n^
|
| | | ;>;=giZKX"B2[;<\l'fLgUALKR3<8c]Glar`jr3U[YTeE\*`0b<<hM>mdBgb:g9S^
|
| | | )l:%Pqc#u4,+I:d]Ci^&MXJHs\s6GkHiu*:>Vm$"I2K^1_d5eOI%eE\^otuk\5C+P
|
| | | "c]p-7PjeQAgP=3%Dr]ISMb+b,Y"^oc@Eco=X0@[DVSpSF)B)_1HViQA*q9]h2rY:
|
| | | LKGCB>H,6<M+cO.UlO4Y-,5]7W(>]\B)3TEVWGU@De>tSOkc[c(!!`2'JmZ>Ic>6d
|
| | | Hs+.X0m>amVS'a^B,al?e]T_u_INP0Q1`:fS\Z_g\p6_37?c#4+gji<1M?XTWEmQW
|
| | | lpA"u1L%,'/Uf3SV,!alU:ACl>VcZA&(0.!=IElCSIdn&g8_Wb=H5$sY=SK%m/@LN
|
| | | J_LZ_74HOo"u*^%c9%HD'4]9S5L#%uKtQBfr$Be!A]3:j3N!#Jbp[C3;:i?7\Dt8r
|
| | | mEj#3#aO5*E'9=='/W52%9T$$QK5i,f([m;+k^R4VM-TSrJTF"=52%9/"NGS,,L<*
|
| | | J(iUQQ[AVHCVb7i--spQ_J)ktlaVD)pg.7CJ)0Xd:^2#'9AY%q,E!_PZOOc<Qo?#B
|
| | | F@8kmIHc?Ig4.%G.i=0jO%5@*Le$;E4C(\A;=2B[0lfh'.+?B!2eQ"#g#6"8E%)6!
|
| | | !['^c+a.OfTb$oZqake!Bt]Pqhg-C+hCQU^'7f-5;-h`/*a:?Z1W"&#Hdo6Y_]$+$
|
| | | *%9fB\5"kJ![1Y8"C+B<L+Bc6ZuAEb68b#MlJ`63T#*1gT]9S<fGT*rVb)V+Qg5mc
|
| | | EP/n?-!BU-)jfnbZ4N$>@nVTBGf^o3TuAK.'t`sMXh'@m5^;)DkOJ(V9kM--BKm9o
|
| | | GZX<>c90[E$Qe!f+#eg9bNgF9icOq\h^U-GJVbE/N8Dl^;e,(EUK(.o[5;RV(aJ`o
|
| | | B4E#pn'#rUheYai\N^#<3\mB=4$#'u8akY;Mm[0[<I1qhaUh!lILN#Lc8e:"VE==E
|
| | | #N@X:?JL+KU"'kJj1`G/1"6!eR2is??9-((E<5q_mE2]#qW_Sd6]clVdDe1LnRY1+
|
| | | ?t(5\;38;(0c1>;"!N3A>Vd9,7R@2b-t<;p%#1N3bU*fP*0(7K8<cqc0c(;=6\128
|
| | | AhK>X`pu*jQsr&p`o0hKI)[NK(dSADEQ#.G+H]GhZgj^N2&q>Z@'_=V2AI`r6R8t*
|
| | | ),(c+)[HbE#b]1A:`)T/_jG,iD&YCci,YNVIaTj;`b&'KE6r>XZjd6QiLnD1H%F+-
|
| | | ;CH\kB8M:;Dchrpcu0ti@<)o@jnM+Ob24N_Bll]+Pe.>.Z+PdTD.h.R#1;dcNa$@S
|
| | | lh30YbVBukfB$DoS_Q+f1!a1G\f?E5;5MF[UDuHlcX2XOE8s<G2?O,9iU:f1X1lef
|
| | | A:b;7pJIKf<!kY;A_$Yd:gr@l@;q;fJEGZtT8)PCN/Ko=CW_hF8e^]WUVWmJniX'B
|
| | | I)7/O&7l*B_6VM7_/'s/Q*Lt>1r:X0o9-b^bN'qJYGuD(Mnq+$IZ6\;bPqR^.(U+r
|
| | | Vm!,eqo8`%FI>Y!J8GHS6'M'T/a,"X,<Dm\*=m]nik2KH82G;kUM+Zbm%uOG@+_li
|
| | | Uq.?cCM\aXUD";IQG=siGT*F#$4qtF/8BG+:2*)DLSN%'VVn98]3bZBPDo5s0Pu-#
|
| | | (^:Zg`/CTFU,8(]oLuQB/G-!]QmhF![#d);Rf`m"Ll*Q0^,!=a[3\,V-OL'oU.$CO
|
| | | aDG\,YjU$t>R'hI9$K^Ze.!DLCYag\L!ED%f@PlpQN0Q51/D(Q(,_u(VtB$W(c&8C
|
| | | KSNTNXHr]:+f*&AcKMrg+g<X%<G0u.SVnPc+iTPq?EtL"CY2^*UE3FoNLb(Cf.I9T
|
| | | i7CZJ\_G^=!A7@gUqlh92\m?MX)EN-q+D'J?DsRBW,e'VcRe6WLFk*f^d78'b3e9#
|
| | | 4`?T2)/RWc\lk9QoB*0L#pd8&eoo95kq6V@V00CcU!^F#*KEb<Sn0!;[B#,NAH@]=
|
| | | P-tgHGh>9ml<Re,F*nR,0Hl_iJ3hOKo#:ngPlI%!/;E?!d,DFaMs]5Pdmu,OMsF7m
|
| | | <WHQ8CVc%H):I7&Des6iKZd8ie%V_\5%qiD<!Ng]C:.BH6JdYVX(#Sd+ecM[N%d4E
|
| | | 5S/'QX[1RlQ)Za2eB#hfgSG0GG@i_RT5U6D8[=5<,^qXSj>[L%>mAZI%U!C]PYZ08
|
| | | pH>.M`9!S'VqCW%2!KPl>rmPeI'.<boIm9!;t<_BTA@fl4dT6u>i3:\q5?Y?WgN)o
|
| | | I0R':Qq+1?h.up2V<uiu2t[7//.FgtiS#^cCgW!68UIW1(;NfP5_5us0I8%B6)*(N
|
| | | M5ef_:n3*RQ`BZhbKPT8M=MT!;HBHY"%$q.23bIl!D,*_HE#,M5'#eC+FDpnO9PcM
|
| | | oIU6=A+bS=63KI('^9(S#DuA9pF<U6X%:*KECGtL,""Km#g#>Wlil8Y@cgu&<+n%L
|
| | | W7n,9<u[[Z@6SO)Yt+!^X(28;-fpI$&]@#cSM=t,lf=b)<SEYpR;+ElSiMsQDH%dQ
|
| | | C0TWU8#Z(*n0+KV4U!Gh&T^d?Mk$RdD^#gjR5ZO)oA+NlC/mgH.S@g^\Qpn#`(9(&
|
| | | kDFo+=9[?:9;el#fAm!pDRA(BR*KNCX/70N0SM\X.S<:Eb`a@,@EfFQ1uC^O+@`)/
|
| | | 8#_m<b7Y((LmCF?78"DX6?=bi`^g`1,rjAAINd0.Qq=35J./\`PRDmX:_R<u9E_8^
|
| | | nu*MSQ"pL.qTP6>"Z_c\OY'/3gn/7^O\;uC050;\-o2">c2%N(8?F5,8a7up6KX5m
|
| | | !pbOC4f1ZUlJTun:a-E^"&kY&$gG$5P(:fsRFhr&@FO[N%FF-6;p/#Gh*s,!-D%pi
|
| | | RbU\E6E2Z+l'/ce<N9=XN)3C'e:LA/@gn8<A:9'ZMKr+WWC<r^Ck>VH(.k$DLHT19
|
| | | 8.lbR?D]kVX-DHdOP:"8g\kWD/ob&2B0^ngD1>U5'pTr*d:CA#)'O[LC0+t\=)>,h
|
| | | ,.;*ne*B%e/Brm"K^!fZb/C#i-&tZ=7`%q'W?U)+^p6eL`l&`qMrusj\*u)oT33sT
|
| | | ,snPkFM^K]Rpg6;bQU+"R_'+VVSgkF=0BK;h+9]:?7WC^\.UKQeFH;ID_%SMf:p\Q
|
| | | 42An9V.i]2Eh4Xl)J(O4!@^K9pDB4nI?n><YGn%E4dh17Clpr)2ZdHh;aY#Q*<;UC
|
| | | a;L(dPu3WZYpR^f`>*Vm>-<S%`"L)]iK>]eUugB^fM;"[9'ZM^Cni6-`kPo,@R9Gs
|
| | | %DWg[(T>OcI^'8I-FKQ5W6=t(feIT"Z=`l?>7lTD/aC,R6Doo,ad$f;\%Bqs@^u?4
|
| | | %9m]i-s,Em6keH68/XaQf6!*M.B6SZD:d!R"s,oHDe:\H==+oSggK1kP&b(VcEiKE
|
| | | *fUA0SS=J<cEYFN@oJOICS\]^h8N+5%\%96,H^SC5e[U@L9O-pJTuS!c,90EEb&"r
|
| | | q:XO=bYa,fG&4nrs%[;a4d\h:+OPuh[cSS^Xu3(GX*O/8jNHe`[IJFj=W8_oRB!ah
|
| | | /kmJC6Vm'-O-d6!f\!cF7ql3;V;N,t"9I<'cChT^6%C'dJ10eAK0"<;JN6k`J/5k_
|
| | | $64[ImK#UA"V;4~>
|
| | | endstream
|
| | | endobj
|
| | | 31 0 obj
|
| | | 23116
|
| | | endobj
|
| | | 28 0 obj
|
| | | <<
|
| | | /Type /Page
|
| | | /Parent 29 0 R
|
| | | /Resources <<
|
| | | /Font <<
|
| | | /F2 7 0 R |
| | | >>
|
| | | /ProcSet 2 0 R
|
| | | >>
|
| | | /Contents 30 0 R
|
| | | >>
|
| | | endobj
|
| | | 33 0 obj
|
| | | <<
|
| | | /Length 34 0 R
|
| | | /Filter [ /ASCII85Decode /LZWDecode ]
|
| | | >>
|
| | | stream
|
| | | J.+gME)=>9"r`LkU>_3l5WBYj7Dj\tJE18F)1b1"U_H'n3Cf`onhA-N!\-[5ctG6q
|
| | | E&SRBL6?P8/8Zdna,5U3dG,F?'G+$:F/dCJ-QJ.9Jrs`f?o&^\Ku5W1jAK85&qNGQ
|
| | | lkk`iJJqqU!`b30-Pm4[#B9ah-8lDK6j9m_(s!%&N$\XR:tk[s^'H)AquufoJMmRe
|
| | | @&n8+iGuS;YbD0.`+bFOhX+HN^*=@3Nlp^/l%I5.15S`co8u=(ctPBV:'WKS9Zh3/
|
| | | R*FdR+k4MR2k5n;P+efg1q*mJj#muPn#\ShpUfqrbi!%eRS/8fR+TDe3Z<3i:,'[^
|
| | | /<e222(^N9.2.m[-StlBYekJ8&4g)*Tp@;iKEFK^0T:X7d+sYS!6@/0,I@<F1;SKS
|
| | | W<WGhW$2KjLh7J/$G*OFUSEVZ_D!.;C`"p9U7;cDTrK)jJO6k32_54O'Vr\kLiCIj
|
| | | Dd6B]Xq?3.'f66F6A$Ot.Sc&$9,^utL64kN&0`WG<;@n5iX@:a_*Er9N8\e,O,`1m
|
| | | _DXY(#imnQD9N\NW6Pdfh1Pl\fV6AqI,Hc6XoMWcbQDt4M`_L]5l8pe!6dK`c25F<
|
| | | "9Wnm&.Kk'i&[gs1+kPHUFdBHL!M#0O"9N'`j28\4JWk893U&YXt,t,"T^oNBUAur
|
| | | 9&LWm95nbgL.bGrQj3YRA@MfEZ5+F[!LbQu%W#]aa>leVR3,K'+DMjkaj$k@8#q/R
|
| | | *(:-HEecA#>8kP8$tE+g"sJRKCnc+/]6>Gn7HH"(LghfT1\Y0a`Wl"!MN_@t`U(EK
|
| | | Qo0kP>dsJoFP9E3#?t7Ecp56u6#^=@iK^Wf^]r*P2Afr6qC@G2<i'\g@mR-cp]gO"
|
| | | Bp"/G.cHda(+sBg>'Fj=Qq,4m7pC]UKtWu:R5U!?Ba]YDJLp#NDAXruAm9H!W*@N%
|
| | | `9b+H(L`>5V46XVb$_.*%V@eC@H^?;'8Er:&fK<ron/^,3:23'@X')m)qX9d&rAqX
|
| | | 7g$CUfN_^EWR:/M)eTXa.i0NK)PP9Q<G*r)+d\?d]@Vq/Q-Zc$88<]np=^n?@q!7n
|
| | | (nk2@l]4J>rngq%Ch@#8nstcAbA(>V,)GqI6e@+]ojZ@`=j_GS]3X(U-)0:jK.Y'J
|
| | | dh$12/RF`+%OQP:POB\:9%-ur9MKRKp.O"jWS$tI)UeLSS6WNj<G)A#=mI.QaLKO)
|
| | | L467*j%rkH7)Cl`P5iA'$ZLh'KY4*cnQ%_7DQjR^3b-D6foffH0Q;`I=![[2HF[^f
|
| | | iMa7$eBglt$?&YXF-+85>)CF7C(RNU0kTjY8=M"QaLN=D<K?(nalZfF`PK/Ug<N@o
|
| | | Km#)F'?'V`[iLD)I?%%E\KkG1OHZb#LmY0R8(A6ECh$tRop`4jDN;QS0mdfG@QOb%
|
| | | ?IFdA=g$^g`odPj@n8D"kB4t7pYs?P1B)P,Cs.HbMVDHXgMX:+bEV5mZ%6uJB4if8
|
| | | '_f-&?Mi[ck$=3%G8C"s;sBF(61?tfhWs'`Os,_=nuG[pM;I$3P:b>f^]Gk`UN/GJ
|
| | | 0$4./PZ5b3S)?Y164#VA_F+Zu^NtuQHCW#b9GM$=IF*[U2Fefr&r`uI/B/0pfKRY!
|
| | | ZICY1JYKH)4NJ\h"_nGdPHpK?3Yu<]CWdV>R3X&8Rjgs'884X/FF%[A>lm*hI?VNI
|
| | | 2]eXV132biWP&WOhj,3/FYF_e[:!TeW7+S-Dc#RO39*@6bbTV#P"-:U"Q>5`J2p?3
|
| | | clT_E?;#;gU[B^f4,4PG)q7uFk9Rf<f&%G2@1lm%Nd?m%o-,-j4$:[VVND_u.*7D*
|
| | | IoEm^*QX>[W\j1,&AE7n.Ftoj/G:9gH-/b$g;coV?@C4`>9<'uO(3PK/\o6;4rN0)
|
| | | dIc1LXJ,aE(@*.[$kb;>nHhiJO#GYU.Y<m^$%lAqYYdi:Z&T:99@_&Yh-26sCnSO-
|
| | | p0Rr9.jIE$)UgF,MS)N;$@7FY<029rWsEcML'mV8/"6CDU_,CedL&[VX+%Q"r%;Hb
|
| | | j^,$r=]W^dX<B-Jm]YdZam$o#N@OT.3\!L('smqOX-(16PYb<dNQQ$OeK2sPqatDC
|
| | | V7Mtma^'[/BO>c'9LL@t>nUp^0@2\8<E8Np-fKU!b18E]@f8?f@,``G!5=\Lo00a>
|
| | | HPm\S^%LloZR@Ml87\#spR_t"A5HVb%MafP?!C:*;.D;5D1rAZSD87;O=`@IJiFD1
|
| | | OVc&l.?2c\(kWN0g[>uEZK9#+_XL2uUO)4m\"Bshq)#N@%UR\>0r75_,,3OtVsXJp
|
| | | E2#4X>14uVmUaEU-4saHad;2qChjm0>35+TX)V"ZS5eXAiEO]beb#lZRJtYn,:uS$
|
| | | 7Ot!'ba[6iA!#bg>JXIS3p@W0Th19(^=`lf>l9QIYJt_32/asN',-Ssh8EQ7=e7bR
|
| | | "a(8(-Z\RuD<grd`U@O/B5nif8aD,PdKMkeMV^j2AAk`ThRl3ST(YY`ON`NG8=-fp
|
| | | @)P!*D<dtnA8\NZm<+GRiBlWs)d1*1bY:&+2Q_urK,NHI<NR7<+3'doEF""ISt[/t
|
| | | Efg/ZmTEN<,SbLX0T)L0`]n5u*+!?EnWRgaA#hRl:ViM$'CVKB?R9k)g&(jW^MEu+
|
| | | (uG*opbDPa%9dL*[a!J%>=@p!`G1ECd:Ra/C#P3g!;="pRWs@]c#'+@$'l[B]*aU9
|
| | | Sbp$kf%8VXkG2p[;QD/]6e^*\2ns/p(U`<9PM2ViZ#c%l\otbifi^%@T#7foZQ3X\
|
| | | a(pd;".aL6]A1'f\EoekgYM"2imu/!GF\+%pbs%sg%2oHblD-1q]kUaG=1pB0>]QK
|
| | | RElk2^:j(bdX/\MdbOknBnT3P4)##m;3jZ;5-*W>7nI4(C$KGjbBjZ3X)0IVJEmY"
|
| | | ^=mnHg^FDCj5QYeE9(rKm4Fp8<bj<)oD[]#i/7Gc2e2?sa!RI3k?:Vee.p`lq)K[7
|
| | | HiL(#$+[(N0u=Y[ZuIMlK"_)9-hBP4CA?Q(mAsQ(UUHGDEictA>lRKNRT<ta`)+52
|
| | | ph`WnClS]_`QnD-m\u3"pZKDJVGs'Snq^soheOjbaCtOtR/tXX[7-JbjA>p`3+iP$
|
| | | h!bILWWqBWUAo0RUr7fDcg(`Fd/K*b!,t&^9oN0bf]MFm]h`tDO1lf6SnUsXm%mn]
|
| | | %@4BHeBAH<"=/N@Y3K`jB*h0[c"(cqagDDWf)gVK.Kha=NrK,LB`ddSs0)jqbsr15
|
| | | ,66%6e'Q$Gcn<_)n:n0[lH_Brj&$<40*Y6FKb3;g`(p]c`=9!i#nN9M:K%NCVY\TJ
|
| | | ap!=O#5GV2qWqd/&a;clU@Kd#PeAI"TL0]Kd5$'r3;8J?+g9Zf7Q*ELTW`qM>Kj=!
|
| | | A>Uh'cH?S,QK4d(Duueg]KPcTNR;e.--VkgSund>&93;(#_oIXI^q0p!$ih&C>+%!
|
| | | HPPZ&(+S$E:XVDrOVK-bn427skslS(MDD/X(Q@l!7&##urt`Zs.O93Y/<Ls8E;;/A
|
| | | QGZ?2nP^37p=A7H]l>$5,]n>Vr2%g+6Z!IZ#5KBUGoC]'R$$/U--6d_$nX4H)j2?0
|
| | | ECc]Vr1\msC!#Eu`Pu_h,^+f>>AsXE`nGh$1l65oElh'>La$m0<@,]0D/'A$_P7-a
|
| | | )'i_CE7%WFN%RJ3Y]>n;=G,Ci6R7bVMCg*(Ulp!KZ3M,$!ds0B!AS,c-IjF+b9=sJ
|
| | | fSNA.9j]C@]R7R4,I*n)L2MP-<g+hYJ8!#+WKqqP;JQo2A+:&1Ou,OX@X&J_EWf'J
|
| | | W,jUYr+XQQPfM!s"`A]BPUT1=6Z3[A1AX[?5*YA4E099M:/Y)M1=_OOUPA3F"-G9p
|
| | | 9epcS"=!Ln7WC/<\A[_;+@_DG_\fffhO.iInNmq6ZSX!b:En3"2C6N.ngmn_'U8.E
|
| | | .5K^$8t`Tpf&tJn(6Eq:nba`0`0=p-/b:*?1Sek\P:Gj:D6p$1,*a5odc;'*+`kI\
|
| | | Z=$c^\=3TF39/qbF0Rl[)a%'24^ock'BqWC@T\ia.ca;e;a-ZQ;)(Hf3qN(B&_ecd
|
| | | ofgB:,VjD7VQi>/D]'jW>4a't&X+0.ANRd'6ZXG3;R8VEFXr29A?Vn!65pRMLlM"i
|
| | | '1gu9C#iSkid6GA3=#jZ,*J!TJ1>YX(X%_+F0I,e8Mq0Y,)<[[:HLJ/@_,O!bNn#e
|
| | | Zp?9BUnI=)6ds2"e0lM_/P>/:8a3HeW<51J+Y/<!6$0:l;pdboB'Z_uG)+Za&ft-[
|
| | | 2`hE27+6DO#<bfQWedr)H\QKN&nN#c+:Suo:\:8+$LLTDf0RlT+*@q.Z@,R`]\@I(
|
| | | 4@11HJ/(nFnmJj8dkqe9of4?h4%/`_Lt*>F@k1H"+VcCt]G$n^8784X<&kY@1D9ao
|
| | | _JHW&CGWrb.RIm/e<LlLoN:+MU%9KHEuS55o0eF</QJ$&Op(]<2K&2D4-A&:jgLkJ
|
| | | WE7,A:bc#l<N0%V,9cZ3P4`Hk/42C>WEf+?+Jin<-bgd&O]CNK+4Xg^P9h^,'c04S
|
| | | D[?/31)=kPn3(pe:Q9d0U0oaritY(\9m,ha%_fj$ocs,ZLFdgSmF,O-6>l.;dBkY\
|
| | | ,5j7)/j4=M0F1EtaOXJb'TN@VGc:g_obh=s+(L5(7Ite8klb)6T-D^72\*RaO]*[Q
|
| | | Cj3bPBG;M1Bp!"n9W.HUHV";)lD#4Pd6olho(1ZgG,h>(G:ZAX@u[6oPJj1neRPCt
|
| | | C/i]&Cj^U$[if_XN)K1PUaEUQj'tCr@_rmm<V3*,lY"Yg4OSUjl<eB0(JklKA.j!G
|
| | | <sH.^/>)Y>?4%91p=jSqnNGIBD%qXP<m>Ci!gT%%/%3$5e6R(Xa`=gM5Y2c/K9hQf
|
| | | ?S+.KEL0:QAjKW:6Z!W6DsM:d(--IqCpmAlCuQY#Z;4t<'_U!b3X9PAO[0^KSQ=aC
|
| | | P,6K/_j<\;>&JGo,0[8Ja'*8uF!2siBepZ\-L5q3]2r(>0F6cMpQg!D-%,=&6>(%U
|
| | | U*OnQgK]NpLFma4XA^Hia>&[!19;o>=0Hu2P'8jeHcKrBU6B*]U6%<pFYeVu7p9!H
|
| | | *@s]0JX>AX<P<o0b1cUO<)9cInhXUJ:*GS,?+61E1jIQ9)QEpFq\Ct(peJPj<F0<B
|
| | | *TTq(G[Z56@#0ukLNORd#7#e-9cfZtLM7caVQR"BfP",'3Jp[`<$N.!f"b/sE,h1n
|
| | | l3(_ih29\!+./G)YPB)jZ=G[r`p'*2CJ,>@pA'N3LNq:$-)`ML,,aJYMMm.Rab=S'
|
| | | Y3`9Q)teS`L\-TXi2q"cA;FnC:=g8WG#p32E8mdE;:gQFWKG(q>?LBq1Ue+Z*F2f#
|
| | | -<W+O,_6rG,m'/0Ef"%t\JTfnZrr6_7"olAGj8f)/p%5=:)ROh<)R5Z!;tL]_BqX9
|
| | | R<EWgpij1(+15ReBOi8\Su&.qZnYh<'m,7b`7c'4=_(g($;>;5LkSWg>^9@_2<gLW
|
| | | TWtU/E7m'[=.$7uduYph9[\-(A9;kf"O%L@SeR0O67A"A]dIG8<p-6>9O;&s*A*@m
|
| | | OiHp;;KdkmDJ_BF78f5I8E6?=)PIdYdjm#:PT_Mtfq>n$M0^X=8$Jf++Y?S]>UO"5
|
| | | &[7Mr2jI7s7oE793\QpkPGFWj2M2=.17\fO,&l7R[Sr#U8$K@Fhk4R8JXTcpVp&i;
|
| | | hKC=+NLH#];QN%Cj+J>-TA!(4B_sL[J7il0Uj@N?)9i.6H`-%@2Nau?H7D>:A#lqE
|
| | | -qMOSUY]OmZR9o0UrgBOB[`?G\Q1)hF_p*'".4iW@P[fYQ3(I6oQ=iEl`6KcP,Gjq
|
| | | 7\$<Lo`6nP@7)QEQq98YY_9EjO*_I.L_Q6pKsUA7D!2\A)^d_g8gaC;ZTA:iP_;@o
|
| | | #,ScY9IDmq$<m4(Uho%/Vi+M$ZPuDF-B:mH!&O/PYns!*:4#oZ7q-6s=WD2a8PE&'
|
| | | UBSQG[dHXgc&i-[\1&>>=rAcUZ*8<;C"_[]VTZ0QDn<uTPNc^LH_[3;aE15`\S[^6
|
| | | QAU^MWOVP0^GUO)l_V5:MSbj'-1n!L8\;;JCVAI1ZObTi30uNaKTjJ-8!(JL1[f+!
|
| | | WKbH6_IsgV3PdNI(.CbSPc"L92)Ifr*O]`QOkB*2#r6`e7RNZ76En5%>[>7[@WV>\
|
| | | Ge?tnF6CRKdlSP#[USql[U$jAP&olm8CU$OS8L$@;8O(j,=sS>S%"Jkb?a6p_O9SR
|
| | | e^h/h-]h)5=Xb9iAb(j]ST&8%!Ukr1MEf@TTbZeq$iIjfqQ;7sjB]dg]rAc,`tupR
|
| | | $cD89%>m@:66Who$>mGZd5j"E4L`]E(,1]PO1=/PF.lq.e<`1`RYYu6%NguBiL5Ok
|
| | | ds4s3&;Y.N6dId#S38SO9Y=\:a.dQWOX%Ef@ah%%d?M0\Xd6u>j1CP14fo#'1!S1m
|
| | | PX0-tKc>ChUZq2jbS?8OcY5;;3E<8CUa9a@,)Fs_EWR\+IC=t-Ufj7\A`=P7\p:7:
|
| | | g;hU'[CU#(<3`[W[D#o2/a_#b^$+b[K=)VP`!sbp]H:Nb7+I/uK!l\#0.^Y5(S6%t
|
| | | @`'g).)!ih_/0@(>J#c!\ij_^T'+pXigr*;DsK#>1bY?tLodhVO"K?2H,_b^DKc2T
|
| | | )LZ+N;SZOshL8>65"k"()DTuNi7BND.\j$@LZK5(kUF5NqV$;uhiK6Dj#7Q!Q%@pu
|
| | | &@aBhK:Q[p2i1kK@t+"9Wo\M,QgAS[J`?R!JEAu/Sh?f,j+8akpDoC`GPIDhOmJ>%
|
| | | ZH-mmM8/BA8aaQMmi$)KB5G6N_s>IWK4gEprol?N^"].,=0g??6=6fAl0\VGl20G@
|
| | | rtLHA]C.rkFh]anGk[$o+7N5MmJ'KLSnmt(?%8!JYT4gPfBkeZ<RRCNG1(4J]Y9B?
|
| | | @m9p*YlAHuM)/_X?h[Xt=2GoA?[^AGd"^FtQbSB5#5.`$L\5l\VEu8'moLh_b)D+s
|
| | | -@`7Bj#tKc@U:AmPF-o4f15alW>S10Ge3O+F@tZJr55o.LFV&S+2!ejFHA7iN[AKF
|
| | | JcI_I$\lQ-W8p3["UrDgL`jKR1(Xm!it67cE]G#S@;skH7OJoe%&0M!j>%_m(ldT$
|
| | | !H?Cn1k\2hK9:,kAiUbt`m\A3i+"+&:LKC6[.8#l(_(0M8l3$*18*&>oX\ikSi%G/
|
| | | lBD(83a=Y'cJk#OKZ[(7(_+LUBV\g'?`Z\uG1d:-0cIFOCiU@4((Ya.<i_?KSD8*N
|
| | | X@oQN4>=9X9WO]B@c>9GRNR=,l2t4TqZ\q$L^go"]Y%W3Z9Y/E3fK[k&WFeMj!g5\
|
| | | BsAOl`fs"Ri\q2nj`Gd8=NXneL2A2_I4$)[2AtfLpJJl$OZ+-;[?[j8k%u"S`pN7]
|
| | | `Ns"3nbFFt&[9`:d-Z$'gTeFsBA)/6lCWKnB^E9%4*mATmu-ap3bcI1"$6dpcI"kU
|
| | | l=T(L@?>%!/?'J,qn!+PEZ;]JZeY=Cb_.tg4O6Cr$UYA,#4Fb`P:X/Rm!Gi>1'+0d
|
| | | a0s+<36ErC.l?<2b1i4$6K)m(Q(gu(MOT@!&4%S]#W$E'3=?0:UWTThp5Vd;G\[0!
|
| | | OddR!Ti2Rq+3?#eE#:bp=tlM%_2=Doc9[',1*TZ&*@<l=bkB4QP+Z9>.T-,n(drD/
|
| | | r6?[k%2gB<''hNuUkn&d+Ys`TU79$k1bD?\mQbI%ZuY`5jjB#J(o>_r*D7d*/:_S>
|
| | | cg2PWlaT\94[Fh(ZaQ&laa<FmeBLTT[b.e6OYGI&,.1QRMEP`CfsEd[a]Gn[L8i^G
|
| | | V7rU-1duSBdrkFNj#IZ#$Y8$f>b2eUF,d4ubtd"9),A_F@YnG_Z5OT`fG\kN.StGY
|
| | | NQEkFBh_r**90N4b6ggZ.Ti0GGg>k`R0m@r[M_H0c\!GrhfpH*O!5$^"b'h/e3_\s
|
| | | 2msZHgU<+!R:eD>GB@.H<NThFR-hGVf@93?c"VB;grM?REa5+=:;,lnWK+ZOWoG[g
|
| | | Pa5b!-4s0llWpuA>L_[b?tn%8qNn'_'hN\o4+M%UD&LjR$qY81k?75W\8AatS(<e8
|
| | | 0]C=WHuN<Y(9R*#:6i8%S$PlA#<$T--;&<)8:j_3P*d02&@rlOjV%,nktF.GDea)e
|
| | | 7-3%EPABhNG*_-/3oe&ho@G/,B4H#0._e`W-Q-J/47q>1%4TTI4XH3^*6q^21Wa8Y
|
| | | +n!I\*T$GpU0/kY.YABqk]"6;"`8_T0jt:FU44t,iM'';fLa?rJ)V+JdqsWgYd?:Y
|
| | | Q='a];bP6mSh^S#>hWP5Lg\r7"q9/A]DmItjYO.H[fMFLpJj`eN3JZdFJ%R4#7P&M
|
| | | 2s9D0O*Vg@7R\uHU0MK'_uG3S7B)Jlo#>+$;ItW;O@+UPr7]mH<t7\:^DMpO8q8p5
|
| | | n/<:`FjA5P1]T<#$->Qr;$%[E5&tUg#/ro,%,%^:K/!QX`>@=6$Bh>5YoQe$A:D3,
|
| | | 6'4m;i?a+9@$X*9W)9C24$iNN_ILstFK-=3O<aP7T_UiNln/3-ia3rF3fYi@;FEUq
|
| | | l=K$5J3.V$L_qt:-d7,H:9ofq&ClrXUOb^HCFk#PLUe@_i;uD&>g"eOY90:N'p1o?
|
| | | hn4"iUI[^p6gg5g2$f0Rk"I^@:(fd^\UmH'&Q4')W["24Gfj&"G%7HrmBR@V5pi=L
|
| | | 3@a#ha6Bo-e2_+f'9[&S[Q7n+'^I5D&n[t37d";:VjPs&n<1?]A0qHCI-ql#)L6;I
|
| | | -\2h?1bb(KK+=Zt6M.!Mj]kVB1Ab-W:F=:$0;/(%Z<[364pjW>'F.lp;%#?kBAMUC
|
| | | 1C2/:14+YP>eDao?qoOJeYd,EGJMh#Oc%mEPH'JR;WGeocJ5ICe=eYF\G&!4$<!Ns
|
| | | <Ku$Y^I:gi]gDB`86+^q;Wou4OCZ'i_&@#be2apqcI/AlJd,>E8i%Si$=ju7;bKgl
|
| | | k!IVp5$!2C`7)=94!pu,YIV&))"f)TlD4coJk&ikTc-7[[ECb>/oK0lF"B`Hc^e#'
|
| | | &_p?5VJpqQeiM;i?#bXDk'CFVa.2.J%,bZ:9uO=4NkWXF*CBJ8`2O&(6*5Dc[<6#4
|
| | | QRdYe/M1+jFKrPN]0/@b8j6NT\Dt(hIRK/-2O.eekF\17FNN41+k>633'u4i01C7^
|
| | | Vu^<B,A2AGM821hb`%X97.eg9MS,9:pE"FNr3'DIL?=?05th:60'FFo<=nLWM[DrC
|
| | | M:,$%jlrB6]OfSBe3FM<"CV]FDt(rRH+0CI5V%hM8\$n$:8+^2G@%%B:*a&/o`/F0
|
| | | rHn!64#.XS&mbVHAE`nb`jgu))KH>Vmi0TjQpLfdp%nP>d?#r(o-p!9TQ/4:3(J6c
|
| | | _A/_aN3`9ebX@KbiB4>616gZDq3[o:dL9Xm6.j+Xh9lsW%@*K`]tF0jpKK1SBN@lT
|
| | | 4E6&PeT,/hcSC+"Gu53B/CfrG""#qY=Fut]b'#URJY3Os'AempU%4Za`q[*mT)>FK
|
| | | &E;P;/l^jud\(Uf3&Qq2r:B"Hr,2"WUE[#H+9OFUXlUEXc:$W[l\iS:YWcVW])?L]
|
| | | 'IeQUL;nO`a"Kg)Q<MD@WQn]\nS=&mQ1JMff@uIr15oI;C52"@#d!(BIA=G"j;lYp
|
| | | YAq^uf7R3aMq@il7-S_5\ol#"g_tEqV[]mJpf"r`lRuLYmKfsT1of6a&sV:uN`!;e
|
| | | qUib4Q-R'W/GTU<-h)=^^"ZS/9mKqh`#T7m4c.;fc4F<p])ZnOaIW#"8WDf'RZb;K
|
| | | .[TQ@k,IfZ&E8>XaBqNu-CirVdV7(OcN.#q0;kU_M8q:#>s)d_i-";oaWE7GjlJ.!
|
| | | l"WA)O'B_bgIY58c=j9"1"Y"[3g0*H@8=Fs#2#IR3LT4bZMXr><<OD<pS*5aeO,eg
|
| | | h<2?;Lh'6tY6UTH];hqc/YVn/rBTiSaDoD5HoA&+nQq=kRJs8Fq4@(9*V.LDs'VpS
|
| | | YBE5oWVuO#X0T=So&fr/\9EuCc[2k5fBWg@*ud)=aCRPB]):$hQ*8ZY[`!"]A*R?j
|
| | | ACF,*X!O?0_Y6DiFNJ^#r$sG6P&toWk,4C3s07.A:C9J(M)>1B^Q*QUjE/cEbe')/
|
| | | \&!k/(l1<El(e&m5P,#I1X%uap-8D02cJWmX8JOceNM[_+DD"mWrP@uHG=fU.guqQ
|
| | | 3P7RJ_Ec<B+fL453[29DKtdB]^J"Gf1\/A@(-Y9f-!TLe4;\f[kdc:C3Lh#s3WV=[
|
| | | S@_0",QWocqTbl5p*7-_]^kPQ4=CXE^qUG_0Zgso]8eq7>XI3o]q^$/r%O"]-8i]E
|
| | | _V??@F>UT[p-JRc5#N+AWm-G5cF6H:[fVa+as[Q8?,$r%*]jEH9>HG=DB'?PM1^#R
|
| | | @15O@ofgK_#bd3pnTq[DI>FSH'3%17Zgb*gJ4/*d`:NSe.58]>eiCOP1eBC=\;`n4
|
| | | qN@#3`)EL$8b9mJ/Ar\?1d!o0\pQrj6UY`Y^78Io$pd);Q9OXVO0FD!9I?nKnd&Ab
|
| | | $Xkg!@$.pW;]_>i_DqCs]CNt(&?bXN2+tBt9=HhL6ngGbPUb]_nR3R"o;lD$YQM9F
|
| | | oPfkj]SWDk7snL-J[<D=@3!Z)_?bdt'RZh*Psqd+&&W<!fT8E.I^d45#\(ZiWp$ml
|
| | | D]Q.TV&V'I,`Ec)B*sItaHC'qpu"^.J-^bq(0e#b'SF28AVpl,8,84e'UUXhPK2%5
|
| | | 8C?B\Umr27HFoAnZEpqH>"$#b`2q0(]5kchi2/hTd[XM2UX6GAN%DP]qD^$ZT;1tY
|
| | | @sXGC`4`D"W?YWfN-7i*b=_B'6I]M7C3#lOi\m4N%,#&^HiT*u!$h:cLr>Q>A@mhR
|
| | | a335J0/G*sJ=j[\M$mH6%,1rZ9;RS7&.L?K]Sr4NnD(U:XhWO0+7S(0A/W06\MbX^
|
| | | +g\]d:pCI\bRU,+MR*_MiVB4tC6Fg[bd'jcH^pSC(<hU)`4C'5FP3Ou?)J><9];,:
|
| | | 1j''RW(n5YNa-]YLtG6$Pe"TB/TBLjI"rNnk/ubr&n:hX;i=CjAdG3rZ4,\bR8Ca&
|
| | | S?jd'N8)CI"F^gH]MDqI9n80f;KAii_lj';9k8G^6dH'0e@)Hf$-]nQq=[!dVO;7r
|
| | | 7B2?>^s/)HMF`+pNrejh`,SHpOGI^t78[*9:c&U:$o[A/%.[`9l6i7;5e`'0PQ9c<
|
| | | nP%9/n/EUo%.c*uob++^SY\?I8sKrb_*,=PQI1V/49X54>O8fhP+,FI7k(qTd=4Yc
|
| | | 6GBH).IoYl/JO4+fEm5h-/#lXP!@Bk'FMMUdSsaU+h#EC1V$n]&Z$^$$u<U,1(sK$
|
| | | dqpR!^n2PK>-b0udt!gi[0oW9b<'\m$EXYsI!JZ<n"6+p<%Qf5M/E[mISjL:LcFcT
|
| | | `.uiuRT,gOcK'>N:kdDdpU4<i#]"2)RM<G_NL_S_<@ZqK".@ZX6r=6]4:PARgbHq0
|
| | | 1t;#ZMH%VfMgPsIQVk_.e<5On>g1<$@>l',8drYh77P%kOig>+'=0PJFVtXod0SsI
|
| | | %\4B_(mEO<jAr@L7PLNt8B]TG*=,T/RqVPo1A]0G#)Ha"]N"D\@fR-4o1LB)3@0$p
|
| | | 78:(`IgG:?fCXbtn\n(YKX3*)=(L(8Kn'G<3!e#2MM4pYoY<95<&4fRfX-nm%$9,?
|
| | | MqEuOeX2A^7><pi@u;:Z6H#?bQ%4uZ!6MaEf9=1[[9QdmHraB!foX%r]=Ca;3jkJu
|
| | | NF@N-4@E)'Vi/f-f,0O^\]n;0/_W;XMsW2sq0''2L;motSCK)%G`NMp.>XXJ^DZ'f
|
| | | nF$ZpY_XI8*At.+kaiIh%Nt-n$]'BG\JO!m)j5HR#`+=A7Bi0(U^;ah#o0SAaK3@:
|
| | | ]:V7'\W+Lgd=r]*^^YPj)]=Hpc+Oi,aU`@('2Xf(W3Q]uN45(_]:e$8IF+#=4knnh
|
| | | >feu8@c?-7n%lufNi@Jn9u`3Ya5*/5%k,r_/U:U7_362%^b*WeA\Slf_:ps#%soq\
|
| | | ;U(,72;AcSPh!F+394BDl!'*X*W,RCYn3Vh-X4ck'Q*8tXl/%rjr?(qT:;_q_`KJ)
|
| | | a/;f@hUs>)TZ=JMj0&HM$[(oF^!3M^[b\(S?]FtH?2^RIp'AS@?R!YAV94lJLgX>`
|
| | | hj((2jg5<0Hf+DrhWTN[`H5@`e!sSLO"%+bkr(f_rJQ3V'#cR9aq*E\cn]FV;NT3Z
|
| | | ]sM4-Wj4uHN%OKUHtY:FTNi)J*W(4)!IBc/)jqon+2"L\6.W=ASsR-t$.Q3<r/+]F
|
| | | ']?lGNKEjAi3kWhcskYS%C0_("s@/9YqpGD&s3la.mI@?Sm4W_iqinYIQ3>T3SENT
|
| | | QlL+M#b9]fOUG[-0F=d(e[->k,eJ3\%bUlBACAjKq(1qYjCm'(7A1\E.cb&(%3+l!
|
| | | ]t-C`o$SA^jLN*`%S^+hG6sQf$%"(XFm=d;<AXj]8lb<e=]g[J.n_W]/I!WT\B-E/
|
| | | 87f=N%[2U)7SY/p6P&$_2Qcs!.(<e,NJgE4)a7fZ#%cq^Z^&G=dg\%\2)<Y]`0+Bm
|
| | | M;uO=D/:FPDiBMRf4$tOkaH,e:5DAMNg;.(;E^([SfH\0Yg.QQCF<],M4^Yh,Cq:U
|
| | | &uIopHAL.!\sri[p2e.K2]oQ%'8lj'!9ms(8XcoAkB)5e&eH;?T&IJ=YTkc5`JKS$
|
| | | o#&!nAeBlb_^fFo\E6>@?NuW(/sp7lTXcD3YVqlVHL^7McPiN(7jF<eo2XU<WX[c4
|
| | | Ll+fu^4k;YPNjc)kq6<r*i7@\cXjuoC:4jlR)!I;R-L!8C/0kIaMXeJZnqme_L(j0
|
| | | d$KQKFX$%;&&u&Tep->%f4r_oaDR/se>nGSK22u,Y)EO"r`s-UK5-.S.#*GcT#)*Q
|
| | | T89%9kan^qrjV6OOHY<[CMpKANF.LmOBM[^hKd*)[;?mA:.PBC&[buU[U65+eEJR=
|
| | | .(H?q:7E)fTJskcXo<,JYrcQ(g?Df%2dceqCKZjOb<(`0N#nC$n?D=R'FT/LmQT/6
|
| | | T\"'cnd<2%PDLp[K4,,'5Yh%79o^<'8gk<Am^XY2ZRVnl(?T/in8Dq2CEaIT3N\:s
|
| | | ABb,4',gGRB'ADu&#;tom_UakGjXtYO6Ae0_LDSpn=UR&"/Gka@:jhWLAMYdalsH6
|
| | | N/;1d^4XQ+[;N%4mrjg?OU)UYrpKK8<k19Z[diVQ42D.8WV6]k<ftH6&FNe\Bg@oU
|
| | | k8[j+QZ;!fnS!g=P6)aJTfQe,n!NU*pE+E&T-!jomT(Wq5*WP.*"]h@l(lYni:,nF
|
| | | GB/M$&kJgZIYnI$kpAUkeH:1dnF`/dqig>\_siD_QSGO@apH/MPJ8r2Z9ke;-:9fW
|
| | | STp\dd%&\=5sMYTZEuhkh_^o9V0#il^54,"8nDahGVQs*2WlkherY"&AT[)iPO[7l
|
| | | /$O'!%eS15,)S0[Bm]L$MeRB9o6ES2G;+'r1NVgQDNLZRmk44H2@NuaFWR!]TS;Y_
|
| | | g\&Om[Fgp8nMkW^qiA;rp1HMtT0!>%T6?VKoA;)4B1nIB8aa&;G4aOQpE@VSFNRZM
|
| | | %9/4'D]O!V8%HBXoNuhi5BC8!V7st[FP1dsL_'Zu&0#R?K'4$P!&=OQ!XlBqLq'o2
|
| | | n<3lfOUN'<"->;++9_h&"Tsg<W*kg1c\71Bj8fL@OH56K:b.(s2ZQ]cK/a#?c]:=e
|
| | | NsWn&JSoi1+>X$p"Tf5b!*=aRTK.;M&:%@oJhW#s81F^#K7O8ZGTc=/_%HMdpa7a,
|
| | | !he!;i%b'&.Kd0a!C.k382I^L&:0EsK:joN?k<E*0S>HFK6T<W829lf1kV/V"*cg.
|
| | | TJZOJ&-IG@"/n6U3&g_b14aAS!GFLikVmi9M$":"K6Rq0&&&,O&-FUIK5`RC:cACT
|
| | | 2hO'4K;^g5LWtAM3s0^cHPePk."m4$3s-lh!H8a)TJZ^G,5KiB!^Dp#!&XOC&->qf
|
| | | K3+kO5t#qkJ3NFQGUJ,E\CQaK%H(WXE/Ir8O-uWO4fT<]DCHbri=M)S$!TuYP'Dj=
|
| | | HD,f'pZU2%UNc"Fl)PB"i'r7O1B">+#P1=^#2>L8IQm(2:\=YF4/rk^N_Igc,rHXW
|
| | | (^L,g5Va/d7Dgj9i+*rgJqdc+0[OJeJII8X&THN=2B)o2J>/Pn>W@b-6i`pBi,9ir
|
| | | 6K!r=6n0'&PtM?;ke(Ld*KS92+p1Yn0b>026jI]3c:91E_r<C1W6UVcM9k.dR98HQ
|
| | | ",.,Z,;HiW5pDHt,h#B1DGi6n%P/8JPY*_;):Cu!BK4:_A#3=Ep'FjVCcNKNk:rpr
|
| | | cC?MD73H^rF\lL2T%PQSiP#O%Ko8DT&_Ld@EC1[Likke9e7Wd+BWhLmaMu,qeEYsp
|
| | | >OGj(#M@[D>(OmA_kFOIVYQ\BZG0h/fHUK,N*<_Kj$Uj*dAKl!17&Jn"*)E6R1>JA
|
| | | #<#GDgg-*^6M[AW`+DR]o_88I5=j8S0\MI/_5g&=V(^2))Q2gmik6KC'%Z)!WoOf@
|
| | | ZACraY6IY";ZFN_&jkBTb%h.0WiAU'V')cg'TG7l'Fl+t8<@ZR\ZUN>)S-1ncLn[t
|
| | | g8+!=#pSXPL'qM/+18%?,5.e;'F5Yk0P#4^W6uB:!(KPU#m2V-RWQRpiKR=6b$fp!
|
| | | )MUPah$QQd[*:2HZTQ\m`UPL31,Uk@36O\QFD)W5anTHd\q-&EUGO-o%.q,/'(?hg
|
| | | Z/R\%0Luffe52)sRYq?cLg\/p%\oa8YciCp+Kk%S"KbUCeNZd&eJ_9#T]*Cj;^kK4
|
| | | *sPRO9FFcNOc"'_4t0.!]3"InieT?H7=<20'?FRS":[akKW+0.QT`4L_JU2X%"htt
|
| | | Wq6^B1U64F__f9>b0LI0/Lqn@:lEc[d4pch>f[-?U`"MXJ\mBSh$?sKYVdT8[<&Ci
|
| | | ^&""o(^hJlbNmSGg"[DjqRfMHAd#ZcGfoUKhCA+s!FgqP717*,,iablC5_a$/@_/<
|
| | | PqhnJEuX+`E[cf*Lte&_i:ou!T8)&,;1CbIo"CR1GBN@2A9j@31hems^NjA!Y-E[;
|
| | | ;[*$m]/l0/[QrM%j+$&(ibt#,D\e.^,\t+$Q+NB:\%1_u!sc,L9I7rP:AEjMK;))O
|
| | | q0"%LMbtU+g&2J9Wp#oC5j%BJ"b*,j4V<g\=AC2q#8[!I>I&:^0@=m1p(>5c/iE^T
|
| | | E1s?.f5cb8/\Jap[i3]SaMUKu9AuU!M`a[_JEZ^No<[+SSH;X]a'I#(g;0AF^tEk%
|
| | | K&YlmR(#e*G\^arl9APRQCW*.0/3KPQsYpJH*^')4^G\r#n/>mon.7qKGAPNfD)qL
|
| | | Z\rAYR*I1X33=+X,9k(;"WtaU]nfS*5\b0C02biGi(DKr`RN[&VkWWS1_G;!9[l.Y
|
| | | !c_,#7W^9!opet7IiQi\F_ETMOTl0XMNQ"DBq>kmQT"2&i>=hajm0dJH<1PAV-,L6
|
| | | rk[^/p"h/%MC((h`CJG`9Sofrmu]%e<EBeT).%[Zq&upIb4\WsAqs63l,'`k%*ui[
|
| | | ,>c?`W#/e3@]T$PaA)N)kO,f$a[o#m7+dSKr4,^1LG3,T`%J@o!K]p,3oro@(a\CU
|
| | | f[=T!mM8MP@pZB3PJpJ%[SEJ%$q:X,YX7EQ:.708LlVoQ1*g%!Obe'1=IX#!ZHcLZ
|
| | | '2i>:S8!Rj]S-p'Ik](d_F>nn6Q1cA1$0C=4Xh^,bLKZLVRd%oEkYb[@obmO]7FZO
|
| | | _(m8RY;p/+WKY:JDPR$AalOf",A'Z398U1BLq9gR7U="JZJQu7ae^g*NQS(VB!>]j
|
| | | S1q;]rZq8Fki(m7+H9!M]"+-SfE=(*e&$P`.$Hu3!H"U8%Ob4XfbU/6^7An*pH6JX
|
| | | 39`9WH;BeTc#ZBGUKhH,Ca,?3kI!aT4E.22)=f';>ofMR82W4Z5!K-t-n$fZO>)MI
|
| | | P6GWS&@oe]VA-(`Ga`0bF^6mP_$3pa13b;.TJjd+[3!ll5h%!IXm(;B+2_)a)2fG"
|
| | | MTG6/>52S8"@9(9(s/us1^t?ks%dY@VU^;S8BTJ?NRdBrRPWNSN8`P[<URL7Rk%bO
|
| | | ;?/f__TbBi88:^qrd_GiPa@(b7][I?0(tsN*n*Pcc@fLsjH/CBRbM,>&Mu-H]"OZO
|
| | | L;42QN\C'5oammN>mk'jOp/Z<*kF@;$6)N!-1q3Z9$LH*_/).`k3=D+1mBXJl+C$+
|
| | | eeN8VH1)L(4Eig)SeddW:?6I\LCBCLP;R4Gl&<CA6NQ':2Ki>k!Pp^6o29r;c7e:%
|
| | | OpSSm@8#p>A)6pq-cEhVRhg#R$?iL@?KE$I]T-tA.(j\t&tSXQC?mpb86F%O.soBc
|
| | | YlTKrf@`:>"3=[SdY&`Vd8&H&6W[5SHVfoh*2CJ0X]kjGL=]cYad"hYP=AVn#-=X\
|
| | | _CLsO6R#G`c:DN`fQKiPB;t\g/s1/sCN<oF2JMgjB2$[!E]HKP\P"WA%/O%bJ`AV5
|
| | | Bof-30p5GFX,+d!46X"DUN2rfaS/[-(p,<R<S@U$Gm4jk/O^i-MC;0`>>1Iu*dYn.
|
| | | -rIs19Usp0V\fat/i"i1C9uhjF<7p@&l.&?or3JK\alN,Wt61c]#$.`;EcQ:,A=1b
|
| | | __mb%dPr,KCF'V@o&RA,;$E2#D6A,G.G0>"-W_!=LS:658&fmHU6&[)8Bk1F9Vpt[
|
| | | ln.G(FZQ!B>D%+YEX&\fib^]YhfNfm@'+JFYhWJ6"hh%F=179'OrR,"m;=%P3,[&7
|
| | | gcucoea-t:$G.n2a'Y=<6?[RLajoXD58^F=WtBOkPc&!NkPYU0Vno(gOW=4<@oj_m
|
| | | HD"))dq-iXA^QXL2F2;;?l`]m79/4g:rGGWofaqSqBoE3(o'k!_m$Ams'R/[i9%X?
|
| | | 2GM;;<S6@o[43W!PLSK!m3d;FE`pN?]8(X8?-q-LNr.PS:NYmA/%'<@#^<P_C+>YC
|
| | | I]_e+TMMn=jl]!#p7oIcMA[l,SiDRDgOeR7\Vqh;guTAH^YDB>#L&#QloH@jL,N4K
|
| | | dAna%C?[PA]o*9P51a+^j5XNn6GN46+(pk?a6IrRaKUJ-6)*g>eeT2pp"jn)p$]#F
|
| | | dk@*TIm;X*O!U.hb"ar;d)#0(S6!2(L;I&>TokeiT[X=Vdmn3LW'^X4F.k*GbP41d
|
| | | 1B3B-TEBd@kb_$D@)*/b!9>gs7!b-AoUs+d!TaBjb_6(N183ad=_o#Z,Q.^Wr[=T%
|
| | | ^Hs8R"GHtR$umkM!JLALWSft^2S^N%"iQ]b9GX/F&jC%P#40dKX'e$+]L8Q^"+mc/
|
| | | "4Fp*/lSTYXUBS#_^;j(.YmGp5,t4Rd%j3H^,@9BYXF.d66L"3[S0*S+NBGMKYIn1
|
| | | (h!QU-3>7lOHN7TL*9&m$q%m,VQe?bd"o`%%OLQF,g-*sK^=fG-BOg"Ya#c4>X--X
|
| | | &E<'S9T6;4%14eTYcob00eW]h=>hjh@F62@`40G0cq%"q$VWi"E;CemHGlYi1pAlS
|
| | | 6V<.fi7'HH^dGF;Jds!LE>3D39p'<>XDC+\kkYjp5E-U!-34s'-tc@W2aa<.E)%ON
|
| | | bXph]-R6:c&A09)MFcu61iXL"E7R%DE_'s`)oTi<!ZY-t,7-k/)c=J@6eY4OcFW&m
|
| | | F(AbdL;\7o^D\G>/?s@\:fRirdS+7fq*^7qA;jB<C7N-Pd:2)od?NN4E`>Xm+YE4'
|
| | | @PYA;[UW)78EuBW&dT[Z3b4Bc(a:;5Ohs+R59IiA9d1/od-aCnB,q(;,;B=-jLlmX
|
| | | f-6;99bLYM;B6:RHQ^_d'bU$cEWluJ$RS`U+-ANjn5U6!UB]^!F#"BHm]JN>%4\V2
|
| | | ,`N43jq)>A.k@EU0+u)Ejto.PLe/3F:_8sCitX.T8M-]E/9/O(,m7,/\8QESA;H?k
|
| | | -ur-PNa:dY,>\O1iaWo^-Kc^?09I1iDtPX"'"J.R0Ih6:o-G1#CatRm+UQ7'DYBL'
|
| | | _[]:O)C,`'dmPrFLic"W`l*u<ZLWfbeK"_nW,_N%"HPI(+#Y>/)M2!J%>c#:jY`tp
|
| | | +]76#P><2,NmU^A0(VFj.LNA#1pN#Z/*,>XZRX[mSo(deDSsFD`p=nrM(s%!2p3($
|
| | | ;[gRJJ;#697g#]F/7uU`Sin;Y!5p-I&Jd"^f"ai#@4UD#nC0r4luf+sGbt-9M9t>q
|
| | | oNp^f]u-lS:lq"'#Y,(U2D?@><$ai.)%7^D5f73K7?Bc2`B_o+,:;VH'E7pqof_J8
|
| | | 56TY'PM@@(=RU>(5Z@OkY3S;=VDq=KZ10OKYD,HP4?lFu.g1T*C^@X0Le8A31s>M_
|
| | | _Q=L;bt/#E3`$,QY+mSch#YO^9pCOR&T^2i.53"'-#ZsUUjP9:N,:6>6hJeaYW.Cd
|
| | | HN>Zmh_7&^i[[GlGWk*I":uu2j_IVupb7dY88EQHoY.oso*5n4"+p/<:g,s.oIVBR
|
| | | !KSq]d=UD3E%5<1;Y&"(<Aa\QE?QVK;=G!,2&NeHkXPaI/qgD,&^jWWkdM`g^_-`:
|
| | | #'1.#>(n5l`>*>a;LD04G>';C5r$_G&.q-;_"(rT3Y1R?1ht5(X%%n"=L)27a;I:O
|
| | | Ij@H#!gG+2OjM1'4'SqBT+Y")oZe^ogEPp6>lsYu&?nua>=VFC>0]Gm2*jFUGe*C@
|
| | | @D`C=`GTEhH9BH/;PGHh99)'`nR0ed3j(hL$7R@PphTOg<:]!W6=jQ0D(gJfju,"I
|
| | | 66`U6*a@2>-&J)lQ7El;7m;S3B_,F`8b#YG%#g=q.IRVY:F0Si)-B]J44M;_L7;ci
|
| | | E':<f0roLaUG=<_"E%_G=nIa,P>HFXF'0_r3eFZ"oYP`/W[W)ZBst?##2_8fL/_*c
|
| | | d#C8'jX2ti=(<#!/gP[@j*OQ(WFrXLX352X2K<RgME@U+AlYTbd+;,akr<hk?fR+7
|
| | | 9K``XKVp*<12=V?.<Og\&5(=b$0g_86X^=`Jg6+ed-V+*QQGO0d;uCQ6n)5FC3"P+
|
| | | TgB6LSdBN",Ol.c=OGFGFr*hm_cCcP<Hbi<8R_r\2buj5;fe:QG*Td/--HK!LNq2^
|
| | | J-k1Tl"^njO`Ej=OtD;V`O&,Z87YX[MlY4CVoUCq/lYoa6o=\Zf96W\YC#<]HoKD.
|
| | | 2-kOXY\qBOU$FgYl45A]&l8ru.'AC5AIE^W4_,ep,Bk>18G,og9,k?PXI&j;C;k[8
|
| | | )c>,A0HrB+1K+f=5!^A@SOKJ-<A%S<%=YS=YZ1?9.Ihb>&S_"tK]N5^AANmS22"<_
|
| | | pgpp2lrAUIO<[/aJr`D,NLiqaGo.ac'L\'*pk:9.onJ'@LR8?*[j"BFDX$[T2=J5*
|
| | | QsggKWgm/2Kif"=(R!ePr+<;dGqMH(PfPS3A>RA9.Zo6u+t\doZPU,G3d:;FA#"P+
|
| | | 6DR[qJJ`9!R.aHN`9'&C@2JWbQ@0QfV1,2(9]GcGm\82WC+3Xq0c6`Z!pPkZ.4oM3
|
| | | 8EJ3?pm+e'm2S,LMem^pZ,0=V7u;LC/f@QRq)=O8coXeePSlKH$J.'nF=N9c5cnI9
|
| | | R%oD`W&fV68b]`?;S5&DfR]C!Z&,0?k=1]&`\<1/RJ31p)(1c=Ouuk5+QGsq1Yj&&
|
| | | =tXT=Q:ob7pI97F]K\dGRtHr!P?M9Z@sQ=,rDCt6.E-bhh_#=[1H5-#3BF/)kB:G2
|
| | | S=)*>agi@Qk8auJP4s>LO.heIg+LE)4dmUgqBj0aSY9T*2qQ*;q>m;c228W<rW6iq
|
| | | /l3[Sh*,<_?kP2j!fBbF,WWG>:dd!A`?`OYB1eV!5`9G9X+:4:"sSX/MV<PYc$1@r
|
| | | =fAoE2q=ItBcqYhIn[+nIkToX!ZWPhr[$999H";>,YP1KM+ehU2'rDrcqNYTCK3\-
|
| | | OSI/&)NMc>\0XP&VIK(o+p`E&RA]n*Xub:`g1\#RN,J%!V4tb-3nS+Z#h2]eHb.E]
|
| | | ;l?IRSjjr;8B<'rgDM%NKlnYd&SHo<)_+mB@?KSm$YZ%oRUC[_**b7.5l+kb,2>&[
|
| | | K*B+BW++Rhj-p<"Cpa&=^fkb%gN-r;KT:#f[NiO8gCS68>75J:[CZ=F,G-3Ln7&un
|
| | | \*'@a)We/,E,<KR[[Wi":$EV/OXqG\7)ThM<ctkJJ%WBW<ofe7MkWHU>Ff?C[QCoP
|
| | | g/9'S!8J-o4Su=Y>%@Y<7^;AnQ27pq7KHPmAm(SH7H;>E#1?ISCh>TPq8rN2a]MB+
|
| | | WmjfWB0+6sqc)rM\B:VX1s]5dHDjJrSL(GgkF=1bk7PKrr_15jn@F@i<g$;M;e\:U
|
| | | L=R@3-+G.gBu'PCmLj3/>,lh;IE8]KaRkEUfjar]&L9FM*,Q/)AM:KDLP:#1`g]cA
|
| | | (1pAePi8-;k\jKOD]c;Qc-!rr144;OZ@M<f#WpbX>s+d80%SE2DojXgc%>E*6JKSO
|
| | | _h/s.FF9A#>fWdJ-YXbh`[;S$(#@7^,@kRd4%j57-)ss*L5.i=a&;UXKg85`[RA?l
|
| | | 6(1t8:?P0f?dubH*1NdcnJ0KRS4eL07@NVl!XLagD%T5o.pGg$4VfU`O4CpV:L/Q"
|
| | | HRLo8%1uR_"PSNF_n"H7Z*aI!PtQR7_E$)&^!jj'fNTamiXf*QH#22hKBMI,(RYlI
|
| | | Us[\b5nUEe];1T+5Bu[kXs8HNCCNK0<QiT&F8[&"""/knGsp-A$(Mj_RpeTZ6,HnR
|
| | | S<P2U>(tT+1ohOL4pIfZ-dFPF(T-J^U&==9a&/_r^6q>f.;QVon?_/f`;IOkai)D"
|
| | | *+h`3`$HI.;.L-a<K!lk:an%T[Jj99BqY$Lf1%rP,8;CXF?6Y_.A>fnmqg5dKsf]h
|
| | | >Y0>2>L9>d,RY^.W,fhkV?1ZZ*jt:aj?Xi1KdWR6'cJT/?M,p[.e1q;=;T-H"IoDG
|
| | | j??qqLFqnk)t(G^S#9QZ)Pc<dg$6Khm6:;%?6oc;SIk$=liQ./6G]&()GBlO5Mj+-
|
| | | V%@A*+CpFDcrO\Bh_[KkrTARH.\ALfA;B]9N4OKdo^-qH2r8]75XR_YGc>jPT/9B:
|
| | | 3:0(BirUbbUX/I`b#'6E>mckda1:_-7JK(Dp?U!!??bi,WVJ`mm(X+n?P<-Z\+YH6
|
| | | $B%$ZjJV.rj`lICoOW8gU9FK0.e,^IIOY>djG'U_)uU>?NZX:(`6L4llhV\+/g'!M
|
| | | TOo;K;1Q/g3#W&3J>&(GCb?Wc7W<@7e7^HO7)T;^<&,I*M*R_qBL!uC$5nbW"(;3e
|
| | | 5oUfd#8"-C:+A2SNT2^dS.6;p*),@T&[_NM17c=Z,:Whf;E(+CB]GI3.OQS\NQ+rn
|
| | | d)90D(tAhc-m6<87'5'VoEsO/@7-1)TQM]C!XCV%frc$?[=ST:)@S85H0kMT0,iB\
|
| | | G4Cg0EA=I&-0#TEqF;j/8u7`P&B&TG(sMO`N1PJU7Z*2.q>$ggB:[2eZr4GO(i]Zr
|
| | | $q@V6G2RF%UCG2[SOTV&-lS+eoaUuN>D^nLpGE4ngRUXo>K1X0OM_U?*-(d1Ts#;G
|
| | | `090TrJr%MbIYf.]+EAC1OBe?9L]uXOLr!XqZXgB+N2$'W,16;$P7"!]++rPp:oni
|
| | | ,mH=])V!]V.FW#K\W3]"V^+leC)OJIasO7qLh&3n2UFK3\?!d$IgSE^!Zi>r8^j!f
|
| | | Y)*JqrOS-N$Qg`ke%"B[EO9\[4_TM/i5Q4Q0%hCB_tY/TDK':NYNbpW%E[RfZJ[DL
|
| | | <50AF-u981Xn)@u/A5K(+Z:OJRukuZ@=g-fcAYt,)Bu05EBV'm]0MRjMo<j"b:=:d
|
| | | `QiN.)#c=R<2t[G%0F$Z#4fF$fX!0AC95]OMCKU#l^YWG3=buTJj=@OJ/X12c!5f_
|
| | | .OqUP;lGVp>Kj$\LJ?=K`H$^V$8XtH<=2`bY-.:GrYIk$/?"<4'l?RM5k]>_/A0r_
|
| | | AKeMU$Q>NZ.6YVXc''*QDkbIHfS<LgX-n3+[9Caeh(/>%>gu]3lYp*-AcYdq6#s4p
|
| | | \'$;tJC)o]4I"!*],<A,:(2$*1p+=p*5C'hDW*<Bjhe7^$&\5+U=$XOe#Y20(9oAH
|
| | | IC,QlW\.AA?s$(:'kM=-m;uNP`++hgb^IpQjuD[2O<j;<\MdpH(*TX)\u"]VL2+VS
|
| | | VW7:A\$"mS-tSU:1J:Sp,AS'IYbX-<'q)*@dObW8qjqO@4D^Oq\Rh3Fp4>!m*fmW^
|
| | | mi&A`jI#X,;e'"";2afY::R,ng<Qc>l:=Q":UY!r*#i/ReYb$8aZB0)U,*jkS>>EC
|
| | | 6+"m^blJFKPD&&OU!%1N?D>ot'T/PL[s_se10):pX#PeE`HDahrC4aI:Jr'QECD79
|
| | | q>D+$9iI=44c.Yq`Z5`r)3VT_+RLi*;5m[#'0NH?/+Tb>*==.,\)2<Kr"Wd&>Mgo[
|
| | | #6oR0P'?Q)85oJ7n/R2uP0=ojKB"8UAXSc=H<EpL1bkfem']g@#*8j\JP^`L+;cl,
|
| | | Q$KJWE1#4Ai':F>WBN60[0%j8*t4I(SKT\SgV]:76]Me`KuY=^Q;kl[+gG9;WQ;B9
|
| | | 2U%9A1?!m3Uk07lf*.>D<JfuR&soqW&u+XFMsqm06C!TI+g\.uV(+*_JghV`0tE,D
|
| | | =sZPc!_&]n.99:U)^i_:@q".\9(C1Da=(_H=)n;#Z5f4-LfkcD1era"NNnX[^o?;r
|
| | | )hXq5#pgfOG"?Eh<Mja]()PXN(:k`Mc>>m#\F=an6[OsD0j2D(`ek.o3_&&CXW<VG
|
| | | 'MM1]/&kIhT>E$2iX.)PdiMdakc@.m/@]>ud=!!K4"?k"17IH:(e9EP@q22:3%AaN
|
| | | 4sMcc>oHa/1*##?R8S3)C)`_hR(L7I<ilWi3^Cg,)]MZXe>M8,MF@s6&BX40kIc$c
|
| | | kA9t?=lBgcHRY'AabS6[6M9QAr$]uAaiaFPFNal@2Q)"W7G%2uBEEILCKuK-C#p1)
|
| | | oS99iEdSu9kt3.:2^+Bn2psa3nRpX/T<lO[e(TP^jms+U,ahgjj_Gl9ia&P(SL_pZ
|
| | | JQ1oD;eq,Y^!o(!CP^MH@l#Oed&LI_cP_G<']OU0g=/^q]A'!$^8E!KBgQ%[Bh^J1
|
| | | BN>tGV\i,+UMA'0=*k/Mj/`KJ<XDp3)JK&"`'ggt/[!R%gKYDGFGe&'RouHkA1ATW
|
| | | XY)eK/:)MF.eI_Yp.cC$'EM:uX[Rln_#W32aJnH/SUtuAY#/\s$tXDh@$Q\K*#1,G
|
| | | M;if=.\QbS&oe27*4N'TeLRS$Gin,dc3FOL,KM<l>%oSFUN83Xh-tSBaR%Be[lrkJ
|
| | | F2'VMrQ%pDFRn)=JMNKIk,WNUj.SsYB+[5EEo`V"OQe04+=XIKWm%WT\V>,Jg\\'s
|
| | | */[8':hLC\kc9_mhVm*9LZK!ePRpn/@Ru)]bb:O_Ako?>HU:,<&t1AU[OWSJmspJX
|
| | | 5">_j@%,dC.uRr#,gfc,P,LcCP^GX8c)Os0HKU9mq6$*FO!ufRF#(SBSArSMFBUJQ
|
| | | #8"m/`C0\XQGOep@'1,-;:@F283JJ^"BE9?CE$PgSWYdX'I;AS7`SaML@H$p5rG]+
|
| | | @acc.f*NiU2b+0>>$t<ekp"/;/_=Xac?XMO"3>`]8M<c^$F3^(,l3-@[EV60[++b(
|
| | | ;ZB<klcYUdnb:G>7*_gbH_Ss:"gU.^nE;p(,L@m>L?`hDC53"EM?Ju5(H5c=W(jP$
|
| | | .pT1J'4o%mRW?qFkLd>^j)%rs7.t'B[JO[gmG3hCdaP83nj0\Ba[:8N!JE%`-Tb?g
|
| | | $Q)I$inG='P*LWu\i-/N6tcCCTt2>0#Tj6&LjO&N?5D4S-KEqZ!.qugdWS/'#iKFt
|
| | | Lcb#7?f<T#Y]M+'nFVD3Mba3+f\9;j^-TZF3AJpCZ^,F_eWF(q@GZfc=g>VsE#UO1
|
| | | -@6Q$jk5dD2NLAc#Kk/S#p.d1aT\d7Dl(5in:n(S-9sQB-;O9Z[h1SS/=G?X96a-1
|
| | | d0<&*7lu$bdbWO7\PD@a%`tbXj?^65FZ0p_'dhod]hU_Pab7>;GHqM<ilikqq\+s\
|
| | | ?P[(4TeBCdXFg4ZMm_su;M@Z%V=2A&hE,0\@=5D\G9\5eGAjDOBPcu/@fML"&bGB+
|
| | | s3:1k2Ft=?Q1Km7^j$qBKY*SXnIs*bWZp-c+r>q)BGlDAXmC7Z.2IHJ,J3h*UZ_N#
|
| | | $DnB8_t6j;g:ZU9CS-/lp.kS[HPNgOhMgE>?B"qqpD0%52kI7FR@dAC\G^i"8@Vco
|
| | | 4:AF+.pTjlh''E#+_ouNj1;Q)\A-Mj.@]Nb]EJZ$MRT@p5*J1)@88q+je41pMehE<
|
| | | 1^^BPBtf-P^(_$m0Z#L?hE`XZVe^`E]3L7s5rb:]4VAQrHS)\<K"t<s*?5j+M_W"O
|
| | | g:`.[-#hGKe(Z0:+>.sW4kRcKP#i^;.(D@[6@:)q)oY-iX2+>C_#V!JljQ(875J>/
|
| | | 5#_kTW^[m?mD+)i_2JC%l<1rV&O.tq5U7);_hPp98;cB#_s4WoO9Hbh,QRm,M4)\A
|
| | | fIh`*&-F$Y+pt^aRTDnEcO;K=!GeoqE"E,51;kRE!f.!c#Q~>
|
| | | endstream
|
| | | endobj
|
| | | 34 0 obj
|
| | | 23875
|
| | | endobj
|
| | | 32 0 obj
|
| | | <<
|
| | | /Type /Page
|
| | | /Parent 29 0 R
|
| | | /Resources <<
|
| | | /Font <<
|
| | | /F2 7 0 R |
| | | >>
|
| | | /ProcSet 2 0 R
|
| | | >>
|
| | | /Contents 33 0 R
|
| | | >>
|
| | | endobj
|
| | | 38 0 obj
|
| | | <<
|
| | | /Length 39 0 R
|
| | | /Filter [ /ASCII85Decode /LZWDecode ]
|
| | | >>
|
| | | stream
|
| | | J.+gME)=>9"r`LkU>_3l5WBYj7Dj\tJE18F)1b1"U_H'n3Cf`onhA-N!\-[5ctG6q
|
| | | E&SRBL6?P8/8Zdna,5U3dG,F?'G+$:F/dCJ-QJ.9Jrs`f?n`O[,%?+Z^f"Gf&qNGQ
|
| | | lkk`iJJqqU!`b30-Pm4[#B9ah-8lDK6j9m_(s!%&e-3a::tk_l[8(<.!<r<9Hk74t
|
| | | 75.`OEH&Hp03Ee8`+an@9JW#P-7]rR"\S-%l%I,C2]5#\nbL8!TP-0O%4;7FJ>Qm9
|
| | | RS7>bEKKHq3ZH@70hG3k$6!-'6ZJ]RWHZr6NVi,DJECf+R*?qnR*9AV0V&Y7c7^/I
|
| | | -C.6a_i_=GAi>N7jMa^8!/>;DSG&`k(KflVU>pJ`1^p,ba>aV<i5uT>K94MC5RM!P
|
| | | (^?%7E"iY2+G(Gb@=W<tWut;2RAC3f`g3=c/)D2<@>]#r[D>CObD*#&L*_X"3/S7R
|
| | | ii&e&#pO>G.DuSA\-3?o$T,SPMNDAV#)[@b(5?7l@'q3::p(?=b5qkO#;TK:(qm"9
|
| | | BW'!o+tSZ]_,<1oUZi*oOees;58-1.E+7r5_3f-q[8D5YSYr`CN&6LPFBf@[!e^!;
|
| | | 2c*oI0TCV`dPh?3OPL)#!sln(N$C=)*MMb.Q5bM[A-t(MU>SlYWlf(N["St1fId=b
|
| | | +G_;#!Q@SYM;k>J(8=\V[Z7"O,f7D[Z?"IdXqi3%/BtMI6j51R9&X?gcKd,H[=D(M
|
| | | +q5c1au9fK*RRLh_#W1IL!M?30-HFag)5XKG[U6";MlHaY:>WRI'C*6)1O@hbE*[V
|
| | | Wibom#',.JL#K85$F^5@6PPM:#pLl4Y6u6pIA*>9e/Y2X879/d!R1B[^27Q10Xmeg
|
| | | hD^F&?pHLXULbrNe3gao1(Jq*jWh;bKK3uuiK>P1hsNo1(J6B^$M3N@MB/Li+gY+J
|
| | | XidZ.&8Qj*]R_EqFNtaLal^dQlj8O`PA?VeiO"<Tc6Bc6RU#m*DaBQF[l_[#RYpSR
|
| | | hT<Wh_1XhYL>/=9p@5eEn[7bqQRTrZH]H%4\M1K'X6I`T[DhArSsc[%aDuNbDnT3O
|
| | | %o9ck-bA3I^M,oSqgQ<"Wa'G^heaC,EYrYE#7/cG*YfF3G8dr\jR?GD("m!*GH&FM
|
| | | >V[bplC:pBR.HpMA*@p)07ge3*7)[Jo=nXdcu>]!8+lVFhP\+r\;+ndg68LMJAB2e
|
| | | @WM*He-1&u9sZqR.&*,FoQcNXbINCn!*\_'DEua`2)ag;9Y5joO6u9nfL"Sf,GKPS
|
| | | RCp6]dcI-KOb8Zgnj<[4qd@&)I8E)Q_aj)$i$2BS:^PgjVd.*0MVoX/\bs'a4RQ?,
|
| | | 8Tq<j$'6R$q&ULaD@p17]U+rh?77LQnBM.j=N'piZi"gJSeO??Ic:]]iHh`n(e,n!
|
| | | )'O?tMicp4_cZRGT:A)eEF(!1PlDmKq[-#UN.hi*RTnT.3K\%J*(a4',SSQa-8#W"
|
| | | TtjpV>9&iB^tMPLi+C1QbbC;]6%P25-?E_(J8L3.9et(2,Gat1/O]+a7Nc[O)iV?R
|
| | | mPM;'AdI6(KJSt$(1YJN:D\ol`!3ObpW;YbM'aL_PHL.>adF"ujLL=nn,c2)BcQR'
|
| | | lP#QS<cbMPdjh1=r@K<BC`99RqT,JZSe&f+W2WuTaHWp!mqQ"P#sTYA!`<E)nncMT
|
| | | Va4p"e!Tb"X\>^j2(+XaPr)g(PphtW-1qb=%\@^fL[dE<,djGq#&uL<f.:WHmupY0
|
| | | IMmF76)gY&Ab52TcZiqal$VZI1d[I&#[&j[AKdqQk+Y<p,ef5Mad(@rW)L8d;lIVc
|
| | | VXlEW0mPK>V_qeWY[!/c=hu7/9TkT=$7Nj8ANcrM=/5EI<Q08A"m=ZQT@@%pcH>fH
|
| | | V53"=nXb?^Os`f%,8-_.AiS1AVcFW\G*Ng%W`Ig9-tmFHXjiN.OQt4QfM_epA5Xo[
|
| | | Q66WAGV)N5)/q/o4BK]4@k=DmZc41-^'e'k+N;F5(Ln?m+URK^A`SQSV%ug$kqG]j
|
| | | -'K.>StF6tf='#X[2-r7aNV#;01=S6&R1B:)pQ71[h[F),8?DQ&3"02<oPn*U;Bg1
|
| | | fJtlId[=Po@Y56r+dZ*^S:iB8e+6XLWLiQcjmM!$3&kWt7$CmknSq?YT#"#J-]fj?
|
| | | M]9qR^eI[T\_EhoaEShA`N'U1,3i?.@?$TF*@imS)FGH";-sK!#fq0i?JSI7_:NlN
|
| | | 0e6)=!Mn1RBiUK>b^BT`c/p`n+q?J%.isRf0ggtE"6@t#rN9l%\.1NPR*0i6;Q6KA
|
| | | p3AgN`[uDY3Z]kAjNHVS]8E%sbKQ;%(LnZ\,oFnO/^?3hB(bX]X[0#$W,_:bG$Qh_
|
| | | p!'AQ6P!_>Vf",q%r.E!m5CbCKs=[/O`ufN^&--1-2E#=L&'foneZLj_0OJ[TnM<o
|
| | | +*BjR.Omk;<[?7$^sS`@AHepW[R9)X1"MB"H:(f*k/(k<mT7FG.j<ocBL&u1'4X*/
|
| | | @pqkLG@M7oe5r5>D/GI_G$YUY>.\5/$rq/%8l.2(_'nWNg/M:RlQR:(`bPDI^*'D&
|
| | | Dhu\Jh;+R3#ZG9j>IRDsS:nSW4h0FP;giU1BM>VDj1eXPF(7=8NJNc,#$;\"@pOI]
|
| | | ZJJ2.QN54=-5glM!rXHb*q42^q7&EpDn$6;obdXUXnJ6nT;e?Lo6mI<DN=G%a!Qj%
|
| | | 'VP!Nb7%2EZ^N'*?d:\7;Wt2TAK8s^@_*^skfo<eD6'AK\e`9*R2\#rK)r#*r^H-e
|
| | | >,\b;7?\X5=1_#1R2@"(PHr&++a5T->(U4ULp)-B+Q'#cK(O*Tc[n<O'0#V(r(I[%
|
| | | i(Cr*VdNb]C:jcQ_B(M7-"a)Me,O5.BfBGT%jC-r(R-ZP7riTDmki.IKUS\geSlIh
|
| | | hOoMO-N;FTpta-,k/]F-2fOKcr2GRDVm:(:o765MIIN`;A:,Z:pj=0<B*rar^Dp#J
|
| | | F?G0**-$BRWV>8bGA2[L8)s<>X.]@i]L8Tde]UHA_V>SrpjQT2q7$7r,l+J$YDcm?
|
| | | JH)U;rbnb4Ai^49oM4MP7,nV+U(ig[KTi2__*ZX8Ku@-5j<2EtPNV:RURk^W@$g!9
|
| | | "euR>U+0>:Y$d>X"UN%,V;)J%n6SFtCrN-Gcor]7TIQp*"(E+\n2`qS]*D.f:U!I"
|
| | | bMI?9]*&5/1n\Amijqp^ng7hu-=\6aj-8\D\8=pZk>*3rB0c1oc9oq]01$l7,ar'"
|
| | | /BL_m@-u\X0?>=fi:d^\DNMgFUD+2LXCK38,pSMj!a'@j,]&E98g[e__j5+ki%65S
|
| | | !ru.(TV_u?Sg;*T,k.JA8Z$MYqKdu^6\\^V/L\\Ue00RR,fnOiEC/E=+D\tj_J+sF
|
| | | bMa.F;V?o(7Z6X67O&SIE>G:t(@JDGVZb>FDS^<K(C$CNOZsQhYn&CQNm:1+`j@<A
|
| | | '):r#KreHf,d(K+)]GUH)W5LE`*>H[a@ta-Z716cLV>c'^a\KL*9giTV[0f;BcY;F
|
| | | iZl*CMn6_Y?QQDNCaZHQnb1GL)O"#RO&>+fj1O1S%iaUEI,a*.+rF!#9^n1?^1)=o
|
| | | #+X'lIi:fK^(3=2"?8"A;&ffZ/e(K-Dg*CFZG(?S@?,Z"l0SsLnIXs5QKj47!nuD,
|
| | | q'O7P-PA%J`Xa7kG\.S.(\-Q3dY?j\E?/l+.5Hdq`koPIDKH9c9#m&/Z=;N#WkD;m
|
| | | ,(s)Cba>C\e@gX_;,$cc9^X[aE?f!s,I*X&/3oK;lHBYk--Xq@A'R4(RP=;2,A1"+
|
| | | n!tXO%iR5&geo9TEY^g=9^46"+u-1*ddT+<9]^jP)m%+i!ik$KJBLj$)A=hZ$k2*X
|
| | | Y%'7%-1-<@YM:aH6H$34`8]9!mR[,SHo\+B'olDs%"/AC?R3j]kE6a^b`N>%F<X+X
|
| | | XRZWWYLqK)1*WIFbMqrXjSC$tFVG7gr5b6ed?>O>QLNA+R)l#$`q;9STOKNi+Z$p]
|
| | | /'_`?U?9j!4&$Y):E2B2(.4t_o>cm1U2r@cC>"YAI>h@@1Z\#qY#!9[ca30soCaHZ
|
| | | #^hU.5R%H&d\q2H2U_^Gmr=pk-;s>n^GQO,]##@ilmj&nie*0t6F7mUF<kE%'0f3M
|
| | | DhOj"PY";Q+Ms+R7I5WdD-HgrL]LIKj[*QT_PB2T4$`Ei-Nqa;&.[>l3n?,iP`d*)
|
| | | Al1hCGsV(M/Z!)N9cHIlBHT[2C"/n<1n)fK\o/d.3@j\%0Gb8=Z7KJC3G)MbOG4r)
|
| | | Bb@+Db="NR_EA/YEs8E8.b*rYoAVVO-L`KsK8-+;JgDE`Ao,H[c/ne4?tBNQ+so/U
|
| | | @W``Uoce0o(F6C.as&8Rmnt?N1K)+MCsOCOP!Lo=3;^(MqEn+Zm:PBr=%AN<9J6KJ
|
| | | 'h0oF;G<i`oHkDm9U/[gpK+L$<[Pi`F5o^P*8b^*<-.V%Y@A"VEE,t[grFG\k.]dZ
|
| | | ,=7Z[9i!-9;aFUMcW_]-Aeg@sMuR%!Ti^or7jC;o@LZ&,3+[4Y,RH\1KuE"&W<PfQ
|
| | | 0h[$?^fi&rQO/Aa#-fe]&N%);a>lW5n26k*K2"Qb7pOK@`e5ho,F7(AAP0is9$P=`
|
| | | ECiY7(.Me1@5^D,<ZPYe9c8]hq(U/U0i5qK/Ril^?g0dam+tEs:.__1/^_=F9%@@7
|
| | | EG!cF2!LcJ@N7D7.Od/#RPogC[RXiYE]".f!&fX"Y3\r(O)!*nCK%Z;B:0`-.UfEN
|
| | | AC;lBf#4"H[,NF>h_>a1Wh"!M9h':goJRe('EE9@`uK8&<bK]f%=;j`<\+c$)b0X?
|
| | | ;?ZkBqEhAQE=O457&na;`h1_g.DsnCE><;V.U^j_D@q582Y:Sn'lGrqFLLp_9nNsV
|
| | | /kh99DY>;UPnR^eDfBh2:j5ENpE%<:,%<KKa7jV!-NeEK.8(qd:Stcs(;"CjFa0[o
|
| | | lB`M[EufCi%s4-[H8/cFQY1FtGg>t,44d>-f=<sZHYui*@jsU+pD\FC=+&'q,$-.-
|
| | | e?Wl,p-[@:F'%AcZ.!jEOti8,=u:_8_NT(B-"BEbC,S\q2RR;!JUl=@JKg_;@M;%k
|
| | | PACH8*)^F$<m>G9*gk<(B7gq9Xr.g-Z%JbkKD+Ld"TO"s)DRQWf9F5uQ:UfG>B
|
| | | mpp'a[!7Ti,DA*:3I!]B0OJgOgO_!P9G]Z_=>,K;=,?W1L=gu2<CM"37u,`:M@r44
|
| | | =C=bG)hr3VKgl_u<<RR>)iN2::f7m\\8Of[Fa,mDNAYj<GBo#l=%jEuGkd$?pub(j
|
| | | l=*lMM>+*m=SmubU>o9606jma;^s6e+,_A3MtD:D:2=S^)/5uPIhn`6R.G^/.$X9E
|
| | | P8"s_GrL?-d>@V844s^aCMeH$]`#4'_u^r:N)0^W>fA.YH_d<WK@rYer[J&qQOu(Q
|
| | | Z^/'VSS?P`8ehL<mgEY6\t1`4C6l\Hd2-&)PF20<J_$pHVh@kAXI'&69?daG(9)lP
|
| | | P'3+:P9Qil7`^/I#a6Ub4dj<ElV+U:P^*D*SOQh=(g&H;5A,Ypp5ghr=nQ7tPCN^u
|
| | | =>GC[c#[Sl_fSn$T^S,T(4=]$TkP9hAiM02,%PJ*UAiBo?18gd(as6d,'q,!>Tcm=
|
| | | j32S;>'MC=&Yl!JFRWCf3`'d>@.R<Zl9,j&ik^S/S;((J>'Rm'%:Y&c?T#(U`&f\S
|
| | | 2O\aE;0c;EK,Sod.6O\443sk9)Mb;<NEgOf6_YAs16JT3i9TGc@bRcOe<9L9TrBN/
|
| | | ChU>-eRu"QM'n++WUtD8e\N[G,+&*EWu@8*aJ@7DWN&eCME8K!Mr;VO_6D)nOgU=K
|
| | | jN1'KQ7uq'f.,=V7`HeA[)99k19dQha_tP5j^Lg`?SA1\E`gG1,H\#%+c\LZq_,@9
|
| | | of=\hR#_QF06\U%@7PuU__8!u4(!J[WkYub&4."Ejh<L[AD=_6QO`_6qCX)r'tF,t
|
| | | r#+OIq=V=;e%$hJZ1OAQO[j]#`OYkhD1^Pg#u:L^K(n$7J#9TE40+oqB*J(t\/V,1
|
| | | GE]`C3)=n5OnQo39XUJaEq.6u_$dW%ZJ(jQN*ps(c'2YHqX!"SC,81oMTfsJ-t]S[
|
| | | .Snh1_=lQ0dTs`39KUP7_K&IMCYQ`9`N<*_:LY+Z:<UHmNfm7E6bG"j:*Wbd>9SVL
|
| | | *)0C.]L\S[s2GK__q*&QZ5h>`<QO1oaZP#6Xg[4m4BkC4]^LO_,d1PVW)6S):C+ma
|
| | | ![(2k4U?"1%CQ"-n>!\#@(VBKasPR3jIUCE/F97`Pa"+hk=RB_7962B;V1$HP!k*O
|
| | | ._mk@_],8Ta;uKW:Kcf`DgWSQ;gHD`XRF&(a38EV]_aoV$tXhu7ZFg(DDL7#!c:9!
|
| | | @i[#J9f^Z>ED5@R?4\1Xcm25d\][$-WPE-OgqY7Your&^bg:"I)i$f8R45f_e+P':
|
| | | qD64++ha>;jMmcH]4O[j_`p;>`p)XHqATQU$,XRi9UMlQ6=8FdJ(dVL`KdRGO+cl'
|
| | | +\G_h0G/JJ`sh^enHtMKh&YBaeRfu(I.3'%h[Dq[_P5RD/o8Qh+g*V;]Gr7j(J9,e
|
| | | i'oD97/u.MT"@Z4Q]+AicHG4N(ak:'PB)?C`u=K%:W]rcLb+&83+9MuMr@6O]E:%Q
|
| | | 9A3g2j5[#Mj8Jr4UA<[?r.=P!VW3t9^!l(RU@,l:k+74a5)7ukVSB;G/L3HgB4rJ)
|
| | | Ge"B2arDs?<W9]RW]Suf"nH:pI#$tPS*SiQ]Gt;F91A,JE=Z<P9qD<ble(RJo+B/^
|
| | | ?SO3,;i8T7"I/Qi7XjsqEI)b$r5S=el2rkON]?OfU!Q"7'3`QImtAkC(I_[PPb02J
|
| | | ia3`FU3J!Sie-=A6oqkc(:gFH[+:r?Q>eKA8pg+]Lao7nL0l)6bXq2B0.0BQ_V=d%
|
| | | F7U,4orR3JAdlbF\b4)D00^EJm8*C"-h/7&>/JcP,1JuT*UYIKb<VP(\j,*5S2E%T
|
| | | VVJO=:ld"Ke^nsM<kQ^;mV'5IT?Mf-jM/Q=XonT`M>Z1Y39$CM:G,7YC=H'`cZK'o
|
| | | 63%?0#R-t8E56EK)2JWS5Z"+d#9&IlL7hA_$oT)b#/UCscs/=E_]cmJaLH4(Ma64)
|
| | | GYB_/&!MsK5b]]*">1UPUI#'mJ.sc18d6N&OFV.$(^l)Y@?BP8D2XC.ip'5.O\2KL
|
| | | WWpV96tS<:#R7&TPuqQOUXt5X9!H1;4-0mUj-^p6KJoQ%XFk;Zf'bmD_1idf4dODh
|
| | | [0SE"0uXoh8YsmMpqTbP^+Q/hA9M-^L;Qm);T>I4Ub=h_csTIcE<2X`3J`Y!'O)^>
|
| | | 5WIS!.TW'1gi&b=8iM$4oim!<VWNWA\d6)e-l_F;K34([@9r'g7ia`Xb!7hCEO<UA
|
| | | Lu1SZ*(gF,Ij>kPcl?0m5/#"JnQHfP/=m0s`r)fSgH+Jn!NW*@.'8tRW'K[sGT8Ck
|
| | | :gD^4b:@VmX2>R%[&JVN'&1;)_g%ifW&S<*_6+`"&\-4B@2)#1>3tE@#lnN7L@2+F
|
| | | g,i0;6QEkE$ilrTCHJ!]50n%e]EW<gR_ukCA+:$l@B7<b85K"iis&DgYj/=ZN"EWh
|
| | | Y+.c_.`&J:/tgZT;&-tk<&TjfDTk<V\<1QQd\,gYk;:$a$:MQqCTPDU9Ss1#PQs$,
|
| | | Rj#t5_TJDS0'ncNabgFgPUDX;eP*KqEce<8n+4Li;fY#o4N3?-KT!'R1t`8_;'XA=
|
| | | 68bT8,!>(JY1Z_a]eo>mJWg=I8T7=QSQPLfGuVHAX-t!S%^XD$_(HW@/kn's[#eLW
|
| | | CunbNW/Oqae]ehhdPI40>-Bff&e^>)in-NlaPd<p)%3Ph5_hR;Lg_"<9e3@d@$b1*
|
| | | KA`dSkmAk8S`:oe_3f2%i9rQ:Kt!bI/W=-'X([/Ac"OS9?k.M.qQGl/_ad3hP)AIX
|
| | | 0nqISL:N=<JMl]9][3SDMq6VBlQ`("4jE>%NTJj=G.(;i3+J^n9;L7>kaJ?[UbHo?
|
| | | 2gOU:"AlGMm-^J'?#`Utn`BDGdu%s#Y/V?_=(ZF)g8Q,VZD2b1@CSk?Y\psamZ+s?
|
| | | DQ+-Q]L&+:/IdM-_E*7@B^4$_3n4.s"/1U6;'UgPWc"?.+f)H<5A<83)JnkI]V/VL
|
| | | o/X1b]m@n_bc(h]K/TneF54>)>B.!BatJCt1L;Dhg\*,g1!'H$TL$b.CK,l1L5W>J
|
| | | *=A>3\;1Xsi)A%$)j5R[?MDTbIJoN"reEW#!];39pdQ!d\n\Q^_mK-R\n?tpJZoj>
|
| | | T9I*3@P!2hRj9ChPQ?5a0*Kjh,M'o`6<?'\I&SCNWb0U')+b66B+bbr?&Rsp,Y4(1
|
| | | Pk[q'drNu;9?<3u8'kY#3UK`*mMhH)Nc.t",__oF'JlMCZOa&i0<jjU_dk0D=>:^\
|
| | | OR^CJph8r$r%(*eSSFFGI-]`?SKifA#W'NI'oK(_J#B@e1M!g.@K]g_N+(c`=ITds
|
| | | q,WK;(,N1^diJrT;iIi;UH%@r$.t/iJRt@_85p'i%L_!LONk$E(`:P[Zqs'/c:#`E
|
| | | Soe*[a9O7ulP\A0;coQS=7V%Lb#Ht,hM]j/WuWFqVB0Fml^qIYe>8J[JjBeg0-l35
|
| | | 2MR=Kq-p.`.Inl+aN.!Qe?\D%E\2nf1alXp9JU8jc:U\Rde:t"1M0N_APBs97](HU
|
| | | P-V$l:#o-JML=28Za+O@#phKcqa<&kFX]p#$N=&IAY2JqIR=`#g<ci/>2\+[^R"7G
|
| | | dFhQlCf'I2)B>$o$`tYTbh>o^:i4?[-#/T4Cr9.7`Jb]<9#[W2dBZ22BX+S4#UQmd
|
| | | 7]N9pBsoULRW'n?Y=`NGF-uRQ4.HqRU*AD2,4uA8^X=>ukTk_Y-!#^RB^Zl"r>IhA
|
| | | &At/ENe1TbdRrji2+O*V<2Z-nXE"1J!2lRa6#4qaKiJhRdL;-MF.OQ6bVFnakqN9"
|
| | | +:\FV0S\N/0rfp$.?uI\3jVO-W_HX$7lGo<),E.7WB_]hSF4rC+A7b9=Ks^tnQ<a"
|
| | | =_NEl5K"^Oeb_7;D+Tdg/V8;s8>-8&q=-e,FuHB=riIch+&PYh=jIi.S;hC&=&[&;
|
| | | Pc;Q@-imI"B$l^f,2A[N?.$,NLpjWi*4Ke`fkrIIT<<2q'44B]+iecEP_e`uJH>-`
|
| | | jGXk,1?\uGOC^3*-n'V?!W~>
|
| | | endstream
|
| | | endobj
|
| | | 39 0 obj
|
| | | 8934
|
| | | endobj
|
| | | 35 0 obj
|
| | | <<
|
| | | /Type /Page
|
| | | /Parent 29 0 R
|
| | | /Resources <<
|
| | | /Font <<
|
| | | /F2 7 0 R |
| | | /F4 8 0 R |
| | | /F9 36 0 R |
| | | /F8 37 0 R |
| | | >>
|
| | | /ProcSet 2 0 R
|
| | | >>
|
| | | /Contents 38 0 R
|
| | | >>
|
| | | endobj
|
| | | 41 0 obj
|
| | | <<
|
| | | /Length 42 0 R
|
| | | /Filter [ /ASCII85Decode /LZWDecode ]
|
| | | >>
|
| | | stream
|
| | | J.+gME)=>9"r`LkU>_3l5WBYj7Dj\tJE18F)1b1"U_H'n3Cf`onhA-N!\-[5ctG6q
|
| | | E&SRBL6?P8/8Zdna,5U3dG,F?'G+$:F/dCJ-QJ.9Jrs`f?n`O[,%?+Z`)9kj&qNGQ
|
| | | lkk`iJJqqU!`b30-Pm4[#B9ah-8lDK6j9m_(s!%&e-3a::tk_l[8(<.!<r<9Hk74t
|
| | | 75.`OEH&Hp03Ee8`+an@9JW#P-7]rR"\S-%l%I,C2]5#\nbL8!TP-0O%4;7FJ>Qm9
|
| | | RS7>bEKKHq3ZH@70hG3k$6!-'6ZJ]RWHZr6NVi,DJECf+R*?qnR*9AV0V&Y7c7^/I
|
| | | -C.6a_i_=GAi>N7jMa^8!/>;DSG&`k(KflVU>pJ`1^p,ba>aV<i5uT>K94MC5RM!P
|
| | | (^?%7E"iY2+G(Gb@=W<tX")ga34(6bqATVI+D@YU!GH'`-4<^("Ua2ggoqo=5]6:M
|
| | | @B88q"i6uaRAVRXU`;nK/:es$bYg;84e[f`,p?]s)Rq.MJ6aTonORPrXqGb5Y+t4g
|
| | | 8;a5LdaWmn6%Ed+KF:UsM)c`2qA?oE88>XuM:-X$$An7K1^ku"`&E\9=BH+C_l23G
|
| | | "9X1k1Q8*=dP;;b6d$'%!LdF,"sLScVZk4nC;A;tKNAN1ED9-73@uf=JPGZ*B+>%Z
|
| | | MITf>WJp2$Vj5VG?<4"lEZ?7QeQ01\Ene6j=&fDmB#BgW6"%=GS!o5gQ@3gj`>-@L
|
| | | MHL_lgMhmilqiAho^0p@>ZE(gFLa*5[pIVYrBFN?FX?UM8bD\H:s+\gq,CK_PusNu
|
| | | \39Lj[5]RS>Zb#PnL`AeDC^O?n`>gBi)X*JF5,9*q2qO4os&ifR6YVPg_Y[nNeP<@
|
| | | 5BBoX(,%+BR9js&VPp(8Ckih@)1to`IAMOM\97mPi-(Qi;W6'L6\S[3Sb%ilR[rVs
|
| | | fQcPVFk@Ue_lf_8-:(XI&l<.P>1ke>S*fpL9qQ+0DX"Z7)3/jHk4c$.,rJfMI<9Fr
|
| | | Y(r<IRarLiC/]#?N9V<d;*=-TL.0;M'numuYd8M,H?8d(oq$!2k<bPJf.I_jY??>7
|
| | | JTBS,<HhYOf593spCd/Mj;mZ$e*u26&^Fj6-Q1;&)G_O=F15mA4ADbP*Fd:I8os90
|
| | | [R[NN#22k`2s'`!4*:C/Qcija>;+Iue=Q4OmQ%a.WV%Oni*kqNBTp`LM;ibK+Q+(m
|
| | | 1K'Or_'_YTV=:)NiqK*D.8OY(p(4.X!oTRY<mVTfOZ5>o*sl\3:\#&RQCeH!X4M#=
|
| | | 9iO>J+OT.Y$8kVYTFeU=q?a\eL5_i)ZdQZ"?R%g+O?saJAhNm$bW1H_WH5kB!s7Gn
|
| | | /qG\`#!k^2rEl'3J["\Q0%d--=Hje_O[^0S(hBUS,V+i#Sg?jjgDQU<3K"@nm(t0%
|
| | | %`u6oI.<dN\<kqdUV#i,DoslV2YR119@\_J\cb8(IfSF&kE3"r#t;Ap7,fIqMSr+O
|
| | | `;(o1frSY?&k4go.,,s,]QJNsr^Ato71<[bHA1q(1HtPfKr#J>I:_[b_0L.lh.2q>
|
| | | :YFC>3DV/b/5D>sH=0+:XV^')^QUF#pWLXi-_d]mQOr.I96dKXV/+G4/Nk=MK]_Jr
|
| | | W]hW"[2#RX7#]47?:P0TK,.>n=lcXB/S(B((F&'KMZJl00_IE:+CqUqEB+4t2'AID
|
| | | $@?GG0d4OdKrV-mOFbMfI\nHBT$V1;.)d*0VCIF"l3L^0Ka=H)c@D)^NXZ@nGr"_[
|
| | | jFR^QT%,<8TX;qd/t+4a(P-P&">#;7=uf!ME=c.XS;&SPI7lkK0;^-pTi4l)9+:n+
|
| | | ,[hSdOn(>6%nU`!AA4a9!Z7L>RB6r"Uc/p/2@EAR<@XrSM%o66F21U#XauQhLP7Wf
|
| | | #VAbV-*Wf*)C.YnYmOPYk,>2`9_QlemWlhu[tC-@@jmL^+tCAH;3hn)XF1,S(3ZOK
|
| | | Oqb='+?45rgkAnK8uP`)WO#"C>hROBMTIT1$rhBS.NiJMCon#QM=07Ek%`@^M2P&8
|
| | | .^0[L`!t*gTWWJ9bF)A3T0YeM;e-^\f2OlDCW4t=[JZ&;&9=];3cVY@$K2]Ygs]ts
|
| | | lU;L_jV6nUMXQIGJ@>mW?Aj5ZOS'U-a_q#_UFp:r2&'@6&r#2CoQ+^-]<L?k']0PZ
|
| | | HRZ4-[>>(h@:ZipkiJ1@F[YiY*"PH(9A<#T;']JL08M3G,f-qh#N&01N3P6Q_&t67
|
| | | *m?UL;R85@MM^`\i+VG=K/H*kk2foa4d%8U29<<kO=OuWB8Zs`FiQ*F*t0rhZ22">
|
| | | 8sJGjE"m%[Fe,I6"]$T61R\p_m'a('-/ooiP4Oi'auH:\k+)!t=fti?\`0;oa9e33
|
| | | <eS[d>Sq'XltUK#G0smg*op#?W?G"G<I.N>kkZQjbK@&^jM\"[bofA1QCBn'G)C#)
|
| | | CT;&NHa;<\"DSBR>Dr2:a/0p/C+H?]Er#7#p=!#X%'b)I8h\CX+'I^r'OLJ#PLXk)
|
| | | A1aNfMY4ucW9MWDCqX?fnn#FA7U3\X,Ec8g<N==.$W:kQJBa'CO0OMTI;XA+OmNSc
|
| | | <le9CDYqbD$tTf@Y;jf`bq2915+u%?'g#Zl"&fPP![8r$$>uk^_"[)[i7JEn0+Je-
|
| | | )1JsQ]La5c?,N)sU$Tao7u_KChS=qBWSs;OqU,5^]c%6&g`*G=*tC'G3MQp]e/sD7
|
| | | :%<bE[Z0GiK:UbtQZG\PE3oa"4)CrV=mii&75f>Vf1f+Jc@WJ/e\'(rg)V5n7H(DB
|
| | | hXY6H>b/89DabJ?7(2ZZ7;]oU]fNX7>0[r-H):J>4i>&,%B4XN)pYf2lK$C=&VW6-
|
| | | ;UW%]*2W&+Vu3+fntkej^Uu"K.K9_)5'\E"%*o9.LAg[;2Yq[\?H+hN5pb\M2j5O[
|
| | | `;'-A9C&GI;_W.OqOnHGhY5iOIfQF(kJS\G?OQ)dLkiMcD`ao!&496%^ODJkq'j#\
|
| | | H%30n+&mPer>#N_:W&@+-c]N-SF5rDKD7XhkP-+ao6U&*ls[B8?,!oYkhZ(uU6O'/
|
| | | CB(JHm:4GhkSAS8P3-WlHn(l8c<0S_&9WYRoh1;p05CWH?ro!P\*N66i]??,$MpOU
|
| | | /M!dYB&5BtZ7"tVTjjB]`BFG*RR@4aYQ>`pM\I?[1q_*(0P%oTY]^7)L-?r#k6.Mk
|
| | | :TFbZ/F]f#q(S&r#3u3WOu#H:+tg>1:ko8bq[2XSrFUp?@NaWK\Hlg4=E%)0E24Y]
|
| | | b,A,S$ddJ`E/n!$)D/h#o'h8>/YNCq68*;&s)+DZDPI!.THT1C",g3^"'D`L\-2kO
|
| | | %fj*C0%qbu%VV\H9Be.>m,$4V@,0-\=V3@2$`"r!k7XLt'?s5%,^`+YEtb`LdGSQ1
|
| | | ,Wug'9,4H@ZA6sFEG#sQC-AKh"(YgV/PNUm?<K!c(JI6"-<h;V0$fI"m%iMQOd=;=
|
| | | "M_3])CcH;C,$X39bkX?0B2d59]$5ZN`Erri!h;B![+Kf.cBj8.4bcBdE\DZ,eWR0
|
| | | *[:0M0Rh6`5m0fu.73a8"mGUj<37Y@.`73%,18oV>\L1R3WbWjneRq:g?g,X#-fB\
|
| | | W)>*6lFjJX#XW!'&^7T`9Hbs^,D&U1Jnh"'Yb*,h/W4j,`GeU>d\,u$ToHiB&nFV_
|
| | | <4PYrW7"rs7,np#pB(a;,7IUX/f`=)1.d@5'$<E7MA4DEA54[F7IKlnj_fX-BXnHS
|
| | | qMH^:jFZ9PJlP2ejQ[4I/QPUmL.En:jlds^AG2eHg7jb,/eY1jZBHj#[k/qq9@9]3
|
| | | :M^69bpfss.dr3J9,+YRcB3/3/J1u;6W5_&Yqa]6&!F*cc.LgWK.sG=1F0^e:f8XE
|
| | | 57d%rqP5VQMl-3r#8&K*+N'6Eb(-Bfq_HG-2Bq*8'1C-npCIm*n`@2%7/"Rg<WrK$
|
| | | &h[S_WabY`?KZ<CD(H#iD/_S=Bbo08#0J\gUR&\bCfIJ;:NN\dX-0.:@lY1P3\Hj%
|
| | | 8m&M0Nrs5S<2`^Cd!-^d]df'04n5=uKXPHug.oLkfIeSFl=./"h*7uMEq5[*apuG?
|
| | | n=i6"5BH2Ub\obpW/jjGfI%#u;e@ejY-S]k8$gk[F>Z5j<_3^(6SYOI-u?c,5jJiH
|
| | | 4]FR)1IAJX2$6c-6n27pMju'Z2`L<X3)U&BNnV?l8>[\o!pfYMFAuk(UH:1qo`Hck
|
| | | FGfZ>DCSVWAJCI[.S@1KGk^Ur1PFp+7VF7a]ZI?90MEBul@VJmnh8M%9P_k(9M.lF
|
| | | p0`bL9XNhS"RrrR`1`1:9s+"<"?`;U_b6!Mbp$Iho]J-4/;Qcp9PPA?_\#ZYfVeBc
|
| | | ;$Nc31iX'O;DU[<CSIX_CU!)a]">,[+fb+1DVA^Jqa@MDenm!=7]Ae[*)=]Zb6:#C
|
| | | `8_lco#!>&95DsMlsEeoPZI<^1%^:pEelHNbkC]4e70P%m-I*A,="(7*jqfo'9_X6
|
| | | NAj[$2hKsVl`3s\7h1Xm]+#WWCV9!@nhJZb;sV.Bj.N+]d8[O3Y:+6f23ujgqXJ<.
|
| | | k^mhDiZq$-*,YBFbg!s6Jg,]AC>Cam?Ro;ZFpTNg3FM;8<fKTjlfhl>Iq$Ll@?-m^
|
| | | oY4TT!=<oJ3NAhho$fAQ'4B"B8JE*:bFr:\)QK)jAN!#Wj>u6X?:)U#@l@LrPCbH*
|
| | | Pu@iKb*F/@2C2_qR'O^.@P3L<_b_p9$WmJYIqsaOXMR^*SS&_48(>h7k%r-4-Yp/g
|
| | | @eQp;NO[6S-YE$ro`W#[E#fnk$nu6o3Au-0!ul)-I;UrE@WpsD;j+`#L+u&aD3NX)
|
| | | AgY^HS-sCaqQHnOU_khf7iNXiJjYj2->YP:_/chnhBm'6,*Pht)\@lIF6]J_P_gGs
|
| | | =SWa(F;Ie@D(*TZ1+"`kBrockinJKh4"*%*k^n%XbIhOJCn\"f=mlSGCdpFOAG_E<
|
| | | .rDg<QW\RbRP2-?+9g5='sLI-/T]NcEOWAoo?\lZ+>3C^:BltbYC==kZ?A%+?ZlK2
|
| | | /*NbiA?eI=3DJIAESZ#\ms`]gI&P;<(Z@jV?n+#XF@.+D<I''Qr^[A,6Zk0fD2*D:
|
| | | c=ll925#QgZ<3`7GTfan=$l^0U0q:AM'!QucI.$C?pMmnN%Z^<2(M#;%#uLR:u:[E
|
| | | f^-##:H_cqVT^<f(R5;]fN'0!#$eZ^L+HTIon<MVR9ROj>V:i=[6Iok>!qijYS]/D
|
| | | m'p/=&lb$c]rQZFZqH=;.m$)RN!cGY3"[\8kD]#oN@cfCAE/VL`2`6%glR#G0"6dS
|
| | | DVoOjN_ATn7VaPWAth9b1X^68b#G+'%&Q#_7cRB8-&4!r)UTgT6b+(q39JN^.ahH)
|
| | | OY#sa"rO'/gQ1Ek=*Z*U%pI..E4>Wr/$&Idc+q>E)c!`Bl?Pg[NOP0o+-@Dq]\.Fm
|
| | | \@Y6+HmUjU:+b=s=C7@(M(i&TR12<D'"=7r/X&knPF86m34"%DNL@>T-B+3X\ZX?U
|
| | | %@^uFS#tk8=i1pkZNi!t"5(;GURJNH1S*1?S*)mWA%YFX"eBr,AuEMsRJ=5$k+d1b
|
| | | ghkf;8jpA'cJH+dTT;m0RJWU4ViK-(8%JSj=V[["&Y>F!Pdr$6C,_<DX/$(mRY/3%
|
| | | 3\@(""f'a;3B?W%qH'+(8X2;jHneTr3U"PpC=??*UoVb<H6]:$l^-_JV>;p3=c'$P
|
| | | H_u]QW@Ku<3"`&_!a^O]Bc,X`3`t%'Whp]0UtI<-\tLrr6&l)%X=dkO%Tf]P"ftkI
|
| | | XLbO-=s9sch`g=h(Wr,DZ'_1\XB@TMhGJNq8qs=FN2H7aTNW"^b6<Mu+$V?6(p-L/
|
| | | QGXY=>Fe3U+Yq]&P)C9cc'oY&%Z`+\Rjs9+No2Y2X\cX9.i(!/ALTUBKdml_G6'1R
|
| | | 1a3hQYd-h%8q48\2FS&mEpAZ=A!_T.WB:kuTM(,C0@[BR@CS,r[W"171&jD!d\9l"
|
| | | V1h&?>@g#W`F&!e0&)q,2B@$>r8Vu-];_j?XlFAQ.s&2!]aU=?nFM<MTbgb7L,=at
|
| | | ,9%THU4k\D7cQa-i_HPlOWboNZ*!=82SrS@V2@n9$(uqWC*^EKh27r=YqfTi$?E.^
|
| | | hG/8K+utJ.</NF)A])JR?B(SL+rn^7jP8IX7L9lTmF`Ij@,$K8>21eT/lpUm;0qOV
|
| | | ZR'WGEees'4^_NDfBkY-#r*G3;H2XL7I/f#YpuLr_bHY/Yn<0J;sZs6X-U\31"=mr
|
| | | q!LTX.UAee[A+Wn_AI:Q#-uspahurTl<TV/bJMn1`C++RBFA6cj'Uq$4de=V/`@])
|
| | | lnoA)9?(nrO8rR+=4#Yn0noC(Et`Y*iL50:Md0o0[;:Zg%uLlX4$<>!!qPbW6"4[p
|
| | | 2%AkB[(*XmDI!-!eHArL<L'YTeh8[je,:Ci'C]<>&(;`!eBo`hC10,nA(L0NPCfK@
|
| | | *AneLJB"-Of;I0Np5qK'G5\-^^nbDkh.e[MZM79H.TTV-F/5fj=4r"Ug7>e,[]9%f
|
| | | #g`XJg)YgZmD7R_?.po+8%j4(]J\#.69-q*1tYsg<MHcYNJ8Y+,rKp2/]Yp1^#7FW
|
| | | =UI!2_ZnK]YMn/;f*(:\ZBK7'K*)OCbJKt2rOp>ni6/Pa4sCWg:qe[`5B)qQj.9.;
|
| | | *FO?1*ia//?iDM8;ZqTsKl22!#YLsD7.&75Dg4mR]U'mD:b\ERKB0ancQ7Y>G)/=+
|
| | | 'OI9\(&3SF$l9ZGM)s)Z8X5(i"GBi=cpu[V+s\_q6n12`Ppn1HJkK+jW6kTHf,LPM
|
| | | 7rq.pn"d8:.h8/EI=Bu#;$MMpC[2D2'lGj1C7jr1(T-5[0GrTSHiC(9![Tgm1p,^>
|
| | | atCYKX[h]P,17V"b3`0W=pHP6qF'ZsDji7N_Rj/><1cNaX2O@P-r[9&TY3d_IJH%]
|
| | | B$DOqmde.B-'Qm84nbLjp<l.\6PMO7UVn1"e`o+_G?su.S*SrT>I-r:'AVm-J\cr:
|
| | | 0GWdDmaSc3hpeSnBbf1qWaYethu#06+T@JdJ6K;:eiF05%Y2DS+@1VZB'X7P_WuXS
|
| | | _>l;-%#1JWTZgq!)N;Z<JH<+l1E6fl_a0sX%1%YT+i_T^:+I-5%#0At(u/^GNssuV
|
| | | kS+Y"-'QJ_EnPgU%gds-AO*#X-t*H%%A9V="@`kR*(C.-!LUB/3?*pNnI__P>W*K0
|
| | | @'nX97]/Bed4%F[`8G\_(lef_fSJ0t/f>,aOC?,HE%i58XEPVSf%VLM$qBq@+N?&o
|
| | | )ph(7Oi?lC$HHV\R-S`eJT;`&B[Q_hk,:,H6F9SQJBf#IQtWWI>qG_)W/;!Q@n8He
|
| | | PnK>G`d9kM(hu&I>rJ/XNhg&AU2AjGZ'A75^>!>%)8+d_1bfu/H'GE7;HLs$:'TM1
|
| | | r:Ir?)p)oB&[r,e;Q>]SFUp,,A2rcBU-jak!8KW[g-5N[C]dq+5>M7nfVJr!%/`(n
|
| | | bED\1$G-YIUo\A\O#AY<L7To(Wg's-Dk`ht-'4'D_PM5K(5FDTH;KGPc\+Wf7#ni@
|
| | | oV,(n8Emr&A*+c3%7"<k85Pg\"sP55T'\KLRo%QYnbOgPa_MT^QQm(VFIGeLKY3Vj
|
| | | Mfa9AY#</>dP#@8%Z38ARmu"(d-R:]"tCk>&Vbk$.+>1k)VX+6bs_L/:e>0=33:=U
|
| | | "$FnH]_aq8MMm0Q/FC"sg<g44'`_+3]?g]cPL>]o2Xg2B)S-Y8:<0^lU7kLWN5]NJ
|
| | | 8b2GL\HW(o>uNel91l`FOBkQm^Im2h?;L7jHX'WQ@M<B?DbYhM,nB4aqk=f^1on,"
|
| | | k]8,]f)+gaXOYHb!S\#,;UHjX_sWRi#WQZfTg=;OBJC;kP5d?E4\7UYcimK\:$q?W
|
| | | `@hT]_cs`1q\<jIeclp94IAQABEh3HaV`^@[@rF7Gnlqm!C@?r"^_:\6'pI>U>i/,
|
| | | 0&j=@##isK.O"m[-l<+3T[]V;!GX&J]&KC("U,5=CS>EmC]#-+k]7SqV)hqOTV.a6
|
| | | Mken8<gfj3g(&i@2Mb8@JuC>s$a&[0!9c@p!QMm_joGO'SR5!1JN2h$#(*5,qY5u7
|
| | | C$I1.hRH0ap)Ma8]W1g@/mEtM:=<pf1T:`#I=-)Fb09[\X-2DDni[oedfs)J+Hk7)
|
| | | 8lj=be(7ubX`.K[ch@;N2pu7uHA7A,a:LT`nW$KsW:_Wd:AO1S0PJ.?*dZr[AnoD'
|
| | | KR1a!Ykh2A:I?a\!uod@j,OYQ_S2$C[-P4M9'MC`/'=P0U#2,]OaQATZR]T`i/p?^
|
| | | S"KKk>`PYi0ph5q$JFu$a7pL(;n2ja!f/DKNH-#K%ZsB4HS'n!g(cts8XC\F7Vn(m
|
| | | &l<+W>m^@-$^?K!P8mLEJR^csos5f.bX,I=g]S/`$'bPs$co#cG3)0u&NFTs?DB8;
|
| | | AS)gs"QKk^Ud@g/7KF,((?m#@W/$LS)]#oh'M;UEMMHKa`"\_1&=\f8"=/Q9R%iY5
|
| | | 'Kn<F(,EoTHPY%\KS$0a*upIO=c.KM1f<V+.bJ)9(YL5e0_h?\Ze01jZpKPf2F>7p
|
| | | A8S-!/iJBYZP$8A9Hs=%PB)ca`lPlCP!gFWKlT3g'(1`j)r#;ppm4&)oa"2O=G"N2
|
| | | pIj"*$k$bQ,"5pI[9,\MeEf1Hj[(TDeHX9pA0HnDU(C"rrr&O!LmOsV[[*>o[UVU8
|
| | | 4q9uF_QmE>,nZeddomB^io'Qhg6s3_aGZV,K.L35f-hr^27b(2qb1]jRnir;ZR2bm
|
| | | dK>S61bMfl,9C-(<(V@HVK,O[)!.;_&U*W5fU\b$?f(D$2"Zmm\Tc3k$X$UeVV1XU
|
| | | pY/?`F3^YGYeiV[X%_B'/h86FGJ?"=7Le]&.rX]t-hmI*@%(@aDF+Cb2mU2VAFG(\
|
| | | ek7KJlNCa'JZEF4(Vuo*1)KPIP)tOgS'mn?+ab_An+g>5$2Fu<Hnlg4K_e1Pm1)[%
|
| | | C.^5?+3q/9?AUG(NA2TE9Oa4qUC9nDUbN<PB[Tl:li+/D\u:p*ifXRiOs7/k?De`1
|
| | | p2".QZXeT_`k*qkBM:+?G*qt>Gr@ufoQmkKo]!r+5Rm#_N.nOlc'52e@`qVAL=/+#
|
| | | =MkFMjgh[[p(XnU=aKF*>b8G6HF1gtO^f>XN?`%!<`tX\/_aic:UAn[98Od399^+$
|
| | | V3YLk<W[PWgr5ZR<NaURWAF"k\L]FHC=WT+6]D6'SYT#\_rBi+k7L@Ne]g5n83o:-
|
| | | >rlH)#'^\.j]p*a_4K.WWku]Gl=]VsY"4S(;$0fm9#FY6ZuW15)aut3;Y-\A3<'`(
|
| | | $]XA6NP4V<).WjsDfKAK?PJ=*QP0p9ML1JEL7HYYkgkSjbS7DFmjlYaXctTaN[ol[
|
| | | iT9>O@f`_HbIM'JgZ+#T$,sf&E91C`B)Z"0BJ:fpq$/";@r)TBa?HCC6l+4&@LOT!
|
| | | Kn\oKbHkJBk4g]B-)l=U,6ZP"%"+;c/?>90BO]9YUsDk.OW#J'3ZkUm7&RQR/*LQ7
|
| | | $6h4J7DUoK@^,bId82a*ON3\6aIM1N9sa]b/8GM:l\I)-C6NdL')A2MM`h$mA`]=q
|
| | | ZL>%77+^,F;,nN%Ih%VoLX_K>7a%Ou][gLWOG%'N-^*]-2![DQP!LqAeMXt]aqU11
|
| | | '/X=@X$?>]E]e+m2\t$!RS-g6e$J>ACU0eM<T`DIOQid225^bYO`r'$%;)*-m4h-L
|
| | | doVW.?VPQ_<S4"_M41$qED8K]f*h"CI'Enr9of&WbJ789YiNn5)T;Akb<&fHn<.<:
|
| | | 60Ks6TrRp>k@>Z8Srj+>Ad"r?%+d43IdUN]R\lg">]TT_:hJ:.2GK^u>YP@3e&37[
|
| | | EK8A`;#@CuI=J]=S@&`?hf;N`5gbqtb.?@,8o))tcC[XT<RmE!3Tumq6hJ$HlXI:c
|
| | | :pBmO%JYo(O-54/SaZB=mdSM)7Q/R<"W[GRHg(84m_r8>CP=V/Q#,/!hQ87BgL-e5
|
| | | n"b;M_E:u^RI2+DVtK;-oV;h&KfsXZ+p8Le)D?[,I>atHT$fWGDdm6MLW9%fO6Vm8
|
| | | YOd0m$M\c)U!P_un9n348H3rhZ_WOI5*H3J?B=VG5Mtom^[qAZO7P,j[#,EIj/11Z
|
| | | 3XDYoHh@^3!Jj".4ko6@8M1TJqS6V?OEhR+"5uL\s$3=;[-Ac!&TU,\;*`Li(k_W4
|
| | | $i2#3MSTtt^M6iPj:/pEh`We0_/n-96e4DnVnnc_^*Ds[PSCi)kWWMuU&d??'+,"2
|
| | | +,Rlt)DU!!O>;>_1BC@<*(UV\kSJh)WXdr:"#'ls\\/8f`"!D5#pN1c(l/7G'ETsF
|
| | | K0!:h!"]3^2?O4FK:k&R(_?e:2M28n"(2ZBGWLJM2?QK/""4]_J1uTm21l/jK.%b0
|
| | | YS;Y(#)H(i"(3m:#VlLP7KX2\K-3:-!'>g(1'=1+*m%[*E4M&Y'E`#,JT)/%i"Q6[
|
| | | -\93*7<g9p.AMLQ'S13;K'4Zc:^%h)[)/I>67QLd1C=lmHl=u"6>S$dM3XMYcC&[c
|
| | | (VrB[q;*QR17Dl#"%Y>&-oV6q1kU0o!<bZDHrV.H`/%Af`>`k>81fGXQ^VEC0VG,G
|
| | | 0S:esJq7UhN%AOspaCYhJ:I~>
|
| | | endstream
|
| | | endobj
|
| | | 42 0 obj
|
| | | 10321
|
| | | endobj
|
| | | 40 0 obj
|
| | | <<
|
| | | /Type /Page
|
| | | /Parent 29 0 R
|
| | | /Resources <<
|
| | | /Font <<
|
| | | /F2 7 0 R |
| | | /F9 36 0 R |
| | | /F8 37 0 R |
| | | >>
|
| | | /ProcSet 2 0 R
|
| | | >>
|
| | | /Contents 41 0 R
|
| | | >>
|
| | | endobj
|
| | | 44 0 obj
|
| | | <<
|
| | | /Length 45 0 R
|
| | | /Filter [ /ASCII85Decode /LZWDecode ]
|
| | | >>
|
| | | stream
|
| | | J.+gME)=>9"r`LkU>_3l5WBYj7Dj\tJE18F)1b1"U_H'n3Cf`onhA-N!\-[5ctG6q
|
| | | E&SRBL6?P8/8Zdna,5U3dG,F?'G+$:F/dCJ-QJ.9Jrs`f?n`O[,%?+ZaAQ:n&qNGQ
|
| | | lkk`iJJqqU!`b30-Pm4[#B9ah-8lDK6j9m_(s!%&e-3a::tk_l[8(<.!<r<9Hk74t
|
| | | 75.`OEH&Hp03Ee8`+an@9JW#P-7]rR"\S-%l%I,C2]5#\nbL8!TP-0O%4;7FJ>Qm9
|
| | | RS7>bEKKHq3ZH@70hG3k$6!-'6ZJ]RWHZr6NVi,DJECf+R*?qnR*9AV0V&Y7c7^6>
|
| | | @tT'I,AE+\D%qiKMNaJ0%+nuKm78KTZ-^XONSsla15mG#i&!BF-pTNt6V-SDWJn&h
|
| | | )EiYe:aua&#\"[+!Q)"@JOq%tPU0*l*f%,+E,()].DQW3$=\7I+pap)Os^P(.QeK@
|
| | | 6-*ZV3Uq?eql%ch(-7C!?pHQ._/!R?5sp1>0o]ZKc8)ni1d[A$kk[,g7tGc0)a7#I
|
| | | KcN=5RTRF\ad@)d9L68t))CYBk+@>/b*X'$MNDWg#_GU@4befD@MB..PmI'g+[E1E
|
| | | ]?"H5'Sbte/1V"1qR"WrYs[6^L&oA$4#Nb."qV6=#k0[1USulX3s1[er/Dp4f`aUX
|
| | | D.<!pW45)ON55MY;iY@4fJ5\^>dED6#`rT)80L6/)[6o&8@:jD"N:]na>K\E>'@!S
|
| | | OsJW"?l'#UaDg<'!Z6,i2@Zd0?&k3:'iq9L!8KN3itN4T":a#=3_F-HmPNR?JBJr^
|
| | | [m4W79K%2\]7m^TTcb`!5h%a7ME&i=<=Ta_1^kUJ5T7[8P9/kfG)58s,P=-NJk9&[
|
| | | #jT&iC_^>=c1o=1%WHS-/Hr[]D3eWhK(!V*ap!]5fd"#E#I_+YO+!te..NpgUF&a5
|
| | | 3GF"U'P6pdG)7OA<*rQi<^?$-?K2=^&7=)rl[eAq!9uOG:^r0`%WEZ22[oA3mjJ@/
|
| | | T^"R.<b`M["WRDngg6>TIphh7KS].,H_[LLlIXS]&8PJ3]ta*2#*Xmp=K#M%_eB$)
|
| | | lanB4bV\c<1PI>s2-jBDjoS=5;iVE,n1k0Md,ZpA\48Y8N`u-JAaK>E=f+X^nB7#?
|
| | | UF9=I]K5KpO84.GG@O47/Q94JZA*i+q?,&Be]9mm?lJ&;I9E*LK29?')jk%Ba7qY8
|
| | | AW3o91PIe2J2N'Xb242%o0;O1?SHVWP967=D,4T]]L2\"g'Y8S7`aA?5[=69J2L#\
|
| | | 5t*)qdYXZD5#%gY)FGdkCD4KP:hML[PRs";Ohubu!6H'&,\RmD-q&k_ZkNY9SrLU[
|
| | | ;f'Tr'::RLTi:LP25(.43Mts"RX>Bh.4j^=Ac*JLH#/EL$8K)g8qMZQ-tEcr%)$2'
|
| | | :]kJW?4<&0'k3U@aat9;Wk:$?+Pqb!=EFq$V;SEj&A4O/'4.^61n.Un)I#"X@S9-"
|
| | | /gHCadci2b74K7Yj.NmtU=MtqR<1'XfU`-`M0[C#X>`TIadKI=":pWVX6#*Y!K,Eg
|
| | | j[^;u7GdF$1C[-=64Guk:qqXUGCdu,:4`[Bf7BVkPtPO=!2W(P$WNulntJo+[ECL1
|
| | | 4P;jgM#+hFk31jL^1<1jPXk?qfc`@X.nGOoOed64_3+%/bVg2-Z_3E+_jid1Uc'Kk
|
| | | hVut0;+bP&/%nBn5@1?R8-t\@-J2`sPBq3O"@Y:;FRDs=cn/%Mq*uk?!i4f96rO[l
|
| | | ',j;'\kO_Z7H"hb`maA%g!^%l`qEV#7f`Y:qrr)Q8DU>B'#<P0#"@s6]";qNhI*R$
|
| | | R`I&E3M=Mlg#<0#D$:0N!.t:&9?_r<.]Blb`0M;V92tR@3)oI/GU#(9C'7cs1BuMi
|
| | | K-b#@<OQOAM/>,El*>4NM7JBq`^Sb<Y^"G%1UrP)^]U6MA>.4'/=&O@_orF#CGF@5
|
| | | eY<(LTPeEq&eh+>*85"D9iXfj="=P@-"..iJCX&/X/RB+Uo]!0.uY]Ia[Bl:8T:1b
|
| | | U2il*cR>\^0V*8G=O]%G__+7@4R^[T0k>a?(s8h%f$rS[UVq'j]!.oHnKl74rm5RN
|
| | | !/rER0ch7@-#=bkHNaIY[K<2V-'H)90qrACF9;9d<!uaijup"ZC:.^&>I_Ub(m>.F
|
| | | b:[)F\<f?3dHT9j!Z>c^#/QK*C]$jQ.qQRGnj%h.O_K`a5RN))bFSj$)((UX=A#iJ
|
| | | Ro5RpgCn+d`>rUM"@4FOar;OKI?r#u_fMcpl,fm:+kkD*NsrNRabbc)/J*NT?gG2%
|
| | | %8OT+-OAeN(haApUc=-7H:<k8DnX0`Y2>G9;.CTn5W?si[3hgX,Dj-++LaQ>=ViWW
|
| | | 0R#DmVQIro`#Vjk:pnl?3unb<LmUc<%/">J[3q_[RK^JbXF>oDRhl'<=DqPtUH9[k
|
| | | mVYC5cn0O*Qj$\piBmsN2Be4`!nI^2T*ns6_6>tULIhdbA)U`b%p":8T\a8=(QT`m
|
| | | ,i4`.*0-:p5t#"OS)gf:fedt&gGCV:PB;%F*NI8t.-7aWcC!'1021lI%i.-2LC0,'
|
| | | :-dJIW\e!R'I>;".*W[KY\7g:U6[2N9I_K[<2!c38-m$c-`Hqf'aSh"/]O0G/p(;-
|
| | | !C0Nk]+-[P]Zf>*^24<@EJ8FEP*Ch\E!70@3L!IIC:?s_B9(drEp*jpK9MhADi\@D
|
| | | Bs-8)A,XX>nU\ciq^o9(k&2q+0F(Fm;6M_^Z%lN'br[2kC/OqVB531@1PN/Al1nZ$
|
| | | [a82'(F=@@\#?Rr[l4O#Pg.,#K[JC(SHEb^m+)J)3NG&Mj(d/@WubdS?]m*e#eT3Y
|
| | | =punF>Ct+ghpn%C?q4,d`b+B.&+a+diR:1!CGfH=9\7t0;S&pU>(P#>gZ3SkQip*(
|
| | | JoTbWg4@B><V`J%9?l&<V#jEOI"[aX^Ij&J"e@2#VdH^+k=Ju9!aF8,[j97`W^*<'
|
| | | 3(+MGZ]okb]g!^c\hPm_oVIu.C/<!_dCiS@<FMMm)M8lFQRLQS,6!0Kg_\aZ#NG"/
|
| | | (lRR5Td1?9i6(_JG!F<-K<DTG.)tM-9EY?gs(L'/lcS#cGR$i1SthT$7`O!fLBFEt
|
| | | aU,Q%65TqXVH`DY_ec(H"kqdARcA?dTP.4MmGd1V3_`?8UVo,k66b7)7&7`a"UK3J
|
| | | K%s2\JqrE)7kPj=BSt`(OGQf*M27[Z#c-JFC8>Ae<+=c=0SZJuQj"%EUZ,mT,Us";
|
| | | KI/0j-ieps,l#G'O9cu!M,:QR@N7BQ%OBE;%?<[WYf][R?9'])+jg)lK^]9JMFM9F
|
| | | ;!nODn=#aqOFH,"+@O*,U>V'i:l!u#$,mZR71`<k*`7Pp$D<anAMXhV7P19J1?/5-
|
| | | @Zj]0`=NLC#D*B@kO;age:sef<07e!TS!OS,iPu+:Q\3\mL'B)%LR_a_PJLajCG-L
|
| | | n>'SS,%<&=O_!MZ(B.bY#9[FRk0X,N:^FkbfZKT,9'T"UK^38g3+@ooN:IJ:hJjq>
|
| | | 9#GnhBB7KV\94Z":ohB#i80BbhIn/3E@821b:_U95`:H2jfeI'j+:CYSoRP[4=eqF
|
| | | -SErMpAr6@?itY(#%.^HG\5rqB-lsoV>>jV=CD]:5V)\uDiQ7.p2@.@+(.q?X,+W,
|
| | | 7UbY\\WC"nX>h?,@*443$KMD%bj`j>M]a=0+s>MJDc4VM<orD02QI6nbHPEsR*qf"
|
| | | c\D$9c?h!ubhXj)`/+9Sn2r0Hd3^;YRP)65ClBl91p+oV#%F,#`Nh5@$R`.1SBtUJ
|
| | | L[)M!rko"KNZb"C#6K88"Eu>WX`+,Z@P4X[JlrJaBT08NEV>$AGXa458r%Y&n[BT;
|
| | | _JMg018Eo?+H0h2i@tSMoFi(NP+9l0\?5mlA>Xh?dGW72GRDB!,=c95jJ=ZT.WI$7
|
| | | =\B<I7rZ8h>3;ujZR<V-L?<ua]'R5nfrhcEL:'%\i&<pPa'd[+j_d>dm]ql8=4;bq
|
| | | Mai#r[Z/F[mnM@`J.s+K~>
|
| | | endstream
|
| | | endobj
|
| | | 45 0 obj
|
| | | 3916
|
| | | endobj
|
| | | 43 0 obj
|
| | | <<
|
| | | /Type /Page
|
| | | /Parent 29 0 R
|
| | | /Resources <<
|
| | | /Font <<
|
| | | /F2 7 0 R |
| | | /F4 8 0 R |
| | | /F5 9 0 R |
| | | >>
|
| | | /ProcSet 2 0 R
|
| | | >>
|
| | | /Contents 44 0 R
|
| | | >>
|
| | | endobj
|
| | | 47 0 obj
|
| | | <<
|
| | | /Length 48 0 R
|
| | | /Filter [ /ASCII85Decode /LZWDecode ]
|
| | | >>
|
| | | stream
|
| | | J.+gME)=>9"r`LkU>_3l5WBYj7Dj\tJE18F)1b1"U_H'n3Cf`onhA-N!\-[5ctG6q
|
| | | E&SRBL6?P8/8Zdna,5U3dG,F?'G+$:F/dCJ-QJ.9Jrs`f?n`O[,%?+ZbYh^r&qNGQ
|
| | | lkk`iJJqqU!`b30-Pm4[#B9ah-8lDK6j9m_(s!%&e-3a::tk_l[8(<.!<r<9Hk74t
|
| | | 75.`OEH&Hp03Ee8`+an@9JW#P-7]rR"\S-%l%I,C2]5#\nbL8!TP-0O%4;7FJ>Qm9
|
| | | RS7>bEKKHq3ZH@70hG3k$6!-'6ZJ]RWHZr6NVi,DJECf+R*?qnR*9AV0V&Y7c7^/I
|
| | | -C.6a_i_=GAi>N7jMa^8!/>;DSG&`k(KflVU>pJ`1^p,ba>aV<i5uT>K94MC5RM!P
|
| | | (^?%7E"iY2+G-VJ!Q)"@JOq%tPU/s@>)0JgG\Vqe.DQW3#_FI`,`0B/W$I5ZE2N3$
|
| | | b%P2Y#%>),];Pd=Os:77Yc9)Y!dLLj"9K"",7%`a;B)q#]J1Br;#7P^,gdl`M'_Id
|
| | | T,3BH+Qiog%[3hP2PUU3&.QO'N\V$<R*mdM_^NS;%*fDLU;:>1gr,0s1_r*3UO_:]
|
| | | .,taVfaK*Ea#o';@*1Pi<5:dc%V*Y?gbtq?#s"!?#hUpC['R^-;r]Ps3__smG_60u
|
| | | OC^4/'5OK&c2e$`6_a%mGVG(D@.Fj;:ftk&3t;Dl=hmSA(cEf70L4taFu\+c:r?,p
|
| | | 3=d9P5hEFrRqa[VXpEb^2QA>;1XkBJX>5cpOPP4`PK_]==:MA63EG)BEe[YG:g5#r
|
| | | !K_-nVnke.E)?17`\[f4OPneS'mSNfN0"V6!B`60#W1DUGjf)N,FI)A\%'N)Mns9?
|
| | | !'9!q>n&n*UNI5]h$oQ^5YtF^Q8/k+8C'Dme';q&?ZZCG2S.0.d=U<LgkME>j%.p3
|
| | | >Eg,ZHFhX'aqmR1&l+L_;>c$R##)O=)+ZgD@.9+-Zj8Fcl8-;Om3s[=Pg!ptc\/4u
|
| | | Gf2I$0,,Pp=t\R@n%::jgnk9jJts:%%>I0]DaQ/Q@5ih3_a?>q0]f.0oFT;,eQda5
|
| | | aZJ/D/V-_uo\WA0"(9tF?/ongZmuL6E/=e/Ih:i$)YFP"=`1udmWQ7DaJSAYD`KZ9
|
| | | Y\-3]mqOq.iH4kn[YqRgaPH',h(X&QdVZeCnm%f)o2OCdD72LY3G\tncb]WhJCQ3&
|
| | | LPUa-3GEb5CnLq9!-MV1g3ScVO#_`0;o*P0F3iOd\i7XnSNn<LDlmriV1@p*PEU10
|
| | | n2\:+^(HJHCiH6p1P1.Eo9t:'%a(_2Vj@IP@?_'RX_JclF)qgW"?R'So\,%A*rO[5
|
| | | F'Cq`0q5E.dM/tp%cO6f11V.36PC]$BDf8o&Fe;(X&KF$<N(U/7"<p`>Qk-R,(q^H
|
| | | %)JTA"Y5rhLIJ;76P+0UkUChcKlk0t5]&JO/2sUUqP#/po8,0kVE]cf(g*6^<@RV"
|
| | | 4m&!R:_\sd$?8_AACA5eMMmP;jP#A;fGVr5]NIqE5J-OfopiS4E3Tu<8D(TD'^HVb
|
| | | lh.Ni<?`BJ>'<m5OP[ssDT62pO&ghFZ,G]GU"7_S#[sDe77[R):Cq"oWN>#Oq0aLG
|
| | | MmS(r>!k!"(^_>LF^$GFfdGn*&QXS7>]PEe9]i)_U16Stb<5foeY]ed(h>P1=>5J;
|
| | | ;@H0Z1'J"5lH2,=q?'@2>p7QWV/n6u?nu%V0YtT6edOs?U!O&p9\i?r.)=A,'phLD
|
| | | P/B3gh1E596#:7q;WS?].J->kiOMY$`PA!2,+N1^eOlb56IR<I!c!;&3BGh5JK[GH
|
| | | KjhO!9;8p^91`nNV7a<i"%$UX:c/G*r59J:#Y_1RC,&!['c>ZGA3l#3V%oe[:?$>$
|
| | | CY=D'Zb!^!;]K<u0mTl$K!eXs!bAB<E3P"5_cM0tABX0nXrr>*26/"RX=\TMop3["
|
| | | qZbWQl$]r3b0!m<&SXp+&$a]+Zd.lIB5ML@[$E2NU"]H^D"YNL(?WeE$M\&rH%Tm#
|
| | | -KH#5M.k+m]J0E;$^lp(>&L<qZo745fo$\gD>hVZ2hL#?93lH'n21D8b3N@a)1(\h
|
| | | k.?pc`Rrq^9J0UdZ?M[dJ,~>
|
| | | endstream
|
| | | endobj
|
| | | 48 0 obj
|
| | | 2070
|
| | | endobj
|
| | | 46 0 obj
|
| | | <<
|
| | | /Type /Page
|
| | | /Parent 29 0 R
|
| | | /Resources <<
|
| | | /Font <<
|
| | | /F2 7 0 R |
| | | /F4 8 0 R |
| | | >>
|
| | | /ProcSet 2 0 R
|
| | | >>
|
| | | /Contents 47 0 R
|
| | | >>
|
| | | endobj
|
| | | 7 0 obj
|
| | | <<
|
| | | /Type /Font
|
| | | /Subtype /Type1
|
| | | /Name /F2
|
| | | /BaseFont /Helvetica
|
| | | /FirstChar 32
|
| | | /LastChar 255
|
| | | /Encoding 6 0 R
|
| | | >>
|
| | | endobj
|
| | | 8 0 obj
|
| | | <<
|
| | | /Type /Font
|
| | | /Subtype /Type1
|
| | | /Name /F4
|
| | | /BaseFont /Helvetica-Bold
|
| | | /FirstChar 32
|
| | | /LastChar 255
|
| | | /Encoding 6 0 R
|
| | | >>
|
| | | endobj
|
| | | 9 0 obj
|
| | | <<
|
| | | /Type /Font
|
| | | /Subtype /Type1
|
| | | /Name /F5
|
| | | /BaseFont /Symbol
|
| | | /FirstChar 32
|
| | | /LastChar 254
|
| | | >>
|
| | | endobj
|
| | | 19 0 obj
|
| | | <<
|
| | | /Type /Font
|
| | | /Subtype /Type1
|
| | | /Name /F7
|
| | | /BaseFont /Helvetica
|
| | | /FirstChar 32
|
| | | /LastChar 255
|
| | | /Encoding 6 0 R
|
| | | >>
|
| | | endobj
|
| | | 36 0 obj
|
| | | <<
|
| | | /Type /Font
|
| | | /Subtype /Type1
|
| | | /Name /F9
|
| | | /BaseFont /Helvetica
|
| | | /FirstChar 32
|
| | | /LastChar 255
|
| | | /Encoding /MacRomanEncoding
|
| | | >>
|
| | | endobj
|
| | | 37 0 obj
|
| | | <<
|
| | | /Type /Font
|
| | | /Subtype /Type1
|
| | | /Name /F8
|
| | | /BaseFont /Helvetica
|
| | | /FirstChar 32
|
| | | /LastChar 255
|
| | | /Encoding /MacRomanEncoding
|
| | | >>
|
| | | endobj
|
| | | 2 0 obj
|
| | | [ /PDF /Text ]
|
| | | endobj
|
| | | 5 0 obj
|
| | | <<
|
| | | /Kids [4 0 R 12 0 R 15 0 R 18 0 R 22 0 R 25 0 R ]
|
| | | /Count 6
|
| | | /Type /Pages
|
| | | /Parent 49 0 R
|
| | | >>
|
| | | endobj
|
| | | 29 0 obj
|
| | | <<
|
| | | /Kids [28 0 R 32 0 R 35 0 R 40 0 R 43 0 R 46 0 R ]
|
| | | /Count 6
|
| | | /Type /Pages
|
| | | /Parent 49 0 R
|
| | | >>
|
| | | endobj
|
| | | 49 0 obj
|
| | | <<
|
| | | /Kids [5 0 R 29 0 R ]
|
| | | /Count 12
|
| | | /Type /Pages
|
| | | /MediaBox [ 0 0 595 841 ]
|
| | | >>
|
| | | endobj
|
| | | 1 0 obj
|
| | | <<
|
| | | /CreationDate (Friday, October 14, 1994 2:10 PM PDT)
|
| | | /Producer (Acrobat Distiller Command 1.0 for Solaris 1.1/2.3 (SPARC))
|
| | | >>
|
| | | endobj
|
| | | 3 0 obj
|
| | | <<
|
| | | /Pages 49 0 R
|
| | | /Type /Catalog
|
| | | >>
|
| | | endobj
|
| | | xref
|
| | | 0 50
|
| | | 0000000000 65535 f |
| | | 0000197931 00000 n |
| | | 0000197589 00000 n |
| | | 0000198077 00000 n |
| | | 0000004811 00000 n |
| | | 0000197620 00000 n |
| | | 0000004952 00000 n |
| | | 0000196832 00000 n |
| | | 0000196956 00000 n |
| | | 0000197085 00000 n |
| | | 0000000010 00000 n |
| | | 0000004790 00000 n |
| | | 0000029375 00000 n |
| | | 0000006144 00000 n |
| | | 0000029353 00000 n |
| | | 0000056437 00000 n |
| | | 0000029506 00000 n |
| | | 0000056415 00000 n |
| | | 0000059767 00000 n |
| | | 0000197190 00000 n |
| | | 0000056557 00000 n |
| | | 0000059746 00000 n |
| | | 0000065578 00000 n |
| | | 0000059921 00000 n |
| | | 0000065557 00000 n |
| | | 0000122958 00000 n |
| | | 0000065720 00000 n |
| | | 0000122936 00000 n |
| | | 0000146321 00000 n |
| | | 0000197728 00000 n |
| | | 0000123089 00000 n |
| | | 0000146299 00000 n |
| | | 0000170433 00000 n |
| | | 0000146442 00000 n |
| | | 0000170411 00000 n |
| | | 0000179603 00000 n |
| | | 0000197315 00000 n |
| | | 0000197452 00000 n |
| | | 0000170554 00000 n |
| | | 0000179582 00000 n |
| | | 0000190196 00000 n |
| | | 0000179759 00000 n |
| | | 0000190174 00000 n |
| | | 0000194372 00000 n |
| | | 0000190341 00000 n |
| | | 0000194351 00000 n |
| | | 0000196700 00000 n |
| | | 0000194515 00000 n |
| | | 0000196679 00000 n |
| | | 0000197838 00000 n |
| | | trailer
|
| | | <<
|
| | | /Size 50
|
| | | /Root 3 0 R
|
| | | /Info 1 0 R
|
| | | >>
|
| | | startxref
|
| | | 198127
|
| | | %%EOF
|
New file |
| | |
| | | 1, CPU: STM32103VET(MAX to 72MHz) |
| | | Flash: 512KB
|
| | | SRAM: 64KB
|
| | |
|
| | | 2, RS232:
|
| | | USART1_TX -- PA9 |
| | | USART1_RX -- PA10
|
| | |
|
| | | 3, RS485
|
| | | USART2_TX -- PA3
|
| | | USART2_RX -- PA2
|
| | |
|
| | | 4, ENC28J60CSS(SPI ethernet):
|
| | | Eth0_INT -- PA1 |
| | | SPI1_MISO -- PA6 |
| | | SPI1_MOSI -- PA7
|
| | | SPI1_SCK -- PA5
|
| | | SPI1_NSS -- PA4
|
| | | LCD_RST -- PE1
|
| | |
|
| | | 5, CAN
|
| | | CAN_TX -- PB9
|
| | | CAN_RX -- PB8
|
| | |
|
| | | 6, LED
|
| | | LED1 -- PB5
|
| | | LED2 -- PD6
|
| | | LED3 -- PD3
|
| | |
|
| | | 7, Button
|
| | | KEY1 -- PC5
|
| | | KEY2 -- PC2
|
| | | KEY3 -- PC3
|
| | |
|
| | | 8, SST25VF016B
|
| | | SPI1_MISO -- PA6
|
| | | SPI1_MOSI -- PA7
|
| | | SPI1_CLK -- PA5
|
| | | SPI1_CS2 -- PC4
|
| | |
|
New file |
| | |
| | | /* ----------------------------------------------------------------------------
|
| | | * SAM Software Package License
|
| | | * ----------------------------------------------------------------------------
|
| | | * Copyright (c) 2011, Atmel Corporation
|
| | | *
|
| | | * All rights reserved.
|
| | | *
|
| | | * Redistribution and use in source and binary forms, with or without
|
| | | * modification, are permitted provided that the following conditions are met:
|
| | | *
|
| | | * - Redistributions of source code must retain the above copyright notice,
|
| | | * this list of conditions and the disclaimer below.
|
| | | *
|
| | | * Atmel's name may not be used to endorse or promote products derived from
|
| | | * this software without specific prior written permission.
|
| | | *
|
| | | * DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR
|
| | | * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
| | | * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE
|
| | | * DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,
|
| | | * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
| | | * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
|
| | | * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
| | | * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
| | | * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
|
| | | * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
| | | * ----------------------------------------------------------------------------
|
| | | */
|
| | |
|
| | | /**
|
| | | * \file
|
| | | *
|
| | | * Implementation of draw function on LCD, Include draw text, image
|
| | | * and basic shapes (line, rectangle, circle).
|
| | | *
|
| | | */
|
| | |
|
| | | /*----------------------------------------------------------------------------
|
| | | * Headers
|
| | | *----------------------------------------------------------------------------*/
|
| | |
|
| | | #include <stdint.h>
|
| | | #include <string.h>
|
| | | #include <assert.h>
|
| | | #include "lcd_font.h"
|
| | | #include "lcd_r61509v.h"
|
| | | #include "lcd_draw.h"
|
| | |
|
| | | /*----------------------------------------------------------------------------
|
| | | * Exported functions
|
| | | *----------------------------------------------------------------------------*/
|
| | |
|
| | | /**
|
| | | * \brief Fills the given LCD buffer with a particular color.
|
| | | *
|
| | | * \param color Fill color.
|
| | | */
|
| | | void LCDD_Fill( uint32_t dwColor )
|
| | | {
|
| | | uint32_t i ;
|
| | |
|
| | | LCD_SetCursor( 150, 150 ) ;
|
| | | LCD_WriteRAM_Prepare() ;
|
| | |
|
| | | for ( i=BOARD_LCD_WIDTH*BOARD_LCD_HEIGHT; i>0; i-- )
|
| | | {
|
| | | LCD_WriteRAM( dwColor ) ;
|
| | | }
|
| | | }
|
| | |
|
| | | /**
|
| | | * \brief Draw a pixel on LCD of given color.
|
| | | *
|
| | | * \param x X-coordinate of pixel.
|
| | | * \param y Y-coordinate of pixel.
|
| | | * \param color Pixel color.
|
| | | */
|
| | | extern void LCDD_DrawPixel( uint32_t x, uint32_t y, uint32_t color )
|
| | | {
|
| | | LCD_SetCursor( x, y ) ;
|
| | | LCD_WriteRAM_Prepare() ;
|
| | | LCD_WriteRAM( color ) ;
|
| | | }
|
| | |
|
| | | /**
|
| | | * \brief Read a pixel from LCD.
|
| | | *
|
| | | * \param x X-coordinate of pixel.
|
| | | * \param y Y-coordinate of pixel.
|
| | | *
|
| | | * \return color Readed pixel color.
|
| | | */
|
| | | extern uint32_t LCDD_ReadPixel( uint32_t x, uint32_t y )
|
| | | {
|
| | | uint32_t color;
|
| | |
|
| | | LCD_SetCursor(x, y);
|
| | | LCD_ReadRAM_Prepare();
|
| | | color = LCD_ReadRAM();
|
| | |
|
| | | return color;
|
| | | }
|
| | |
|
| | | /*
|
| | | * \brief Draw a line on LCD, horizontal and vertical line are supported.
|
| | | *
|
| | | * \param x X-coordinate of line start.
|
| | | * \param y Y-coordinate of line start.
|
| | | * \param length line length.
|
| | | * \param direction line direction: 0 - horizontal, 1 - vertical.
|
| | | * \param color Pixel color.
|
| | | */
|
| | | extern void LCDD_DrawLine( uint32_t x, uint32_t y, uint32_t length, uint32_t direction, uint32_t color )
|
| | | {
|
| | | uint32_t i = 0 ;
|
| | |
|
| | | LCD_SetCursor( x, y ) ;
|
| | |
|
| | | if ( direction == DIRECTION_HLINE )
|
| | | {
|
| | | LCD_WriteRAM_Prepare() ;
|
| | | for ( i = 0; i < length; i++ )
|
| | | {
|
| | | LCD_WriteRAM( color ) ;
|
| | | }
|
| | | }
|
| | | else
|
| | | {
|
| | | for ( i = 0; i < length; i++ )
|
| | | {
|
| | | LCD_WriteRAM_Prepare() ;
|
| | | LCD_WriteRAM( color ) ;
|
| | | y++ ;
|
| | | LCD_SetCursor( x, y ) ;
|
| | | }
|
| | | }
|
| | | }
|
| | |
|
| | | /*
|
| | | * \brief Draws a rectangle on LCD, at the given coordinates.
|
| | | *
|
| | | * \param x X-coordinate of upper-left rectangle corner.
|
| | | * \param y Y-coordinate of upper-left rectangle corner.
|
| | | * \param width Rectangle width in pixels.
|
| | | * \param height Rectangle height in pixels.
|
| | | * \param color Rectangle color.
|
| | | */
|
| | | extern void LCDD_DrawRectangle( uint32_t x, uint32_t y, uint32_t width, uint32_t height, uint32_t color )
|
| | | {
|
| | | LCDD_DrawLine(x, y, width, DIRECTION_HLINE, color);
|
| | | LCDD_DrawLine(x, (y + height), width, DIRECTION_HLINE, color);
|
| | |
|
| | | LCDD_DrawLine(x, y, height, DIRECTION_VLINE, color);
|
| | | LCDD_DrawLine((x + width), y, height, DIRECTION_VLINE, color);
|
| | | }
|
| | |
|
| | | /*
|
| | | * \brief Draws a rectangle with fill inside on LCD, at the given coordinates.
|
| | | *
|
| | | * \param x X-coordinate of upper-left rectangle corner.
|
| | | * \param y Y-coordinate of upper-left rectangle corner.
|
| | | * \param width Rectangle width in pixels.
|
| | | * \param height Rectangle height in pixels.
|
| | | * \param color Rectangle color.
|
| | | */
|
| | | extern void LCDD_DrawRectangleWithFill( uint32_t dwX, uint32_t dwY, uint32_t dwWidth, uint32_t dwHeight, uint32_t dwColor )
|
| | | {
|
| | | uint32_t i ;
|
| | |
|
| | | LCD_SetWindow( dwX, dwY, dwWidth, dwHeight ) ;
|
| | | LCD_SetCursor( dwX, dwY ) ;
|
| | | LCD_WriteRAM_Prepare() ;
|
| | |
|
| | | for ( i = dwWidth * dwHeight; i > 0; i-- )
|
| | | {
|
| | | LCD_WriteRAM( dwColor ) ;
|
| | | }
|
| | | LCD_SetWindow( 0, 0, BOARD_LCD_WIDTH, BOARD_LCD_HEIGHT ) ;
|
| | | LCD_SetCursor( 0, 0 ) ;
|
| | | }
|
| | |
|
| | | /**
|
| | | * \brief Draws a circle on LCD, at the given coordinates.
|
| | | *
|
| | | * \param x X-coordinate of circle center.
|
| | | * \param y Y-coordinate of circle center.
|
| | | * \param r circle radius.
|
| | | * \param color circle color.
|
| | | */
|
| | | extern void LCDD_DrawCircle( uint32_t x, uint32_t y, uint32_t r, uint32_t color )
|
| | | {
|
| | | signed int d; /* Decision Variable */
|
| | | uint32_t curX; /* Current X Value */
|
| | | uint32_t curY; /* Current Y Value */
|
| | |
|
| | | d = 3 - (r << 1);
|
| | | curX = 0;
|
| | | curY = r;
|
| | |
|
| | | while (curX <= curY)
|
| | | {
|
| | | LCDD_DrawPixel(x + curX, y + curY, color);
|
| | | LCDD_DrawPixel(x + curX, y - curY, color);
|
| | | LCDD_DrawPixel(x - curX, y + curY, color);
|
| | | LCDD_DrawPixel(x - curX, y - curY, color);
|
| | | LCDD_DrawPixel(x + curY, y + curX, color);
|
| | | LCDD_DrawPixel(x + curY, y - curX, color);
|
| | | LCDD_DrawPixel(x - curY, y + curX, color);
|
| | | LCDD_DrawPixel(x - curY, y - curX, color);
|
| | |
|
| | | if (d < 0) {
|
| | | d += (curX << 2) + 6;
|
| | | }
|
| | | else {
|
| | | d += ((curX - curY) << 2) + 10;
|
| | | curY--;
|
| | | }
|
| | | curX++;
|
| | | }
|
| | | }
|
| | |
|
| | | /**
|
| | | * \brief Draws a string inside a LCD buffer, at the given coordinates. Line breaks
|
| | | * will be honored.
|
| | | *
|
| | | * \param x X-coordinate of string top-left corner.
|
| | | * \param y Y-coordinate of string top-left corner.
|
| | | * \param pString String to display.
|
| | | * \param color String color.
|
| | | */
|
| | | extern void LCDD_DrawString( uint32_t x, uint32_t y, const uint8_t *pString, uint32_t color )
|
| | | {
|
| | | uint32_t xorg = x ;
|
| | |
|
| | | while ( *pString != 0 && *pString > 0x1F && *pString < 0x7F)
|
| | | {
|
| | | LCDD_DrawChar( x, y, *pString, color ) ;
|
| | | if ( *pString == '\n' || x > 220)
|
| | | {
|
| | | y += gFont.height + 2 ;
|
| | | x = xorg ;
|
| | | }
|
| | | else
|
| | | {
|
| | | x += gFont.width + 2 ;
|
| | | }
|
| | | |
| | | pString++ ;
|
| | | }
|
| | | }
|
| | |
|
| | | /**
|
| | | * \brief Draws a string inside a LCD buffer, at the given coordinates
|
| | | * with given background color. Line breaks will be honored.
|
| | | *
|
| | | * \param x X-coordinate of string top-left corner.
|
| | | * \param y Y-coordinate of string top-left corner.
|
| | | * \param pString String to display.
|
| | | * \param fontColor String color.
|
| | | * \param bgColor Background color.
|
| | | */
|
| | | extern void LCDD_DrawStringWithBGColor( uint32_t x, uint32_t y, const char *pString, uint32_t fontColor, uint32_t bgColor )
|
| | | {
|
| | | unsigned xorg = x;
|
| | |
|
| | | while ( *pString != 0 )
|
| | | {
|
| | | if ( *pString == '\n' )
|
| | | {
|
| | | y += gFont.height + 2 ;
|
| | | x = xorg ;
|
| | | }
|
| | | else
|
| | | {
|
| | | LCDD_DrawCharWithBGColor( x, y, *pString, fontColor, bgColor ) ;
|
| | | x += gFont.width + 2;
|
| | | }
|
| | |
|
| | | pString++;
|
| | | }
|
| | | }
|
| | |
|
| | | /**
|
| | | * \brief Returns the width & height in pixels that a string will occupy on the screen
|
| | | * if drawn using LCDD_DrawString.
|
| | | *
|
| | | * \param pString String.
|
| | | * \param pWidth Pointer for storing the string width (optional).
|
| | | * \param pHeight Pointer for storing the string height (optional).
|
| | | *
|
| | | * \return String width in pixels.
|
| | | */
|
| | | extern void LCDD_GetStringSize( const uint8_t *pString, uint32_t *pWidth, uint32_t *pHeight )
|
| | | {
|
| | | uint32_t width = 0;
|
| | | uint32_t height = gFont.height;
|
| | |
|
| | | while ( *pString != 0 )
|
| | | {
|
| | | if ( *pString == '\n' )
|
| | | {
|
| | | height += gFont.height + 2 ;
|
| | | }
|
| | | else
|
| | | {
|
| | | width += gFont.width + 2 ;
|
| | | }
|
| | |
|
| | | pString++ ;
|
| | | }
|
| | |
|
| | | if ( width > 0 )
|
| | | {
|
| | | width -= 2;
|
| | | }
|
| | |
|
| | | if ( pWidth != NULL )
|
| | | {
|
| | | *pWidth = width;
|
| | | }
|
| | |
|
| | | if ( pHeight != NULL )
|
| | | {
|
| | | *pHeight = height ;
|
| | | }
|
| | | }
|
| | |
|
| | | /*
|
| | | * \brief Draw a raw image at given position on LCD.
|
| | | *
|
| | | * \param x X-coordinate of image start.
|
| | | * \param y Y-coordinate of image start.
|
| | | * \param pImage Image buffer.
|
| | | * \param width Image width.
|
| | | * \param height Image height.
|
| | | */
|
| | | void LCDD_DrawImage( uint32_t dwX, uint32_t dwY, const uint8_t *pImage, uint32_t dwWidth, uint32_t dwHeight )
|
| | | {
|
| | | uint32_t dwCursor ;
|
| | |
|
| | | LCD_SetWindow( dwX, dwY, dwWidth, dwHeight ) ;
|
| | | LCD_SetCursor( dwX, dwY ) ;
|
| | | LCD_WriteRAM_Prepare() ;
|
| | |
|
| | | for ( dwCursor=dwWidth*dwHeight; dwCursor != 0; dwCursor-- )
|
| | | {
|
| | | LCD_D() = *pImage++ ;
|
| | | LCD_D() = *pImage++ ;
|
| | | LCD_D() = *pImage++ ;
|
| | | }
|
| | |
|
| | | LCD_SetWindow( 0, 0, BOARD_LCD_WIDTH, BOARD_LCD_HEIGHT ) ;
|
| | | }
|
| | |
|
| | | /*
|
| | | * \brief Draw a raw image at given position on LCD.
|
| | | *
|
| | | * \param dwX X-coordinate of image start.
|
| | | * \param dwY Y-coordinate of image start.
|
| | | * \param pGIMPImage Image data.
|
| | | */
|
| | | void LCDD_DrawGIMPImage( uint32_t dwX, uint32_t dwY, const SGIMPImage* pGIMPImage )
|
| | | {
|
| | | uint32_t dw ;
|
| | | register uint32_t dwLength ;
|
| | | uint8_t* pucData ;
|
| | |
|
| | | // Draw raw RGB bitmap
|
| | | LCD_SetWindow( dwX, dwY, pGIMPImage->dwWidth, pGIMPImage->dwHeight ) ;
|
| | | LCD_SetCursor( dwX, dwY ) ;
|
| | |
|
| | | LCD_WriteRAM_Prepare() ;
|
| | |
|
| | | dwLength = pGIMPImage->dwWidth*pGIMPImage->dwHeight ;
|
| | | pucData = pGIMPImage->pucPixel_data ;
|
| | | for ( dw=0; dw < dwLength; dw++ )
|
| | | {
|
| | | LCD_D() = (*pucData++) ;
|
| | | LCD_D() = (*pucData++) ;
|
| | | LCD_D() = (*pucData++) ;
|
| | | }
|
| | |
|
| | | LCD_SetWindow( 0, 0, BOARD_LCD_WIDTH, BOARD_LCD_HEIGHT ) ;
|
| | | }
|
| | |
|
| | | /*
|
| | | * \brief Clear a window with an color.
|
| | | *
|
| | | * \param dwX X-coordinate of the window.
|
| | | * \param dwY Y-coordinate of the window.
|
| | | * \param dwWidth window width.
|
| | | * \param dwHeight window height.
|
| | | * \param dwColor background color
|
| | | */
|
| | | extern void LCDD_ClearWindow( uint32_t dwX, uint32_t dwY, uint32_t dwWidth, uint32_t dwHeight, uint32_t dwColor )
|
| | | {
|
| | | uint32_t dw ;
|
| | |
|
| | | LCD_SetCursor( dwX, dwY) ;
|
| | | LCD_WriteRAM_Prepare() ;
|
| | |
|
| | | for ( dw = dwWidth * dwHeight; dw > 0; dw-- )
|
| | | {
|
| | | LCD_WriteRAM( dwColor ) ;
|
| | | }
|
| | | }
|
New file |
| | |
| | | /* ----------------------------------------------------------------------------
|
| | | * SAM Software Package License
|
| | | * ----------------------------------------------------------------------------
|
| | | * Copyright (c) 2011, Atmel Corporation
|
| | | *
|
| | | * All rights reserved.
|
| | | *
|
| | | * Redistribution and use in source and binary forms, with or without
|
| | | * modification, are permitted provided that the following conditions are met:
|
| | | *
|
| | | * - Redistributions of source code must retain the above copyright notice,
|
| | | * this list of conditions and the disclaimer below.
|
| | | *
|
| | | * Atmel's name may not be used to endorse or promote products derived from
|
| | | * this software without specific prior written permission.
|
| | | *
|
| | | * DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR
|
| | | * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
| | | * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE
|
| | | * DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,
|
| | | * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
| | | * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
|
| | | * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
| | | * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
| | | * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
|
| | | * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
| | | * ----------------------------------------------------------------------------
|
| | | */
|
| | |
|
| | | /**
|
| | | * \file
|
| | | *
|
| | | * Interface for draw function on LCD.
|
| | | *
|
| | | */
|
| | |
|
| | | #ifndef DRAW_H
|
| | | #define DRAW_H
|
| | |
|
| | | /*----------------------------------------------------------------------------
|
| | | * Headers
|
| | | *----------------------------------------------------------------------------*/
|
| | |
|
| | | #include <stdint.h>
|
| | | #include "lcd_gimp_image.h"
|
| | |
|
| | | /*----------------------------------------------------------------------------
|
| | | * Definitions
|
| | | *----------------------------------------------------------------------------*/
|
| | |
|
| | | /** Horizontal direction line definition */
|
| | | #define DIRECTION_HLINE 0
|
| | | /** Vertical direction line definition */
|
| | | #define DIRECTION_VLINE 1
|
| | |
|
| | |
|
| | | #ifdef __cplusplus
|
| | | extern "C" {
|
| | | #endif
|
| | | /*----------------------------------------------------------------------------
|
| | | * Exported functions
|
| | | *----------------------------------------------------------------------------*/
|
| | | extern void LCDD_Fill( uint32_t color ) ;
|
| | |
|
| | | extern void LCDD_DrawPixel( uint32_t x, uint32_t y, uint32_t c ) ;
|
| | |
|
| | | extern uint32_t LCDD_ReadPixel( uint32_t x, uint32_t y ) ;
|
| | |
|
| | | extern void LCDD_DrawLine( uint32_t x, uint32_t y, uint32_t length, uint32_t direction, uint32_t color ) ;
|
| | |
|
| | | extern void LCDD_DrawRectangle( uint32_t dwX, uint32_t dwY, uint32_t dwWidth, uint32_t dwHeight, uint32_t dwColor ) ;
|
| | |
|
| | | extern void LCDD_DrawRectangleWithFill( uint32_t dwX, uint32_t dwY, uint32_t dwWidth, uint32_t dwHeight, uint32_t dwColor ) ;
|
| | |
|
| | | extern void LCDD_DrawCircle( uint32_t x, uint32_t y, uint32_t r, uint32_t color ) ;
|
| | |
|
| | | extern void LCDD_DrawString( uint32_t x, uint32_t y, const uint8_t *pString, uint32_t color ) ;
|
| | |
|
| | | extern void LCDD_DrawStringWithBGColor( uint32_t x, uint32_t y, const char *pString, uint32_t fontColor, uint32_t bgColor ) ;
|
| | |
|
| | | extern void LCDD_GetStringSize( const uint8_t *pString, uint32_t *pWidth, uint32_t *pHeight ) ;
|
| | |
|
| | | extern void LCDD_DrawImage( uint32_t x, uint32_t y, const uint8_t *pImage, uint32_t width, uint32_t height ) ;
|
| | |
|
| | | extern void LCDD_DrawGIMPImage( uint32_t dwX, uint32_t dwY, const SGIMPImage* pGIMPImage );
|
| | |
|
| | | extern void LCDD_ClearWindow( uint32_t dwX, uint32_t dwY, uint32_t dwWidth, uint32_t dwHeight, uint32_t dwColor ) ;
|
| | |
|
| | | #ifdef __cplusplus
|
| | | }
|
| | | #endif
|
| | |
|
| | | #endif /* #ifndef DRAW_H */
|
New file |
| | |
| | | /* ----------------------------------------------------------------------------
|
| | | * SAM Software Package License
|
| | | * ----------------------------------------------------------------------------
|
| | | * Copyright (c) 2011, Atmel Corporation
|
| | | *
|
| | | * All rights reserved.
|
| | | *
|
| | | * Redistribution and use in source and binary forms, with or without
|
| | | * modification, are permitted provided that the following conditions are met:
|
| | | *
|
| | | * - Redistributions of source code must retain the above copyright notice,
|
| | | * this list of conditions and the disclaimer below.
|
| | | *
|
| | | * Atmel's name may not be used to endorse or promote products derived from
|
| | | * this software without specific prior written permission.
|
| | | *
|
| | | * DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR
|
| | | * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
| | | * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE
|
| | | * DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,
|
| | | * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
| | | * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
|
| | | * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
| | | * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
| | | * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
|
| | | * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
| | | * ----------------------------------------------------------------------------
|
| | | */
|
| | | #include "lcd_font.h"
|
| | | #include "lcd_font10x14.h"
|
| | |
|
| | | /**
|
| | | * \file
|
| | | *
|
| | | * Implementation of draw font on LCD.
|
| | | *
|
| | | */
|
| | |
|
| | | /*----------------------------------------------------------------------------
|
| | | * Headers
|
| | | *----------------------------------------------------------------------------*/
|
| | |
|
| | | #include <stdint.h>
|
| | | #include "lcd_draw.h"
|
| | |
|
| | | /*----------------------------------------------------------------------------
|
| | | * Local variables
|
| | | *----------------------------------------------------------------------------*/
|
| | |
|
| | | /** Global variable describing the font being instancied. */
|
| | | const Font gFont = {10, 14};
|
| | |
|
| | | /*----------------------------------------------------------------------------
|
| | | * Exported functions
|
| | | *----------------------------------------------------------------------------*/
|
| | |
|
| | | /**
|
| | | * \brief Draws an ASCII character on LCD.
|
| | | *
|
| | | * \param x X-coordinate of character upper-left corner.
|
| | | * \param y Y-coordinate of character upper-left corner.
|
| | | * \param c Character to output.
|
| | | * \param color Character color.
|
| | | */
|
| | | extern void LCDD_DrawChar( uint32_t x, uint32_t y, uint8_t c, uint32_t color )
|
| | | {
|
| | | uint32_t row, col ;
|
| | |
|
| | | if( (c<0x20) || (c>0x7F) ) |
| | | return ;
|
| | |
|
| | | for ( col = 0 ; col < 10 ; col++ )
|
| | | {
|
| | | for ( row = 0 ; row < 8 ; row++ )
|
| | | {
|
| | | if ( (pCharset10x14[((c - 0x20) * 20) + col * 2] >> (7 - row)) & 0x1 )
|
| | | {
|
| | | LCDD_DrawPixel( x+col, y+row, color ) ;
|
| | | }
|
| | | }
|
| | |
|
| | | for (row = 0; row < 6; row++ )
|
| | | {
|
| | | if ((pCharset10x14[((c - 0x20) * 20) + col * 2 + 1] >> (7 - row)) & 0x1)
|
| | | {
|
| | | LCDD_DrawPixel( x+col, y+row+8, color ) ;
|
| | | }
|
| | | }
|
| | | }
|
| | | }
|
| | |
|
| | | /**
|
| | | * \brief Draws an ASCII character on LCD with given background color.
|
| | | *
|
| | | * \param x X-coordinate of character upper-left corner.
|
| | | * \param y Y-coordinate of character upper-left corner.
|
| | | * \param c Character to output.
|
| | | * \param fontColor Character color.
|
| | | * \param bgColor Background color.
|
| | | */
|
| | | extern void LCDD_DrawCharWithBGColor( uint32_t x, uint32_t y, uint8_t c, uint32_t fontColor, uint32_t bgColor )
|
| | | {
|
| | | uint32_t row, col ;
|
| | |
|
| | | if( (c<0x20) || (c>0x7F) ) |
| | | return ;
|
| | |
|
| | | for (col = 0; col < 10; col++)
|
| | | {
|
| | | for (row = 0 ; row < 8 ; row++)
|
| | | {
|
| | | if ( (pCharset10x14[((c - 0x20) * 20) + col * 2] >> (7 - row)) & 0x1 )
|
| | | {
|
| | | LCDD_DrawPixel( x+col, y+row, fontColor ) ;
|
| | | }
|
| | | else
|
| | | {
|
| | | LCDD_DrawPixel( x+col, y+row, bgColor ) ;
|
| | | }
|
| | | }
|
| | |
|
| | | for ( row = 0 ; row < 6 ; row++ )
|
| | | {
|
| | | if ( (pCharset10x14[((c - 0x20) * 20) + col * 2 + 1] >> (7 - row)) & 0x1 )
|
| | | {
|
| | | LCDD_DrawPixel( x+col, y+row+8, fontColor ) ;
|
| | | }
|
| | | else
|
| | | {
|
| | | LCDD_DrawPixel( x+col, y+row+8, bgColor ) ;
|
| | | }
|
| | | }
|
| | | }
|
| | | }
|
| | |
|
New file |
| | |
| | | /* ----------------------------------------------------------------------------
|
| | | * SAM Software Package License
|
| | | * ----------------------------------------------------------------------------
|
| | | * Copyright (c) 2011, Atmel Corporation
|
| | | *
|
| | | * All rights reserved.
|
| | | *
|
| | | * Redistribution and use in source and binary forms, with or without
|
| | | * modification, are permitted provided that the following conditions are met:
|
| | | *
|
| | | * - Redistributions of source code must retain the above copyright notice,
|
| | | * this list of conditions and the disclaimer below.
|
| | | *
|
| | | * Atmel's name may not be used to endorse or promote products derived from
|
| | | * this software without specific prior written permission.
|
| | | *
|
| | | * DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR
|
| | | * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
| | | * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE
|
| | | * DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,
|
| | | * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
| | | * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
|
| | | * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
| | | * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
| | | * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
|
| | | * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
| | | * ----------------------------------------------------------------------------
|
| | | */
|
| | |
|
| | | /**
|
| | | * \file
|
| | | *
|
| | | * Interface for draw font on LCD.
|
| | | *
|
| | | */
|
| | |
|
| | | /**
|
| | | *
|
| | | * \section Purpose
|
| | | *
|
| | | * The font.h files declares a font structure and a LCDD_DrawChar function
|
| | | * that must be implemented by a font definition file to be used with the
|
| | | * LCDD_DrawString method of draw.h.
|
| | | *
|
| | | * The font10x14.c implements the necessary variable and function for a 10x14
|
| | | * font.
|
| | | *
|
| | | * \section Usage
|
| | | *
|
| | | * -# Declare a gFont global variable with the necessary Font information.
|
| | | * -# Implement an LCDD_DrawChar function which displays the specified
|
| | | * character on the LCD.
|
| | | * -# Use the LCDD_DrawString method defined in draw.h to display a complete
|
| | | * string.
|
| | | */
|
| | |
|
| | | #ifndef _LCD_FONT_
|
| | | #define _LCD_FONT_
|
| | |
|
| | | /*----------------------------------------------------------------------------
|
| | | * Headers
|
| | | *----------------------------------------------------------------------------*/
|
| | |
|
| | | #include <stdint.h>
|
| | |
|
| | | /*----------------------------------------------------------------------------
|
| | | * Types
|
| | | *----------------------------------------------------------------------------*/
|
| | |
|
| | |
|
| | | /** \brief Describes the font (width, height, supported characters, etc.) used by
|
| | | * the LCD driver draw API.
|
| | | */
|
| | | typedef struct _Font {
|
| | | /* Font width in pixels. */
|
| | | uint8_t width;
|
| | | /* Font height in pixels. */
|
| | | uint8_t height;
|
| | | } Font;
|
| | |
|
| | | /*----------------------------------------------------------------------------
|
| | | * Variables
|
| | | *----------------------------------------------------------------------------*/
|
| | |
|
| | | /** Global variable describing the font being instancied. */
|
| | | extern const Font gFont;
|
| | |
|
| | | #ifdef __cplusplus
|
| | | extern "C" {
|
| | | #endif
|
| | | /*----------------------------------------------------------------------------
|
| | | * Exported functions
|
| | | *----------------------------------------------------------------------------*/
|
| | |
|
| | | extern void LCDD_DrawChar( uint32_t x, uint32_t y, uint8_t c, uint32_t color ) ;
|
| | |
|
| | | extern void LCDD_DrawCharWithBGColor( uint32_t x, uint32_t y, uint8_t c, uint32_t fontColor, uint32_t bgColor ) ;
|
| | | #ifdef __cplusplus
|
| | | }
|
| | | #endif
|
| | | #endif /* #ifndef LCD_FONT_ */
|
| | |
|
New file |
| | |
| | | /* ----------------------------------------------------------------------------
|
| | | * SAM Software Package License
|
| | | * ----------------------------------------------------------------------------
|
| | | * Copyright (c) 2011, Atmel Corporation
|
| | | *
|
| | | * All rights reserved.
|
| | | *
|
| | | * Redistribution and use in source and binary forms, with or without
|
| | | * modification, are permitted provided that the following conditions are met:
|
| | | *
|
| | | * - Redistributions of source code must retain the above copyright notice,
|
| | | * this list of conditions and the disclaimer below.
|
| | | *
|
| | | * Atmel's name may not be used to endorse or promote products derived from
|
| | | * this software without specific prior written permission.
|
| | | *
|
| | | * DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR
|
| | | * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
| | | * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE
|
| | | * DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,
|
| | | * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
| | | * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
|
| | | * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
| | | * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
| | | * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
|
| | | * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
| | | * ----------------------------------------------------------------------------
|
| | | */
|
| | | #include <stdint.h>
|
| | | |
| | | const unsigned char pCharset8x8[97][8] = {
|
| | | {0x08,0x08,0x08,0x00,0x00,0x00,0x00,0x00}, // columns, rows, num_bytes_per_char
|
| | | {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}, // space 0x20
|
| | | {0x30,0x78,0x78,0x30,0x30,0x00,0x30,0x00}, // !
|
| | | {0x6C,0x6C,0x6C,0x00,0x00,0x00,0x00,0x00}, // "
|
| | | {0x6C,0x6C,0xFE,0x6C,0xFE,0x6C,0x6C,0x00}, // #
|
| | | {0x18,0x3E,0x60,0x3C,0x06,0x7C,0x18,0x00}, // $
|
| | | {0x00,0x63,0x66,0x0C,0x18,0x33,0x63,0x00}, // %
|
| | | {0x1C,0x36,0x1C,0x3B,0x6E,0x66,0x3B,0x00}, // &
|
| | | {0x30,0x30,0x60,0x00,0x00,0x00,0x00,0x00}, // '
|
| | | {0x0C,0x18,0x30,0x30,0x30,0x18,0x0C,0x00}, // (
|
| | | {0x30,0x18,0x0C,0x0C,0x0C,0x18,0x30,0x00}, // )
|
| | | {0x00,0x66,0x3C,0xFF,0x3C,0x66,0x00,0x00}, // *
|
| | | {0x00,0x30,0x30,0xFC,0x30,0x30,0x00,0x00}, // +
|
| | | {0x00,0x00,0x00,0x00,0x00,0x18,0x18,0x30}, // ,
|
| | | {0x00,0x00,0x00,0x7E,0x00,0x00,0x00,0x00}, // -
|
| | | {0x00,0x00,0x00,0x00,0x00,0x18,0x18,0x00}, // .
|
| | | {0x03,0x06,0x0C,0x18,0x30,0x60,0x40,0x00}, // / (forward slash)
|
| | | {0x3E,0x63,0x63,0x6B,0x63,0x63,0x3E,0x00}, // 0 0x30
|
| | | {0x18,0x38,0x58,0x18,0x18,0x18,0x7E,0x00}, // 1
|
| | | {0x3C,0x66,0x06,0x1C,0x30,0x66,0x7E,0x00}, // 2
|
| | | {0x3C,0x66,0x06,0x1C,0x06,0x66,0x3C,0x00}, // 3
|
| | | {0x0E,0x1E,0x36,0x66,0x7F,0x06,0x0F,0x00}, // 4
|
| | | {0x7E,0x60,0x7C,0x06,0x06,0x66,0x3C,0x00}, // 5
|
| | | {0x1C,0x30,0x60,0x7C,0x66,0x66,0x3C,0x00}, // 6
|
| | | {0x7E,0x66,0x06,0x0C,0x18,0x18,0x18,0x00}, // 7
|
| | | {0x3C,0x66,0x66,0x3C,0x66,0x66,0x3C,0x00}, // 8
|
| | | {0x3C,0x66,0x66,0x3E,0x06,0x0C,0x38,0x00}, // 9
|
| | | {0x00,0x18,0x18,0x00,0x00,0x18,0x18,0x00}, // :
|
| | | {0x00,0x18,0x18,0x00,0x00,0x18,0x18,0x30}, // ;
|
| | | {0x0C,0x18,0x30,0x60,0x30,0x18,0x0C,0x00}, // <
|
| | | {0x00,0x00,0x7E,0x00,0x00,0x7E,0x00,0x00}, // =
|
| | | {0x30,0x18,0x0C,0x06,0x0C,0x18,0x30,0x00}, // >
|
| | | {0x3C,0x66,0x06,0x0C,0x18,0x00,0x18,0x00}, // ?
|
| | | {0x3E,0x63,0x6F,0x69,0x6F,0x60,0x3E,0x00}, // @ 0x40
|
| | | {0x18,0x3C,0x66,0x66,0x7E,0x66,0x66,0x00}, // A
|
| | | {0x7E,0x33,0x33,0x3E,0x33,0x33,0x7E,0x00}, // B
|
| | | {0x1E,0x33,0x60,0x60,0x60,0x33,0x1E,0x00}, // C
|
| | | {0x7C,0x36,0x33,0x33,0x33,0x36,0x7C,0x00}, // D
|
| | | {0x7F,0x31,0x34,0x3C,0x34,0x31,0x7F,0x00}, // E
|
| | | {0x7F,0x31,0x34,0x3C,0x34,0x30,0x78,0x00}, // F
|
| | | {0x1E,0x33,0x60,0x60,0x67,0x33,0x1F,0x00}, // G
|
| | | {0x66,0x66,0x66,0x7E,0x66,0x66,0x66,0x00}, // H
|
| | | {0x3C,0x18,0x18,0x18,0x18,0x18,0x3C,0x00}, // I
|
| | | {0x0F,0x06,0x06,0x06,0x66,0x66,0x3C,0x00}, // J
|
| | | {0x73,0x33,0x36,0x3C,0x36,0x33,0x73,0x00}, // K
|
| | | {0x78,0x30,0x30,0x30,0x31,0x33,0x7F,0x00}, // L
|
| | | {0x63,0x77,0x7F,0x7F,0x6B,0x63,0x63,0x00}, // M
|
| | | {0x63,0x73,0x7B,0x6F,0x67,0x63,0x63,0x00}, // N
|
| | | {0x3E,0x63,0x63,0x63,0x63,0x63,0x3E,0x00}, // O
|
| | | {0x7E,0x33,0x33,0x3E,0x30,0x30,0x78,0x00}, // P 0x50
|
| | | {0x3C,0x66,0x66,0x66,0x6E,0x3C,0x0E,0x00}, // Q
|
| | | {0x7E,0x33,0x33,0x3E,0x36,0x33,0x73,0x00}, // R
|
| | | {0x3C,0x66,0x30,0x18,0x0C,0x66,0x3C,0x00}, // S
|
| | | {0x7E,0x5A,0x18,0x18,0x18,0x18,0x3C,0x00}, // T
|
| | | {0x66,0x66,0x66,0x66,0x66,0x66,0x7E,0x00}, // U
|
| | | {0x66,0x66,0x66,0x66,0x66,0x3C,0x18,0x00}, // V
|
| | | {0x63,0x63,0x63,0x6B,0x7F,0x77,0x63,0x00}, // W
|
| | | {0x63,0x63,0x36,0x1C,0x1C,0x36,0x63,0x00}, // X
|
| | | {0x66,0x66,0x66,0x3C,0x18,0x18,0x3C,0x00}, // Y
|
| | | {0x7F,0x63,0x46,0x0C,0x19,0x33,0x7F,0x00}, // Z
|
| | | {0x3C,0x30,0x30,0x30,0x30,0x30,0x3C,0x00}, // [
|
| | | {0x60,0x30,0x18,0x0C,0x06,0x03,0x01,0x00}, // \ (back slash)
|
| | | {0x3C,0x0C,0x0C,0x0C,0x0C,0x0C,0x3C,0x00}, // ]
|
| | | {0x08,0x1C,0x36,0x63,0x00,0x00,0x00,0x00}, // ^
|
| | | {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF}, // _
|
| | | {0x18,0x18,0x0C,0x00,0x00,0x00,0x00,0x00}, // ` 0x60
|
| | | {0x00,0x00,0x3C,0x06,0x3E,0x66,0x3B,0x00}, // a
|
| | | {0x70,0x30,0x3E,0x33,0x33,0x33,0x6E,0x00}, // b
|
| | | {0x00,0x00,0x3C,0x66,0x60,0x66,0x3C,0x00}, // c
|
| | | {0x0E,0x06,0x3E,0x66,0x66,0x66,0x3B,0x00}, // d
|
| | | {0x00,0x00,0x3C,0x66,0x7E,0x60,0x3C,0x00}, // e
|
| | | {0x1C,0x36,0x30,0x78,0x30,0x30,0x78,0x00}, // f
|
| | | {0x00,0x00,0x3B,0x66,0x66,0x3E,0x06,0x7C}, // g
|
| | | {0x70,0x30,0x36,0x3B,0x33,0x33,0x73,0x00}, // h
|
| | | {0x18,0x00,0x38,0x18,0x18,0x18,0x3C,0x00}, // i
|
| | | {0x06,0x00,0x06,0x06,0x06,0x66,0x66,0x3C}, // j
|
| | | {0x70,0x30,0x33,0x36,0x3C,0x36,0x73,0x00}, // k
|
| | | {0x38,0x18,0x18,0x18,0x18,0x18,0x3C,0x00}, // l
|
| | | {0x00,0x00,0x66,0x7F,0x7F,0x6B,0x63,0x00}, // m
|
| | | {0x00,0x00,0x7C,0x66,0x66,0x66,0x66,0x00}, // n
|
| | | {0x00,0x00,0x3C,0x66,0x66,0x66,0x3C,0x00}, // o
|
| | | {0x00,0x00,0x6E,0x33,0x33,0x3E,0x30,0x78}, // p 0x70
|
| | | {0x00,0x00,0x3B,0x66,0x66,0x3E,0x06,0x0F}, // q
|
| | | {0x00,0x00,0x6E,0x3B,0x33,0x30,0x78,0x00}, // r
|
| | | {0x00,0x00,0x3E,0x60,0x3C,0x06,0x7C,0x00}, // s
|
| | | {0x08,0x18,0x3E,0x18,0x18,0x1A,0x0C,0x00}, // t
|
| | | {0x00,0x00,0x66,0x66,0x66,0x66,0x3B,0x00}, // u
|
| | | {0x00,0x00,0x66,0x66,0x66,0x3C,0x18,0x00}, // v
|
| | | {0x00,0x00,0x63,0x6B,0x7F,0x7F,0x36,0x00}, // w
|
| | | {0x00,0x00,0x63,0x36,0x1C,0x36,0x63,0x00}, // x
|
| | | {0x00,0x00,0x66,0x66,0x66,0x3E,0x06,0x7C}, // y
|
| | | {0x00,0x00,0x7E,0x4C,0x18,0x32,0x7E,0x00}, // z
|
| | | {0x0E,0x18,0x18,0x70,0x18,0x18,0x0E,0x00}, // {
|
| | | {0x0C,0x0C,0x0C,0x00,0x0C,0x0C,0x0C,0x00}, // |
|
| | | {0x70,0x18,0x18,0x0E,0x18,0x18,0x70,0x00}, // }
|
| | | {0x3B,0x6E,0x00,0x00,0x00,0x00,0x00,0x00}, // ~
|
| | | {0x1C,0x36,0x36,0x1C,0x00,0x00,0x00,0x00}// DEL
|
| | | };
|
| | |
|
| | |
|
| | | /**
|
| | | * \file
|
| | | *
|
| | | * Font 10x14 table definition.
|
| | | *
|
| | | */
|
| | |
|
| | | /** Char set of font 10x14 */
|
| | | const uint8_t pCharset10x14[] = {
|
| | | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
| | | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
| | | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xCC,
|
| | | 0xFF, 0xCC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
| | | 0x00, 0x00, 0x00, 0x00, 0xF0, 0x00, 0xF0, 0x00, 0x00, 0x00,
|
| | | 0x00, 0x00, 0xF0, 0x00, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00,
|
| | | 0x0C, 0xC0, 0x0C, 0xC0, 0xFF, 0xFC, 0xFF, 0xFC, 0x0C, 0xC0,
|
| | | 0x0C, 0xC0, 0xFF, 0xFC, 0xFF, 0xFC, 0x0C, 0xC0, 0x0C, 0xC0,
|
| | | 0x0C, 0x60, 0x1E, 0x70, 0x3F, 0x30, 0x33, 0x30, 0xFF, 0xFC,
|
| | | 0xFF, 0xFC, 0x33, 0x30, 0x33, 0xF0, 0x39, 0xE0, 0x18, 0xC0,
|
| | | 0x60, 0x00, 0xF0, 0x0C, 0xF0, 0x3C, 0x60, 0xF0, 0x03, 0xC0,
|
| | | 0x0F, 0x00, 0x3C, 0x18, 0xF0, 0x3C, 0xC0, 0x3C, 0x00, 0x18,
|
| | | 0x3C, 0xF0, 0x7F, 0xF8, 0xC3, 0x1C, 0xC7, 0x8C, 0xCF, 0xCC,
|
| | | 0xDC, 0xEC, 0x78, 0x78, 0x30, 0x30, 0x00, 0xFC, 0x00, 0xCC,
|
| | | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x44, 0x00, 0xEC, 0x00,
|
| | | 0xF8, 0x00, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
| | | 0x00, 0x00, 0x00, 0x00, 0x0F, 0xC0, 0x3F, 0xF0, 0x78, 0x78,
|
| | | 0x60, 0x18, 0xC0, 0x0C, 0xC0, 0x0C, 0x00, 0x00, 0x00, 0x00,
|
| | | 0x00, 0x00, 0x00, 0x00, 0xC0, 0x0C, 0xC0, 0x0C, 0x60, 0x18,
|
| | | 0x78, 0x78, 0x3F, 0xF0, 0x0F, 0xC0, 0x00, 0x00, 0x00, 0x00,
|
| | | 0x0C, 0x60, 0x0E, 0xE0, 0x07, 0xC0, 0x03, 0x80, 0x3F, 0xF8,
|
| | | 0x3F, 0xF8, 0x03, 0x80, 0x07, 0xC0, 0x0E, 0xE0, 0x0C, 0x60,
|
| | | 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x3F, 0xF0,
|
| | | 0x3F, 0xF0, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00,
|
| | | 0x00, 0x44, 0x00, 0xEC, 0x00, 0xF8, 0x00, 0x70, 0x00, 0x00,
|
| | | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
| | | 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00,
|
| | | 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00,
|
| | | 0x00, 0x18, 0x00, 0x3C, 0x00, 0x3C, 0x00, 0x18, 0x00, 0x00,
|
| | | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
| | | 0x00, 0x00, 0x00, 0x0C, 0x00, 0x3C, 0x00, 0xF0, 0x03, 0xC0,
|
| | | 0x0F, 0x00, 0x3C, 0x00, 0xF0, 0x00, 0xC0, 0x00, 0x00, 0x00,
|
| | | 0x3F, 0xF0, 0x7F, 0xF8, 0xE0, 0xFC, 0xC1, 0xCC, 0xC3, 0x8C,
|
| | | 0xC7, 0x0C, 0xCE, 0x0C, 0xFC, 0x1C, 0x7F, 0xF8, 0x3F, 0xF0,
|
| | | 0x00, 0x00, 0x00, 0x00, 0x30, 0x0C, 0x70, 0x0C, 0xFF, 0xFC,
|
| | | 0xFF, 0xFC, 0x00, 0x0C, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x00,
|
| | | 0x30, 0x0C, 0x70, 0x1C, 0xE0, 0x3C, 0xC0, 0x7C, 0xC0, 0xEC,
|
| | | 0xC1, 0xCC, 0xC3, 0x8C, 0xE7, 0x0C, 0x7E, 0x0C, 0x3C, 0x0C,
|
| | | 0x30, 0x30, 0x70, 0x38, 0xE0, 0x1C, 0xC0, 0x0C, 0xC0, 0x0C,
|
| | | 0xC3, 0x0C, 0xC3, 0x0C, 0xE3, 0x1C, 0x7F, 0xF8, 0x3C, 0xF0,
|
| | | 0x03, 0xC0, 0x07, 0xC0, 0x0E, 0xC0, 0x1C, 0xC0, 0x38, 0xC0,
|
| | | 0x70, 0xC0, 0xFF, 0xFC, 0xFF, 0xFC, 0x00, 0xC0, 0x00, 0xC0,
|
| | | 0xFC, 0x30, 0xFC, 0x38, 0xCC, 0x1C, 0xCC, 0x0C, 0xCC, 0x0C,
|
| | | 0xCC, 0x0C, 0xCC, 0x0C, 0xCE, 0x1C, 0xC7, 0xF8, 0xC3, 0xF0,
|
| | | 0x3F, 0xF0, 0x7F, 0xF8, 0xE3, 0x1C, 0xC3, 0x0C, 0xC3, 0x0C,
|
| | | 0xC3, 0x0C, 0xC3, 0x0C, 0xE3, 0x9C, 0x71, 0xF8, 0x30, 0xF0,
|
| | | 0xC0, 0x00, 0xC0, 0x00, 0xC0, 0x00, 0xC0, 0x00, 0xC3, 0xFC,
|
| | | 0xC7, 0xFC, 0xCE, 0x00, 0xDC, 0x00, 0xF8, 0x00, 0xF0, 0x00,
|
| | | 0x3C, 0xF0, 0x7F, 0xF8, 0xE7, 0x9C, 0xC3, 0x0C, 0xC3, 0x0C,
|
| | | 0xC3, 0x0C, 0xC3, 0x0C, 0xE7, 0x9C, 0x7F, 0xF8, 0x3C, 0xF0,
|
| | | 0x3C, 0x00, 0x7E, 0x00, 0xE7, 0x0C, 0xC3, 0x0C, 0xC3, 0x1C,
|
| | | 0xC3, 0x38, 0xC3, 0x70, 0xE7, 0xE0, 0x7F, 0xC0, 0x3F, 0x80,
|
| | | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x60, 0x3C, 0xF0,
|
| | | 0x3C, 0xF0, 0x18, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
| | | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x44, 0x3C, 0xEC,
|
| | | 0x3C, 0xF8, 0x18, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
| | | 0x00, 0x00, 0x03, 0x00, 0x07, 0x80, 0x0F, 0xC0, 0x1C, 0xE0,
|
| | | 0x38, 0x70, 0x70, 0x38, 0xE0, 0x1C, 0xC0, 0x0C, 0x00, 0x00,
|
| | | 0x0C, 0xC0, 0x0C, 0xC0, 0x0C, 0xC0, 0x0C, 0xC0, 0x0C, 0xC0,
|
| | | 0x0C, 0xC0, 0x0C, 0xC0, 0x0C, 0xC0, 0x0C, 0xC0, 0x0C, 0xC0,
|
| | | 0x00, 0x00, 0xC0, 0x0C, 0xE0, 0x1C, 0x70, 0x38, 0x38, 0x70,
|
| | | 0x1C, 0xE0, 0x0F, 0xC0, 0x07, 0x80, 0x03, 0x00, 0x00, 0x00,
|
| | | 0x30, 0x00, 0x70, 0x00, 0xE0, 0x00, 0xC0, 0x00, 0xC1, 0xEC,
|
| | | 0xC3, 0xEC, 0xC3, 0x00, 0xE6, 0x00, 0x7E, 0x00, 0x3C, 0x00,
|
| | | 0x30, 0xF0, 0x71, 0xF8, 0xE3, 0x9C, 0xC3, 0x0C, 0xC3, 0xFC,
|
| | | 0xC3, 0xFC, 0xC0, 0x0C, 0xE0, 0x1C, 0x7F, 0xF8, 0x3F, 0xF0,
|
| | | 0x3F, 0xFC, 0x7F, 0xFC, 0xE0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0,
|
| | | 0xC0, 0xC0, 0xC0, 0xC0, 0xE0, 0xC0, 0x7F, 0xFC, 0x3F, 0xFC,
|
| | | 0xFF, 0xFC, 0xFF, 0xFC, 0xC3, 0x0C, 0xC3, 0x0C, 0xC3, 0x0C,
|
| | | 0xC3, 0x0C, 0xC3, 0x0C, 0xE7, 0x9C, 0x7F, 0xF8, 0x3C, 0xF0,
|
| | | 0x3F, 0xF0, 0x7F, 0xF8, 0xE0, 0x1C, 0xC0, 0x0C, 0xC0, 0x0C,
|
| | | 0xC0, 0x0C, 0xC0, 0x0C, 0xE0, 0x1C, 0x70, 0x38, 0x30, 0x30,
|
| | | 0xFF, 0xFC, 0xFF, 0xFC, 0xC0, 0x0C, 0xC0, 0x0C, 0xC0, 0x0C,
|
| | | 0xC0, 0x0C, 0xC0, 0x0C, 0xE0, 0x1C, 0x7F, 0xF8, 0x3F, 0xF0,
|
| | | 0xFF, 0xFC, 0xFF, 0xFC, 0xC3, 0x0C, 0xC3, 0x0C, 0xC3, 0x0C,
|
| | | 0xC3, 0x0C, 0xC3, 0x0C, 0xC3, 0x0C, 0xC0, 0x0C, 0xC0, 0x0C,
|
| | | 0xFF, 0xFC, 0xFF, 0xFC, 0xC3, 0x00, 0xC3, 0x00, 0xC3, 0x00,
|
| | | 0xC3, 0x00, 0xC3, 0x00, 0xC3, 0x00, 0xC0, 0x00, 0xC0, 0x00,
|
| | | 0x3F, 0xF0, 0x7F, 0xF8, 0xE0, 0x1C, 0xC0, 0x0C, 0xC0, 0x0C,
|
| | | 0xC3, 0x0C, 0xC3, 0x0C, 0xE3, 0x1C, 0x73, 0xF8, 0x33, 0xF0,
|
| | | 0xFF, 0xFC, 0xFF, 0xFC, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00,
|
| | | 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0xFF, 0xFC, 0xFF, 0xFC,
|
| | | 0x00, 0x00, 0x00, 0x00, 0xC0, 0x0C, 0xC0, 0x0C, 0xFF, 0xFC,
|
| | | 0xFF, 0xFC, 0xC0, 0x0C, 0xC0, 0x0C, 0x00, 0x00, 0x00, 0x00,
|
| | | 0x00, 0x30, 0x00, 0x38, 0xC0, 0x1C, 0xC0, 0x0C, 0xC0, 0x0C,
|
| | | 0xC0, 0x1C, 0xFF, 0xF8, 0xFF, 0xF0, 0xC0, 0x00, 0xC0, 0x00,
|
| | | 0xFF, 0xFC, 0xFF, 0xFC, 0x07, 0x80, 0x07, 0x80, 0x0F, 0xC0,
|
| | | 0x1C, 0xE0, 0x38, 0x70, 0x70, 0x38, 0xE0, 0x1C, 0xC0, 0x0C,
|
| | | 0xFF, 0xFC, 0xFF, 0xFC, 0x00, 0x0C, 0x00, 0x0C, 0x00, 0x0C,
|
| | | 0x00, 0x0C, 0x00, 0x0C, 0x00, 0x0C, 0x00, 0x0C, 0x00, 0x0C,
|
| | | 0xFF, 0xFC, 0xFF, 0xFC, 0x70, 0x00, 0x38, 0x00, 0x1F, 0x00,
|
| | | 0x1F, 0x00, 0x38, 0x00, 0x70, 0x00, 0xFF, 0xFC, 0xFF, 0xFC,
|
| | | 0xFF, 0xFC, 0xFF, 0xFC, 0x1C, 0x00, 0x0E, 0x00, 0x07, 0x00,
|
| | | 0x03, 0x80, 0x01, 0xC0, 0x00, 0xE0, 0xFF, 0xFC, 0xFF, 0xFC,
|
| | | 0x3F, 0xF0, 0x7F, 0xF8, 0xE0, 0x1C, 0xC0, 0x0C, 0xC0, 0x0C,
|
| | | 0xC0, 0x0C, 0xC0, 0x0C, 0xE0, 0x1C, 0x7F, 0xF8, 0x3F, 0xF0,
|
| | | 0xFF, 0xFC, 0xFF, 0xFC, 0xC3, 0x00, 0xC3, 0x00, 0xC3, 0x00,
|
| | | 0xC3, 0x00, 0xC3, 0x00, 0xE7, 0x00, 0x7E, 0x00, 0x3C, 0x00,
|
| | | 0x3F, 0xF0, 0x7F, 0xF8, 0xE0, 0x1C, 0xC0, 0x0C, 0xC0, 0xCC,
|
| | | 0xC0, 0xEC, 0xC0, 0x7C, 0xE0, 0x38, 0x7F, 0xFC, 0x3F, 0xEC,
|
| | | 0xFF, 0xFC, 0xFF, 0xFC, 0xC3, 0x00, 0xC3, 0x80, 0xC3, 0x80,
|
| | | 0xC3, 0xC0, 0xC3, 0xC0, 0xE7, 0x70, 0x7E, 0x3C, 0x3C, 0x1C,
|
| | | 0x3C, 0x18, 0x7E, 0x1C, 0xE7, 0x0C, 0xC3, 0x0C, 0xC3, 0x0C,
|
| | | 0xC3, 0x0C, 0xC3, 0x0C, 0xC3, 0x9C, 0xE1, 0xF8, 0x60, 0xF0,
|
| | | 0xC0, 0x00, 0xC0, 0x00, 0xC0, 0x00, 0xC0, 0x00, 0xFF, 0xFC,
|
| | | 0xFF, 0xFC, 0xC0, 0x00, 0xC0, 0x00, 0xC0, 0x00, 0xC0, 0x00,
|
| | | 0xFF, 0xF0, 0xFF, 0xF8, 0x00, 0x1C, 0x00, 0x0C, 0x00, 0x0C,
|
| | | 0x00, 0x0C, 0x00, 0x0C, 0x00, 0x1C, 0xFF, 0xF8, 0xFF, 0xF0,
|
| | | 0xFF, 0xC0, 0xFF, 0xE0, 0x00, 0x70, 0x00, 0x38, 0x00, 0x1C,
|
| | | 0x00, 0x1C, 0x00, 0x38, 0x00, 0x70, 0xFF, 0xE0, 0xFF, 0xC0,
|
| | | 0xFF, 0xF0, 0xFF, 0xF8, 0x00, 0x1C, 0x00, 0x3C, 0x00, 0xF8,
|
| | | 0x00, 0xF8, 0x00, 0x3C, 0x00, 0x1C, 0xFF, 0xF8, 0xFF, 0xF0,
|
| | | 0xF0, 0x3C, 0xF8, 0x7C, 0x1C, 0xE0, 0x0F, 0xC0, 0x07, 0x80,
|
| | | 0x07, 0x80, 0x0F, 0xC0, 0x1C, 0xE0, 0xF8, 0x7C, 0xF0, 0x3C,
|
| | | 0xFC, 0x00, 0xFE, 0x00, 0x07, 0x00, 0x03, 0x80, 0x01, 0xFC,
|
| | | 0x01, 0xFC, 0x03, 0x80, 0x07, 0x00, 0xFE, 0x00, 0xFC, 0x00,
|
| | | 0xC0, 0x3C, 0xC0, 0x7C, 0xC0, 0xEC, 0xC1, 0xCC, 0xC3, 0x8C,
|
| | | 0xC7, 0x0C, 0xCE, 0x0C, 0xDC, 0x0C, 0xF8, 0x0C, 0xF0, 0x0C,
|
| | | 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFC, 0xFF, 0xFC, 0xC0, 0x0C,
|
| | | 0xC0, 0x0C, 0xC0, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
| | | 0x30, 0x00, 0x30, 0x00, 0x0C, 0x00, 0x0C, 0x00, 0x03, 0x00,
|
| | | 0x03, 0x00, 0x00, 0xC0, 0x00, 0xC0, 0x00, 0x30, 0x00, 0x30,
|
| | | 0x00, 0x00, 0x00, 0x00, 0xC0, 0x0C, 0xC0, 0x0C, 0xC0, 0x0C,
|
| | | 0xFF, 0xFC, 0xFF, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
| | | 0x0C, 0x00, 0x1C, 0x00, 0x38, 0x00, 0x70, 0x00, 0xE0, 0x00,
|
| | | 0xE0, 0x00, 0x70, 0x00, 0x38, 0x00, 0x1C, 0x00, 0x0C, 0x00,
|
| | | 0x00, 0x0C, 0x00, 0x0C, 0x00, 0x0C, 0x00, 0x0C, 0x00, 0x0C,
|
| | | 0x00, 0x0C, 0x00, 0x0C, 0x00, 0x0C, 0x00, 0x0C, 0x00, 0x0C,
|
| | | 0x00, 0x00, 0x00, 0x00, 0xC0, 0x00, 0xE0, 0x00, 0x70, 0x00,
|
| | | 0x38, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
| | | 0x00, 0x30, 0x06, 0x78, 0x0E, 0xFC, 0x0C, 0xCC, 0x0C, 0xCC,
|
| | | 0x0C, 0xCC, 0x0C, 0xCC, 0x0E, 0xCC, 0x07, 0xFC, 0x03, 0xF8,
|
| | | 0xFF, 0xFC, 0xFF, 0xFC, 0x03, 0x0C, 0x03, 0x0C, 0x03, 0x0C,
|
| | | 0x03, 0x0C, 0x03, 0x0C, 0x03, 0x9C, 0x01, 0xF8, 0x00, 0xF0,
|
| | | 0x03, 0xF0, 0x07, 0xF8, 0x0E, 0x1C, 0x0C, 0x0C, 0x0C, 0x0C,
|
| | | 0x0C, 0x0C, 0x0C, 0x0C, 0x0E, 0x1C, 0x07, 0x38, 0x03, 0x30,
|
| | | 0x00, 0xF0, 0x01, 0xF8, 0x03, 0x9C, 0x03, 0x0C, 0x03, 0x0C,
|
| | | 0x03, 0x0C, 0x03, 0x0C, 0x03, 0x0C, 0xFF, 0xFC, 0xFF, 0xFC,
|
| | | 0x03, 0xF0, 0x07, 0xF8, 0x0E, 0xDC, 0x0C, 0xCC, 0x0C, 0xCC,
|
| | | 0x0C, 0xCC, 0x0C, 0xCC, 0x0E, 0xDC, 0x07, 0xD8, 0x03, 0x90,
|
| | | 0x00, 0x00, 0x03, 0x00, 0x3F, 0xFC, 0x7F, 0xFC, 0xE3, 0x00,
|
| | | 0xE3, 0x00, 0x70, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00,
|
| | | 0x03, 0x18, 0x07, 0x9C, 0x0F, 0xCC, 0x0C, 0xCC, 0x0C, 0xCC,
|
| | | 0x0C, 0xCC, 0x0C, 0xCC, 0x0C, 0xDC, 0x0F, 0xF8, 0x07, 0xF0,
|
| | | 0xFF, 0xFC, 0xFF, 0xFC, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00,
|
| | | 0x03, 0x00, 0x03, 0x80, 0x01, 0xFC, 0x00, 0xFC, 0x00, 0x00,
|
| | | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1B, 0xFC,
|
| | | 0x1B, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
| | | 0x00, 0x00, 0x00, 0x30, 0x00, 0x38, 0x00, 0x1C, 0x00, 0x0C,
|
| | | 0x00, 0x0C, 0x00, 0x1C, 0xCF, 0xF8, 0xCF, 0xF0, 0x00, 0x00,
|
| | | 0x00, 0x00, 0xFF, 0xFC, 0xFF, 0xFC, 0x00, 0xE0, 0x01, 0xE0,
|
| | | 0x03, 0xF0, 0x07, 0x38, 0x0E, 0x1C, 0x0C, 0x0C, 0x00, 0x00,
|
| | | 0x00, 0x00, 0x00, 0x00, 0xC0, 0x0C, 0xC0, 0x0C, 0xFF, 0xFC,
|
| | | 0xFF, 0xFC, 0x00, 0x0C, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x00,
|
| | | 0x0F, 0xFC, 0x0F, 0xFC, 0x0E, 0x00, 0x07, 0x00, 0x03, 0xC0,
|
| | | 0x03, 0xC0, 0x07, 0x00, 0x0E, 0x00, 0x0F, 0xFC, 0x0F, 0xFC,
|
| | | 0x0F, 0xFC, 0x0F, 0xFC, 0x03, 0x00, 0x07, 0x00, 0x0E, 0x00,
|
| | | 0x0C, 0x00, 0x0C, 0x00, 0x0E, 0x00, 0x07, 0xFC, 0x03, 0xFC,
|
| | | 0x03, 0xF0, 0x07, 0xF8, 0x0E, 0x1C, 0x0C, 0x0C, 0x0C, 0x0C,
|
| | | 0x0C, 0x0C, 0x0C, 0x0C, 0x0E, 0x1C, 0x07, 0xF8, 0x03, 0xF0,
|
| | | 0x0F, 0xFC, 0x0F, 0xFC, 0x0C, 0xC0, 0x0C, 0xC0, 0x0C, 0xC0,
|
| | | 0x0C, 0xC0, 0x0C, 0xC0, 0x0F, 0xC0, 0x07, 0x80, 0x03, 0x00,
|
| | | 0x03, 0x00, 0x07, 0x80, 0x0F, 0xC0, 0x0C, 0xC0, 0x0C, 0xC0,
|
| | | 0x0C, 0xC0, 0x0C, 0xC0, 0x0C, 0xC0, 0x0F, 0xFC, 0x0F, 0xFC,
|
| | | 0x0F, 0xFC, 0x0F, 0xFC, 0x03, 0x80, 0x07, 0x00, 0x0E, 0x00,
|
| | | 0x0C, 0x00, 0x0C, 0x00, 0x0E, 0x00, 0x07, 0x00, 0x03, 0x00,
|
| | | 0x03, 0x18, 0x07, 0x9C, 0x0F, 0xCC, 0x0C, 0xCC, 0x0C, 0xCC,
|
| | | 0x0C, 0xCC, 0x0C, 0xCC, 0x0C, 0xFC, 0x0E, 0x78, 0x06, 0x30,
|
| | | 0x00, 0x00, 0x0C, 0x00, 0x0C, 0x00, 0xFF, 0xF0, 0xFF, 0xF8,
|
| | | 0x0C, 0x1C, 0x0C, 0x1C, 0x0C, 0x38, 0x0C, 0x30, 0x00, 0x00,
|
| | | 0x0F, 0xF0, 0x0F, 0xF8, 0x00, 0x1C, 0x00, 0x0C, 0x00, 0x0C,
|
| | | 0x00, 0x0C, 0x00, 0x0C, 0x00, 0x1C, 0x0F, 0xF8, 0x0F, 0xF0,
|
| | | 0x0F, 0xC0, 0x0F, 0xE0, 0x00, 0x70, 0x00, 0x38, 0x00, 0x1C,
|
| | | 0x00, 0x1C, 0x00, 0x38, 0x00, 0x70, 0x0F, 0xE0, 0x0F, 0xC0,
|
| | | 0x0F, 0xF0, 0x0F, 0xF8, 0x00, 0x1C, 0x00, 0x1C, 0x00, 0xF8,
|
| | | 0x00, 0xF8, 0x00, 0x1C, 0x00, 0x1C, 0x0F, 0xF8, 0x0F, 0xF0,
|
| | | 0x0C, 0x0C, 0x0E, 0x1C, 0x07, 0x38, 0x03, 0xF0, 0x01, 0xE0,
|
| | | 0x01, 0xE0, 0x03, 0xF0, 0x07, 0x38, 0x0E, 0x1C, 0x0C, 0x0C,
|
| | | 0x0C, 0x00, 0x0E, 0x00, 0x07, 0x0C, 0x03, 0x9C, 0x01, 0xF8,
|
| | | 0x01, 0xF0, 0x03, 0x80, 0x07, 0x00, 0x0E, 0x00, 0x0C, 0x00,
|
| | | 0x0C, 0x0C, 0x0C, 0x1C, 0x0C, 0x3C, 0x0C, 0x7C, 0x0C, 0xEC,
|
| | | 0x0D, 0xCC, 0x0F, 0x8C, 0x0F, 0x0C, 0x0E, 0x0C, 0x0C, 0x0C,
|
| | | 0x00, 0x00, 0x03, 0x00, 0x07, 0x80, 0x3F, 0xF0, 0x7C, 0xF8,
|
| | | 0xE0, 0x1C, 0xC0, 0x0C, 0xC0, 0x0C, 0xC0, 0x0C, 0x00, 0x00,
|
| | | 0x03, 0x0C, 0x03, 0x0C, 0x3F, 0xFC, 0x7F, 0xFC, 0xE3, 0x0C,
|
| | | 0xC3, 0x0C, 0xC0, 0x0C, 0xE0, 0x0C, 0x70, 0x0C, 0x30, 0x0C,
|
| | | 0x00, 0x00, 0xC0, 0x0C, 0xC0, 0x0C, 0xC0, 0x0C, 0xE0, 0x1C,
|
| | | 0x7C, 0xF8, 0x3F, 0xF0, 0x07, 0x80, 0x03, 0x00, 0x00, 0x00,
|
| | | 0xC0, 0x00, 0xC0, 0x00, 0xC0, 0x00, 0xC0, 0x00, 0xC0, 0x00,
|
| | | 0xC0, 0x00, 0xC0, 0x00, 0xC0, 0x00, 0xC0, 0x00, 0xC0, 0x00,
|
| | | 0xFF, 0xFC, 0xFF, 0xFC, 0xFF, 0xFC, 0xFF, 0xFC, 0xFF, 0xFC,
|
| | | 0xFF, 0xFC, 0xFF, 0xFC, 0xFF, 0xFC, 0xFF, 0xFC, 0xFF, 0xFC
|
| | | } ;
|
New file |
| | |
| | | /* ----------------------------------------------------------------------------
|
| | | * SAM Software Package License
|
| | | * ----------------------------------------------------------------------------
|
| | | * Copyright (c) 2011, Atmel Corporation
|
| | | *
|
| | | * All rights reserved.
|
| | | *
|
| | | * Redistribution and use in source and binary forms, with or without
|
| | | * modification, are permitted provided that the following conditions are met:
|
| | | *
|
| | | * - Redistributions of source code must retain the above copyright notice,
|
| | | * this list of conditions and the disclaimer below.
|
| | | *
|
| | | * Atmel's name may not be used to endorse or promote products derived from
|
| | | * this software without specific prior written permission.
|
| | | *
|
| | | * DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR
|
| | | * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
| | | * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE
|
| | | * DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,
|
| | | * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
| | | * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
|
| | | * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
| | | * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
| | | * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
|
| | | * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
| | | * ----------------------------------------------------------------------------
|
| | | */
|
| | |
|
| | | /**
|
| | | * \file
|
| | | *
|
| | | * Font 10x14 table definition.
|
| | | *
|
| | | */
|
| | |
|
| | | #ifndef _LCD_FONT_10x14_
|
| | | #define _LCD_FONT_10x14_
|
| | |
|
| | | #include <stdint.h>
|
| | |
|
| | | #ifdef __cplusplus
|
| | | extern "C" {
|
| | | #endif
|
| | | /** Char set of font 10x14 */
|
| | | extern const uint8_t pCharset10x14[] ;
|
| | | #ifdef __cplusplus
|
| | | }
|
| | | #endif
|
| | | #endif /* #ifdef _LCD_FONT_10x14_ */
|
New file |
| | |
| | | #ifndef _GIMP_IMAGE_
|
| | | #define _GIMP_IMAGE_
|
| | |
|
| | | #include <stdint.h>
|
| | |
|
| | | typedef struct _SGIMPImage
|
| | | {
|
| | | uint32_t dwWidth;
|
| | | uint32_t dwHeight;
|
| | | uint32_t dwBytes_per_pixel; /* 3:RGB, 4:RGBA */ |
| | | uint8_t* pucPixel_data ;
|
| | | } SGIMPImage ;
|
| | |
|
| | | #endif // _GIMP_IMAGE_
|
New file |
| | |
| | | /* ----------------------------------------------------------------------------
|
| | | * SAM Software Package License
|
| | | * ----------------------------------------------------------------------------
|
| | | * Copyright (c) 2011, Atmel Corporation
|
| | | *
|
| | | * All rights reserved.
|
| | | *
|
| | | * Redistribution and use in source and binary forms, with or without
|
| | | * modification, are permitted provided that the following conditions are met:
|
| | | *
|
| | | * - Redistributions of source code must retain the above copyright notice,
|
| | | * this list of conditions and the disclaimer below.
|
| | | *
|
| | | * Atmel's name may not be used to endorse or promote products derived from
|
| | | * this software without specific prior written permission.
|
| | | *
|
| | | * DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR
|
| | | * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
| | | * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE
|
| | | * DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,
|
| | | * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
| | | * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
|
| | | * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
| | | * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
| | | * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
|
| | | * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
| | | * ----------------------------------------------------------------------------
|
| | | */
|
| | |
|
| | | /**
|
| | | * \file
|
| | | *
|
| | | * Implementation of ILI9325 driver.
|
| | | *
|
| | | */
|
| | |
|
| | | /*----------------------------------------------------------------------------
|
| | | * Headers
|
| | | *----------------------------------------------------------------------------*/
|
| | |
|
| | | #include <string.h>
|
| | | #include <stdio.h>
|
| | | #include <stdint.h>
|
| | | #include "lcd_r61509v.h"
|
| | | #include "stm32f10x.h"
|
| | | #include "stm32f10x_fsmc.h"
|
| | | #include "stm32v5_systick.h"
|
| | | #include "lcd_r61509v.h"
|
| | |
|
| | | /*----------------------------------------------------------------------------
|
| | | * Local variables
|
| | | *----------------------------------------------------------------------------*/
|
| | |
|
| | | /* Pixel cache used to speed up communication */
|
| | | #define LCD_DATA_CACHE_SIZE BOARD_LCD_WIDTH
|
| | | static LcdColor_t gLcdPixelCache[LCD_DATA_CACHE_SIZE];
|
| | |
|
| | |
|
| | | /* ³õʼ»¯LCDËùʹÓõĹܽÅΪGPIOģʽ»òFSMCģʽ */
|
| | | static void lcd_gpio_init(void)
|
| | | {
|
| | | GPIO_InitTypeDef GPIO_InitStructure;
|
| | | |
| | | RCC_AHBPeriphClockCmd(RCC_AHBPeriph_FSMC, ENABLE); /* ʹÄÜFSMCÍâÉèʱÖÓ */
|
| | | RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD|RCC_APB2Periph_GPIOE, ENABLE); /* ʹÄÜLCD±³¹âºÍ¸´Î»¹Ü½ÅʱÖÓ */
|
| | |
|
| | | GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
|
| | | GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
|
| | |
|
| | | GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13; /* LCD±³¹â¿ØÖ¹¹Ü½Å PD13 */ |
| | | GPIO_Init(GPIOD, &GPIO_InitStructure);
|
| | | |
| | | GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1 ; /* LCD¸´Î»¿ØÖƹܽŠPE1 */ |
| | | GPIO_Init(GPIOE, &GPIO_InitStructure);
|
| | | |
| | | /* ¸´ÓÃGPIODµÄGPIO¶Ë¿ÚΪFSMCģʽ,²Î¿¼datasheet <Table 5. High-density STM32F103xx pin definitions> */
|
| | | GPIO_InitStructure.GPIO_Pin = GPIO_Pin_14 /* PD14 - D0 */
|
| | | | GPIO_Pin_15 /* PD15 - D1 */ |
| | | | GPIO_Pin_0 /* PD0 - D2 */ |
| | | | GPIO_Pin_1 /* PD1 - D3 */
|
| | | | GPIO_Pin_8 /* PD8 - D13 */
|
| | | | GPIO_Pin_9 /* PD9 - D14 */
|
| | | | GPIO_Pin_10 /* PD10 - D15 */ |
| | | | GPIO_Pin_4 /* PD4 - nOE Êä³öʹÄÜ */
|
| | | | GPIO_Pin_5 /* PD5 - nEW дʹÄÜ */ |
| | | | GPIO_Pin_7 /* PD7 - FSMC_NE1 LCDƬѡ */
|
| | | | GPIO_Pin_11; /* PD11 - A16(LCD RS) LCDÖ¸Áî/Êý¾ÝÇл» */ |
| | | GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
|
| | | GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
|
| | | GPIO_Init(GPIOD, &GPIO_InitStructure); |
| | |
|
| | | /* ¸´ÓÃGPIOEµÄGPIO¶Ë¿ÚΪFSMCģʽ,²Î¿¼datasheet <Table 5. High-density STM32F103xx pin definitions> */
|
| | | GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7 /* PE7 - D4 */
|
| | | | GPIO_Pin_8 /* PE8 - D5 */
|
| | | | GPIO_Pin_9 /* PE9 - D6 */
|
| | | | GPIO_Pin_10 /* PE10 - D7 */ |
| | | | GPIO_Pin_11 /* PE11 - D8 */
|
| | | | GPIO_Pin_12 /* PE12 - D9 */
|
| | | | GPIO_Pin_13 /* PE13 - D10 */
|
| | | | GPIO_Pin_14 /* PE14 - D11 */
|
| | | | GPIO_Pin_15; /* PE15 - D12 */ |
| | | GPIO_Init(GPIOE, &GPIO_InitStructure); |
| | | |
| | | /* ´ò¿ªLCD±³¹â */
|
| | | GPIO_SetBits(GPIOD, GPIO_Pin_13);
|
| | | }
|
| | |
|
| | |
|
| | | /* ³õʼ»¯FSMC¹¤×÷ģʽ¼°ÆäÅäÖà */
|
| | | static void lcd_fsmc_init(void)
|
| | | {
|
| | | FSMC_NORSRAMInitTypeDef FSMC_NORSRAMInitStructure; |
| | | FSMC_NORSRAMTimingInitTypeDef p;
|
| | | |
| | | /* FSMC½Ó¿ÚÌØÐÔÅäÖòÎÊý,¶ÔÏÂÃæ¸÷³ÉÔ±¸³µÄÖµX±íʾX¸öʱÖÓÖÜÆÚ£¬ËüµÄʱÖÓÊÇÓÉHCLK¾¹ý
|
| | | FSMC_CLKDivisionÉèÖÃµÄ·ÖÆµ²ÎÊý·ÖƵºóµÃµ½¡£*/
|
| | | p.FSMC_AddressSetupTime = 0x02; /* µØÖ·½¨Á¢Ê±¼ä */
|
| | | p.FSMC_AddressHoldTime = 0x00; /* µØÖ·±£³Öʱ¼ä */
|
| | | p.FSMC_DataSetupTime = 0x05; /* Êý¾Ý½¨Á¢Ê±¼ä */
|
| | | p.FSMC_DataLatency = 0x00; /* Êý¾Ý±£³Öʱ¼ä */ |
| | | p.FSMC_BusTurnAroundDuration = 0x00;/* ×ÜÏ߻ָ´Ê±¼ä */
|
| | | p.FSMC_CLKDivision = 0x00; /* ʱÖÓ·ÖÆµ */
|
| | | /*FSMC_AccessMode: ÔÚµØÖ·Ïß²»¸´ÓõÄÇé¿öÏ£¬ABCDģʽµÄÇø±ð²»´ó¡£¸ÃÅäÖÃÖ»ÔÚÀ©Õ¹Ä£Ê½ÓÐЧ */ |
| | | p.FSMC_AccessMode = FSMC_AccessMode_B; |
| | | |
| | | /* LCDµÄCSÁ¬µÄPD7(NE1),ËùÒÔÎÒÃÇʹÓõÄÊÇNorflashµÄBank1 */
|
| | | FSMC_NORSRAMInitStructure.FSMC_Bank = FSMC_Bank1_NORSRAM1;
|
| | | /* PD11Á¬µØÖ·ÏßA16, ʵ¼ÊÉÏֻʹÓÃÁËÒ»ÌõµØÖ·Ïߣ¬ÒòΪI/O×ÊÔ´²»½ôÕÅ£¬ËùÒÔÅäÖõØÖ·ÏߺÍÊý¾ÝÏß²»¸´Óà */
|
| | | FSMC_NORSRAMInitStructure.FSMC_DataAddressMux = FSMC_DataAddressMux_Disable;
|
| | | /* ´æ´¢Æ÷ÀàÐÍΪNorflashÀàÐÍ,ËüµÄʱÐòÓë8080×ÜÏ߸ü½Ó½ü,¸ÃÅäÖû¹¿ÉÒÔΪPSRAMºÎSRAMģʽ.*/
|
| | | FSMC_NORSRAMInitStructure.FSMC_MemoryType = FSMC_MemoryType_NOR;
|
| | | /* Êý¾Ýλ¿íΪ16λ */
|
| | | FSMC_NORSRAMInitStructure.FSMC_MemoryDataWidth = FSMC_MemoryDataWidth_16b;
|
| | | /* ʹÓÃÒ첽дģʽ£¬½ûֹͻ·¢Ä£Ê½£»8080×ÜÏ߸üÊʺÏÒ첽ģʽ¡£ */
|
| | | FSMC_NORSRAMInitStructure.FSMC_BurstAccessMode = FSMC_BurstAccessMode_Disable;
|
| | | /* ±¾³ÉÔ±Ö»ÔÚÍ»·¢Ä£Ê½ÏÂÓÐЧ£¬µÈ´ýÐźż«ÐÔΪµÍ */
|
| | | FSMC_NORSRAMInitStructure.FSMC_WaitSignalPolarity = FSMC_WaitSignalPolarity_Low;
|
| | | /* ±¾³ÉÔ±Ö»ÔÚÍ»·¢Ä£Ê½ÏÂÓÐЧ£¬½ûÖ¹·Ç¶ÔÆëÍ»·¢Ä£Ê½ */
|
| | | FSMC_NORSRAMInitStructure.FSMC_WrapMode = FSMC_WrapMode_Disable;
|
| | | /* ±¾³ÉÔ±Ö»ÔÚÍ»·¢Ä£Ê½ÏÂÓÐЧ£¬NWAITÐźÅÔÚʲôʱÆÚ²úÉú */
|
| | | FSMC_NORSRAMInitStructure.FSMC_WaitSignalActive = FSMC_WaitSignalActive_BeforeWaitState;
|
| | | /* ±¾³ÉÔ±Ö»ÔÚÍ»·¢Ä£Ê½ÏÂÓÐЧ£¬½ûÓÃNWAITÐźŠ*/
|
| | | FSMC_NORSRAMInitStructure.FSMC_WaitSignal = FSMC_WaitSignal_Disable; |
| | | /* ±¾³ÉÔ±Ö»ÔÚÍ»·¢Ä£Ê½ÏÂÓÐЧ£¬½ûֹͻ·¢Ð´²Ù×÷ */
|
| | | FSMC_NORSRAMInitStructure.FSMC_WriteBurst = FSMC_WriteBurst_Disable; |
| | | |
| | | /* дʹÄÜ£¬Èç¹û½ûÖ¹ÁËд²Ù×÷£¬FSMC²»»á²úÉúдʱÐò£¬µ«¿ÉÒÔ¶Á³öÊý¾Ý */
|
| | | FSMC_NORSRAMInitStructure.FSMC_WriteOperation = FSMC_WriteOperation_Enable;
|
| | | /* ½ûÖ¹À©Õ¹Ä£Ê½£¬À©Õ¹Ä£Ê½¿ÉÒÔʹÓöÀÁ¢µÄ¶Á¡¢Ð´Ä£Ê½ */
|
| | | FSMC_NORSRAMInitStructure.FSMC_ExtendedMode = FSMC_ExtendedMode_Disable;
|
| | |
|
| | | /* ÅäÖöÁдʱÐò£¡Èç¹ûʹÓÃÁËÀ©Õ¹Ä£Ê½£¬ÔòǰÕßÅäÖõÄÊǶÁʱÐò£¬ºóÕßÅäÖõÄÊÇдʱÐò¡£
|
| | | * Èç¹û½ûÖ¹ÁËÀ©Õ¹Ä£Ê½£¬Ôò¶ÁдʱÐò¶¼Ê¹ÓÃFSMC_ReadWriteTimingStruct½á¹¹ÌåÖеIJÎÊý¡£
|
| | | */
|
| | | FSMC_NORSRAMInitStructure.FSMC_ReadWriteTimingStruct = &p;
|
| | | FSMC_NORSRAMInitStructure.FSMC_WriteTimingStruct = &p;
|
| | |
|
| | | FSMC_NORSRAMInit(&FSMC_NORSRAMInitStructure); |
| | | FSMC_NORSRAMCmd(FSMC_Bank1_NORSRAM1, ENABLE); /* ʹÄÜFSMC Bank1_SRAM Bank */
|
| | | }
|
| | |
|
| | | void lcd_reset(void)
|
| | | {
|
| | | GPIO_ResetBits(GPIOE, GPIO_Pin_1); /* PE1 ΪLCD ¸´Î»ÐźŠ*/
|
| | | msleep(500); |
| | | GPIO_SetBits(GPIOE, GPIO_Pin_1); |
| | | msleep(500);
|
| | | }
|
| | |
|
| | |
|
| | | /*----------------------------------------------------------------------------
|
| | | * Export functions
|
| | | *----------------------------------------------------------------------------*/
|
| | |
|
| | | /**
|
| | | * \brief Write data to LCD Register.
|
| | | *
|
| | | * \param reg Register address.
|
| | | * \param data Data to be written.
|
| | | */
|
| | | void LCD_WriteReg( uint16_t reg, uint16_t data )
|
| | | {
|
| | | LCD_IR() = 0;
|
| | | LCD_IR() = reg;
|
| | | LCD_D() = data;
|
| | | }
|
| | |
|
| | | /**
|
| | | * \brief Read data from LCD Register.
|
| | | *
|
| | | * \param reg Register address.
|
| | | *
|
| | | * \return Readed data.
|
| | | */
|
| | | uint16_t LCD_ReadReg( uint16_t reg )
|
| | | {
|
| | | uint16_t value;
|
| | | |
| | | LCD_IR() = 0;
|
| | | LCD_IR() = reg;
|
| | | value = LCD_D();
|
| | |
|
| | | return value;
|
| | | }
|
| | |
|
| | | /**
|
| | | * \brief Write two byte to LCD GRAM.
|
| | | *
|
| | | * \param color 16-bits RGB color.
|
| | | */
|
| | | extern void LCD_WriteRAMWord( uint16_t wColor )
|
| | | {
|
| | | LCD_D() = wColor ;
|
| | | }
|
| | |
|
| | | /**
|
| | | * \brief Prepare to write GRAM data.
|
| | | */
|
| | | extern void LCD_WriteRAM_Prepare( void )
|
| | | {
|
| | | LCD_IR() = 0 ;
|
| | | LCD_IR() = R61509V_R202H ; /* Write Data to GRAM (R202h) */
|
| | | }
|
| | |
|
| | | /**
|
| | | * \brief Write data to LCD GRAM.
|
| | | *
|
| | | * \param color 16-bits RGB color.
|
| | | */
|
| | | extern void LCD_WriteRAM( LcdColor_t wColor )
|
| | | {
|
| | | LCD_WriteRAMWord(wColor);
|
| | | }
|
| | |
|
| | | /**
|
| | | * \brief Write mutiple data in buffer to LCD controller.
|
| | | *
|
| | | * \param pBuf data buffer.
|
| | | * \param size size in pixels.
|
| | | */
|
| | | static void LCD_WriteRAMBuffer(const LcdColor_t *pBuf, uint32_t size)
|
| | | {
|
| | | uint32_t addr ;
|
| | |
|
| | | for ( addr = 0 ; addr < size ; addr++ )
|
| | | {
|
| | | LCD_WriteRAM(pBuf[addr]);
|
| | | }
|
| | | }
|
| | |
|
| | | /**
|
| | | * \brief Prepare to read GRAM data.
|
| | | */
|
| | | extern void LCD_ReadRAM_Prepare( void )
|
| | | {
|
| | | LCD_IR() = 0 ;
|
| | | LCD_IR() = R61509V_R202H ; /* Read Data from GRAM (R202h) */
|
| | | }
|
| | |
|
| | | /**
|
| | | * \brief Read data to LCD GRAM.
|
| | | *
|
| | | * \note Because pixel data LCD GRAM is 18-bits, so convertion to RGB 24-bits
|
| | | * will cause low color bit lose.
|
| | | *
|
| | | * \return color 24-bits RGB color.
|
| | | */
|
| | | extern uint32_t LCD_ReadRAM( void )
|
| | | {
|
| | | uint16_t color;
|
| | |
|
| | | color = LCD_D(); /* dummy read */
|
| | | color = LCD_D(); /* data */
|
| | |
|
| | | return color;
|
| | | }
|
| | |
|
| | | /*----------------------------------------------------------------------------
|
| | | * Basic R61509V primitives
|
| | | *----------------------------------------------------------------------------*/
|
| | |
|
| | |
|
| | | /**
|
| | | * \brief Check Box coordinates. Return upper left and bottom right coordinates.
|
| | | *
|
| | | * \param pX1 X-coordinate of upper-left corner on LCD.
|
| | | * \param pY1 Y-coordinate of upper-left corner on LCD.
|
| | | * \param pX2 X-coordinate of lower-right corner on LCD.
|
| | | * \param pY2 Y-coordinate of lower-right corner on LCD.
|
| | | */
|
| | | static void CheckBoxCoordinates( uint32_t *pX1, uint32_t *pY1, uint32_t *pX2, uint32_t *pY2 )
|
| | | {
|
| | | uint32_t dw;
|
| | |
|
| | | if ( *pX1 >= BOARD_LCD_WIDTH )
|
| | | {
|
| | | *pX1 = BOARD_LCD_WIDTH-1 ;
|
| | | }
|
| | | if ( *pX2 >= BOARD_LCD_WIDTH )
|
| | | {
|
| | | *pX2 = BOARD_LCD_WIDTH-1 ;
|
| | | }
|
| | | if ( *pY1 >= BOARD_LCD_HEIGHT )
|
| | | {
|
| | | *pY1 = BOARD_LCD_HEIGHT-1 ;
|
| | | }
|
| | | if ( *pY2 >= BOARD_LCD_HEIGHT )
|
| | | {
|
| | | *pY2 = BOARD_LCD_HEIGHT-1 ;
|
| | | }
|
| | | if (*pX1 > *pX2)
|
| | | {
|
| | | dw = *pX1;
|
| | | *pX1 = *pX2;
|
| | | *pX2 = dw;
|
| | | }
|
| | | if (*pY1 > *pY2)
|
| | | {
|
| | | dw = *pY1;
|
| | | *pY1 = *pY2;
|
| | | *pY2 = dw;
|
| | | }
|
| | | }
|
| | |
|
| | | /**
|
| | | * \brief Initialize the LCD controller.
|
| | | */
|
| | | uint32_t LCD_Initialize( void )
|
| | | {
|
| | | uint16_t chipid ;
|
| | | |
| | | lcd_gpio_init(); /* ³õʼ»¯LCDʹÓõ½µÄ¹Ü½Å */
|
| | | lcd_fsmc_init(); /* ³õʼ»¯FSMCÅäÖà */
|
| | | lcd_reset();
|
| | |
|
| | | /* Check R61509V chipid */
|
| | | chipid = LCD_ReadReg( R61509V_R000H ) ; /* Driver Code Read (R000h) */
|
| | | if ( chipid != R61509V_DEVICE_CODE )
|
| | | {
|
| | | //printf( "Read R61509V chip ID (0x%04x) error, skip initialization.\r\n", chipid ) ;
|
| | | return 1 ;
|
| | | } |
| | |
|
| | | /* Register settins reference to R61509 LCD drvier datasheet <CPT 3.0¡±(C030JB) Initial Code> */
|
| | | |
| | | /* Device Code Read */
|
| | | LCD_WriteReg(R61509V_R000H, 0x0000);
|
| | | LCD_WriteReg(R61509V_R000H, 0x0000);
|
| | | LCD_WriteReg(R61509V_R000H, 0x0000);
|
| | | LCD_WriteReg(R61509V_R000H, 0x0000);
|
| | | |
| | | msleep(10);
|
| | | |
| | | /* Base Image Number of Line */
|
| | | LCD_WriteReg(R61509V_R400H, 0x6200); |
| | | /* Display Control 2 */
|
| | | LCD_WriteReg(R61509V_R008H, 0x0808); |
| | | |
| | | /* Gamma Control settings */
|
| | | LCD_WriteReg(R61509V_R300H, 0x0C00);
|
| | | LCD_WriteReg(R61509V_R301H, 0x5A0B);
|
| | | LCD_WriteReg(R61509V_R302H, 0x0906);
|
| | | LCD_WriteReg(R61509V_R303H, 0x1017);
|
| | | LCD_WriteReg(R61509V_R304H, 0x2300);
|
| | | LCD_WriteReg(R61509V_R305H, 0x1700);
|
| | | LCD_WriteReg(R61509V_R306H, 0x6309);
|
| | | LCD_WriteReg(R61509V_R307H, 0x0C09);
|
| | | LCD_WriteReg(R61509V_R308H, 0x100C);
|
| | | LCD_WriteReg(R61509V_R309H, 0x2232);
|
| | | |
| | | /* Panel Interface Control settings */
|
| | | LCD_WriteReg(R61509V_R010H, 0x0016);//69.5Hz
|
| | | LCD_WriteReg(R61509V_R011H, 0x0101);//
|
| | | LCD_WriteReg(R61509V_R012H, 0x0000);//
|
| | | LCD_WriteReg(R61509V_R013H, 0x0001);//
|
| | | |
| | | /* Power Control settings */
|
| | | LCD_WriteReg(R61509V_R100H, 0x0330);//BT,AP
|
| | | LCD_WriteReg(R61509V_R101H, 0x0237);//DC0,DC1,VC
|
| | | LCD_WriteReg(R61509V_R103H, 0x0F00);//VDV
|
| | | |
| | | LCD_WriteReg(R61509V_R280H, 0x6100);//VCM
|
| | | LCD_WriteReg(R61509V_R102H, 0xC1B0);//VRH[11000],VCMR[1],PSON,PON[11]
|
| | | msleep(10);
|
| | |
|
| | | LCD_WriteReg(R61509V_R001H, 0x00100);
|
| | | LCD_WriteReg(R61509V_R002H, 0x00100);
|
| | | LCD_WriteReg(R61509V_R003H, 0x01030);
|
| | | LCD_WriteReg(R61509V_R009H, 0x00001);
|
| | | LCD_WriteReg(R61509V_R00CH, 0x00000);
|
| | | LCD_WriteReg(R61509V_R090H, 0x08000);
|
| | | LCD_WriteReg(R61509V_R00FH, 0x00000);
|
| | | LCD_WriteReg(R61509V_R210H, 0x00000);
|
| | | LCD_WriteReg(R61509V_R211H, 0x000EF);
|
| | | LCD_WriteReg(R61509V_R212H, 0x00000);
|
| | | LCD_WriteReg(R61509V_R213H, 0x0018F);//432=1AF, 400=18F
|
| | | LCD_WriteReg(R61509V_R500H, 0x00000);
|
| | | LCD_WriteReg(R61509V_R501H, 0x00000);
|
| | | LCD_WriteReg(R61509V_R502H, 0x0005F);
|
| | | |
| | | LCD_WriteReg(R61509V_R401H, 0x00001);
|
| | | LCD_WriteReg(R61509V_R404H, 0x00000);
|
| | | msleep(100);
|
| | |
|
| | | LCD_WriteReg(R61509V_R007H, 0x00100);//BASEE
|
| | | msleep(100);
|
| | |
|
| | | LCD_WriteReg(R61509V_R200H, 0x00000); /* Horizontal GRAM Address Set */
|
| | | LCD_WriteReg(R61509V_R201H, 0x00000); /* Vertical GRAM Address Set */
|
| | | |
| | | LCD_SetWindow( 0, 0, BOARD_LCD_WIDTH, BOARD_LCD_HEIGHT ) ;
|
| | | LCD_SetCursor( 0, 0 ) ;
|
| | | |
| | | return 0;
|
| | | }
|
| | |
|
| | |
|
| | | /**
|
| | | * \brief Turn on the LCD.
|
| | | */
|
| | | extern void LCD_On( void )
|
| | | {
|
| | | uint16_t Reg;
|
| | |
|
| | | /* Display Control 1 (R007h) When BASEE = 1 the base image is displayed. */
|
| | | Reg = LCD_ReadReg( R61509V_R007H );
|
| | | LCD_WriteReg( R61509V_R007H, Reg|R61509V_R007H_BASEE ) ;
|
| | |
|
| | | Reg = LCD_ReadReg( R61509V_R102H );
|
| | | LCD_WriteReg(R61509V_R102H, Reg|R61509V_R102H_PSON|R61509V_R102H_PON);//PSON[1],PON[1]
|
| | | }
|
| | |
|
| | |
|
| | | /**
|
| | | * \brief Turn off the LCD.
|
| | | */
|
| | | extern void LCD_Off( void )
|
| | | {
|
| | | uint16_t Reg;
|
| | | Reg = LCD_ReadReg( R61509V_R007H );
|
| | | |
| | | /* Display Control 1 (R007h) When BASEE = 0 No base image is displayed. */
|
| | | LCD_WriteReg( R61509V_R007H, (Reg & ~R61509V_R007H_BASEE) ) ;
|
| | | }
|
| | |
|
| | | /**
|
| | | * \brief Power down the LCD.
|
| | | */
|
| | | extern void LCD_PowerDown( void )
|
| | | {
|
| | | uint16_t Reg;
|
| | | |
| | | LCD_Off();
|
| | |
|
| | | Reg = LCD_ReadReg( R61509V_R102H );
|
| | | LCD_WriteReg(R61509V_R102H, Reg&(~(R61509V_R102H_PSON|R61509V_R102H_PON)) );//PSON[0],PON[0] |
| | | }
|
| | |
|
| | | /**
|
| | | * \brief Convert 24 bit RGB color into 5-6-5 rgb color space.
|
| | | *
|
| | | * Initialize the LcdColor_t cache with the color pattern.
|
| | | * \param x 24-bits RGB color.
|
| | | * \return 0 for successfull operation.
|
| | | */
|
| | | extern uint32_t LCD_SetColor( uint32_t dwRgb24Bits )
|
| | | {
|
| | | uint32_t i ;
|
| | |
|
| | | /* Fill the cache with selected color */
|
| | | for ( i = 0 ; i < LCD_DATA_CACHE_SIZE ; ++i )
|
| | | {
|
| | | gLcdPixelCache[i] = dwRgb24Bits ;
|
| | | }
|
| | |
|
| | | return 0;
|
| | | }
|
| | |
|
| | | /**
|
| | | * \brief Set cursor of LCD srceen.
|
| | | *
|
| | | * \param x X-coordinate of upper-left corner on LCD.
|
| | | * \param y Y-coordinate of upper-left corner on LCD.
|
| | | */
|
| | | extern void LCD_SetCursor( uint16_t x, uint16_t y )
|
| | | {
|
| | | /* GRAM Horizontal/Vertical Address Set (R20h, R21h) */
|
| | | LCD_WriteReg( R61509V_R200H, x ) ; /* column */
|
| | | LCD_WriteReg( R61509V_R201H, y ) ; /* row */
|
| | | }
|
| | |
|
| | | extern void LCD_SetWindow( uint32_t dwX, uint32_t dwY, uint32_t dwWidth, uint32_t dwHeight )
|
| | | {
|
| | | /* Horizontal and Vertical RAM Address Position (R50h, R51h, R52h, R53h) */
|
| | |
|
| | | /* Set Horizontal Address Start Position */
|
| | | LCD_WriteReg( R61509V_R210H, (uint16_t)dwX ) ;
|
| | |
|
| | | /* Set Horizontal Address End Position */
|
| | | LCD_WriteReg( R61509V_R211H, (uint16_t)dwX+dwWidth-1 ) ;
|
| | |
|
| | | /* Set Vertical Address Start Position */
|
| | | LCD_WriteReg( R61509V_R212H, (uint16_t)dwY ) ;
|
| | |
|
| | | /* Set Vertical Address End Position */
|
| | | LCD_WriteReg( R61509V_R213H, (uint16_t)dwY+dwHeight-1 ) ;
|
| | | }
|
| | |
|
| | | extern void LCD_SetDisplayLandscape( uint32_t dwRGB )
|
| | | {
|
| | | uint16_t dwValue ;
|
| | |
|
| | | /* When AM = ?? the address is updated in vertical writing direction. */
|
| | | /* DFM Set the mode of transferring data to the internal RAM when TRI = ?? */
|
| | | /* When TRI = ?? data are transferred to the internal RAM in 8-bit x 3 transfers mode via the 8-bit interface. */
|
| | | /* Use the high speed write mode (HWM=1) */
|
| | | /* ORG = ?? The original address ?0000h?moves according to the I/D[1:0] setting. */
|
| | | /* I/D[1:0] = 00 Horizontal : decrement Vertical : decrement, AM=0:Horizontal */
|
| | | dwValue = R61509V_R003H_AM | R61509V_R003H_DFM | R61509V_R003H_TRI | R61509V_R003H_ORG ;
|
| | |
|
| | | if ( dwRGB == 0 )
|
| | | {
|
| | | /* BGR=?? Swap the RGB data to BGR in writing into GRAM. */
|
| | | dwValue |= R61509V_R003H_BGR ;
|
| | | }
|
| | | LCD_WriteReg( R61509V_R003H, dwValue ) ;
|
| | |
|
| | | // LCD_WriteReg( ILI9325_R60H, (0x1d<<8)|0x00 ) ; /*Gate Scan Control */
|
| | |
|
| | | LCD_SetWindow( 0, 0, BOARD_LCD_HEIGHT, BOARD_LCD_WIDTH ) ;
|
| | | }
|
| | |
|
| | | extern void LCD_SetDisplayPortrait( uint16_t wRGB )
|
| | | {
|
| | | uint16_t dwValue ;
|
| | |
|
| | | /* Use the high speed write mode (HWM=1) */
|
| | | /* When TRI = 1 data are transferred to the internal RAM in 8-bit x 3 transfers mode via the 8-bit interface. */
|
| | | /* DFM=0: 18bpp (R:G:B = 6:6:6), DFM=1: 16bpp (R:G:B = 5:6:5) */
|
| | | /* I/D[1:0] = 11 Horizontal : increment Vertical : increment, AM=0:Horizontal */
|
| | | dwValue = R61509V_R003H_DFM | R61509V_R003H_ID1 | R61509V_R003H_ID0 ;
|
| | |
|
| | | if ( wRGB == MODE_BGR )
|
| | | {
|
| | | /* BGR=?? Swap the RGB data to BGR in writing into GRAM. */
|
| | | dwValue |= R61509V_R003H_BGR ;
|
| | | }
|
| | | LCD_WriteReg( R61509V_R003H, dwValue ) ;
|
| | | |
| | | /* Gate Scan Control (R400h, R401h, R404h) */
|
| | | /* SCN[5:0]->bit[6:1] = 00 */
|
| | | /* NL[5:0]->bit[14:9] = 0x27: Sets the number of lines to drive the LCD at an interval of 8 lines. */
|
| | | //LCD_WriteReg( R61509V_R400H, R61509V_R400H_GS|(0x27<<9)|0x00 ) ;
|
| | | }
|
| | |
|
| | |
|
| | | extern void LCD_VerticalScroll( uint16_t wY )
|
| | | {
|
| | | /* Gate Scan Control (R400h, R401h, R404h) */
|
| | | /* Enables the grayscale inversion of the image by setting REV=1. */
|
| | | /* VLE[1]: Vertical scroll display enable bit */
|
| | | LCD_WriteReg( R61509V_R401H, 3 ) ;
|
| | | LCD_WriteReg( R61509V_R404H, wY ) ;
|
| | | }
|
| | |
|
| | |
|
| | | extern void LCD_SetPartialImage1( uint32_t dwDisplayPos, uint32_t dwStart, uint32_t dwEnd )
|
| | | {
|
| | | if( dwStart <= dwEnd ) |
| | | return;
|
| | |
|
| | | /* Partial Image 1 Display Position (R500h) */
|
| | | LCD_WriteReg( R61509V_R500H, dwDisplayPos&0x1ff ) ;
|
| | | /* Partial Image 1 RAM Start/End Address (R501h, R502h) */
|
| | | LCD_WriteReg( R61509V_R501H, dwStart&0x1ff ) ;
|
| | | LCD_WriteReg( R61509V_R502H, dwEnd&0x1ff ) ;
|
| | |
|
| | | }
|
| | |
|
| | | extern void LCD_EnablePartialImage1( uint32_t OnOff )
|
| | | {
|
| | | uint16_t Reg;
|
| | |
|
| | | Reg = LCD_ReadReg( R61509V_R007H );
|
| | | LCD_WriteReg( R61509V_R007H, (Reg & ~R61509V_R007H_BASEE) | R61509V_R007H_PTDE ) ;
|
| | | }
|
| | |
|
| | |
|
| | | /**
|
| | | * \brief Draw a LcdColor_t on LCD of given color.
|
| | | *
|
| | | * \param x X-coordinate of pixel.
|
| | | * \param y Y-coordinate of pixel.
|
| | | */
|
| | | extern uint32_t LCD_DrawPixel( uint32_t x, uint32_t y )
|
| | | {
|
| | | if( (x >= BOARD_LCD_WIDTH) || (y >= BOARD_LCD_HEIGHT) )
|
| | | {
|
| | | return 1;
|
| | | }
|
| | |
|
| | | /* Set cursor */
|
| | | LCD_SetCursor( x, y );
|
| | |
|
| | | /* Prepare to write in GRAM */
|
| | | LCD_WriteRAM_Prepare();
|
| | | LCD_WriteRAM( *gLcdPixelCache );
|
| | |
|
| | | return 0;
|
| | | }
|
| | |
|
| | |
|
| | |
|
| | | extern void LCD_TestPattern( uint32_t dwRGB )
|
| | | {
|
| | | uint32_t dwLine ;
|
| | | uint32_t dw ;
|
| | |
|
| | | LCD_SetWindow( 10, 10, 100, 20 ) ;
|
| | | LCD_SetCursor( 10, 10 ) ;
|
| | | LCD_WriteRAM_Prepare() ;
|
| | |
|
| | | for ( dwLine=0 ; dwLine < 20 ; dwLine++ )
|
| | | {
|
| | | /* Draw White bar */
|
| | | for ( dw=0 ; dw < 20 ; dw++ )
|
| | | {
|
| | | LCD_D() = 0xff ;
|
| | | LCD_D() = 0xff ;
|
| | | LCD_D() = 0xff ;
|
| | | }
|
| | | /* Draw Red bar */
|
| | | for ( dw=0 ; dw < 20 ; dw++ )
|
| | | {
|
| | | if ( dwRGB == 0 )
|
| | | {
|
| | | LCD_D() = 0xff ;
|
| | | LCD_D() = 0x00 ;
|
| | | LCD_D() = 0x00 ;
|
| | | }
|
| | | else
|
| | | {
|
| | | LCD_D() = 0x00 ;
|
| | | LCD_D() = 0x00 ;
|
| | | LCD_D() = 0xff ;
|
| | | }
|
| | | }
|
| | | /* Draw Green bar */
|
| | | for ( dw=0 ; dw < 20 ; dw++ )
|
| | | {
|
| | | LCD_D() = 0x00 ;
|
| | | LCD_D() = 0xff ;
|
| | | LCD_D() = 0x00 ;
|
| | | }
|
| | | /* Draw Blue bar */
|
| | | for ( dw=0 ; dw < 20 ; dw++ )
|
| | | {
|
| | | if ( dwRGB == 0 )
|
| | | {
|
| | | LCD_D() = 0x00 ;
|
| | | LCD_D() = 0x00 ;
|
| | | LCD_D() = 0xff ;
|
| | | }
|
| | | else
|
| | | {
|
| | | LCD_D() = 0xff ;
|
| | | LCD_D() = 0x00 ;
|
| | | LCD_D() = 0x00 ;
|
| | | }
|
| | | }
|
| | | /* Draw Black bar */
|
| | | for ( dw=0 ; dw < 20 ; dw++ )
|
| | | {
|
| | | LCD_D() = 0x00 ;
|
| | | LCD_D() = 0x00 ;
|
| | | LCD_D() = 0x00 ;
|
| | | }
|
| | | }
|
| | |
|
| | | LCD_SetWindow( 0, 0, BOARD_LCD_WIDTH, BOARD_LCD_HEIGHT ) ;
|
| | | }
|
| | |
|
| | |
|
| | | /**
|
| | | * \brief Write several pixels with the same color to LCD GRAM.
|
| | | *
|
| | | * LcdColor_t color is set by the LCD_SetColor() function.
|
| | | * This function is optimized using an sram buffer to transfer block instead of
|
| | | * individual pixels in order to limit the number of SPI interrupts.
|
| | | * \param dwX1 X-coordinate of upper-left corner on LCD.
|
| | | * \param dwY1 Y-coordinate of upper-left corner on LCD.
|
| | | * \param dwX2 X-coordinate of lower-right corner on LCD.
|
| | | * \param dwY2 Y-coordinate of lower-right corner on LCD.
|
| | | */
|
| | | extern uint32_t LCD_DrawFilledRectangle( uint32_t dwX1, uint32_t dwY1, uint32_t dwX2, uint32_t dwY2 )
|
| | | {
|
| | | uint32_t size, blocks;
|
| | |
|
| | | /* Swap coordinates if necessary */
|
| | | CheckBoxCoordinates(&dwX1, &dwY1, &dwX2, &dwY2);
|
| | |
|
| | | /* Determine the refresh window area */
|
| | | /* Horizontal and Vertical RAM Address Position (R210h, R211h, R212h, R213h) */
|
| | | LCD_WriteReg(R61509V_R210H, (uint16_t)dwX1);
|
| | | LCD_WriteReg(R61509V_R211H, (uint16_t)dwX2);
|
| | | LCD_WriteReg(R61509V_R212H, (uint16_t)dwY1);
|
| | | LCD_WriteReg(R61509V_R213H, (uint16_t)dwY2);
|
| | |
|
| | | /* Set cursor */
|
| | | LCD_SetCursor( dwX1, dwY1 );
|
| | |
|
| | | /* Prepare to write in GRAM */
|
| | | LCD_WriteRAM_Prepare();
|
| | |
|
| | | size = (dwX2 - dwX1 + 1) * (dwY2 - dwY1 + 1);
|
| | | /* Send pixels blocks => one SPI IT / block */
|
| | | blocks = size / LCD_DATA_CACHE_SIZE;
|
| | | while (blocks--)
|
| | | {
|
| | | LCD_WriteRAMBuffer(gLcdPixelCache, LCD_DATA_CACHE_SIZE);
|
| | | }
|
| | | /* Send remaining pixels */
|
| | | LCD_WriteRAMBuffer(gLcdPixelCache, size % LCD_DATA_CACHE_SIZE);
|
| | |
|
| | | /* Reset the refresh window area */
|
| | | /* Horizontal and Vertical RAM Address Position (R210h, R211h, R212h, R213h) */
|
| | | LCD_WriteReg(R61509V_R210H, (uint16_t)0 ) ;
|
| | | LCD_WriteReg(R61509V_R211H, (uint16_t)BOARD_LCD_WIDTH - 1 ) ;
|
| | | LCD_WriteReg(R61509V_R212H, (uint16_t)0) ;
|
| | | LCD_WriteReg(R61509V_R213H, (uint16_t)BOARD_LCD_HEIGHT - 1 ) ;
|
| | |
|
| | | return 0 ;
|
| | | }
|
| | |
|
| | | /**
|
| | | * \brief Write several pixels pre-formatted in a bufer to LCD GRAM.
|
| | | *
|
| | | * \param dwX1 X-coordinate of upper-left corner on LCD.
|
| | | * \param dwY1 Y-coordinate of upper-left corner on LCD.
|
| | | * \param dwX2 X-coordinate of lower-right corner on LCD.
|
| | | * \param dwY2 Y-coordinate of lower-right corner on LCD.
|
| | | * \param pBuffer LcdColor_t buffer area.
|
| | | */
|
| | | extern uint32_t LCD_DrawPicture( uint32_t dwX1, uint32_t dwY1, uint32_t dwX2, uint32_t dwY2, const LcdColor_t *pBuffer )
|
| | | {
|
| | | uint32_t size;
|
| | |
|
| | | /* Swap coordinates if necessary */
|
| | | CheckBoxCoordinates(&dwX1, &dwY1, &dwX2, &dwY2);
|
| | |
|
| | | /* Determine the refresh window area */
|
| | | /* Horizontal and Vertical RAM Address Position (R210h, R211h, R212h, R213h) */
|
| | | LCD_WriteReg(R61509V_R210H, (uint16_t)dwX1 ) ;
|
| | | LCD_WriteReg(R61509V_R211H, (uint16_t)dwX2 ) ;
|
| | | LCD_WriteReg(R61509V_R212H, (uint16_t)dwY1 ) ;
|
| | | LCD_WriteReg(R61509V_R213H, (uint16_t)dwY2 ) ;
|
| | |
|
| | | /* Set cursor */
|
| | | LCD_SetCursor( dwX1, dwY1 );
|
| | |
|
| | | /* Prepare to write in GRAM */
|
| | | LCD_WriteRAM_Prepare();
|
| | |
|
| | | size = (dwX2 - dwX1 + 1) * (dwY2 - dwY1 + 1);
|
| | |
|
| | | LCD_WriteRAMBuffer(pBuffer, size);
|
| | |
|
| | | /* Reset the refresh window area */
|
| | | /* Horizontal and Vertical RAM Address Position (R210h, R211h, R212h, R213h) */
|
| | | LCD_WriteReg(R61509V_R210H, (uint16_t)0 ) ;
|
| | | LCD_WriteReg(R61509V_R211H, (uint16_t)BOARD_LCD_WIDTH - 1 ) ;
|
| | | LCD_WriteReg(R61509V_R212H, (uint16_t)0 ) ;
|
| | | LCD_WriteReg(R61509V_R213H, (uint16_t)BOARD_LCD_HEIGHT - 1 ) ;
|
| | |
|
| | | return 0 ;
|
| | | }
|
| | |
|
| | | /*
|
| | | * \brief Draw a line on LCD, which is not horizontal or vertical.
|
| | | *
|
| | | * \param x X-coordinate of line start.
|
| | | * \param y Y-coordinate of line start.
|
| | | * \param length line length.
|
| | | * \param direction line direction: 0 - horizontal, 1 - vertical.
|
| | | * \param color LcdColor_t color.
|
| | | */
|
| | | static uint32_t DrawLineBresenham( uint32_t dwX1, uint32_t dwY1, uint32_t dwX2, uint32_t dwY2 )
|
| | | {
|
| | | int dx, dy ;
|
| | | int i ;
|
| | | int xinc, yinc, cumul ;
|
| | | int x, y ;
|
| | |
|
| | | x = dwX1 ;
|
| | | y = dwY1 ;
|
| | | dx = dwX2 - dwX1 ;
|
| | | dy = dwY2 - dwY1 ;
|
| | |
|
| | | xinc = ( dx > 0 ) ? 1 : -1 ;
|
| | | yinc = ( dy > 0 ) ? 1 : -1 ;
|
| | | dx = ( dx > 0 ) ? dx : -dx ;
|
| | | dy = ( dy > 0 ) ? dy : -dy ;
|
| | |
|
| | | LCD_DrawPixel( x, y ) ;
|
| | |
|
| | | if ( dx > dy )
|
| | | {
|
| | | cumul = dx / 2 ;
|
| | | for ( i = 1 ; i <= dx ; i++ )
|
| | | {
|
| | | x += xinc ;
|
| | | cumul += dy ;
|
| | |
|
| | | if ( cumul >= dx )
|
| | | {
|
| | | cumul -= dx ;
|
| | | y += yinc ;
|
| | | }
|
| | | LCD_DrawPixel( x, y ) ;
|
| | | }
|
| | | }
|
| | | else
|
| | | {
|
| | | cumul = dy / 2 ;
|
| | | for ( i = 1 ; i <= dy ; i++ )
|
| | | {
|
| | | y += yinc ;
|
| | | cumul += dx ;
|
| | |
|
| | | if ( cumul >= dy )
|
| | | {
|
| | | cumul -= dy ;
|
| | | x += xinc ;
|
| | | }
|
| | |
|
| | | LCD_DrawPixel( x, y ) ;
|
| | | }
|
| | | }
|
| | |
|
| | | return 0 ;
|
| | | }
|
| | |
|
| | | /*
|
| | | * \brief Draw a line on LCD, horizontal and vertical line are supported.
|
| | | *
|
| | | * \param dwX1 X-coordinate of line start.
|
| | | * \param dwY1 Y-coordinate of line start.
|
| | | * \param dwX2 X-coordinate of line end.
|
| | | * \param dwY2 Y-coordinate of line end.
|
| | | */
|
| | | extern uint32_t LCD_DrawLine ( uint32_t dwX1, uint32_t dwY1, uint32_t dwX2, uint32_t dwY2 )
|
| | | {
|
| | | /* Optimize horizontal or vertical line drawing */
|
| | | if (( dwY1 == dwY2 ) || (dwX1 == dwX2))
|
| | | {
|
| | | LCD_DrawFilledRectangle( dwX1, dwY1, dwX2, dwY2 );
|
| | | }
|
| | | else
|
| | | {
|
| | | DrawLineBresenham( dwX1, dwY1, dwX2, dwY2 ) ;
|
| | | }
|
| | |
|
| | | return 0 ;
|
| | | }
|
| | |
|
| | | /**
|
| | | * \brief Draws a circle on LCD, at the given coordinates.
|
| | | *
|
| | | * \param dwX X-coordinate of circle center.
|
| | | * \param dwY Y-coordinate of circle center.
|
| | | * \param dwR circle radius.
|
| | | */
|
| | | extern uint32_t LCD_DrawCircle( uint32_t dwX, uint32_t dwY, uint32_t dwR )
|
| | | {
|
| | | int32_t d; /* Decision Variable */
|
| | | uint32_t curX; /* Current X Value */
|
| | | uint32_t curY; /* Current Y Value */
|
| | |
|
| | | if (dwR == 0)
|
| | | {
|
| | | return 0;
|
| | | }
|
| | | d = 3 - (dwR << 1);
|
| | | curX = 0;
|
| | | curY = dwR;
|
| | |
|
| | | while (curX <= curY)
|
| | | {
|
| | | LCD_DrawPixel(dwX + curX, dwY + curY);
|
| | | LCD_DrawPixel(dwX + curX, dwY - curY);
|
| | | LCD_DrawPixel(dwX - curX, dwY + curY);
|
| | | LCD_DrawPixel(dwX - curX, dwY - curY);
|
| | | LCD_DrawPixel(dwX + curY, dwY + curX);
|
| | | LCD_DrawPixel(dwX + curY, dwY - curX);
|
| | | LCD_DrawPixel(dwX - curY, dwY + curX);
|
| | | LCD_DrawPixel(dwX - curY, dwY - curX);
|
| | |
|
| | | if (d < 0)
|
| | | {
|
| | | d += (curX << 2) + 6;
|
| | | }
|
| | | else
|
| | | {
|
| | | d += ((curX - curY) << 2) + 10;
|
| | | curY--;
|
| | | }
|
| | | curX++;
|
| | | }
|
| | | return 0;
|
| | | }
|
| | |
|
| | | extern uint32_t LCD_DrawFilledCircle( uint32_t dwX, uint32_t dwY, uint32_t dwRadius)
|
| | | {
|
| | | signed int d ; /* Decision Variable */
|
| | | uint32_t dwCurX ; /* Current X Value */
|
| | | uint32_t dwCurY ; /* Current Y Value */
|
| | | uint32_t dwXmin, dwYmin;
|
| | |
|
| | | if (dwRadius == 0)
|
| | | {
|
| | | return 0;
|
| | | }
|
| | | d = 3 - (dwRadius << 1) ;
|
| | | dwCurX = 0 ;
|
| | | dwCurY = dwRadius ;
|
| | |
|
| | | while ( dwCurX <= dwCurY )
|
| | | {
|
| | | dwXmin = (dwCurX > dwX) ? 0 : dwX-dwCurX;
|
| | | dwYmin = (dwCurY > dwY) ? 0 : dwY-dwCurY;
|
| | | LCD_DrawFilledRectangle( dwXmin, dwYmin, dwX+dwCurX, dwYmin ) ;
|
| | | LCD_DrawFilledRectangle( dwXmin, dwY+dwCurY, dwX+dwCurX, dwY+dwCurY ) ;
|
| | | dwXmin = (dwCurY > dwX) ? 0 : dwX-dwCurY;
|
| | | dwYmin = (dwCurX > dwY) ? 0 : dwY-dwCurX;
|
| | | LCD_DrawFilledRectangle( dwXmin, dwYmin, dwX+dwCurY, dwYmin ) ;
|
| | | LCD_DrawFilledRectangle( dwXmin, dwY+dwCurX, dwX+dwCurY, dwY+dwCurX ) ;
|
| | |
|
| | | if ( d < 0 )
|
| | | {
|
| | | d += (dwCurX << 2) + 6 ;
|
| | | }
|
| | | else
|
| | | {
|
| | | d += ((dwCurX - dwCurY) << 2) + 10;
|
| | | dwCurY-- ;
|
| | | }
|
| | |
|
| | | dwCurX++ ;
|
| | | }
|
| | |
|
| | | return 0 ;
|
| | | }
|
| | |
|
| | | extern uint32_t LCD_DrawRectangle( uint32_t dwX1, uint32_t dwY1, uint32_t dwX2, uint32_t dwY2 )
|
| | | {
|
| | | CheckBoxCoordinates(&dwX1, &dwY1, &dwX2, &dwY2);
|
| | |
|
| | | LCD_DrawFilledRectangle( dwX1, dwY1, dwX2, dwY1 ) ;
|
| | | LCD_DrawFilledRectangle( dwX1, dwY2, dwX2, dwY2 ) ;
|
| | |
|
| | | LCD_DrawFilledRectangle( dwX1, dwY1, dwX1, dwY2 ) ;
|
| | | LCD_DrawFilledRectangle( dwX2, dwY1, dwX2, dwY2 ) ;
|
| | |
|
| | | return 0 ;
|
| | | }
|
| | |
|
| | |
|
| | |
|
New file |
| | |
| | | /* ----------------------------------------------------------------------------
|
| | | * SAM Software Package License
|
| | | * ----------------------------------------------------------------------------
|
| | | * Copyright (c) 2011, Atmel Corporation
|
| | | *
|
| | | * All rights reserved.
|
| | | *
|
| | | * Redistribution and use in source and binary forms, with or without
|
| | | * modification, are permitted provided that the following conditions are met:
|
| | | *
|
| | | * - Redistributions of source code must retain the above copyright notice,
|
| | | * this list of conditions and the disclaimer below.
|
| | | *
|
| | | * Atmel's name may not be used to endorse or promote products derived from
|
| | | * this software without specific prior written permission.
|
| | | *
|
| | | * DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR
|
| | | * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
| | | * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE
|
| | | * DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,
|
| | | * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
| | | * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
|
| | | * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
| | | * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
| | | * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
|
| | | * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
| | | * ----------------------------------------------------------------------------
|
| | | */
|
| | |
|
| | | /**
|
| | | * \file
|
| | | *
|
| | | * Interface of R61509V driver.
|
| | | *
|
| | | */
|
| | |
|
| | | #ifndef __LCD_R61509V_H
|
| | | #define __LCD_R61509V_H
|
| | |
|
| | | /*----------------------------------------------------------------------------
|
| | | * Headers
|
| | | *----------------------------------------------------------------------------*/
|
| | |
|
| | |
|
| | | #include <stdint.h>
|
| | | typedef uint16_t LcdColor_t ;
|
| | |
|
| | |
|
| | | /*----------------------------------------------------------------------------
|
| | | * Definitions
|
| | | *----------------------------------------------------------------------------*/
|
| | | |
| | | /* LCDµÄCSÁ¬µÄPD7(NE1),ËùÒÔÎÒÃÇʹÓõÄÊÇNorflashµÄBank1,µØÖ··¶Î§Îª0X60000000~0X63FFFFFF
|
| | | * LCDµÄRS(¼Ä´æÆ÷/Êý¾ÝÑ¡Ôñ½Å)Á¬PD11(FSMC_A16),ÕâÑùµ±A16Ϊ¸ßµçƽʱ¾ÍÊÇÊý¾Ý¼Ä´æÆ÷£¬µÍµçƽÔòΪÃüÁî¼Ä´æÆ÷
|
| | | * ËùÒÔÊý¾Ý¼Ä´æÆ÷µÄµØÖ·Îª: 0x6000 0000 |= 1<<16 ==> 0x6001 0000(¸ÃֵΪ8λģʽϵÄ×Ö½ÚµØÖ·)
|
| | | * ÓÉÓÚÎÒÃDzÉÓõÄÊÇ16λÊý¾ÝÏߣ¬FSMC[24:0]ÓëHADDR[25:1](AHBµØÖ·)¶ÔÆë£¬ÕâÑùHADDRÒª×óÒÆÒ»Î»²ÅÊÇFSMCµÄ·ÃÎʵØÖ·; |
| | | * Òò´ËΪÁ˰ÑFSMCÖеÄFSMC_A16ÖÃ1£¬Êµ¼ÊÉÏÒª¶ÔÓ¦µ½HADDRµØÖ·µÄHADDR_A17£¬¼´0x6002 0000
|
| | | */
|
| | | #define Bank1_LCD_DAT ((uint32_t)0x60020000) //ÏÔÊ¾ÇøÊý¾ÝµØÖ· |
| | | #define Bank1_LCD_CMD ((uint32_t)0x60000000) //ÏÔÊ¾ÇøÖ¸ÁîµØÖ·
|
| | |
|
| | | #define LCD_RST (1<<0) // PE1-LCD-RST |
| | | #define LCD_RST_SET(x) GPIOE->ODR=(GPIOE->ODR&~LCD_RST)|(x ? LCD_RST : 0)
|
| | |
|
| | | #define BOARD_LCD_WIDTH 240
|
| | | #define BOARD_LCD_HEIGHT 400
|
| | |
|
| | | #define MODE_BGR 0
|
| | | #define MODE_RGB 1
|
| | |
|
| | | /* color definition */
|
| | | #define COLOR_RED 0XF800
|
| | | #define COLOR_GREEN 0X07E0
|
| | | #define COLOR_BLUE 0X001F |
| | | #define COLOR_BRED 0XF81F
|
| | | #define COLOR_GRED 0XFFE0
|
| | | #define COLOR_GBLUE 0X07FF
|
| | | #define COLOR_BLACK 0X0000
|
| | | #define COLOR_WHITE 0XFFFF
|
| | | #define COLOR_PURPUE 0XA294
|
| | |
|
| | |
|
| | | /* R61509V ID code */
|
| | | #define R61509V_DEVICE_CODE 0xB509 /* The device code ¡°B509¡±H is read out when this register is read forcibly. */
|
| | |
|
| | | /* R61509V LCD Registers */
|
| | | #define R61509V_R000H 0x000 /* Device Code Read */
|
| | | #define R61509V_R001H 0x001 /* Driver Output Control 1 */
|
| | | #define R61509V_R001H_SS ((uint16_t)0x0100)
|
| | | #define R61509V_R001H_SM ((uint16_t)0x0400)
|
| | | #define R61509V_R002H 0x002 /* LCD Drive Waveform Contro */
|
| | | #define R61509V_R003H 0x003 /* Entry Mode */
|
| | | #define R61509V_R003H_AM ((uint16_t)0x0008) /* AM Control the GRAM update direction */
|
| | | #define R61509V_R003H_ID0 ((uint16_t)0x0010) /* I/D[1:0] Control the address counter */
|
| | | #define R61509V_R003H_ID1 ((uint16_t)0x0020)
|
| | | #define R61509V_R003H_ORG ((uint16_t)0x0080)
|
| | | #define R61509V_R003H_BGR ((uint16_t)0x1000)
|
| | | #define R61509V_R003H_DFM ((uint16_t)0x4000)
|
| | | #define R61509V_R003H_TRI ((uint16_t)0x8000)
|
| | | #define R61509V_R007H 0x007 /* Display Control 1 */
|
| | | #define R61509V_R007H_BASEE ((uint16_t)0x0100)
|
| | | #define R61509V_R007H_PTDE ((uint16_t)0x1000)
|
| | |
|
| | | #define R61509V_R008H 0x008 /* Display Control 2 */
|
| | | #define R61509V_R009H 0x009 /* Display Control 3 */
|
| | |
|
| | | #define R61509V_R010H 0x010 /* Panel Interface Control 1 */
|
| | | #define R61509V_R011H 0x011 /* Panel Interface Control 2 */
|
| | | #define R61509V_R012H 0x012 /* Panel Interface Control 3 */
|
| | | #define R61509V_R013H 0x013 /* Panel Interface Control 4 */
|
| | | #define R61509V_R014H 0x014 /* Panel Interface Control 5 */
|
| | |
|
| | | #define R61509V_R00CH 0x00C /* External Display Interface Control 1 */
|
| | | #define R61509V_R00FH 0x00F /* External Display Interface Control 2 */
|
| | | #define R61509V_R090H 0x090 /* Frame Marker Control */
|
| | |
|
| | | #define R61509V_R100H 0x100 /* Power Control Control 1 */
|
| | | #define R61509V_R101H 0x101 /* Power Control Control 2 */
|
| | | #define R61509V_R102H 0x102 /* Power Control Control 3 */
|
| | | #define R61509V_R102H_PON ((uint16_t)0x0010)
|
| | | #define R61509V_R102H_PSON ((uint16_t)0x0020)
|
| | | #define R61509V_R103H 0x103 /* Power Control Control 4 */
|
| | |
|
| | | #define R61509V_R200H 0x200 /* Horizontal GRAM Address Set */
|
| | | #define R61509V_R201H 0x201 /* Vertical GRAM Address Set */
|
| | | #define R61509V_R202H 0x202 /* GRAM Data Write/Read */
|
| | |
|
| | | #define R61509V_R210H 0x210 /* Window Horizontal Address Start Position */
|
| | | #define R61509V_R211H 0x211 /* Window Horizontal Address End Position */
|
| | | #define R61509V_R212H 0x212 /* Window Vertical Address Start Position */
|
| | | #define R61509V_R213H 0x213 /* Window Vertical Address End Position */
|
| | |
|
| | | #define R61509V_R300H 0x300 /* Gamma Control 1 */
|
| | | #define R61509V_R301H 0x301 /* Gamma Control 2 */
|
| | | #define R61509V_R302H 0x302 /* Gamma Control 3 */
|
| | | #define R61509V_R303H 0x303 /* Gamma Control 4 */
|
| | | #define R61509V_R304H 0x304 /* Gamma Control 5 */
|
| | | #define R61509V_R305H 0x305 /* Gamma Control 6 */
|
| | | #define R61509V_R306H 0x306 /* Gamma Control 7 */
|
| | | #define R61509V_R307H 0x307 /* Gamma Control 8 */
|
| | | #define R61509V_R308H 0x308 /* Gamma Control 9 */
|
| | | #define R61509V_R309H 0x309 /* Gamma Control 10 */
|
| | |
|
| | | #define R61509V_R280H 0x280 /* NVM Data Read / write */
|
| | |
|
| | | #define R61509V_R400H 0x400 /* Base Image Number of Line */
|
| | | #define R61509V_R400H_GS ((uint16_t)0x8000)
|
| | | #define R61509V_R401H 0x401 /* Base Image Display Control */
|
| | | #define R61509V_R404H 0x404 /* Base Image Vertical Scroll Control */
|
| | |
|
| | | #define R61509V_R500H 0x500 /* Partial Image 1 Display Position */
|
| | | #define R61509V_R501H 0x501 /* RAM Address 1(Start Line Address) */
|
| | | #define R61509V_R502H 0x502 /* RAM Address 2(End Line Address) */
|
| | |
|
| | |
|
| | |
|
| | | /*----------------------------------------------------------------------------
|
| | | * Types
|
| | | *----------------------------------------------------------------------------*/
|
| | |
|
| | | typedef volatile uint16_t REG16;
|
| | |
|
| | | /*----------------------------------------------------------------------------
|
| | | * Marcos
|
| | | *----------------------------------------------------------------------------*/
|
| | |
|
| | | /** LCD index register address */
|
| | | #define LCD_IR() (*((REG16 *)(Bank1_LCD_CMD)))
|
| | |
|
| | | /** LCD data address */
|
| | | #define LCD_D() (*((REG16 *)(Bank1_LCD_DAT)))
|
| | |
|
| | | #ifdef __cplusplus
|
| | | extern "C" {
|
| | | #endif
|
| | | /*----------------------------------------------------------------------------
|
| | | * Exported functions
|
| | | *----------------------------------------------------------------------------*/
|
| | | extern void LCD_WriteReg( uint16_t reg, uint16_t data );
|
| | | extern uint16_t LCD_ReadReg( uint16_t reg );
|
| | | extern void LCD_WriteRAM_Prepare( void );
|
| | | extern void LCD_WriteRAM( LcdColor_t dwColor );
|
| | | extern void LCD_ReadRAM_Prepare( void );
|
| | | extern void LCD_WriteRAMWord( uint16_t wColor );
|
| | | extern uint32_t LCD_ReadRAM( void );
|
| | | extern uint32_t LCD_Initialize( void );
|
| | | extern void LCD_On( void );
|
| | | extern void LCD_Off( void );
|
| | | extern void LCD_PowerDown( void );
|
| | | extern uint32_t LCD_SetColor(uint32_t dwRgb24Bits);
|
| | | extern void LCD_SetCursor( uint16_t x, uint16_t y );
|
| | | extern void LCD_SetWindow( uint32_t dwX, uint32_t dwY, uint32_t dwWidth, uint32_t dwHeight );
|
| | | extern void LCD_SetDisplayLandscape( uint32_t dwRGB );
|
| | | extern void LCD_SetDisplayPortrait( uint16_t wRGB );
|
| | | extern void LCD_VerticalScroll( uint16_t wY );
|
| | | extern void LCD_SetPartialImage1( uint32_t dwDisplayPos, uint32_t dwStart, uint32_t dwEnd );
|
| | | extern uint32_t LCD_DrawPixel( uint32_t x, uint32_t y );
|
| | | extern void LCD_TestPattern( uint32_t dwRGB );
|
| | | extern uint32_t LCD_DrawFilledRectangle( uint32_t dwX1, uint32_t dwY1, uint32_t dwX2, uint32_t dwY2 );
|
| | | extern uint32_t LCD_DrawPicture( uint32_t dwX1, uint32_t dwY1, uint32_t dwX2, uint32_t dwY2, const LcdColor_t *pBuffer );
|
| | | extern uint32_t LCD_DrawLine ( uint32_t dwX1, uint32_t dwY1, uint32_t dwX2, uint32_t dwY2 );
|
| | | extern uint32_t LCD_DrawCircle( uint32_t dwX, uint32_t dwY, uint32_t dwR );
|
| | | extern uint32_t LCD_DrawFilledCircle( uint32_t dwX, uint32_t dwY, uint32_t dwRadius);
|
| | | extern uint32_t LCD_DrawRectangle( uint32_t dwX1, uint32_t dwY1, uint32_t dwX2, uint32_t dwY2 );
|
| | | extern void LCD_SetBacklight (uint32_t level);
|
| | | #ifdef __cplusplus
|
| | | }
|
| | | #endif
|
| | | #endif /* #ifndef R61509V */
|
New file |
| | |
| | | #ifndef __OV7670_REG_H |
| | | #define __OV7670_REG_H
|
| | |
|
| | | #define REG_GAIN 0x00 /* Gain lower 8 bits (rest in vref) */
|
| | | #define REG_BLUE 0x01 /* blue gain */
|
| | | #define REG_RED 0x02 /* red gain */
|
| | | #define REG_VREF 0x03 /* Pieces of GAIN, VSTART, VSTOP */
|
| | | #define REG_COM1 0x04 /* Control 1 */
|
| | | #define COM1_CCIR656 0x40 /* CCIR656 enable */
|
| | |
|
| | | #define REG_BAVE 0x05 /* U/B Average level */
|
| | | #define REG_GbAVE 0x06 /* Y/Gb Average level */
|
| | | #define REG_AECHH 0x07 /* AEC MS 5 bits */
|
| | | #define REG_RAVE 0x08 /* V/R Average level */
|
| | | #define REG_COM2 0x09 /* Control 2 */
|
| | | #define COM2_SSLEEP 0x10 /* Soft sleep mode */
|
| | |
|
| | | #define REG_PID 0x0a /* Product ID MSB */
|
| | | #define REG_VER 0x0b /* Product ID LSB */
|
| | | #define REG_COM3 0x0c /* Control 3 */
|
| | | #define COM3_SWAP 0x40 /* Byte swap */
|
| | | #define COM3_SCALEEN 0x08 /* Enable scaling */
|
| | | #define COM3_DCWEN 0x04 /* Enable downsamp/crop/window */
|
| | |
|
| | | #define REG_COM4 0x0d /* Control 4 */
|
| | | #define REG_COM5 0x0e /* All "reserved" */
|
| | | #define REG_COM6 0x0f /* Control 6 */
|
| | | #define REG_AECH 0x10 /* More bits of AEC value */
|
| | | #define REG_CLKRC 0x11 /* Clocl control */
|
| | | #define CLK_EXT 0x40 /* Use external clock directly */
|
| | | #define CLK_SCALE 0x3f /* Mask for internal clock scale */
|
| | |
|
| | | #define REG_COM7 0x12 /* Control 7 */
|
| | | #define COM7_RESET 0x80 /* Register reset */
|
| | | #define COM7_FMT_MASK 0x38
|
| | | #define COM7_FMT_VGA 0x00
|
| | | #define COM7_FMT_CIF 0x20 /* CIF format */
|
| | | #define COM7_FMT_QVGA 0x10 /* QVGA format */
|
| | | #define COM7_FMT_QCIF 0x08 /* QCIF format */
|
| | | #define COM7_RGB 0x04 /* bits 0 and 2 - RGB format */
|
| | | #define COM7_YUV 0x00 /* YUV */
|
| | | #define COM7_BAYER 0x01 /* Bayer format */
|
| | | #define COM7_PBAYER 0x05 /* "Processed bayer" */
|
| | |
|
| | | #define REG_COM8 0x13 /* Control 8 */
|
| | | #define COM8_FASTAEC 0x80 /* Enable fast AGC/AEC */
|
| | | #define COM8_AECSTEP 0x40 /* Unlimited AEC step size */
|
| | | #define COM8_BFILT 0x20 /* Band filter enable */
|
| | | #define COM8_AGC 0x04 /* Auto gain enable */
|
| | | #define COM8_AWB 0x02 /* White balance enable */
|
| | | #define COM8_AEC 0x01 /* Auto exposure enable */
|
| | |
|
| | | #define REG_COM9 0x14 /* Control 9 - gain ceiling */
|
| | | #define REG_COM10 0x15 /* Control 10 */
|
| | | #define COM10_HSYNC 0x40 /* HSYNC instead of HREF */
|
| | | #define COM10_PCLK_HB 0x20 /* Suppress PCLK on horiz blank */
|
| | | #define COM10_HREF_REV 0x08 /* Reverse HREF */
|
| | | #define COM10_VS_LEAD 0x04 /* VSYNC on clock leading edge */
|
| | | #define COM10_VS_NEG 0x02 /* VSYNC negative */
|
| | | #define COM10_HS_NEG 0x01 /* HSYNC negative */
|
| | |
|
| | | #define REG_HSTART 0x17 /* Horiz start high bits */
|
| | | #define REG_HSTOP 0x18 /* Horiz stop high bits */
|
| | | #define REG_VSTART 0x19 /* Vert start high bits */
|
| | | #define REG_VSTOP 0x1a /* Vert stop high bits */
|
| | | #define REG_PSHFT 0x1b /* Pixel delay after HREF */
|
| | | #define REG_MIDH 0x1c /* Manuf. ID high */
|
| | | #define REG_MIDL 0x1d /* Manuf. ID low */
|
| | | #define REG_MVFP 0x1e /* Mirror / vflip */
|
| | | #define MVFP_MIRROR 0x20 /* Mirror image */
|
| | | #define MVFP_FLIP 0x10 /* Vertical flip */
|
| | | #define REG_ADCCTR0 0x20
|
| | | #define REG_ADCCTR1 0x21
|
| | | #define REG_ADCCTR2 0x22
|
| | | #define REG_AEW 0x24 /* AGC upper limit */
|
| | | #define REG_AEB 0x25 /* AGC lower limit */
|
| | | #define REG_VPT 0x26 /* AGC/AEC fast mode op region */
|
| | | #define REG_HSYST 0x30 /* HSYNC rising edge delay */
|
| | | #define REG_HSYEN 0x31 /* HSYNC falling edge delay */
|
| | | #define REG_HREF 0x32 /* HREF pieces */
|
| | | #define REG_CHLF 0x33
|
| | | #define REG_ARBLM 0x34
|
| | | /* 0x35~0x36 reserved */
|
| | | #define REG_ADC 0x37
|
| | | #define REG_ACOM 0x38
|
| | | #define REG_OFON 0x39
|
| | | #define REG_TSLB 0x3a /* lots of stuff */
|
| | | #define TSLB_YLAST 0x04 /* UYVY or VYUY - see com13 */
|
| | |
|
| | | #define REG_COM11 0x3b /* Control 11 */
|
| | | #define COM11_NIGHT 0x80 /* NIght mode enable */
|
| | | #define COM11_NMFR 0x60 /* Two bit NM frame rate */
|
| | | #define COM11_HZAUTO 0x10 /* Auto detect 50/60 Hz */
|
| | | #define COM11_50HZ 0x08 /* Manual 50Hz select */
|
| | | #define COM11_EXP 0x02
|
| | |
|
| | | #define REG_COM12 0x3c /* Control 12 */
|
| | | #define COM12_HREF 0x80 /* HREF always */
|
| | |
|
| | | #define REG_COM13 0x3d /* Control 13 */
|
| | | #define REG_COM14 0x3e /* Control 14 */
|
| | | #define COM13_GAMMA 0x80 /* Gamma enable */
|
| | | #define COM13_UVSAT 0x40 /* UV saturation auto adjustment */
|
| | | #define COM13_UVSWAP 0x01 /* V before U - w/TSLB */
|
| | | #define REG_COM14 0x3e /* Control 14 */
|
| | | #define COM14_DCWEN 0x10 /* DCW/PCLK-scale enable */
|
| | | #define REG_EDGE 0x3f /* Edge enhancement factor */
|
| | |
|
| | | #define REG_COM15 0x40 /* Control 15 */
|
| | | #define COM15_R10F0 0x00 /* Data range 10 to F0 */
|
| | | #define COM15_R01FE 0x80 /* 01 to FE */
|
| | | #define COM15_R00FF 0xc0 /* 00 to FF */
|
| | | #define COM15_RGB565 0x10 /* RGB565 output */
|
| | | #define COM15_RGB555 0x30 /* RGB555 output */
|
| | |
|
| | | #define REG_COM16 0x41 /* Control 16 */
|
| | | #define COM16_AWBGAIN 0x08 /* AWB gain enable */
|
| | | #define REG_COM17 0x42 /* Control 17 */
|
| | | #define COM17_AECWIN 0xc0 /* AEC window - must match COM4 */
|
| | | #define COM17_CBAR 0x08 /* DSP Color bar */
|
| | |
|
| | | #define REG_AWBC1 0x43
|
| | | #define REG_AWBC2 0x44
|
| | | #define REG_AWBC3 0x45
|
| | | #define REG_AWBC4 0x46
|
| | | #define REG_AWBC5 0x47
|
| | | #define REG_AWBC6 0x48
|
| | |
|
| | | /* 0x49~0x4A reserved */
|
| | |
|
| | | #define REG_CMATRIX_BASE 0x4f
|
| | | #define CMATRIX_LEN 6
|
| | | #define REG_MTX1 0x4f
|
| | | #define REG_MTX2 0x50
|
| | | #define REG_MTX3 0x51
|
| | | #define REG_MTX4 0x52
|
| | | #define REG_MTX5 0x53
|
| | | #define REG_MTX6 0x54
|
| | | #define REG_BRIGHT 0x55
|
| | | #define REG_CONTRAS 0X56
|
| | | #define REG_CONTRAS_CENTER 0x57
|
| | | #define REG_CMATRIX_SIGN 0x58
|
| | |
|
| | | #define REG_GFIX 0x69 /* Fix gain control */
|
| | | #define REG_LLC1 0x62
|
| | | #define REG_LLC2 0x63
|
| | | #define REG_LLC3 0x64
|
| | | #define REG_LLC4 0x65
|
| | | #define REG_LLC5 0x66
|
| | | #define REG_LLC6 0x94
|
| | | #define REG_LLC7 0x95
|
| | | #define REG_GGAIN 0x6a
|
| | | #define REG_DBLV 0x6b
|
| | | #define REG_AWBCTR3 0x6c
|
| | | #define REG_AWBCTR2 0x6d
|
| | | #define REG_AWBCTR1 0x6e
|
| | | #define REG_AWBCTR0 0x6f
|
| | | #define REG_SCALING_XSC 0x70
|
| | | #define REG_SCALING_YSC 0x71
|
| | | #define REG_SCALING_DCWCTR 0x72
|
| | | #define REG_SCALING_PC 0x73
|
| | |
|
| | | #define REG_REG74 0x74
|
| | | #define REG_REG75 0x75
|
| | | #define REG_REG76 0x76 /* OV's name */
|
| | | #define R76_WHTPCOR 0x40 /* White pixel correction enable */
|
| | | #define R76_BLKPCOR 0x80 /* Black pixel correction enable */
|
| | | #define REG_REG77 0x77
|
| | | /* 0x78~0x79 reserved */
|
| | | #define REG_SLOP 0x7a
|
| | | #define REG_GAM1 0x7b
|
| | | #define REG_GAM2 0x7c
|
| | | #define REG_GAM3 0x7d
|
| | | #define REG_GAM4 0x7e
|
| | | #define REG_GAM5 0x7f
|
| | | #define REG_GAM6 0x80
|
| | | #define REG_GAM7 0x81
|
| | | #define REG_GAM8 0x82
|
| | | #define REG_GAM9 0x83
|
| | | #define REG_GAM10 0x84
|
| | | #define REG_GAM11 0x85
|
| | | #define REG_GAM12 0x86
|
| | | #define REG_GAM13 0x87
|
| | | #define REG_GAM14 0x88
|
| | | #define REG_GAM15 0x89
|
| | |
|
| | | #define REG_RGB444 0x8c /* RGB 444 control */
|
| | | #define R444_ENABLE 0x02 /* Turn on RGB444, overrides 5x5 */
|
| | | #define R444_RGBX 0x01 /* Empty nibble at end */
|
| | | #define REG_DM_LNL 0x92
|
| | | #define REG_HAECC1 0x9f /* Hist AEC/AGC control 1 */
|
| | | #define REG_HAECC2 0xa0 /* Hist AEC/AGC control 2 */
|
| | | #define REG_SCALING_PCLK_DELAY 0xa2
|
| | | #define REG_BD50MAX 0xa5 /* 50hz banding step limit */
|
| | | #define REG_HAECC3 0xa6 /* Hist AEC/AGC control 3 */
|
| | | #define REG_HAECC4 0xa7 /* Hist AEC/AGC control 4 */
|
| | | #define REG_HAECC5 0xa8 /* Hist AEC/AGC control 5 */
|
| | | #define REG_HAECC6 0xa9 /* Hist AEC/AGC control 6 */
|
| | | #define REG_HAECC7 0xaa /* Hist AEC/AGC control 7 */
|
| | | #define REG_BD60MAX 0xab /* 60hz banding step limit */
|
| | |
|
| | | #define REG_ABLC1 0xb1
|
| | | #define REG_THL_DLT 0xb3
|
| | |
|
| | | /** terminating list entry for register in configuration file */
|
| | | #define OV_REG_TERM 0xff
|
| | | /** terminating list entry for value in configuration file */
|
| | | #define OV_VAL_TERM 0xff
|
| | |
|
| | | /** define a structure for omnivision register initialization values */
|
| | | typedef struct ov_regval_s
|
| | | {
|
| | | /** Register to be written */
|
| | | uint8_t reg ;
|
| | | /** Value to be written in the register */
|
| | | uint8_t val ;
|
| | | } ov_regval_t ;
|
| | |
|
| | |
|
| | |
|
| | | const ov_regval_t ov7670_default_regs[] =
|
| | | {
|
| | | {REG_TSLB, 0x04},
|
| | | {REG_HREF, 0x80},
|
| | | {REG_HSTART, 0x16},
|
| | | |
| | | {REG_HSTOP, 0x04},//5
|
| | | {REG_VSTART, 0x02},
|
| | | {REG_VSTOP, 0x7b},//0x7a,
|
| | | {REG_VREF, 0x06},//0x0a,
|
| | | {REG_COM3, 0x0c},
|
| | | {REG_COM10, 0x02},
|
| | | {REG_COM14, 0x00},//10
|
| | | {REG_SCALING_XSC, 0x00},
|
| | | {REG_SCALING_YSC, 0x01}, |
| | | {REG_SCALING_DCWCTR, 0x11},
|
| | | {REG_SCALING_PC, 0x09},//
|
| | | |
| | | {REG_SCALING_PCLK_DELAY, 0x02},//Ëõ·ÅÊä³öÑÓʱ
|
| | | {REG_CLKRC, 0x00},
|
| | |
|
| | | {REG_SLOP, 0x20},
|
| | | {REG_GAM1, 0x1c},
|
| | | {REG_GAM2, 0x28}, |
| | | {REG_GAM3, 0x3c},//20
|
| | | {REG_GAM4, 0x55},
|
| | | {REG_GAM5, 0x68},
|
| | | {REG_GAM6, 0x76},
|
| | | {REG_GAM7, 0x80}, |
| | | {REG_GAM8, 0x88},
|
| | | {REG_GAM9, 0x8f},
|
| | | {REG_GAM10, 0x96},
|
| | | {REG_GAM11, 0xa3},
|
| | | {REG_GAM12, 0xaf}, |
| | | {REG_GAM13, 0xc4},//30
|
| | | {REG_GAM14, 0xd7},
|
| | | {REG_GAM15, 0xe8},
|
| | | |
| | | {REG_COM8, 0xe0},
|
| | | {REG_GAIN, 0x00},//AGC
|
| | | |
| | | {REG_AECH, 0x00},
|
| | | {REG_COM4, 0x00},
|
| | | {REG_BD50MAX, 0x05},
|
| | | {REG_BD60MAX, 0x07},
|
| | | |
| | | {REG_AEW, 0x75},//40
|
| | | {REG_AEB, 0x63},
|
| | | {REG_VPT, 0xA5},
|
| | | |
| | | {REG_HAECC1, 0x78},
|
| | | {REG_HAECC2, 0x68},
|
| | | {REG_HAECC3, 0xdf},//0xd8,
|
| | | {REG_HAECC4, 0xdf},//0xd8,
|
| | | {REG_HAECC5, 0xf0},
|
| | | {REG_HAECC6, 0x90}, |
| | | {REG_HAECC7, 0x94},//50
|
| | | |
| | | {REG_COM8, 0xe5},
|
| | | {REG_COM5, 0x61},
|
| | | {REG_COM6, 0x4b},
|
| | | |
| | | {REG_MVFP, 0x37},//0x07,
|
| | | {REG_ADCCTR1, 0x02},
|
| | | {REG_ADCCTR2, 0x91},
|
| | | {REG_CHLF, 0x0b},
|
| | | |
| | | {REG_ADC, 0x1d},
|
| | | {REG_ACOM, 0x71},
|
| | | {REG_OFON, 0x2a},
|
| | | {REG_COM12, 0x78},
|
| | | |
| | | {REG_GFIX, 0x5d},
|
| | | {REG_DBLV, 0x40},//PLL
|
| | | {REG_REG74, 0x19},
|
| | | |
| | | {REG_DM_LNL, 0x00},//0x19,//0x66
|
| | | |
| | | {REG_ABLC1, 0x0c}, |
| | | {REG_THL_DLT, 0x82},//80
|
| | | |
| | | /* AWBC1~AWBC6 */
|
| | | {REG_AWBC1, 0x14},
|
| | | {REG_AWBC2, 0xf0},
|
| | | {REG_AWBC3, 0x34}, |
| | | {REG_AWBC4, 0x58},
|
| | | {REG_AWBC5, 0x28},
|
| | | {REG_AWBC6, 0x3a},
|
| | |
|
| | | /* LCCx */
|
| | | {REG_LLC3, 0x04},
|
| | | {REG_LLC4, 0x20}, |
| | | {REG_LLC5, 0x05},
|
| | | {REG_LLC6, 0x04},
|
| | | {REG_LLC7, 0x08},
|
| | | |
| | | {REG_AWBCTR3, 0x0a},
|
| | | {REG_AWBCTR2, 0x55}, |
| | | {REG_AWBCTR1, 0x11},//100
|
| | | {REG_AWBCTR0, 0x9f},//0x9e for advance AWB
|
| | | |
| | | {REG_BRIGHT, 0x00},//ÁÁ¶È
|
| | | {REG_CONTRAS, 0x45},//¶Ô±È¶È
|
| | | {REG_CONTRAS_CENTER, 0x80}, |
| | | {OV_REG_TERM,OV_VAL_TERM},
|
| | | };
|
| | |
|
| | | const ov_regval_t ov7670_fmt_qvga_yuv422[] = |
| | | {
|
| | | { REG_COM7, COM7_FMT_QVGA }, /* Selects YUV mode */
|
| | | { REG_RGB444, 0 }, /* No RGB444 please */
|
| | | { REG_COM1, 0 }, /* CCIR601 */
|
| | | { REG_COM15, COM15_R00FF },
|
| | | { REG_COM9, 0x18 }, /* 4x gain ceiling; 0x8 is reserved bit */
|
| | | { REG_MTX1, 0x80 }, /* "matrix coefficient 1" */
|
| | | { REG_MTX2, 0x80 }, /* "matrix coefficient 2" */
|
| | | { REG_MTX3, 0 }, /* vb */
|
| | | { REG_MTX4, 0x22 }, /* "matrix coefficient 4" */
|
| | | { REG_MTX5, 0x5e }, /* "matrix coefficient 5" */
|
| | | { REG_MTX6, 0x80 }, /* "matrix coefficient 6" */
|
| | | { REG_COM13, COM13_GAMMA|COM13_UVSAT },
|
| | | {OV_REG_TERM,OV_VAL_TERM},
|
| | | };
|
| | |
|
| | | const ov_regval_t ov7670_fmt_qvga_rgb565[] = |
| | | {
|
| | | { REG_COM7, COM7_FMT_QVGA|COM7_RGB }, /* Selects RGB mode */
|
| | | { REG_RGB444, 0 }, /* No RGB444 please */
|
| | | { REG_COM1, 0x0 }, /* CCIR601 */
|
| | | { REG_COM15, COM15_RGB565 },
|
| | | { REG_COM9, 0x0 }, /* ×Ô¶¯ÔöÒæÏÞ¶È-×î´óAGCÖµ 2X */
|
| | | { REG_MTX1, 0xb3 }, /* "matrix coefficient 1" */
|
| | | { REG_MTX2, 0xb3 }, /* "matrix coefficient 2" */
|
| | | { REG_MTX3, 0 }, /* vb */
|
| | | { REG_MTX4, 0x3d }, /* "matrix coefficient 4" */
|
| | | { REG_MTX5, 0xa7 }, /* "matrix coefficient 5" */
|
| | | { REG_MTX6, 0xe4 }, /* "matrix coefficient 6" */
|
| | | { REG_COM13, COM13_GAMMA|COM13_UVSAT },
|
| | | {OV_REG_TERM,OV_VAL_TERM},
|
| | | };
|
| | |
|
| | | const ov_regval_t ov7670_fmt_qvga_rgb444[] = |
| | | {
|
| | | { REG_COM7, COM7_FMT_QVGA|COM7_RGB }, /* Selects RGB mode */
|
| | | { REG_RGB444, R444_ENABLE }, /* Enable xxxxrrrr ggggbbbb */
|
| | | { REG_COM1, 0x0 }, /* CCIR601 */
|
| | | { REG_COM15, COM15_R01FE|COM15_RGB565 }, /* Data range needed? */
|
| | | { REG_COM9, 0x38 }, /* 16x gain ceiling; 0x8 is reserved bit */
|
| | | { REG_MTX1, 0xb3 }, /* "matrix coefficient 1" */
|
| | | { REG_MTX2, 0xb3 }, /* "matrix coefficient 2" */
|
| | | { REG_MTX3, 0 }, /* vb */
|
| | | { REG_MTX4, 0x3d }, /* "matrix coefficient 4" */
|
| | | { REG_MTX5, 0xa7 }, /* "matrix coefficient 5" */
|
| | | { REG_MTX6, 0xe4 }, /* "matrix coefficient 6" */
|
| | | { REG_COM13, COM13_GAMMA|COM13_UVSAT|0x2 }, /* Magic rsvd bit */
|
| | | {OV_REG_TERM,OV_VAL_TERM},
|
| | | };
|
| | |
|
| | | const ov_regval_t ov7670_fmt_qvga_raw[] = |
| | | {
|
| | | { REG_COM7, COM7_FMT_QVGA|COM7_BAYER },
|
| | | { REG_COM13, 0x08 }, /* No gamma, magic rsvd bit */
|
| | | { REG_COM16, 0x3d }, /* Edge enhancement, denoise */
|
| | | { REG_REG76, 0xe1 }, /* Pix correction, magic rsvd */
|
| | | {OV_REG_TERM,OV_VAL_TERM},
|
| | | };
|
| | |
|
| | | #endif /* End of __OV7670_REG_H */ |
New file |
| | |
| | | ;******************** (C) COPYRIGHT 2011 STMicroelectronics ********************
|
| | | ;* File Name : startup_stm32f10x_hd.s
|
| | | ;* Author : MCD Application Team
|
| | | ;* Version : V3.5.0
|
| | | ;* Date : 11-March-2011
|
| | | ;* Description : STM32F10x High Density Devices vector table for EWARM |
| | | ;* toolchain.
|
| | | ;* This module performs:
|
| | | ;* - Set the initial SP
|
| | | ;* - Configure the clock system and the external SRAM |
| | | ;* mounted on STM3210E-EVAL board to be used as data |
| | | ;* memory (optional, to be enabled by user)
|
| | | ;* - Set the initial PC == __iar_program_start,
|
| | | ;* - Set the vector table entries with the exceptions ISR address,
|
| | | ;* After Reset the Cortex-M3 processor is in Thread mode,
|
| | | ;* priority is Privileged, and the Stack is set to Main.
|
| | | ;********************************************************************************
|
| | | ;* THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
|
| | | ;* WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE TIME.
|
| | | ;* AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY DIRECT,
|
| | | ;* INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE
|
| | | ;* CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING
|
| | | ;* INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
|
| | | ;*******************************************************************************
|
| | | ;
|
| | | ;
|
| | | ; The modules in this file are included in the libraries, and may be replaced
|
| | | ; by any user-defined modules that define the PUBLIC symbol _program_start or
|
| | | ; a user defined start symbol.
|
| | | ; To override the cstartup defined in the library, simply add your modified
|
| | | ; version to the workbench project.
|
| | | ;
|
| | | ; The vector table is normally located at address 0.
|
| | | ; When debugging in RAM, it can be located in RAM, aligned to at least 2^6.
|
| | | ; The name "__vector_table" has special meaning for C-SPY:
|
| | | ; it is where the SP start value is found, and the NVIC vector
|
| | | ; table register (VTOR) is initialized to this address if != 0.
|
| | | ;
|
| | | ; Cortex-M version
|
| | | ; |
| | | |
| | | MODULE ?cstartup
|
| | | |
| | | ;; Forward declaration of sections.
|
| | | SECTION CSTACK:DATA:NOROOT(3)
|
| | |
|
| | | SECTION .intvec:CODE:NOROOT(2)
|
| | |
|
| | | EXTERN __iar_program_start
|
| | | EXTERN SystemInit |
| | | PUBLIC __vector_table
|
| | |
|
| | | DATA
|
| | | |
| | | __vector_table
|
| | | DCD sfe(CSTACK)
|
| | | DCD Reset_Handler ; Reset Handler
|
| | | DCD NMI_Handler ; NMI Handler
|
| | | DCD HardFault_Handler ; Hard Fault Handler
|
| | | DCD MemManage_Handler ; MPU Fault Handler
|
| | | DCD BusFault_Handler ; Bus Fault Handler
|
| | | DCD UsageFault_Handler ; Usage Fault Handler
|
| | | DCD 0 ; Reserved
|
| | | DCD 0 ; Reserved
|
| | | DCD 0 ; Reserved
|
| | | DCD 0 ; Reserved
|
| | | DCD SVC_Handler ; SVCall Handler
|
| | | DCD DebugMon_Handler ; Debug Monitor Handler
|
| | | DCD 0 ; Reserved
|
| | | DCD PendSV_Handler ; PendSV Handler
|
| | | DCD SysTick_Handler ; SysTick Handler
|
| | |
|
| | | ; External Interrupts
|
| | | DCD WWDG_IRQHandler ; Window Watchdog
|
| | | DCD PVD_IRQHandler ; PVD through EXTI Line detect
|
| | | DCD TAMPER_IRQHandler ; Tamper
|
| | | DCD RTC_IRQHandler ; RTC
|
| | | DCD FLASH_IRQHandler ; Flash
|
| | | DCD RCC_IRQHandler ; RCC
|
| | | DCD EXTI0_IRQHandler ; EXTI Line 0
|
| | | DCD EXTI1_IRQHandler ; EXTI Line 1
|
| | | DCD EXTI2_IRQHandler ; EXTI Line 2
|
| | | DCD EXTI3_IRQHandler ; EXTI Line 3
|
| | | DCD EXTI4_IRQHandler ; EXTI Line 4
|
| | | DCD DMA1_Channel1_IRQHandler ; DMA1 Channel 1
|
| | | DCD DMA1_Channel2_IRQHandler ; DMA1 Channel 2
|
| | | DCD DMA1_Channel3_IRQHandler ; DMA1 Channel 3
|
| | | DCD DMA1_Channel4_IRQHandler ; DMA1 Channel 4
|
| | | DCD DMA1_Channel5_IRQHandler ; DMA1 Channel 5
|
| | | DCD DMA1_Channel6_IRQHandler ; DMA1 Channel 6
|
| | | DCD DMA1_Channel7_IRQHandler ; DMA1 Channel 7
|
| | | DCD ADC1_2_IRQHandler ; ADC1 & ADC2
|
| | | DCD USB_HP_CAN1_TX_IRQHandler ; USB High Priority or CAN1 TX
|
| | | DCD USB_LP_CAN1_RX0_IRQHandler ; USB Low Priority or CAN1 RX0
|
| | | DCD CAN1_RX1_IRQHandler ; CAN1 RX1
|
| | | DCD CAN1_SCE_IRQHandler ; CAN1 SCE
|
| | | DCD EXTI9_5_IRQHandler ; EXTI Line 9..5
|
| | | DCD TIM1_BRK_IRQHandler ; TIM1 Break
|
| | | DCD TIM1_UP_IRQHandler ; TIM1 Update
|
| | | DCD TIM1_TRG_COM_IRQHandler ; TIM1 Trigger and Commutation
|
| | | DCD TIM1_CC_IRQHandler ; TIM1 Capture Compare
|
| | | DCD TIM2_IRQHandler ; TIM2
|
| | | DCD TIM3_IRQHandler ; TIM3
|
| | | DCD TIM4_IRQHandler ; TIM4
|
| | | DCD I2C1_EV_IRQHandler ; I2C1 Event
|
| | | DCD I2C1_ER_IRQHandler ; I2C1 Error
|
| | | DCD I2C2_EV_IRQHandler ; I2C2 Event
|
| | | DCD I2C2_ER_IRQHandler ; I2C2 Error
|
| | | DCD SPI1_IRQHandler ; SPI1
|
| | | DCD SPI2_IRQHandler ; SPI2
|
| | | DCD USART1_IRQHandler ; USART1
|
| | | DCD USART2_IRQHandler ; USART2
|
| | | DCD USART3_IRQHandler ; USART3
|
| | | DCD EXTI15_10_IRQHandler ; EXTI Line 15..10
|
| | | DCD RTCAlarm_IRQHandler ; RTC Alarm through EXTI Line
|
| | | DCD USBWakeUp_IRQHandler ; USB Wakeup from suspend
|
| | | DCD TIM8_BRK_IRQHandler ; TIM8 Break
|
| | | DCD TIM8_UP_IRQHandler ; TIM8 Update
|
| | | DCD TIM8_TRG_COM_IRQHandler ; TIM8 Trigger and Commutation
|
| | | DCD TIM8_CC_IRQHandler ; TIM8 Capture Compare
|
| | | DCD ADC3_IRQHandler ; ADC3
|
| | | DCD FSMC_IRQHandler ; FSMC
|
| | | DCD SDIO_IRQHandler ; SDIO
|
| | | DCD TIM5_IRQHandler ; TIM5
|
| | | DCD SPI3_IRQHandler ; SPI3
|
| | | DCD UART4_IRQHandler ; UART4
|
| | | DCD UART5_IRQHandler ; UART5
|
| | | DCD TIM6_IRQHandler ; TIM6
|
| | | DCD TIM7_IRQHandler ; TIM7
|
| | | DCD DMA2_Channel1_IRQHandler ; DMA2 Channel1
|
| | | DCD DMA2_Channel2_IRQHandler ; DMA2 Channel2
|
| | | DCD DMA2_Channel3_IRQHandler ; DMA2 Channel3
|
| | | DCD DMA2_Channel4_5_IRQHandler ; DMA2 Channel4 & Channel5
|
| | | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
| | | ;;
|
| | | ;; Default interrupt handlers.
|
| | | ;;
|
| | | THUMB
|
| | |
|
| | | PUBWEAK Reset_Handler
|
| | | SECTION .text:CODE:REORDER(2)
|
| | | Reset_Handler
|
| | | LDR R0, =SystemInit
|
| | | BLX R0
|
| | | LDR R0, =__iar_program_start
|
| | | BX R0
|
| | | |
| | | PUBWEAK NMI_Handler
|
| | | SECTION .text:CODE:REORDER(1)
|
| | | NMI_Handler
|
| | | B NMI_Handler
|
| | |
|
| | | PUBWEAK HardFault_Handler
|
| | | SECTION .text:CODE:REORDER(1)
|
| | | HardFault_Handler
|
| | | B HardFault_Handler
|
| | |
|
| | | PUBWEAK MemManage_Handler
|
| | | SECTION .text:CODE:REORDER(1)
|
| | | MemManage_Handler
|
| | | B MemManage_Handler
|
| | |
|
| | | PUBWEAK BusFault_Handler
|
| | | SECTION .text:CODE:REORDER(1)
|
| | | BusFault_Handler
|
| | | B BusFault_Handler
|
| | |
|
| | | PUBWEAK UsageFault_Handler
|
| | | SECTION .text:CODE:REORDER(1)
|
| | | UsageFault_Handler
|
| | | B UsageFault_Handler
|
| | |
|
| | | PUBWEAK SVC_Handler
|
| | | SECTION .text:CODE:REORDER(1)
|
| | | SVC_Handler
|
| | | B SVC_Handler
|
| | |
|
| | | PUBWEAK DebugMon_Handler
|
| | | SECTION .text:CODE:REORDER(1)
|
| | | DebugMon_Handler
|
| | | B DebugMon_Handler
|
| | |
|
| | | PUBWEAK PendSV_Handler
|
| | | SECTION .text:CODE:REORDER(1)
|
| | | PendSV_Handler
|
| | | B PendSV_Handler
|
| | |
|
| | | PUBWEAK SysTick_Handler
|
| | | SECTION .text:CODE:REORDER(1)
|
| | | SysTick_Handler
|
| | | B SysTick_Handler
|
| | |
|
| | | PUBWEAK WWDG_IRQHandler
|
| | | SECTION .text:CODE:REORDER(1)
|
| | | WWDG_IRQHandler
|
| | | B WWDG_IRQHandler
|
| | |
|
| | | PUBWEAK PVD_IRQHandler
|
| | | SECTION .text:CODE:REORDER(1)
|
| | | PVD_IRQHandler
|
| | | B PVD_IRQHandler
|
| | |
|
| | | PUBWEAK TAMPER_IRQHandler
|
| | | SECTION .text:CODE:REORDER(1)
|
| | | TAMPER_IRQHandler
|
| | | B TAMPER_IRQHandler
|
| | |
|
| | | PUBWEAK RTC_IRQHandler
|
| | | SECTION .text:CODE:REORDER(1)
|
| | | RTC_IRQHandler
|
| | | B RTC_IRQHandler
|
| | |
|
| | | PUBWEAK FLASH_IRQHandler
|
| | | SECTION .text:CODE:REORDER(1)
|
| | | FLASH_IRQHandler
|
| | | B FLASH_IRQHandler
|
| | |
|
| | | PUBWEAK RCC_IRQHandler
|
| | | SECTION .text:CODE:REORDER(1)
|
| | | RCC_IRQHandler
|
| | | B RCC_IRQHandler
|
| | |
|
| | | PUBWEAK EXTI0_IRQHandler
|
| | | SECTION .text:CODE:REORDER(1)
|
| | | EXTI0_IRQHandler
|
| | | B EXTI0_IRQHandler
|
| | |
|
| | | PUBWEAK EXTI1_IRQHandler
|
| | | SECTION .text:CODE:REORDER(1)
|
| | | EXTI1_IRQHandler
|
| | | B EXTI1_IRQHandler
|
| | |
|
| | | PUBWEAK EXTI2_IRQHandler
|
| | | SECTION .text:CODE:REORDER(1)
|
| | | EXTI2_IRQHandler
|
| | | B EXTI2_IRQHandler
|
| | |
|
| | | PUBWEAK EXTI3_IRQHandler
|
| | | SECTION .text:CODE:REORDER(1)
|
| | | EXTI3_IRQHandler
|
| | | B EXTI3_IRQHandler
|
| | |
|
| | | PUBWEAK EXTI4_IRQHandler
|
| | | SECTION .text:CODE:REORDER(1)
|
| | | EXTI4_IRQHandler
|
| | | B EXTI4_IRQHandler
|
| | |
|
| | | PUBWEAK DMA1_Channel1_IRQHandler
|
| | | SECTION .text:CODE:REORDER(1)
|
| | | DMA1_Channel1_IRQHandler
|
| | | B DMA1_Channel1_IRQHandler
|
| | |
|
| | | PUBWEAK DMA1_Channel2_IRQHandler
|
| | | SECTION .text:CODE:REORDER(1)
|
| | | DMA1_Channel2_IRQHandler
|
| | | B DMA1_Channel2_IRQHandler
|
| | |
|
| | | PUBWEAK DMA1_Channel3_IRQHandler
|
| | | SECTION .text:CODE:REORDER(1)
|
| | | DMA1_Channel3_IRQHandler
|
| | | B DMA1_Channel3_IRQHandler
|
| | |
|
| | | PUBWEAK DMA1_Channel4_IRQHandler
|
| | | SECTION .text:CODE:REORDER(1)
|
| | | DMA1_Channel4_IRQHandler
|
| | | B DMA1_Channel4_IRQHandler
|
| | |
|
| | | PUBWEAK DMA1_Channel5_IRQHandler
|
| | | SECTION .text:CODE:REORDER(1)
|
| | | DMA1_Channel5_IRQHandler
|
| | | B DMA1_Channel5_IRQHandler
|
| | |
|
| | | PUBWEAK DMA1_Channel6_IRQHandler
|
| | | SECTION .text:CODE:REORDER(1)
|
| | | DMA1_Channel6_IRQHandler
|
| | | B DMA1_Channel6_IRQHandler
|
| | |
|
| | | PUBWEAK DMA1_Channel7_IRQHandler
|
| | | SECTION .text:CODE:REORDER(1)
|
| | | DMA1_Channel7_IRQHandler
|
| | | B DMA1_Channel7_IRQHandler
|
| | |
|
| | | PUBWEAK ADC1_2_IRQHandler
|
| | | SECTION .text:CODE:REORDER(1)
|
| | | ADC1_2_IRQHandler
|
| | | B ADC1_2_IRQHandler
|
| | |
|
| | | PUBWEAK USB_HP_CAN1_TX_IRQHandler
|
| | | SECTION .text:CODE:REORDER(1)
|
| | | USB_HP_CAN1_TX_IRQHandler
|
| | | B USB_HP_CAN1_TX_IRQHandler
|
| | |
|
| | | PUBWEAK USB_LP_CAN1_RX0_IRQHandler
|
| | | SECTION .text:CODE:REORDER(1)
|
| | | USB_LP_CAN1_RX0_IRQHandler
|
| | | B USB_LP_CAN1_RX0_IRQHandler
|
| | |
|
| | | PUBWEAK CAN1_RX1_IRQHandler
|
| | | SECTION .text:CODE:REORDER(1)
|
| | | CAN1_RX1_IRQHandler
|
| | | B CAN1_RX1_IRQHandler
|
| | |
|
| | | PUBWEAK CAN1_SCE_IRQHandler
|
| | | SECTION .text:CODE:REORDER(1)
|
| | | CAN1_SCE_IRQHandler
|
| | | B CAN1_SCE_IRQHandler
|
| | |
|
| | | PUBWEAK EXTI9_5_IRQHandler
|
| | | SECTION .text:CODE:REORDER(1)
|
| | | EXTI9_5_IRQHandler
|
| | | B EXTI9_5_IRQHandler
|
| | |
|
| | | PUBWEAK TIM1_BRK_IRQHandler
|
| | | SECTION .text:CODE:REORDER(1)
|
| | | TIM1_BRK_IRQHandler
|
| | | B TIM1_BRK_IRQHandler
|
| | |
|
| | | PUBWEAK TIM1_UP_IRQHandler
|
| | | SECTION .text:CODE:REORDER(1)
|
| | | TIM1_UP_IRQHandler
|
| | | B TIM1_UP_IRQHandler
|
| | |
|
| | | PUBWEAK TIM1_TRG_COM_IRQHandler
|
| | | SECTION .text:CODE:REORDER(1)
|
| | | TIM1_TRG_COM_IRQHandler
|
| | | B TIM1_TRG_COM_IRQHandler
|
| | |
|
| | | PUBWEAK TIM1_CC_IRQHandler
|
| | | SECTION .text:CODE:REORDER(1)
|
| | | TIM1_CC_IRQHandler
|
| | | B TIM1_CC_IRQHandler
|
| | |
|
| | | PUBWEAK TIM2_IRQHandler
|
| | | SECTION .text:CODE:REORDER(1)
|
| | | TIM2_IRQHandler
|
| | | B TIM2_IRQHandler
|
| | |
|
| | | PUBWEAK TIM3_IRQHandler
|
| | | SECTION .text:CODE:REORDER(1)
|
| | | TIM3_IRQHandler
|
| | | B TIM3_IRQHandler
|
| | |
|
| | | PUBWEAK TIM4_IRQHandler
|
| | | SECTION .text:CODE:REORDER(1)
|
| | | TIM4_IRQHandler
|
| | | B TIM4_IRQHandler
|
| | |
|
| | | PUBWEAK I2C1_EV_IRQHandler
|
| | | SECTION .text:CODE:REORDER(1)
|
| | | I2C1_EV_IRQHandler
|
| | | B I2C1_EV_IRQHandler
|
| | |
|
| | | PUBWEAK I2C1_ER_IRQHandler
|
| | | SECTION .text:CODE:REORDER(1)
|
| | | I2C1_ER_IRQHandler
|
| | | B I2C1_ER_IRQHandler
|
| | |
|
| | | PUBWEAK I2C2_EV_IRQHandler
|
| | | SECTION .text:CODE:REORDER(1)
|
| | | I2C2_EV_IRQHandler
|
| | | B I2C2_EV_IRQHandler
|
| | |
|
| | | PUBWEAK I2C2_ER_IRQHandler
|
| | | SECTION .text:CODE:REORDER(1)
|
| | | I2C2_ER_IRQHandler
|
| | | B I2C2_ER_IRQHandler
|
| | |
|
| | | PUBWEAK SPI1_IRQHandler
|
| | | SECTION .text:CODE:REORDER(1)
|
| | | SPI1_IRQHandler
|
| | | B SPI1_IRQHandler
|
| | |
|
| | | PUBWEAK SPI2_IRQHandler
|
| | | SECTION .text:CODE:REORDER(1)
|
| | | SPI2_IRQHandler
|
| | | B SPI2_IRQHandler
|
| | |
|
| | | PUBWEAK USART1_IRQHandler
|
| | | SECTION .text:CODE:REORDER(1)
|
| | | USART1_IRQHandler
|
| | | B USART1_IRQHandler
|
| | |
|
| | | PUBWEAK USART2_IRQHandler
|
| | | SECTION .text:CODE:REORDER(1)
|
| | | USART2_IRQHandler
|
| | | B USART2_IRQHandler
|
| | |
|
| | | PUBWEAK USART3_IRQHandler
|
| | | SECTION .text:CODE:REORDER(1)
|
| | | USART3_IRQHandler
|
| | | B USART3_IRQHandler
|
| | |
|
| | | PUBWEAK EXTI15_10_IRQHandler
|
| | | SECTION .text:CODE:REORDER(1)
|
| | | EXTI15_10_IRQHandler
|
| | | B EXTI15_10_IRQHandler
|
| | |
|
| | | PUBWEAK RTCAlarm_IRQHandler
|
| | | SECTION .text:CODE:REORDER(1)
|
| | | RTCAlarm_IRQHandler
|
| | | B RTCAlarm_IRQHandler
|
| | |
|
| | | PUBWEAK USBWakeUp_IRQHandler
|
| | | SECTION .text:CODE:REORDER(1)
|
| | | USBWakeUp_IRQHandler
|
| | | B USBWakeUp_IRQHandler
|
| | |
|
| | | PUBWEAK TIM8_BRK_IRQHandler
|
| | | SECTION .text:CODE:REORDER(1)
|
| | | TIM8_BRK_IRQHandler
|
| | | B TIM8_BRK_IRQHandler
|
| | |
|
| | | PUBWEAK TIM8_UP_IRQHandler
|
| | | SECTION .text:CODE:REORDER(1)
|
| | | TIM8_UP_IRQHandler
|
| | | B TIM8_UP_IRQHandler
|
| | |
|
| | | PUBWEAK TIM8_TRG_COM_IRQHandler
|
| | | SECTION .text:CODE:REORDER(1)
|
| | | TIM8_TRG_COM_IRQHandler
|
| | | B TIM8_TRG_COM_IRQHandler
|
| | |
|
| | | PUBWEAK TIM8_CC_IRQHandler
|
| | | SECTION .text:CODE:REORDER(1)
|
| | | TIM8_CC_IRQHandler
|
| | | B TIM8_CC_IRQHandler
|
| | |
|
| | | PUBWEAK ADC3_IRQHandler
|
| | | SECTION .text:CODE:REORDER(1)
|
| | | ADC3_IRQHandler
|
| | | B ADC3_IRQHandler
|
| | |
|
| | | PUBWEAK FSMC_IRQHandler
|
| | | SECTION .text:CODE:REORDER(1)
|
| | | FSMC_IRQHandler
|
| | | B FSMC_IRQHandler
|
| | |
|
| | | PUBWEAK SDIO_IRQHandler
|
| | | SECTION .text:CODE:REORDER(1)
|
| | | SDIO_IRQHandler
|
| | | B SDIO_IRQHandler
|
| | |
|
| | | PUBWEAK TIM5_IRQHandler
|
| | | SECTION .text:CODE:REORDER(1)
|
| | | TIM5_IRQHandler
|
| | | B TIM5_IRQHandler
|
| | |
|
| | | PUBWEAK SPI3_IRQHandler
|
| | | SECTION .text:CODE:REORDER(1)
|
| | | SPI3_IRQHandler
|
| | | B SPI3_IRQHandler
|
| | |
|
| | | PUBWEAK UART4_IRQHandler
|
| | | SECTION .text:CODE:REORDER(1)
|
| | | UART4_IRQHandler
|
| | | B UART4_IRQHandler
|
| | |
|
| | | PUBWEAK UART5_IRQHandler
|
| | | SECTION .text:CODE:REORDER(1)
|
| | | UART5_IRQHandler
|
| | | B UART5_IRQHandler
|
| | |
|
| | | PUBWEAK TIM6_IRQHandler
|
| | | SECTION .text:CODE:REORDER(1)
|
| | | TIM6_IRQHandler
|
| | | B TIM6_IRQHandler
|
| | |
|
| | | PUBWEAK TIM7_IRQHandler
|
| | | SECTION .text:CODE:REORDER(1)
|
| | | TIM7_IRQHandler
|
| | | B TIM7_IRQHandler
|
| | |
|
| | | PUBWEAK DMA2_Channel1_IRQHandler
|
| | | SECTION .text:CODE:REORDER(1)
|
| | | DMA2_Channel1_IRQHandler
|
| | | B DMA2_Channel1_IRQHandler
|
| | |
|
| | | PUBWEAK DMA2_Channel2_IRQHandler
|
| | | SECTION .text:CODE:REORDER(1)
|
| | | DMA2_Channel2_IRQHandler
|
| | | B DMA2_Channel2_IRQHandler
|
| | |
|
| | | PUBWEAK DMA2_Channel3_IRQHandler
|
| | | SECTION .text:CODE:REORDER(1)
|
| | | DMA2_Channel3_IRQHandler
|
| | | B DMA2_Channel3_IRQHandler
|
| | |
|
| | | PUBWEAK DMA2_Channel4_5_IRQHandler
|
| | | SECTION .text:CODE:REORDER(1)
|
| | | DMA2_Channel4_5_IRQHandler
|
| | | B DMA2_Channel4_5_IRQHandler
|
| | | |
| | | |
| | | END
|
| | |
|
| | | /******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/
|
New file |
| | |
| | | /****************************************************************************
|
| | | * Copyright: (C)2014 Î人ÁèÔÆÇ¶ÈëʽʵÑéÊÒ www.emblinux.com
|
| | | * Author: GuoWenxue<guowenxue@gmail.com> QQ: 281143292
|
| | | * Description: ·Ü¶·STM32v5¿ª·¢°åcontiki²Ù×÷ϵͳLEDÉ豸²Ù×÷º¯Êý½Ó¿Ú
|
| | | * |
| | | * ChangeLog:
|
| | | * °æ±¾ºÅ ÈÕÆÚ ×÷Õß ËµÃ÷
|
| | | * V1.0.0 2014.08.25 GuoWenxue ·¢²¼¸Ã°æ±¾
|
| | | ****************************************************************************/
|
| | |
|
| | | #include "stm32v5_led.h"
|
| | |
|
| | | static led_gpio_t leds_gpio[MAX_LED] =
|
| | | {
|
| | | {LED1, GPIOB, GPIO_Pin_5}, /* LED1 ÓõÄGPB5 */
|
| | | {LED2, GPIOD, GPIO_Pin_6}, /* LED2 ÓõÄGPD6 */
|
| | | {LED3, GPIOD, GPIO_Pin_3}, /* LED3 ÓõÄGPD3 */ |
| | | };
|
| | |
|
| | |
|
| | | void init_led_gpio(void)
|
| | | {
|
| | | int i;
|
| | | GPIO_InitTypeDef GPIO_InitStructure;
|
| | |
|
| | | /* ʹÄÜPBºÍPD×é GPIOµÄʱÖÓ */
|
| | | RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB | RCC_APB2Periph_GPIOD , ENABLE); |
| | | |
| | | /*ÉèÖà PB5(LED1), PD6(LED2), PD3(LED3)Ϊ GPIO Êä³öÍÆÃâģʽ£¬¿ÚÏ߷תËÙ¶ÈΪ50MHz */
|
| | | for(i=0; i<MAX_LED; i++)
|
| | | {
|
| | | /*ÉèÖà PB5(LED1)Ϊ GPIO Êä³öÍÆÃâģʽ£¬¿ÚÏ߷תËÙ¶ÈΪ50MHz */
|
| | | GPIO_InitStructure.GPIO_Pin = leds_gpio[i].pin; |
| | | GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
|
| | | GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
|
| | | GPIO_Init(leds_gpio[i].group, &GPIO_InitStructure); |
| | | }
|
| | | }
|
| | |
|
| | | void turn_led(int which, int cmd)
|
| | | {
|
| | | if(which<0 || which> MAX_LED )
|
| | | return;
|
| | | |
| | | if(OFF == cmd)
|
| | | GPIO_ResetBits(leds_gpio[which].group, leds_gpio[which].pin);
|
| | | else
|
| | | GPIO_SetBits(leds_gpio[which].group, leds_gpio[which].pin);
|
| | | }
|
New file |
| | |
| | | /****************************************************************************
|
| | | * Copyright: (C)2014 Î人ÁèÔÆÇ¶ÈëʽʵÑéÊÒ www.emblinux.com
|
| | | * Author: GuoWenxue<guowenxue@gmail.com> QQ: 281143292
|
| | | * Description: ·Ü¶·STM32v5¿ª·¢°åLEDÉ豸²Ù×÷º¯Êý
|
| | | * |
| | | * ChangeLog:
|
| | | * °æ±¾ºÅ ÈÕÆÚ ×÷Õß ËµÃ÷
|
| | | * V1.0.0 2014.08.25 GuoWenxue ·¢²¼¸Ã°æ±¾
|
| | | ****************************************************************************/
|
| | |
|
| | | #ifndef __STM32V5_LED_H
|
| | | #define __STM32V5_LED_H
|
| | |
|
| | | #include"stm32f10x.h"
|
| | |
|
| | | #define ON 1
|
| | | #define OFF 0
|
| | |
|
| | | enum |
| | | {
|
| | | LED1 = 0,
|
| | | LED2,
|
| | | LED3,
|
| | | MAX_LED,
|
| | | };
|
| | |
|
| | | typedef struct led_gpio_s
|
| | | {
|
| | | int num; /* LED񅧏 */
|
| | | GPIO_TypeDef *group; /* LEDʹÓõÄGPIOÔÚÄÄÒ»×é: GPIOB or GPIOD */ |
| | | uint16_t pin; /* LEDʹÓõÄGPIO×éÖеÄÄÇÒ»¸öpin: GPIO_Pin_x */
|
| | | } led_gpio_t;
|
| | |
|
| | | extern void init_led_gpio(void);
|
| | | extern void turn_led(int which, int cmd);
|
| | |
|
| | | #endif
|
New file |
| | |
| | | /****************************************************************************
|
| | | * Copyright: (C)2014 Î人ÁèÔÆÇ¶ÈëʽʵÑéÊÒ www.emblinux.com
|
| | | * Author: GuoWenxue<guowenxue@gmail.com> QQ: 281143292
|
| | | * Description: ·Ü¶·STM32v5¿ª·¢°åOV7670µÄ¼Ä´æÆ÷±í£¬Ö¡Í¬²½ÖжÏÅäÖã¬
|
| | | * ÒÔ¼°ÉãÏñÍ·OV7670+FIFOµÄÒý½Å³õʼ»¯£º
|
| | | * |
| | | * ChangeLog:
|
| | | * °æ±¾ºÅ ÈÕÆÚ ×÷Õß ËµÃ÷
|
| | | * V1.0.0 2014.08.25 GuoWenxue ·¢²¼¸Ã°æ±¾
|
| | | ****************************************************************************/
|
| | |
|
| | | /* CF7670C-V3ÉãÏñÍ·Ä£¿éPin¹Ü½ÅºÍSTM32v5 Á¬½Ó±í:
|
| | | *| ²Î¿¼<CF7670C-V3 ¼òҪ˵Ã÷.pdf>ºÍ<·Ü¶·STM32¿ª·¢°åV5ÔÀíͼ.pdf>
|
| | | *+---------------------------------------+------------------------------+
|
| | | *| CF7670C-V3ÉãÏñÍ·Ä£¿éÒý½Å¼°ËµÃ÷ | STM32¶ËÒý½ÅÁ¬½Ó¼°ËµÃ÷ |
|
| | | *+---------------------------------------+------------------------------+
|
| | | *| Pin1-VCC(3.3V,·½º¸Å̱ê¼ÇµÄΪµÚÒ»½Å) | 3.3V |
|
| | | *| Pin2-GND | GND |
|
| | | *| Pin3-SCL(SCCB_SCL²»´øÉÏÀµç×è) | PE2 |
|
| | | *| Pin4-SDA(SCCB_SDA ´ø4.7KÉÏÀµç×è) | PE3 |
|
| | | *| Pin5-VSYNC(OV7670 ֡ͬ²½ÐźÅ) | PE4 |
|
| | | *| Pin6-HREF(OV7670 ÐÐͬ²½ÐźÅ) | NC |
|
| | | *| Pin7-WEN(FIFO(AL422)дÔÊÐí,¸ßµçƽÓÐЧ | PE5 |
|
| | | *| Pin8-XCLK(NC/RE# ¿Õ½Å) | NC |
|
| | | *| Pin9-RRST(FIFO¶ÁµØÖ·¸´Î» | PE6 |
|
| | | *| Pin10-OE#(FIFOÊý¾ÝÊä³öʹÄÜ,µÍµçƽÓÐЧ | GND |
|
| | | *| Pin11-RCK#(FIFO¶ÁÊý¾ÝʱÖÓ | PD12 |
|
| | | *| Pin12-GND | GND |
|
| | | *| | |
|
| | | *| Pin13-D0 FIFOÊý¾Ý¿ÚÊä³öBIT0 | PC0 |
|
| | | *| Pin14-D1 FIFOÊý¾Ý¿ÚÊä³öBIT1 | PC1 |
|
| | | *| Pin15-D2 FIFOÊý¾Ý¿ÚÊä³öBIT2 | PC2 |
|
| | | *| Pin16-D3 FIFOÊý¾Ý¿ÚÊä³öBIT3 | PC3 |
|
| | | *| Pin17-D4 FIFOÊý¾Ý¿ÚÊä³öBIT4 | PC4 |
|
| | | *| Pin18-D5 FIFOÊý¾Ý¿ÚÊä³öBIT5 | PC5 |
|
| | | *| Pin19-D6 FIFOÊý¾Ý¿ÚÊä³öBIT6 | PC6 |
|
| | | *| Pin20-D7 FIFOÊý¾Ý¿ÚÊä³öBIT7 | PC7 |
|
| | | *+------------------+-----------------+---------------------------------+
|
| | | */
|
| | |
|
| | | #include "stm32f10x.h"
|
| | | #include "stm32f10x_exti.h"
|
| | | #include "misc.h"
|
| | | #include "ov7670_reg.h"
|
| | | #include "stm32v5_ov7670.h"
|
| | | #include "stm32v5_sccb.h"
|
| | | #include "stm32v5_systick.h"
|
| | | #include "lcd_r61509v.h"
|
| | |
|
| | | /* g_OV7670_VSYNCÓÃÀ´±êʾһ֡µÄ¿ªÊ¼ºÍ½áÊø:
|
| | | * OV7670µÄÊý¾ÝÒÔVGAʱÐòÊä³ö,ÔÚ¸ÃʱÐòÖÐVSYNCµÄϽµÑرíʾһ֡µÄÊý¾Ý¿ªÊ¼,¶øÉÏÉýÑØ±íʾһ֡µÄÊý¾Ý½áÊø.
|
| | | * ËùÒÔÎÒÃǽ«VSYNC¹Ü½ÅPE4ÅäÖóÉEXTI4ÉÏÉýÑØ´¥·¢Ä£Ê½.ÔÚEXTI4µÄÖжϴ¦Àí³ÌÐòEXTI4_IRQHandler()ÖÐ,µÚÒ»´Î
|
| | | * ½øÈëÖжϵÄʱºò,˵Ã÷ÉÏÒ»Ö¡Êý¾ÝÒѾ½áÊø(ÕâÒ²Òâζ×ÅÕâÒ»Ö¡Êý¾ÝµÄ¿ªÊ¼),ÎÒÃÇ¿ªÊ¼Ê¹ÄÜÉãÏñÍ·Êý¾ÝдÈëFIFO
|
| | | * ²¢¸üÐÂg_OV7670_VSYNCµÄ״ֵ̬Ϊ1;µ±µÚ¶þ´Î½øÈëÖжϵÄʱºò,˵Ã÷ÕâÒ»Ö¡Êý¾ÝµÄ´«ÊäÒѾ½áÊø,ÎÒÃǾͽûÖ¹
|
| | | * ÉãÏñÍ·Êý¾ÝдÈëFIFO²¢¸üÐÂg_OV7670_VSYNCµÄ״ֵ̬Ϊ2; |
| | | * ÔÚÓ¦ÓóÌÐòÖÐ,ÒªÅжÏg_OV7670_VSYNCµÄÖµÊÇ·ñΪ2,Èç¹ûΪ2Ôò¿ÉÒÔ´ÓFIFOÖжÁÈ¡Êý¾Ý,¶ÁÍêºó¸üÐÂÆä״ֵ̬Ϊ0.
|
| | | */
|
| | | uint8_t g_OV7670_VSYNC = 0;
|
| | |
|
| | | static cam_fifo_pin_t cam_fifo_pins[CAM_FIFO_PIN_MAX] =
|
| | | {
|
| | | {CAM_FIFO_PIN_RRST, GPIOE, GPIO_Pin_6}, /* OV7670 FIFO¶ÁµØÖ·¸´Î», PE6*/ |
| | | {CAM_FIFO_PIN_RCLK, GPIOD, GPIO_Pin_12}, /* OV7670 FIFO¶ÁʱÖÓ, PD12 */ |
| | | {CAM_FIFO_PIN_WE, GPIOE, GPIO_Pin_5}, /* OV7670 FIFOдÔÊÐí, PE5 */ |
| | | };
|
| | |
|
| | | void set_ov7670_fifo_pin(int which, int level)
|
| | | {
|
| | | if(which<0 || which> CAM_FIFO_PIN_MAX )
|
| | | return;
|
| | | |
| | | if(LEVEL_LOW == level)
|
| | | GPIO_ResetBits(cam_fifo_pins[which].group, cam_fifo_pins[which].pin);
|
| | | else
|
| | | GPIO_SetBits(cam_fifo_pins[which].group, cam_fifo_pins[which].pin);
|
| | | }
|
| | |
|
| | | void ov7670_fifo_read_prepare(void)
|
| | | {
|
| | | set_ov7670_fifo_pin(CAM_FIFO_PIN_RRST, LEVEL_LOW);
|
| | | set_ov7670_fifo_pin(CAM_FIFO_PIN_RCLK, LEVEL_LOW);
|
| | | set_ov7670_fifo_pin(CAM_FIFO_PIN_RCLK, LEVEL_HIGH);
|
| | | |
| | | set_ov7670_fifo_pin(CAM_FIFO_PIN_RRST, LEVEL_HIGH);
|
| | | set_ov7670_fifo_pin(CAM_FIFO_PIN_RCLK, LEVEL_LOW);
|
| | | set_ov7670_fifo_pin(CAM_FIFO_PIN_RCLK, LEVEL_HIGH);
|
| | | }
|
| | |
|
| | | /*³õʼ»¯ÉãÏñÍ·Ä£¿éʹÓõÄFIFO(AL422)Ïà¹ØÒý½Å */
|
| | | void init_ov7670_fifo_pin(void)
|
| | | {
|
| | | GPIO_InitTypeDef GPIO_InitStructure; |
| | |
|
| | | /* FIFO_RCLK : PD12 */
|
| | | GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12;
|
| | | GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
|
| | | GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
|
| | | GPIO_Init(GPIOD, &GPIO_InitStructure);
|
| | |
|
| | | /* FIFO_VSYNC : PE4 */
|
| | | GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4;
|
| | | GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
|
| | | GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
|
| | | GPIO_Init(GPIOE, &GPIO_InitStructure);
|
| | | |
| | | /* FIFO_WEN:PE5 FIFO_RRST:PE6 */ |
| | | GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5 | GPIO_Pin_6 ;
|
| | | GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
|
| | | GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; |
| | | GPIO_Init(GPIOE, &GPIO_InitStructure);
|
| | | |
| | | /* FIFO D[0-7] */
|
| | | GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3 |
| | | | GPIO_Pin_4 | GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7;
|
| | | GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
|
| | | GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
|
| | | GPIO_Init(GPIOC, &GPIO_InitStructure);
|
| | |
|
| | | /* PE0-VS-XRST, must set to GPIO output mode here */
|
| | | GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
|
| | | GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
|
| | | GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
|
| | | GPIO_Init(GPIOE, &GPIO_InitStructure);
|
| | | }
|
| | |
|
| | | /* ½«VSYNCÁ¬½ÓµÄPE4¹Ü½Å³õʼ»¯ÎªÍⲿÖжÏEXTI4ģʽ£¬²¢ÉèÖÃΪϽµÑØ´¥·¢:
|
| | | * STM32ÉÏËùÓеÄGPIO¶¼ÒýÈëµ½EXTIÍⲿÖжÏÏßÉÏ£¬Ê¹µÃËùÓеÄGPIO¶¼ÄÜ×÷ΪÍⲿÖжϵÄ
|
| | | * ÊäÈëÔ´.ÆäÖÐPA0~PG0Á¬µ½EXTI0ÉÏ... PA4~PG4Á¬µ½EXT4ÉÏ...PA15~PG15Á¬µ½EXTI15ÉÏ
|
| | | * ͨһʱ¿ÌEXTIxÖ»ÄÜÏìÓ¦Ò»¸ö¶Ë¿ÚµÄʼþ´¥·¢,µ«¿ÉÒÔ·Öʱ¸´Óá£Ëü¿ÉÒÔÅäÖÃΪÉÏÉýÑØ,
|
| | | * ϽµÑØ»òË«±ßÑØ´¥·¢¡£
|
| | | */
|
| | | void init_ov7670_vsync(void)
|
| | | {
|
| | | GPIO_InitTypeDef GPIO_InitStructure; |
| | | EXTI_InitTypeDef EXTI_InitStructure; |
| | | NVIC_InitTypeDef NVIC_InitStructure;
|
| | |
|
| | | /* ³õʼ»¯PE4¿ÚΪGPIOÊäÈëģʽ */
|
| | | RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE|RCC_APB2Periph_AFIO, ENABLE);
|
| | | GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4;
|
| | | GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
|
| | | GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
|
| | | GPIO_Init(GPIOE, &GPIO_InitStructure);
|
| | | |
| | | /* ½«PE4(VSYNC)¹Òµ½³õʼ»¯ÎªEXTI4ģʽ,²¢Ê¹ÓÃÉÏÉýÑØ´¥·¢:
|
| | | * OV7670ʹÓÃVGAʱÐò´«ÊäÊý¾Ý,VSYNCµÄϽµÑرíʾһ֡Êý¾Ý
|
| | | * (¼´Ò»¸±Í¼Ïñ)µÄ´«Ê俪ʼ,VSYNNµÄÉÏÉýÑØ±íʾһ֡Êý¾ÝµÄ´«Êä½áÊø */
|
| | | GPIO_EXTILineConfig(GPIO_PortSourceGPIOE, GPIO_PinSource4); |
| | | EXTI_InitStructure.EXTI_Line = EXTI_Line4; |
| | | EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt; //ÖжÏģʽ
|
| | | EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling; //ÉÏÉýÑØ´¥·¢
|
| | | EXTI_InitStructure.EXTI_LineCmd = ENABLE;
|
| | | EXTI_Init(&EXTI_InitStructure); |
| | | |
| | | /* ·ÖÅäVSYNCÖжÏÓÅÏȼ¶ */
|
| | | NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1); |
| | | NVIC_InitStructure.NVIC_IRQChannel = EXTI4_IRQn ; //ÍⲿÖжÏ4
|
| | | NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; //ÇÀÕ¼ÓÅÏȼ¶ 0
|
| | | NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; //×ÓÓÅÏȼ¶0 |
| | | NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //ʹÄÜ
|
| | | NVIC_Init(&NVIC_InitStructure);
|
| | | }
|
| | |
|
| | | void EXTI4_IRQHandler(void)
|
| | | {
|
| | | if( RESET != EXTI_GetITStatus(EXTI_Line4) )
|
| | | {
|
| | | /*µÚÒ»´ÎVSYNCµÄϽµÑص½À´,˵Ã÷ÕâʱºòÉÏÒ»Ö¡Êý¾ÝÒѾ½áÊø,
|
| | | Ò²¾ÍÊÇÕâÒ»Ö¡Êý¾Ý¿ªÊ¼.Õâʱ¿ªÊ¼ÈÃÉãÏñÍ·µÄÊý¾Ýдµ½FIFOÖÐÈ¥*/
|
| | | if( 0==g_OV7670_VSYNC )
|
| | | { |
| | | FIFO_WE_H(); /* À¸ßʹFIFOдʹÄÜ */
|
| | | g_OV7670_VSYNC = 1;
|
| | | FIFO_WE_H(); /* À¸ßʹFIFOдʹÄÜ */ |
| | | } |
| | | |
| | | /*µÚ¶þ´ÎVSYNCµÄϽµÑص½À´,˵Ã÷ÕâÒ»Ö¡µÄÊý¾Ý´«ÊäÒѾ½áÊø,´ËʱFIFO
|
| | | ÀïÃæ¾ÍÒѾ»º³åºÃOV7670д½øÀ´µÄÍêÕûµÄRGB565 320*240µÄͼÏóÊý¾Ý,
|
| | | ÏÖÔھͽûÖ¹ÉãÏñÍ·µÄÊý¾ÝдÈëµ½FIFOÖÐÈ¥,²¢¸üÐÂg_OV7670_VSYNC*/
|
| | | else if( 1==g_OV7670_VSYNC )
|
| | | {
|
| | | FIFO_WE_L(); /* ÀµÍʹFIFOдֹͣ */
|
| | | g_OV7670_VSYNC = 2; |
| | | }
|
| | | |
| | | /*ÔÚÓ¦ÓóÌÐòÖÐÑ»·¼ì²â±êÖ¾±äÁ¿,g_OV7670_VSYNC=2ʱ¾Í¿ÉÒÔ¶ÁFIFOÖеÄÊý¾Ý,
|
| | | ¶ÁÈ¡ÍêFIFOÖеÄÊý¾Ýºó,Ó¦¸ÃÁ¢¿Ì½«g_OV7670_VSYNCÉèÖÃΪ0 */
|
| | | |
| | | EXTI_ClearITPendingBit(EXTI_Line4);
|
| | | }
|
| | | }
|
| | |
|
| | | int ov_write_regs(const ov_regval_t *pReglist )
|
| | | {
|
| | | const ov_regval_t *pNext = pReglist ;
|
| | |
|
| | | while ( !((pNext->reg == OV_REG_TERM) && (pNext->val == OV_VAL_TERM)) )
|
| | | {
|
| | | if(pNext->reg == 0xFE)
|
| | | {
|
| | | msleep(5);
|
| | | }
|
| | | else
|
| | | {
|
| | | if( !I2C_WriteByte(pNext->reg, pNext->val, OV7670_ADDR) )
|
| | | {
|
| | | return 1;
|
| | | }
|
| | | }
|
| | | pNext++ ;
|
| | | }
|
| | | return 0;
|
| | | }
|
| | |
|
| | | /* ³õʼ»¯OV7670ÄÚ²¿¸÷¸ö¼Ä´æÆ÷ */
|
| | | int init_ov7670_reg(int output_fmt)
|
| | | {
|
| | | uint8_t ID_code = 0;
|
| | | |
| | | /*³õʼ»¯PE2/PE3Á½¸ö¹Ü½Å,ËûÃÇÓÃÀ´GPIOÄ£ÄâI2C×ÜÏß*/
|
| | | init_sccb_gpio();
|
| | | |
| | | /* ͨ¹ýдOV7670µÄCOM7¼Ä´æÆ÷µÄbit[7]À´ÖØÆôËü */
|
| | | if( !I2C_WriteByte(OV7670_REG_COM7, 1<<7, OV7670_ADDR) ) |
| | | {
|
| | | return 1 ;
|
| | | }
|
| | | msleep(15);
|
| | |
|
| | | /* ´Ó¼Ä´æÆ÷ÖжÁ³ö²úÆ·ID²¢ÅжÏÊÇ·ñÊÇOV7670µÄID */
|
| | | if( !I2C_ReadByte(&ID_code, 1, OV7670_REG_VERID, OV7670_ADDR) ) |
| | | {
|
| | | return 2;
|
| | | }
|
| | | if(ID_code != OV7670_VERID) |
| | | {
|
| | | return 3;
|
| | | }
|
| | | |
| | | /* ³õʼ»¯OV7670µÄÆäËû¼Ä´æÆ÷ */
|
| | | ov_write_regs(ov7670_default_regs);
|
| | | switch(output_fmt)
|
| | | {
|
| | | case FMT_QVGA_YUV422:
|
| | | ov_write_regs(ov7670_fmt_qvga_yuv422);
|
| | | break;
|
| | | |
| | | case FMT_QVGA_RGB565:
|
| | | ov_write_regs(ov7670_fmt_qvga_rgb565);
|
| | | break;
|
| | | |
| | | case FMT_QVGA_RGB444:
|
| | | ov_write_regs(ov7670_fmt_qvga_rgb444);
|
| | | break;
|
| | | |
| | | case FMT_QVGA_RAWRGB:
|
| | | ov_write_regs(ov7670_fmt_qvga_raw);
|
| | | break; |
| | | }
|
| | | |
| | |
|
| | | return 0; |
| | | } |
| | |
|
| | | int OV7670_Initialize(int output_fmt)
|
| | | {
|
| | | init_ov7670_fifo_pin(); |
| | |
|
| | | /* ±ØÐëÔÚÕ⸴λһÏÂLCD */
|
| | | LCD_RST_SET(0); |
| | | msleep(200);
|
| | | LCD_RST_SET(1); |
| | |
|
| | | while( 0!=init_ov7670_reg(output_fmt) ) ; /* Èç¹û¼Ä´æÆ÷³õʼ»¯Ê§°ÜÔò»áËÀÔÚÕâÀï */
|
| | | |
| | | init_ov7670_vsync();
|
| | | |
| | | msleep(50); |
| | | |
| | | return 0;
|
| | | }
|
New file |
| | |
| | | /****************************************************************************
|
| | | * Copyright: (C)2014 Î人ÁèÔÆÇ¶ÈëʽʵÑéÊÒ www.emblinux.com
|
| | | * Author: GuoWenxue<guowenxue@gmail.com> QQ: 281143292
|
| | | * Description: ·Ü¶·STM32v5¿ª·¢°åOV7670µÄ¼Ä´æÆ÷±í£¬Ö¡Í¬²½ÖжÏÅäÖã¬
|
| | | * ÒÔ¼°ÉãÏñÍ·OV7670+FIFO(AL422B)µÄÒý½Å³õʼ»¯£º
|
| | | * |
| | | * ChangeLog:
|
| | | * °æ±¾ºÅ ÈÕÆÚ ×÷Õß ËµÃ÷
|
| | | * V1.0.0 2014.08.25 GuoWenxue ·¢²¼¸Ã°æ±¾
|
| | | ****************************************************************************/
|
| | | /* CF7670C-V3ÉãÏñÍ·Ä£¿éPin¹Ü½ÅºÍSTM32v5 Á¬½Ó±í:
|
| | | *| ²Î¿¼<CF7670C-V3 ¼òҪ˵Ã÷.pdf>ºÍ<·Ü¶·STM32¿ª·¢°åV5ÔÀíͼ.pdf>
|
| | | *+---------------------------------------+------------------------------+
|
| | | *| CF7670C-V3ÉãÏñÍ·Ä£¿éÒý½Å¼°ËµÃ÷ | STM32¶ËÒý½ÅÁ¬½Ó¼°ËµÃ÷ |
|
| | | *+---------------------------------------+------------------------------+
|
| | | *| Pin1-VCC(3.3V,·½º¸Å̱ê¼ÇµÄΪµÚÒ»½Å) | 3.3V |
|
| | | *| Pin2-GND | GND |
|
| | | *| Pin3-SCL(SCCB_SCL²»´øÉÏÀµç×è) | PE2 |
|
| | | *| Pin4-SDA(SCCB_SDA ´ø4.7KÉÏÀµç×è) | PE3 |
|
| | | *| Pin5-VSYNC(OV7670 ֡ͬ²½ÐźÅ) | PE4 |
|
| | | *| Pin6-HREF(OV7670 ÐÐͬ²½ÐźÅ) | NC |
|
| | | *| Pin7-WEN(FIFO(AL422)дÔÊÐí,¸ßµçƽÓÐЧ | PE5 |
|
| | | *| Pin8-XCLK(NC/RE# ¿Õ½Å) | NC |
|
| | | *| Pin9-RRST(FIFO¶ÁµØÖ·¸´Î» | PE6 |
|
| | | *| Pin10-OE#(FIFOÊý¾ÝÊä³öʹÄÜ,µÍµçƽÓÐЧ | GND |
|
| | | *| Pin11-RCK#(FIFO¶ÁÊý¾ÝʱÖÓ | PD12 |
|
| | | *| Pin12-GND | GND |
|
| | | *| | |
|
| | | *| Pin13-D0 FIFOÊý¾Ý¿ÚÊä³öBIT0 | PC0 |
|
| | | *| Pin14-D1 FIFOÊý¾Ý¿ÚÊä³öBIT1 | PC1 |
|
| | | *| Pin15-D2 FIFOÊý¾Ý¿ÚÊä³öBIT2 | PC2 |
|
| | | *| Pin16-D3 FIFOÊý¾Ý¿ÚÊä³öBIT3 | PC3 |
|
| | | *| Pin17-D4 FIFOÊý¾Ý¿ÚÊä³öBIT4 | PC4 |
|
| | | *| Pin18-D5 FIFOÊý¾Ý¿ÚÊä³öBIT5 | PC5 |
|
| | | *| Pin19-D6 FIFOÊý¾Ý¿ÚÊä³öBIT6 | PC6 |
|
| | | *| Pin20-D7 FIFOÊý¾Ý¿ÚÊä³öBIT7 | PC7 |
|
| | | *+------------------+-----------------+---------------------------------+
|
| | | */
|
| | |
|
| | | #ifndef __STM32V5_OV7670_H
|
| | | #define __STM32V5_OV7670_H
|
| | |
|
| | | #define LEVEL_HIGH 1
|
| | | #define LEVEL_LOW 0
|
| | |
|
| | | #define QVGA_XPIX 320
|
| | | #define QVGA_YPIX 240
|
| | | #define OV7670_OUT_XPIX QVGA_XPIX
|
| | | #define OV7670_OUT_YPIX QVGA_YPIX
|
| | | #define OV7670_OUT_MAX_PIXS (OV7670_OUT_XPIX*OV7670_OUT_YPIX)
|
| | |
|
| | | #define OV7670_ADDR 0x42 /* I2C¶ÁµØÖ· */
|
| | | #define OV7670_VERID 0x73
|
| | |
|
| | | #define OV7670_REG_NUM 114
|
| | | #define OV7670_REG_VERID 0x0B |
| | | #define OV7670_REG_COM7 0x12
|
| | |
|
| | | #define PORT_VSYNC_CMOS GPIOE
|
| | | #define RCC_APB2Periph_PORT_VSYNC_CMOS RCC_APB2Periph_GPIOE
|
| | | #define PIN_VSYNC_CMOS GPIO_Pin_4
|
| | | #define EXTI_LINE_VSYNC_CMOS EXTI_Line4
|
| | | #define PORT_SOURCE_VSYNC_CMOS GPIO_PortSourceGPIOE
|
| | | #define PIN_SOURCE_VSYNC_CMOS GPIO_PinSource4
|
| | |
|
| | | //#define FIFO_CS_PIN GPIO_Pin_0 /* FIFOƬѡ */ |
| | | #define FIFO_RRST_PIN GPIO_Pin_6 /* FIFO¶ÁµØÖ·¸´Î», PE6*/ |
| | | #define FIFO_RCLK_PIN GPIO_Pin_12 /* FIFO¶ÁʱÖÓ, PD12 */ |
| | | #define FIFO_WE_PIN GPIO_Pin_5 /* FIFOдÔÊÐí, PE5 */
|
| | |
|
| | | /* FIFO Pin operation macro function */
|
| | | #define FIFO_RRST_H() GPIOE->BSRR =FIFO_RRST_PIN |
| | | #define FIFO_RRST_L() GPIOE->BRR =FIFO_RRST_PIN
|
| | |
|
| | | #define FIFO_RCLK_H() GPIOD->BSRR =FIFO_RCLK_PIN
|
| | | #define FIFO_RCLK_L() GPIOD->BRR =FIFO_RCLK_PIN
|
| | |
|
| | | #define FIFO_WE_H() GPIOE->BSRR =FIFO_WE_PIN /*À¸ßʹFIFOдʹÄÜ*/
|
| | | #define FIFO_WE_L() GPIOE->BRR =FIFO_WE_PIN /*À¸ßʹFIFOд½ûÖ¹*/
|
| | |
|
| | | #define OV7670_FIFO_READ_PREPARE() \
|
| | | do{ \
|
| | | FIFO_RRST_L(); \
|
| | | FIFO_RCLK_L(); \
|
| | | FIFO_RCLK_H(); \
|
| | | FIFO_RRST_H(); \
|
| | | FIFO_RCLK_L(); \
|
| | | FIFO_RCLK_H(); \
|
| | | }while(0)
|
| | | |
| | | enum
|
| | | {
|
| | | CAM_FIFO_PIN_RRST = 0,
|
| | | CAM_FIFO_PIN_RCLK,
|
| | | CAM_FIFO_PIN_WE,
|
| | | CAM_FIFO_PIN_MAX,
|
| | | };
|
| | |
|
| | | enum
|
| | | {
|
| | | FMT_QVGA_YUV422,
|
| | | FMT_QVGA_RGB565,
|
| | | FMT_QVGA_RGB444,
|
| | | FMT_QVGA_RAWRGB,
|
| | | };
|
| | |
|
| | | typedef struct cam_fifo_pin_s
|
| | | {
|
| | | int num; /* LED񅧏 */
|
| | | GPIO_TypeDef *group; /* LEDʹÓõÄGPIOÔÚÄÄÒ»×é: GPIOB or GPIOD */ |
| | | uint16_t pin; /* LEDʹÓõÄGPIO×éÖеÄÄÇÒ»¸öpin: GPIO_Pin_x */
|
| | | } cam_fifo_pin_t;
|
| | |
|
| | | /* g_OV7670_VSYNCÓÃÀ´±êʾһ֡µÄ¿ªÊ¼ºÍ½áÊø:
|
| | | * OV7670µÄÊý¾ÝÒÔVGAʱÐòÊä³ö,ÔÚ¸ÃʱÐòÖÐVSYNCµÄϽµÑرíʾһ֡µÄÊý¾Ý¿ªÊ¼,¶øÉÏÉýÑØ±íʾһ֡µÄÊý¾Ý½áÊø.
|
| | | * ËùÒÔÎÒÃǽ«VSYNC¹Ü½ÅPE4ÅäÖóÉEXTI4ÉÏÉýÑØ´¥·¢Ä£Ê½.ÔÚEXTI4µÄÖжϴ¦Àí³ÌÐòEXTI4_IRQHandler()ÖÐ,µÚÒ»´Î
|
| | | * ½øÈëÖжϵÄʱºò,˵Ã÷ÉÏÒ»Ö¡Êý¾ÝÒѾ½áÊø(ÕâÒ²Òâζ×ÅÕâÒ»Ö¡Êý¾ÝµÄ¿ªÊ¼),ÎÒÃÇ¿ªÊ¼Ê¹ÄÜÉãÏñÍ·Êý¾ÝдÈëFIFO
|
| | | * ²¢¸üÐÂg_OV7670_VSYNCµÄ״ֵ̬Ϊ1;µ±µÚ¶þ´Î½øÈëÖжϵÄʱºò,˵Ã÷ÕâÒ»Ö¡Êý¾ÝµÄ´«ÊäÒѾ½áÊø,ÎÒÃǾͽûÖ¹
|
| | | * ÉãÏñÍ·Êý¾ÝдÈëFIFO²¢¸üÐÂg_OV7670_VSYNCµÄ״ֵ̬Ϊ2; |
| | | * ÔÚÓ¦ÓóÌÐòÖÐ,ÒªÅжÏg_OV7670_VSYNCµÄÖµÊÇ·ñΪ2,Èç¹ûΪ2Ôò¿ÉÒÔ´ÓFIFOÖжÁÈ¡Êý¾Ý,¶ÁÍêºó¸üÐÂÆä״ֵ̬Ϊ0.
|
| | | */
|
| | | extern uint8_t g_OV7670_VSYNC;
|
| | |
|
| | | extern void set_ov7670_fifo_pin(int which, int level);
|
| | | extern void ov7670_fifo_read_prepare(void);
|
| | | extern int OV7670_Initialize(int output_fmt);
|
| | |
|
| | | #endif
|
New file |
| | |
| | | /****************************************************************************
|
| | | * Copyright: (C)2014 Î人ÁèÔÆÇ¶ÈëʽʵÑéÊÒ www.emblinux.com
|
| | | * Author: GuoWenxue<guowenxue@gmail.com> QQ: 281143292
|
| | | * Description: ·Ü¶·STM32v5¿ª·¢°åGPIOÄ£ÄâÉãÏñÍ·SCCB(Serial Camera Control Bus)µÄʵÏÖ,
|
| | | * SCCBµÄ¹¤×÷·½Ê½ÓëI2CÊ®·ÖÀàËÆ£¬ËûʹÓÃOV¹«Ë¾¶¨ÒåµÄ3Ïß´®ÐÐÉãÏñÍ·¿ØÖÆ×ÜÏߣ¬
|
| | | * ¿ÉÒÔ¿ØÖƴ󲿷ÖOVϵÁÐͼÐδ«¸ÐÆ÷¡£SCCBÒ²¿ÉÒÔ¹¤×÷ÔÚ2Ïß´®ÐÐģʽ(SIOCÓëSIOD).
|
| | | * STM32ÉÏʹÓÃPE2ºÍPE3·Ö±ðÁ¬½ÓOV7670µÄSCCBʱÖÓ¿ÚºÍÊý¾Ý¿Ú,¸Ã´úÂëÖ÷ҪʹÓÃ
|
| | | * PE2ºÍPE3µÄGPIO¿ÚÄ£ÄâSCCB(Ò²¼´I2C)×ÜÏßÐÒé
|
| | | *
|
| | | * ChangeLog:
|
| | | * °æ±¾ºÅ ÈÕÆÚ ×÷Õß ËµÃ÷
|
| | | * V1.0.0 2014.08.25 GuoWenxue ·¢²¼¸Ã°æ±¾
|
| | | ****************************************************************************/
|
| | | /* CF7670C-V3ÉãÏñÍ·Ä£¿éPin¹Ü½ÅºÍSTM32v5 Á¬½Ó±í:
|
| | | *| ²Î¿¼<CF7670C-V3 ¼òҪ˵Ã÷.pdf>ºÍ<·Ü¶·STM32¿ª·¢°åV5ÔÀíͼ.pdf>
|
| | | *+---------------------------------------+------------------------------+
|
| | | *| CF7670C-V3ÉãÏñÍ·Ä£¿éÒý½Å¼°ËµÃ÷ | STM32¶ËÒý½ÅÁ¬½Ó¼°ËµÃ÷ |
|
| | | *+---------------------------------------+------------------------------+
|
| | | *| Pin1-VCC(3.3V,·½º¸Å̱ê¼ÇµÄΪµÚÒ»½Å) | 3.3V |
|
| | | *| Pin2-GND | GND |
|
| | | *| Pin3-SCL(SCCB_SCL²»´øÉÏÀµç×è) | PE2 |
|
| | | *| Pin4-SDA(SCCB_SDA ´ø4.7KÉÏÀµç×è) | PE3 |
|
| | | *| Pin5-VSYNC(OV7670 ֡ͬ²½ÐźÅ) | PE4 |
|
| | | *| Pin6-HREF(OV7670 ÐÐͬ²½ÐźÅ) | NC |
|
| | | *| Pin7-WEN(FIFO(AL422)дÔÊÐí,¸ßµçƽÓÐЧ | PE5 |
|
| | | *| Pin8-XCLK(NC/RE# ¿Õ½Å) | NC |
|
| | | *| Pin9-RRST(FIFO¶ÁµØÖ·¸´Î» | PE6 |
|
| | | *| Pin10-OE#(FIFOÊý¾ÝÊä³öʹÄÜ,µÍµçƽÓÐЧ | GND |
|
| | | *| Pin11-RCK#(FIFO¶ÁÊý¾ÝʱÖÓ | PD12 |
|
| | | *| Pin12-GND | GND |
|
| | | *| | |
|
| | | *| Pin13-D0 FIFOÊý¾Ý¿ÚÊä³öBIT0 | PC0 |
|
| | | *| Pin14-D1 FIFOÊý¾Ý¿ÚÊä³öBIT1 | PC1 |
|
| | | *| Pin15-D2 FIFOÊý¾Ý¿ÚÊä³öBIT2 | PC2 |
|
| | | *| Pin16-D3 FIFOÊý¾Ý¿ÚÊä³öBIT3 | PC3 |
|
| | | *| Pin17-D4 FIFOÊý¾Ý¿ÚÊä³öBIT4 | PC4 |
|
| | | *| Pin18-D5 FIFOÊý¾Ý¿ÚÊä³öBIT5 | PC5 |
|
| | | *| Pin19-D6 FIFOÊý¾Ý¿ÚÊä³öBIT6 | PC6 |
|
| | | *| Pin20-D7 FIFOÊý¾Ý¿ÚÊä³öBIT7 | PC7 |
|
| | | *+------------------+-----------------+---------------------------------+
|
| | | */
|
| | |
|
| | | #include "stm32v5_sccb.h"
|
| | |
|
| | | /* ÅäÖÃÁ¬½ÓOV7670µÄSCCB_SCL(PE2)ºÍSCCB_SDA(PE3)ΪGPIOģʽģÄâ*/
|
| | | void init_sccb_gpio(void)
|
| | | {
|
| | | GPIO_InitTypeDef GPIO_InitStructure; |
| | | |
| | | RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE, ENABLE);
|
| | |
|
| | | /* Configure I2C pins: PE2->SCL and PE3->SDA */ |
| | | GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2 ;
|
| | | GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
|
| | | GPIO_InitStructure.GPIO_Mode =GPIO_Mode_Out_PP ;// |
| | | GPIO_Init(GPIOE, &GPIO_InitStructure);
|
| | | |
| | | GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3;
|
| | | GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
|
| | | GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP ;
|
| | | GPIO_Init(GPIOE, &GPIO_InitStructure);
|
| | | }
|
| | |
|
| | |
|
| | | /* I2C ×ÜÏßʱÖÓÑÓʱº¯Êý */
|
| | | static void I2C_delay(void)
|
| | | { |
| | | unsigned short i = 200; /* ÕâÀï¿ÉÒÔÓÅ»¯ËÙ¶È */
|
| | | while(i) |
| | | { |
| | | i--; |
| | | } |
| | | }
|
| | |
|
| | |
|
| | | /* I2C×ÜÏß¿ªÊ¼ÐźŠ*/
|
| | | static int I2C_Start(void)
|
| | | {
|
| | | SDA_H;
|
| | | I2C_delay();
|
| | | |
| | | SCL_H; |
| | | I2C_delay();
|
| | | |
| | | SDA_L;
|
| | | I2C_delay(); |
| | | |
| | | SCL_L;
|
| | | I2C_delay(); |
| | | |
| | | return ENABLE;
|
| | | }
|
| | |
|
| | | /* I2C×ÜÏßÍ£Ö¹ÐźŠ*/
|
| | | static void I2C_Stop(void)
|
| | | {
|
| | | SDA_L;
|
| | | I2C_delay();
|
| | | |
| | | SCL_H;
|
| | | I2C_delay();
|
| | | |
| | | SDA_H;
|
| | | I2C_delay();
|
| | | }
|
| | |
|
| | | /* I2C×ÜÏßSDAÊäÈë */
|
| | | void I2C_IN(void)
|
| | | {
|
| | | GPIO_InitTypeDef GPIO_InitStructure; |
| | | |
| | | RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE, ENABLE);
|
| | | |
| | | GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3; |
| | | GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_OD; //GPIO_Mode_Out_OD;
|
| | | GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
|
| | | GPIO_Init(GPIOE, &GPIO_InitStructure);
|
| | | }
|
| | |
|
| | | /* I2C×ÜÏßSDAÊä³ö */
|
| | | void I2C_OUT(void)
|
| | | {
|
| | | GPIO_InitTypeDef GPIO_InitStructure; |
| | | |
| | | GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3;
|
| | | GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
|
| | | GPIO_InitStructure.GPIO_Mode =GPIO_Mode_Out_PP ;// |
| | | GPIO_Init(GPIOE, &GPIO_InitStructure);
|
| | | }
|
| | |
|
| | |
|
| | |
|
| | | /* I2C×ÜÏßACKÐźŠ*/
|
| | | static void I2C_Ack(void)
|
| | | { |
| | | SCL_L;
|
| | | I2C_delay();
|
| | | |
| | | SDA_L;
|
| | | I2C_delay();
|
| | | |
| | | SCL_H;
|
| | | I2C_delay();
|
| | | |
| | | SCL_L;
|
| | | I2C_delay();
|
| | | }
|
| | |
|
| | | /* I2C×ÜÏßNAKÐźŠ*/
|
| | | static void I2C_NoAck(void)
|
| | | { |
| | | SDA_H;
|
| | | I2C_delay();
|
| | | |
| | | SCL_H;
|
| | | I2C_delay();
|
| | | |
| | | SCL_L;
|
| | | I2C_delay();
|
| | | |
| | | SDA_L;
|
| | | I2C_delay();
|
| | | }
|
| | |
|
| | | /* I2C×ÜÏߵȴýACKÐźŠ*/
|
| | | static int I2C_WaitAck(void) |
| | | {
|
| | | I2C_IN();
|
| | | I2C_delay();
|
| | | |
| | | SCL_H;
|
| | | I2C_delay();
|
| | | |
| | | if(SDA_read)
|
| | | {
|
| | | SCL_L;
|
| | | return DISABLE;
|
| | | }
|
| | | SCL_L;
|
| | | I2C_delay();
|
| | | |
| | | I2C_OUT();
|
| | | I2C_delay();
|
| | | return ENABLE;
|
| | | }
|
| | |
|
| | | /* I2C×ÜÏß·¢ËÍÒ»¸ö×Ö½ÚÊý¾Ý, Êý¾Ý´Ó¸ßλµ½µÍλ */
|
| | | static void I2C_SendByte(uint8_t SendByte) |
| | | {
|
| | | uint8_t i=8;
|
| | | |
| | | while(i--)
|
| | | {
|
| | | //SCL_L;
|
| | | //I2C_delay();
|
| | | if(SendByte&0x80) |
| | | SDA_H; |
| | | else
|
| | | SDA_L; |
| | | SendByte<<=1;
|
| | | I2C_delay();
|
| | | |
| | | SCL_H;
|
| | | I2C_delay();
|
| | | |
| | | SCL_L;
|
| | | I2C_delay();
|
| | | }
|
| | | }
|
| | |
|
| | |
|
| | | /* I2C×ÜÏß½ÓÊÕÒ»¸ö×Ö½ÚÊý¾Ý, Êý¾Ý´Ó¸ßλµ½µÍλ */
|
| | | static int I2C_ReceiveByte(void) |
| | | { |
| | | uint8_t i=8;
|
| | | uint8_t ReceiveByte=0;
|
| | |
|
| | | SDA_H; |
| | | while(i--)
|
| | | {
|
| | | ReceiveByte<<=1; |
| | | SCL_L;
|
| | | I2C_delay();
|
| | | |
| | | SCL_H;
|
| | | I2C_IN();
|
| | | I2C_delay();
|
| | | |
| | | if(SDA_read)
|
| | | {
|
| | | ReceiveByte|=0x01;
|
| | | } |
| | | }
|
| | | |
| | | SCL_L;
|
| | | I2C_OUT();
|
| | | return ReceiveByte;
|
| | | }
|
| | |
|
| | | /*******************************************************************************
|
| | | * Function Name : I2C_WriteByte
|
| | | * Description : дһ×Ö½ÚÊý¾Ý
|
| | | * Input : - WriteAddress: ´ýдÈëµØÖ·
|
| | | * - SendByte: ´ýдÈëÊý¾Ý
|
| | | * - DeviceAddress: Æ÷¼þÀàÐÍ
|
| | | * Output : None
|
| | | * Return : ·µ»ØÎª:=1³É¹¦Ð´Èë,=0ʧ°Ü
|
| | | * Attention : None
|
| | | *******************************************************************************/ |
| | | int I2C_WriteByte( uint16_t WriteAddress , uint8_t SendByte , uint8_t DeviceAddress)
|
| | | { |
| | | if(!I2C_Start())
|
| | | {
|
| | | return DISABLE;
|
| | | }
|
| | | I2C_delay();
|
| | | |
| | | I2C_SendByte( DeviceAddress ); /* Æ÷¼þµØÖ· */
|
| | | if( !I2C_WaitAck() )
|
| | | {
|
| | | I2C_Stop(); |
| | | return DISABLE;
|
| | | }
|
| | | I2C_delay();
|
| | | |
| | | I2C_SendByte((uint8_t)(WriteAddress & 0x00FF)); /* ÉèÖÃµÍÆðʼµØÖ· */ |
| | | I2C_WaitAck();
|
| | | I2C_delay(); |
| | | |
| | | I2C_SendByte(SendByte);
|
| | | I2C_WaitAck();
|
| | | I2C_delay(); |
| | | |
| | | I2C_Stop(); |
| | | I2C_delay();
|
| | | return ENABLE;
|
| | | } |
| | |
|
| | | /*******************************************************************************
|
| | | * Function Name : I2C_ReadByte
|
| | | * Description : ¶Áȡһ´®Êý¾Ý
|
| | | * Input : - pBuffer: ´æ·Å¶Á³öÊý¾Ý
|
| | | * - length: ´ý¶Á³ö³¤¶È
|
| | | * - ReadAddress: ´ý¶Á³öµØÖ·
|
| | | * - DeviceAddress: Æ÷¼þÀàÐÍ
|
| | | * Output : None
|
| | | * Return : ·µ»ØÎª:=1³É¹¦¶ÁÈë,=0ʧ°Ü
|
| | | * Attention : None
|
| | | *******************************************************************************/ |
| | | int I2C_ReadByte(uint8_t* pBuffer, uint16_t length, uint8_t ReadAddress, uint8_t DeviceAddress)
|
| | | { |
| | | if(!I2C_Start())
|
| | | {
|
| | | return DISABLE;
|
| | | }
|
| | | |
| | | I2C_SendByte( DeviceAddress ); /* Æ÷¼þµØÖ· */
|
| | | if( !I2C_WaitAck() )
|
| | | {
|
| | | I2C_Stop(); |
| | | return DISABLE;
|
| | | }
|
| | | |
| | | I2C_SendByte( ReadAddress ); /* ÉèÖÃµÍÆðʼµØÖ· */ |
| | | I2C_WaitAck(); |
| | | I2C_Stop(); |
| | | |
| | | if(!I2C_Start())
|
| | | {
|
| | | return DISABLE;
|
| | | }
|
| | | I2C_SendByte( DeviceAddress + 1 ); /* Æ÷¼þµØÖ· */ |
| | |
|
| | | if(!I2C_WaitAck())
|
| | | {
|
| | | I2C_Stop(); |
| | | return DISABLE;
|
| | | }
|
| | | |
| | | while(length)
|
| | | {
|
| | | *pBuffer = I2C_ReceiveByte();
|
| | | if(length == 1)
|
| | | {
|
| | | I2C_NoAck();
|
| | | }
|
| | | else
|
| | | {
|
| | | I2C_Ack(); |
| | | }
|
| | | |
| | | pBuffer++;
|
| | | length--;
|
| | | }
|
| | | |
| | | I2C_Stop();
|
| | | return ENABLE;
|
| | | }
|
| | |
|
New file |
| | |
| | | /****************************************************************************
|
| | | * Copyright: (C)2014 Î人ÁèÔÆÇ¶ÈëʽʵÑéÊÒ www.emblinux.com
|
| | | * Author: GuoWenxue<guowenxue@gmail.com> QQ: 281143292
|
| | | * Description: ·Ü¶·STM32v5¿ª·¢°åGPIOÄ£ÄâÉãÏñÍ·SCCB(Serial Camera Control Bus)µÄʵÏÖ,
|
| | | * SCCBµÄ¹¤×÷·½Ê½ÓëI2CÊ®·ÖÀàËÆ£¬ËûʹÓÃOV¹«Ë¾¶¨ÒåµÄ3Ïß´®ÐÐÉãÏñÍ·¿ØÖÆ×ÜÏߣ¬
|
| | | * ¿ÉÒÔ¿ØÖƴ󲿷ÖOVϵÁÐͼÐδ«¸ÐÆ÷¡£SCCBÒ²¿ÉÒÔ¹¤×÷ÔÚ2Ïß´®ÐÐģʽ(SIOCÓëSIOD).
|
| | | * STM32ÉÏʹÓÃPE2ºÍPE3·Ö±ðÁ¬½ÓOV7670µÄSCCBʱÖÓ¿ÚºÍÊý¾Ý¿Ú,¸Ã´úÂëÖ÷ҪʹÓÃ
|
| | | * PE2ºÍPE3µÄGPIO¿ÚÄ£ÄâSCCB(Ò²¼´I2C)×ÜÏßÐÒé
|
| | | *
|
| | | * ChangeLog:
|
| | | * °æ±¾ºÅ ÈÕÆÚ ×÷Õß ËµÃ÷
|
| | | * V1.0.0 2014.08.25 GuoWenxue ·¢²¼¸Ã°æ±¾
|
| | | ****************************************************************************/
|
| | |
|
| | | /* CF7670C-V3ÉãÏñÍ·Ä£¿éPin¹Ü½ÅºÍSTM32v5 Á¬½Ó±í:
|
| | | *| ²Î¿¼<CF7670C-V3 ¼òҪ˵Ã÷.pdf>ºÍ<·Ü¶·STM32¿ª·¢°åV5ÔÀíͼ.pdf>
|
| | | *+---------------------------------------+------------------------------+
|
| | | *| CF7670C-V3ÉãÏñÍ·Ä£¿éÒý½Å¼°ËµÃ÷ | STM32¶ËÒý½ÅÁ¬½Ó¼°ËµÃ÷ |
|
| | | *+---------------------------------------+------------------------------+
|
| | | *| Pin1-VCC(3.3V,·½º¸Å̱ê¼ÇµÄΪµÚÒ»½Å) | 3.3V |
|
| | | *| Pin2-GND | GND |
|
| | | *| Pin3-SCL(SCCB_SCL²»´øÉÏÀµç×è) | PE2 |
|
| | | *| Pin4-SDA(SCCB_SDA ´ø4.7KÉÏÀµç×è) | PE3 |
|
| | | *| Pin5-VSYNC(OV7670 ֡ͬ²½ÐźÅ) | PE4 |
|
| | | *| Pin6-HREF(OV7670 ÐÐͬ²½ÐźÅ) | NC |
|
| | | *| Pin7-WEN(FIFO(AL422)дÔÊÐí,¸ßµçƽÓÐЧ | PE5 |
|
| | | *| Pin8-XCLK(NC/RE# ¿Õ½Å) | NC |
|
| | | *| Pin9-RRST(FIFO¶ÁµØÖ·¸´Î» | PE6 |
|
| | | *| Pin10-OE#(FIFOÊý¾ÝÊä³öʹÄÜ,µÍµçƽÓÐЧ | GND |
|
| | | *| Pin11-RCK#(FIFO¶ÁÊý¾ÝʱÖÓ | PD12 |
|
| | | *| Pin12-GND | GND |
|
| | | *| | |
|
| | | *| Pin13-D0 FIFOÊý¾Ý¿ÚÊä³öBIT0 | PC0 |
|
| | | *| Pin14-D1 FIFOÊý¾Ý¿ÚÊä³öBIT1 | PC1 |
|
| | | *| Pin15-D2 FIFOÊý¾Ý¿ÚÊä³öBIT2 | PC2 |
|
| | | *| Pin16-D3 FIFOÊý¾Ý¿ÚÊä³öBIT3 | PC3 |
|
| | | *| Pin17-D4 FIFOÊý¾Ý¿ÚÊä³öBIT4 | PC4 |
|
| | | *| Pin18-D5 FIFOÊý¾Ý¿ÚÊä³öBIT5 | PC5 |
|
| | | *| Pin19-D6 FIFOÊý¾Ý¿ÚÊä³öBIT6 | PC6 |
|
| | | *| Pin20-D7 FIFOÊý¾Ý¿ÚÊä³öBIT7 | PC7 |
|
| | | *+------------------+-----------------+---------------------------------+
|
| | | */
|
| | | #ifndef __STM32V5_SCCB_H
|
| | | #define __STM32V5_SCCB_H
|
| | | #include "stm32f10x.h"
|
| | |
|
| | | /* I2C SCL/SDA Pin operation macro */
|
| | | #define SCL_H GPIOE->BSRR = GPIO_Pin_2 |
| | | #define SCL_L GPIOE->BRR = GPIO_Pin_2 |
| | | |
| | | #define SDA_H GPIOE->BSRR = GPIO_Pin_3 |
| | | #define SDA_L GPIOE->BRR = GPIO_Pin_3 |
| | |
|
| | | #define SCL_read GPIOE->IDR & GPIO_Pin_2 |
| | | #define SDA_read GPIOE->IDR & GPIO_Pin_3 |
| | |
|
| | | void init_sccb_gpio(void);
|
| | | int I2C_WriteByte(uint16_t WriteAddress , uint8_t SendByte , uint8_t DeviceAddress);
|
| | | int I2C_ReadByte (uint8_t* pBuffer, uint16_t length, uint8_t ReadAddress, uint8_t DeviceAddress);
|
| | |
|
| | | #endif
|
New file |
| | |
| | | /****************************************************************************
|
| | | * Copyright: (C)2014 Î人ÁèÔÆÇ¶ÈëʽʵÑéÊÒ www.emblinux.com
|
| | | * Author: GuoWenxue<guowenxue@gmail.com> QQ: 281143292
|
| | | * Description: ·Ü¶·STM32v5¿ª·¢°åsystickºÍÑÓʱÏà¹Øº¯Êý£»
|
| | | * |
| | | * ChangeLog:
|
| | | * °æ±¾ºÅ ÈÕÆÚ ×÷Õß ËµÃ÷
|
| | | * V1.0.0 2014.08.25 GuoWenxue ·¢²¼¸Ã°æ±¾
|
| | | ****************************************************************************/
|
| | | #include "stm32f10x.h"
|
| | | #include "stm32v5_systick.h"
|
| | |
|
| | | static __IO uint32_t s_delay_clocks;
|
| | |
|
| | | /*
|
| | | SysTick_Config½«»á´ÓAHB×ÜÏß»ñȡʱÖÓ£¬¶øAHB×ÜÏßÓëϵͳºËÐÄʱÖÓÒ»ÖÂΪ72MHz.Ëü
|
| | | µÄÊäÈë²ÎÊýΪSystick½«Òª¼ÆÊ±µÄÂö³åÊý£¬¾¹ýticks¸öÂö³åºó½«´¥·¢Öжϣ¬Öжϴ¦Àí
|
| | | ³ÌÐòÖн«ÖØÐ¼¼Êõ¡£ÓÉ´ËÎÒÃÇ¿ÉÒÔ¼ÆËã³ö¶¨Ê±µÄʱ¼ä£¬ÏÂÃæÎª¼ÆË㹫ʽ£º
|
| | | T=ticks*(1/f) TΪҪ¶¨Ê±µÄ×Üʱ¼ä; ticksΪSysTick_Config()µÄÊäÈë²ÎÊý;1/f¼´Îª
|
| | | SysTickʹÓõÄʱÖÓÔ´µÄʱÖÓÖÜÆÚ£¬fΪ¸ÃʱÖÓÔ´µÄʱÖÓÆµÂÊ£¬Îª72MHz.
|
| | | ÔÚÏÂÃæµÄ³ÌÐòÖÐ, SystemCoreClock¼´ÎªÏµÍ³Ê±ÖÓ(f),ÕâÑù£º |
| | | T= (f/CLOCK_SECOND) * (1*f) = 1/CLOCK_SECOND
|
| | | ËùÒÔ£¬Èç¹ûÎÒÃÇÐèÒª1ms¶¨Ê±£¬Ö»ÐèÒª½«CLOCK_SECOND¶¨ÒåΪ1000;
|
| | | Èç¹ûÎÒÃÇÐèÒª1us¶¨Ê±£¬Ö»ÐèÒª½«CLOCK_SECOND¶¨ÒåΪ1000000;
|
| | | */
|
| | | void sysclock_init(void)
|
| | | {
|
| | | if (SysTick_Config(SystemCoreClock / CLOCK_CONF_SECOND)) |
| | | {
|
| | | while(1);
|
| | | }
|
| | | }
|
| | |
|
| | | void SysTick_Handler(void)
|
| | | {
|
| | | if (s_delay_clocks != 0x00)
|
| | | { |
| | | s_delay_clocks--;
|
| | | }
|
| | | }
|
| | |
|
| | | void msleep(__IO uint32_t ms)
|
| | | {
|
| | | s_delay_clocks = ms;
|
| | | |
| | | while(s_delay_clocks != 0);
|
| | | } |
New file |
| | |
| | | /****************************************************************************
|
| | | * Copyright: (C)2014 Î人ÁèÔÆÇ¶ÈëʽʵÑéÊÒ www.emblinux.com
|
| | | * Author: GuoWenxue<guowenxue@gmail.com> QQ: 281143292
|
| | | * Description: ·Ü¶·STM32v5¿ª·¢°åsystickºÍÑÓʱÏà¹Øº¯Êý£»
|
| | | * |
| | | * ChangeLog:
|
| | | * °æ±¾ºÅ ÈÕÆÚ ×÷Õß ËµÃ÷
|
| | | * V1.0.0 2014.08.25 GuoWenxue ·¢²¼¸Ã°æ±¾
|
| | | ****************************************************************************/
|
| | |
|
| | | #ifndef __STM32V5_SYSTICK_H
|
| | | #define __STM32V5_SYSTICK_H
|
| | |
|
| | | #define MSECOND_OF_CLOCKS 1000 /* ʱÖÓ½ÚÅÄÖжÏΪ1msÒ»´Î */
|
| | | #define USECOND_OF_CLOCKS 1000000 /* ʱÖÓ½ÚÅÄÖжÏΪ1usÒ»´Î */
|
| | | #define CLOCK_CONF_SECOND MSECOND_OF_CLOCKS
|
| | | #define SECOND 1000 /* 1second = 1000ms */
|
| | |
|
| | | extern void sysclock_init(void);
|
| | | extern void sysclock_decrement(void);
|
| | | extern void msleep(__IO uint32_t ms);
|
| | |
|
| | | #endif
|
New file |
| | |
| | | /****************************************************************************
|
| | | * Copyright: (C)2014 Î人ÁèÔÆÇ¶ÈëʽʵÑéÊÒ www.emblinux.com
|
| | | * Author: GuoWenxue<guowenxue@gmail.com> QQ: 281143292
|
| | | * Description: ·Ü¶·STM32v5¿ª·¢°å´®¿Ú²Ù×÷º¯Êý½Ó¿Ú,printf¹³×Óº¯Êýfputc
|
| | | * |
| | | * ChangeLog:
|
| | | * °æ±¾ºÅ ÈÕÆÚ ×÷Õß ËµÃ÷
|
| | | * V1.0.0 2014.08.25 GuoWenxue ·¢²¼¸Ã°æ±¾
|
| | | ****************************************************************************/
|
| | | #include "stm32f10x.h"
|
| | | #include "stm32f10x_usart.h"
|
| | | #include "stm32v5_uart.h"
|
| | | #include <stdio.h>
|
| | |
|
| | | /* USARTx configured as follow:
|
| | | - BaudRate = 115200 baud |
| | | - Word Length = 8 Bits
|
| | | - One Stop Bit
|
| | | - No parity
|
| | | - Hardware flow control disabled (RTS and CTS signals)
|
| | | - Receive and transmit enabled
|
| | | */
|
| | | void USART_Config(USART_TypeDef* USARTx)
|
| | | {
|
| | | USART_InitTypeDef USART_InitStructure;
|
| | | |
| | | /* Configure USART1 */ |
| | | USART_InitStructure.USART_BaudRate = 115200; //ËÙÂÊ115200bps
|
| | | USART_InitStructure.USART_WordLength = USART_WordLength_8b; //Êý¾Ýλ8λ
|
| | | USART_InitStructure.USART_StopBits = USART_StopBits_1; //ֹͣλ1λ
|
| | | USART_InitStructure.USART_Parity = USART_Parity_No; //ÎÞУÑéλ
|
| | | USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None; //ÎÞÓ²¼þÁ÷¿Ø
|
| | | USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx; //ÊÕ·¢Ä£Ê½
|
| | | USART_Init(USARTx, &USART_InitStructure); //ÅäÖô®¿Ú²ÎÊýº¯Êý
|
| | | |
| | | #if 0 |
| | | /* Enable USARTx Receive and Transmit interrupts */
|
| | | USART_ITConfig(USARTx, USART_IT_RXNE, ENABLE); //ʹÄܽÓÊÕÖжÏ
|
| | | USART_ITConfig(USARTx, USART_IT_TXE, ENABLE); //ʹÄÜ·¢ËÍ»º³å¿ÕÖÐ¶Ï |
| | | #endif
|
| | | |
| | | /* Enable the USARTx */
|
| | | USART_Cmd(USARTx, ENABLE); |
| | | }
|
| | |
|
| | | void dbg_setup_uart(void)
|
| | | {
|
| | | GPIO_InitTypeDef GPIO_InitStructure; |
| | | |
| | | RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_USART1, ENABLE); |
| | |
|
| | | /* ĬÈϸ´Óù¦ÄÜ */ |
| | | GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9; //USART1 TX
|
| | | GPIO_InitStructure.GPIO_Speed= GPIO_Speed_50MHz; |
| | | GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //¸´ÓÃÍÆÍìÊä³ö
|
| | | GPIO_Init(GPIOA, &GPIO_InitStructure); |
| | | |
| | | /* ¸´Óù¦ÄܵÄÊäÈëÒý½Å±ØÐëÅäÖÃΪÊäÈëģʽ£¨¸¡¿Õ/ÉÏÀ/ÏÂÀµÄÒ»ÖÖ£©*/
|
| | | GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10; //USART1 RX
|
| | | GPIO_InitStructure.GPIO_Speed= GPIO_Speed_50MHz; |
| | | GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; //¸´Óø¡¿ÕÊäÈë
|
| | | GPIO_Init(GPIOA, &GPIO_InitStructure); |
| | | |
| | | USART_Config(DBG_UART);
|
| | |
|
| | | USART_SendData(DBG_UART, '\n'); |
| | | while (USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET); |
| | | }
|
| | |
|
| | | int fputc(int ch, FILE *f) |
| | | { |
| | | if('\n' == ch)
|
| | | {
|
| | | USART_SendData(DBG_UART, (uint8_t) '\r'); |
| | | while (USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET) ; |
| | | }
|
| | | |
| | | USART_SendData(DBG_UART, (uint8_t) ch); |
| | | while (USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET); |
| | | |
| | | return ch; |
| | | }
|
| | |
|
New file |
| | |
| | | /****************************************************************************
|
| | | * Copyright: (C)2014 Î人ÁèÔÆÇ¶ÈëʽʵÑéÊÒ www.emblinux.com
|
| | | * Author: GuoWenxue<guowenxue@gmail.com> QQ: 281143292
|
| | | * Description: ·Ü¶·STM32v5¿ª·¢°å´®¿Ú²Ù×÷º¯Êý½Ó¿Ú,printf¹³×Óº¯Êýfputc
|
| | | * |
| | | * ChangeLog:
|
| | | * °æ±¾ºÅ ÈÕÆÚ ×÷Õß ËµÃ÷
|
| | | * V1.0.0 2014.08.25 GuoWenxue ·¢²¼¸Ã°æ±¾
|
| | | ****************************************************************************/
|
| | | #ifndef __STM32V5_UART_
|
| | | #define __STM32V5_UART_
|
| | |
|
| | | #ifndef DBG_UART
|
| | | #define DBG_UART USART1
|
| | | #endif
|
| | |
|
| | | void dbg_setup_uart(void);
|
| | |
|
| | | #endif
|
New file |
| | |
| | | /**
|
| | | ******************************************************************************
|
| | | * @file misc.h
|
| | | * @author MCD Application Team
|
| | | * @version V3.5.0
|
| | | * @date 11-March-2011
|
| | | * @brief This file contains all the functions prototypes for the miscellaneous
|
| | | * firmware library functions (add-on to CMSIS functions).
|
| | | ******************************************************************************
|
| | | * @attention
|
| | | *
|
| | | * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
|
| | | * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE
|
| | | * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY
|
| | | * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING
|
| | | * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE
|
| | | * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
|
| | | *
|
| | | * <h2><center>© COPYRIGHT 2011 STMicroelectronics</center></h2>
|
| | | ******************************************************************************
|
| | | */
|
| | |
|
| | | /* Define to prevent recursive inclusion -------------------------------------*/
|
| | | #ifndef __MISC_H
|
| | | #define __MISC_H
|
| | |
|
| | | #ifdef __cplusplus
|
| | | extern "C" {
|
| | | #endif
|
| | |
|
| | | /* Includes ------------------------------------------------------------------*/
|
| | | #include "stm32f10x.h"
|
| | |
|
| | | /** @addtogroup STM32F10x_StdPeriph_Driver
|
| | | * @{
|
| | | */
|
| | |
|
| | | /** @addtogroup MISC
|
| | | * @{
|
| | | */
|
| | |
|
| | | /** @defgroup MISC_Exported_Types
|
| | | * @{
|
| | | */
|
| | |
|
| | | /** |
| | | * @brief NVIC Init Structure definition |
| | | */
|
| | |
|
| | | typedef struct
|
| | | {
|
| | | uint8_t NVIC_IRQChannel; /*!< Specifies the IRQ channel to be enabled or disabled.
|
| | | This parameter can be a value of @ref IRQn_Type |
| | | (For the complete STM32 Devices IRQ Channels list, please
|
| | | refer to stm32f10x.h file) */
|
| | |
|
| | | uint8_t NVIC_IRQChannelPreemptionPriority; /*!< Specifies the pre-emption priority for the IRQ channel
|
| | | specified in NVIC_IRQChannel. This parameter can be a value
|
| | | between 0 and 15 as described in the table @ref NVIC_Priority_Table */
|
| | |
|
| | | uint8_t NVIC_IRQChannelSubPriority; /*!< Specifies the subpriority level for the IRQ channel specified
|
| | | in NVIC_IRQChannel. This parameter can be a value
|
| | | between 0 and 15 as described in the table @ref NVIC_Priority_Table */
|
| | |
|
| | | FunctionalState NVIC_IRQChannelCmd; /*!< Specifies whether the IRQ channel defined in NVIC_IRQChannel
|
| | | will be enabled or disabled. |
| | | This parameter can be set either to ENABLE or DISABLE */ |
| | | } NVIC_InitTypeDef;
|
| | | |
| | | /**
|
| | | * @}
|
| | | */
|
| | |
|
| | | /** @defgroup NVIC_Priority_Table |
| | | * @{
|
| | | */
|
| | |
|
| | | /**
|
| | | @code |
| | | The table below gives the allowed values of the pre-emption priority and subpriority according
|
| | | to the Priority Grouping configuration performed by NVIC_PriorityGroupConfig function
|
| | | ============================================================================================================================
|
| | | NVIC_PriorityGroup | NVIC_IRQChannelPreemptionPriority | NVIC_IRQChannelSubPriority | Description
|
| | | ============================================================================================================================
|
| | | NVIC_PriorityGroup_0 | 0 | 0-15 | 0 bits for pre-emption priority
|
| | | | | | 4 bits for subpriority
|
| | | ----------------------------------------------------------------------------------------------------------------------------
|
| | | NVIC_PriorityGroup_1 | 0-1 | 0-7 | 1 bits for pre-emption priority
|
| | | | | | 3 bits for subpriority
|
| | | ---------------------------------------------------------------------------------------------------------------------------- |
| | | NVIC_PriorityGroup_2 | 0-3 | 0-3 | 2 bits for pre-emption priority
|
| | | | | | 2 bits for subpriority
|
| | | ---------------------------------------------------------------------------------------------------------------------------- |
| | | NVIC_PriorityGroup_3 | 0-7 | 0-1 | 3 bits for pre-emption priority
|
| | | | | | 1 bits for subpriority
|
| | | ---------------------------------------------------------------------------------------------------------------------------- |
| | | NVIC_PriorityGroup_4 | 0-15 | 0 | 4 bits for pre-emption priority
|
| | | | | | 0 bits for subpriority |
| | | ============================================================================================================================
|
| | | @endcode
|
| | | */
|
| | |
|
| | | /**
|
| | | * @}
|
| | | */
|
| | |
|
| | | /** @defgroup MISC_Exported_Constants
|
| | | * @{
|
| | | */
|
| | |
|
| | | /** @defgroup Vector_Table_Base |
| | | * @{
|
| | | */
|
| | |
|
| | | #define NVIC_VectTab_RAM ((uint32_t)0x20000000)
|
| | | #define NVIC_VectTab_FLASH ((uint32_t)0x08000000)
|
| | | #define IS_NVIC_VECTTAB(VECTTAB) (((VECTTAB) == NVIC_VectTab_RAM) || \
|
| | | ((VECTTAB) == NVIC_VectTab_FLASH))
|
| | | /**
|
| | | * @}
|
| | | */
|
| | |
|
| | | /** @defgroup System_Low_Power |
| | | * @{
|
| | | */
|
| | |
|
| | | #define NVIC_LP_SEVONPEND ((uint8_t)0x10)
|
| | | #define NVIC_LP_SLEEPDEEP ((uint8_t)0x04)
|
| | | #define NVIC_LP_SLEEPONEXIT ((uint8_t)0x02)
|
| | | #define IS_NVIC_LP(LP) (((LP) == NVIC_LP_SEVONPEND) || \
|
| | | ((LP) == NVIC_LP_SLEEPDEEP) || \
|
| | | ((LP) == NVIC_LP_SLEEPONEXIT))
|
| | | /**
|
| | | * @}
|
| | | */
|
| | |
|
| | | /** @defgroup Preemption_Priority_Group |
| | | * @{
|
| | | */
|
| | |
|
| | | #define NVIC_PriorityGroup_0 ((uint32_t)0x700) /*!< 0 bits for pre-emption priority
|
| | | 4 bits for subpriority */
|
| | | #define NVIC_PriorityGroup_1 ((uint32_t)0x600) /*!< 1 bits for pre-emption priority
|
| | | 3 bits for subpriority */
|
| | | #define NVIC_PriorityGroup_2 ((uint32_t)0x500) /*!< 2 bits for pre-emption priority
|
| | | 2 bits for subpriority */
|
| | | #define NVIC_PriorityGroup_3 ((uint32_t)0x400) /*!< 3 bits for pre-emption priority
|
| | | 1 bits for subpriority */
|
| | | #define NVIC_PriorityGroup_4 ((uint32_t)0x300) /*!< 4 bits for pre-emption priority
|
| | | 0 bits for subpriority */
|
| | |
|
| | | #define IS_NVIC_PRIORITY_GROUP(GROUP) (((GROUP) == NVIC_PriorityGroup_0) || \
|
| | | ((GROUP) == NVIC_PriorityGroup_1) || \
|
| | | ((GROUP) == NVIC_PriorityGroup_2) || \
|
| | | ((GROUP) == NVIC_PriorityGroup_3) || \
|
| | | ((GROUP) == NVIC_PriorityGroup_4))
|
| | |
|
| | | #define IS_NVIC_PREEMPTION_PRIORITY(PRIORITY) ((PRIORITY) < 0x10)
|
| | |
|
| | | #define IS_NVIC_SUB_PRIORITY(PRIORITY) ((PRIORITY) < 0x10)
|
| | |
|
| | | #define IS_NVIC_OFFSET(OFFSET) ((OFFSET) < 0x000FFFFF)
|
| | |
|
| | | /**
|
| | | * @}
|
| | | */
|
| | |
|
| | | /** @defgroup SysTick_clock_source |
| | | * @{
|
| | | */
|
| | |
|
| | | #define SysTick_CLKSource_HCLK_Div8 ((uint32_t)0xFFFFFFFB)
|
| | | #define SysTick_CLKSource_HCLK ((uint32_t)0x00000004)
|
| | | #define IS_SYSTICK_CLK_SOURCE(SOURCE) (((SOURCE) == SysTick_CLKSource_HCLK) || \
|
| | | ((SOURCE) == SysTick_CLKSource_HCLK_Div8))
|
| | | /**
|
| | | * @}
|
| | | */
|
| | |
|
| | | /**
|
| | | * @}
|
| | | */
|
| | |
|
| | | /** @defgroup MISC_Exported_Macros
|
| | | * @{
|
| | | */
|
| | |
|
| | | /**
|
| | | * @}
|
| | | */
|
| | |
|
| | | /** @defgroup MISC_Exported_Functions
|
| | | * @{
|
| | | */
|
| | |
|
| | | void NVIC_PriorityGroupConfig(uint32_t NVIC_PriorityGroup);
|
| | | void NVIC_Init(NVIC_InitTypeDef* NVIC_InitStruct);
|
| | | void NVIC_SetVectorTable(uint32_t NVIC_VectTab, uint32_t Offset);
|
| | | void NVIC_SystemLPConfig(uint8_t LowPowerMode, FunctionalState NewState);
|
| | | void SysTick_CLKSourceConfig(uint32_t SysTick_CLKSource);
|
| | |
|
| | | #ifdef __cplusplus
|
| | | }
|
| | | #endif
|
| | |
|
| | | #endif /* __MISC_H */
|
| | |
|
| | | /**
|
| | | * @}
|
| | | */
|
| | |
|
| | | /**
|
| | | * @}
|
| | | */
|
| | |
|
| | | /**
|
| | | * @}
|
| | | */
|
| | |
|
| | | /******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/
|
New file |
| | |
| | | /**
|
| | | ******************************************************************************
|
| | | * @file stm32f10x_adc.h
|
| | | * @author MCD Application Team
|
| | | * @version V3.5.0
|
| | | * @date 11-March-2011
|
| | | * @brief This file contains all the functions prototypes for the ADC firmware |
| | | * library.
|
| | | ******************************************************************************
|
| | | * @attention
|
| | | *
|
| | | * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
|
| | | * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE
|
| | | * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY
|
| | | * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING
|
| | | * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE
|
| | | * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
|
| | | *
|
| | | * <h2><center>© COPYRIGHT 2011 STMicroelectronics</center></h2>
|
| | | ******************************************************************************
|
| | | */
|
| | |
|
| | | /* Define to prevent recursive inclusion -------------------------------------*/
|
| | | #ifndef __STM32F10x_ADC_H
|
| | | #define __STM32F10x_ADC_H
|
| | |
|
| | | #ifdef __cplusplus
|
| | | extern "C" {
|
| | | #endif
|
| | |
|
| | | /* Includes ------------------------------------------------------------------*/
|
| | | #include "stm32f10x.h"
|
| | |
|
| | | /** @addtogroup STM32F10x_StdPeriph_Driver
|
| | | * @{
|
| | | */
|
| | |
|
| | | /** @addtogroup ADC
|
| | | * @{
|
| | | */
|
| | |
|
| | | /** @defgroup ADC_Exported_Types
|
| | | * @{
|
| | | */
|
| | |
|
| | | /** |
| | | * @brief ADC Init structure definition |
| | | */
|
| | |
|
| | | typedef struct
|
| | | {
|
| | | uint32_t ADC_Mode; /*!< Configures the ADC to operate in independent or
|
| | | dual mode. |
| | | This parameter can be a value of @ref ADC_mode */
|
| | |
|
| | | FunctionalState ADC_ScanConvMode; /*!< Specifies whether the conversion is performed in
|
| | | Scan (multichannels) or Single (one channel) mode.
|
| | | This parameter can be set to ENABLE or DISABLE */
|
| | |
|
| | | FunctionalState ADC_ContinuousConvMode; /*!< Specifies whether the conversion is performed in
|
| | | Continuous or Single mode.
|
| | | This parameter can be set to ENABLE or DISABLE. */
|
| | |
|
| | | uint32_t ADC_ExternalTrigConv; /*!< Defines the external trigger used to start the analog
|
| | | to digital conversion of regular channels. This parameter
|
| | | can be a value of @ref ADC_external_trigger_sources_for_regular_channels_conversion */
|
| | |
|
| | | uint32_t ADC_DataAlign; /*!< Specifies whether the ADC data alignment is left or right.
|
| | | This parameter can be a value of @ref ADC_data_align */
|
| | |
|
| | | uint8_t ADC_NbrOfChannel; /*!< Specifies the number of ADC channels that will be converted
|
| | | using the sequencer for regular channel group.
|
| | | This parameter must range from 1 to 16. */
|
| | | }ADC_InitTypeDef;
|
| | | /**
|
| | | * @}
|
| | | */
|
| | |
|
| | | /** @defgroup ADC_Exported_Constants
|
| | | * @{
|
| | | */
|
| | |
|
| | | #define IS_ADC_ALL_PERIPH(PERIPH) (((PERIPH) == ADC1) || \
|
| | | ((PERIPH) == ADC2) || \
|
| | | ((PERIPH) == ADC3))
|
| | |
|
| | | #define IS_ADC_DMA_PERIPH(PERIPH) (((PERIPH) == ADC1) || \
|
| | | ((PERIPH) == ADC3))
|
| | |
|
| | | /** @defgroup ADC_mode |
| | | * @{
|
| | | */
|
| | |
|
| | | #define ADC_Mode_Independent ((uint32_t)0x00000000)
|
| | | #define ADC_Mode_RegInjecSimult ((uint32_t)0x00010000)
|
| | | #define ADC_Mode_RegSimult_AlterTrig ((uint32_t)0x00020000)
|
| | | #define ADC_Mode_InjecSimult_FastInterl ((uint32_t)0x00030000)
|
| | | #define ADC_Mode_InjecSimult_SlowInterl ((uint32_t)0x00040000)
|
| | | #define ADC_Mode_InjecSimult ((uint32_t)0x00050000)
|
| | | #define ADC_Mode_RegSimult ((uint32_t)0x00060000)
|
| | | #define ADC_Mode_FastInterl ((uint32_t)0x00070000)
|
| | | #define ADC_Mode_SlowInterl ((uint32_t)0x00080000)
|
| | | #define ADC_Mode_AlterTrig ((uint32_t)0x00090000)
|
| | |
|
| | | #define IS_ADC_MODE(MODE) (((MODE) == ADC_Mode_Independent) || \
|
| | | ((MODE) == ADC_Mode_RegInjecSimult) || \
|
| | | ((MODE) == ADC_Mode_RegSimult_AlterTrig) || \
|
| | | ((MODE) == ADC_Mode_InjecSimult_FastInterl) || \
|
| | | ((MODE) == ADC_Mode_InjecSimult_SlowInterl) || \
|
| | | ((MODE) == ADC_Mode_InjecSimult) || \
|
| | | ((MODE) == ADC_Mode_RegSimult) || \
|
| | | ((MODE) == ADC_Mode_FastInterl) || \
|
| | | ((MODE) == ADC_Mode_SlowInterl) || \
|
| | | ((MODE) == ADC_Mode_AlterTrig))
|
| | | /**
|
| | | * @}
|
| | | */
|
| | |
|
| | | /** @defgroup ADC_external_trigger_sources_for_regular_channels_conversion |
| | | * @{
|
| | | */
|
| | |
|
| | | #define ADC_ExternalTrigConv_T1_CC1 ((uint32_t)0x00000000) /*!< For ADC1 and ADC2 */
|
| | | #define ADC_ExternalTrigConv_T1_CC2 ((uint32_t)0x00020000) /*!< For ADC1 and ADC2 */
|
| | | #define ADC_ExternalTrigConv_T2_CC2 ((uint32_t)0x00060000) /*!< For ADC1 and ADC2 */
|
| | | #define ADC_ExternalTrigConv_T3_TRGO ((uint32_t)0x00080000) /*!< For ADC1 and ADC2 */
|
| | | #define ADC_ExternalTrigConv_T4_CC4 ((uint32_t)0x000A0000) /*!< For ADC1 and ADC2 */
|
| | | #define ADC_ExternalTrigConv_Ext_IT11_TIM8_TRGO ((uint32_t)0x000C0000) /*!< For ADC1 and ADC2 */
|
| | |
|
| | | #define ADC_ExternalTrigConv_T1_CC3 ((uint32_t)0x00040000) /*!< For ADC1, ADC2 and ADC3 */
|
| | | #define ADC_ExternalTrigConv_None ((uint32_t)0x000E0000) /*!< For ADC1, ADC2 and ADC3 */
|
| | |
|
| | | #define ADC_ExternalTrigConv_T3_CC1 ((uint32_t)0x00000000) /*!< For ADC3 only */
|
| | | #define ADC_ExternalTrigConv_T2_CC3 ((uint32_t)0x00020000) /*!< For ADC3 only */
|
| | | #define ADC_ExternalTrigConv_T8_CC1 ((uint32_t)0x00060000) /*!< For ADC3 only */
|
| | | #define ADC_ExternalTrigConv_T8_TRGO ((uint32_t)0x00080000) /*!< For ADC3 only */
|
| | | #define ADC_ExternalTrigConv_T5_CC1 ((uint32_t)0x000A0000) /*!< For ADC3 only */
|
| | | #define ADC_ExternalTrigConv_T5_CC3 ((uint32_t)0x000C0000) /*!< For ADC3 only */
|
| | |
|
| | | #define IS_ADC_EXT_TRIG(REGTRIG) (((REGTRIG) == ADC_ExternalTrigConv_T1_CC1) || \
|
| | | ((REGTRIG) == ADC_ExternalTrigConv_T1_CC2) || \
|
| | | ((REGTRIG) == ADC_ExternalTrigConv_T1_CC3) || \
|
| | | ((REGTRIG) == ADC_ExternalTrigConv_T2_CC2) || \
|
| | | ((REGTRIG) == ADC_ExternalTrigConv_T3_TRGO) || \
|
| | | ((REGTRIG) == ADC_ExternalTrigConv_T4_CC4) || \
|
| | | ((REGTRIG) == ADC_ExternalTrigConv_Ext_IT11_TIM8_TRGO) || \
|
| | | ((REGTRIG) == ADC_ExternalTrigConv_None) || \
|
| | | ((REGTRIG) == ADC_ExternalTrigConv_T3_CC1) || \
|
| | | ((REGTRIG) == ADC_ExternalTrigConv_T2_CC3) || \
|
| | | ((REGTRIG) == ADC_ExternalTrigConv_T8_CC1) || \
|
| | | ((REGTRIG) == ADC_ExternalTrigConv_T8_TRGO) || \
|
| | | ((REGTRIG) == ADC_ExternalTrigConv_T5_CC1) || \
|
| | | ((REGTRIG) == ADC_ExternalTrigConv_T5_CC3))
|
| | | /**
|
| | | * @}
|
| | | */
|
| | |
|
| | | /** @defgroup ADC_data_align |
| | | * @{
|
| | | */
|
| | |
|
| | | #define ADC_DataAlign_Right ((uint32_t)0x00000000)
|
| | | #define ADC_DataAlign_Left ((uint32_t)0x00000800)
|
| | | #define IS_ADC_DATA_ALIGN(ALIGN) (((ALIGN) == ADC_DataAlign_Right) || \
|
| | | ((ALIGN) == ADC_DataAlign_Left))
|
| | | /**
|
| | | * @}
|
| | | */
|
| | |
|
| | | /** @defgroup ADC_channels |
| | | * @{
|
| | | */
|
| | |
|
| | | #define ADC_Channel_0 ((uint8_t)0x00)
|
| | | #define ADC_Channel_1 ((uint8_t)0x01)
|
| | | #define ADC_Channel_2 ((uint8_t)0x02)
|
| | | #define ADC_Channel_3 ((uint8_t)0x03)
|
| | | #define ADC_Channel_4 ((uint8_t)0x04)
|
| | | #define ADC_Channel_5 ((uint8_t)0x05)
|
| | | #define ADC_Channel_6 ((uint8_t)0x06)
|
| | | #define ADC_Channel_7 ((uint8_t)0x07)
|
| | | #define ADC_Channel_8 ((uint8_t)0x08)
|
| | | #define ADC_Channel_9 ((uint8_t)0x09)
|
| | | #define ADC_Channel_10 ((uint8_t)0x0A)
|
| | | #define ADC_Channel_11 ((uint8_t)0x0B)
|
| | | #define ADC_Channel_12 ((uint8_t)0x0C)
|
| | | #define ADC_Channel_13 ((uint8_t)0x0D)
|
| | | #define ADC_Channel_14 ((uint8_t)0x0E)
|
| | | #define ADC_Channel_15 ((uint8_t)0x0F)
|
| | | #define ADC_Channel_16 ((uint8_t)0x10)
|
| | | #define ADC_Channel_17 ((uint8_t)0x11)
|
| | |
|
| | | #define ADC_Channel_TempSensor ((uint8_t)ADC_Channel_16)
|
| | | #define ADC_Channel_Vrefint ((uint8_t)ADC_Channel_17)
|
| | |
|
| | | #define IS_ADC_CHANNEL(CHANNEL) (((CHANNEL) == ADC_Channel_0) || ((CHANNEL) == ADC_Channel_1) || \
|
| | | ((CHANNEL) == ADC_Channel_2) || ((CHANNEL) == ADC_Channel_3) || \
|
| | | ((CHANNEL) == ADC_Channel_4) || ((CHANNEL) == ADC_Channel_5) || \
|
| | | ((CHANNEL) == ADC_Channel_6) || ((CHANNEL) == ADC_Channel_7) || \
|
| | | ((CHANNEL) == ADC_Channel_8) || ((CHANNEL) == ADC_Channel_9) || \
|
| | | ((CHANNEL) == ADC_Channel_10) || ((CHANNEL) == ADC_Channel_11) || \
|
| | | ((CHANNEL) == ADC_Channel_12) || ((CHANNEL) == ADC_Channel_13) || \
|
| | | ((CHANNEL) == ADC_Channel_14) || ((CHANNEL) == ADC_Channel_15) || \
|
| | | ((CHANNEL) == ADC_Channel_16) || ((CHANNEL) == ADC_Channel_17))
|
| | | /**
|
| | | * @}
|
| | | */
|
| | |
|
| | | /** @defgroup ADC_sampling_time |
| | | * @{
|
| | | */
|
| | |
|
| | | #define ADC_SampleTime_1Cycles5 ((uint8_t)0x00)
|
| | | #define ADC_SampleTime_7Cycles5 ((uint8_t)0x01)
|
| | | #define ADC_SampleTime_13Cycles5 ((uint8_t)0x02)
|
| | | #define ADC_SampleTime_28Cycles5 ((uint8_t)0x03)
|
| | | #define ADC_SampleTime_41Cycles5 ((uint8_t)0x04)
|
| | | #define ADC_SampleTime_55Cycles5 ((uint8_t)0x05)
|
| | | #define ADC_SampleTime_71Cycles5 ((uint8_t)0x06)
|
| | | #define ADC_SampleTime_239Cycles5 ((uint8_t)0x07)
|
| | | #define IS_ADC_SAMPLE_TIME(TIME) (((TIME) == ADC_SampleTime_1Cycles5) || \
|
| | | ((TIME) == ADC_SampleTime_7Cycles5) || \
|
| | | ((TIME) == ADC_SampleTime_13Cycles5) || \
|
| | | ((TIME) == ADC_SampleTime_28Cycles5) || \
|
| | | ((TIME) == ADC_SampleTime_41Cycles5) || \
|
| | | ((TIME) == ADC_SampleTime_55Cycles5) || \
|
| | | ((TIME) == ADC_SampleTime_71Cycles5) || \
|
| | | ((TIME) == ADC_SampleTime_239Cycles5))
|
| | | /**
|
| | | * @}
|
| | | */
|
| | |
|
| | | /** @defgroup ADC_external_trigger_sources_for_injected_channels_conversion |
| | | * @{
|
| | | */
|
| | |
|
| | | #define ADC_ExternalTrigInjecConv_T2_TRGO ((uint32_t)0x00002000) /*!< For ADC1 and ADC2 */
|
| | | #define ADC_ExternalTrigInjecConv_T2_CC1 ((uint32_t)0x00003000) /*!< For ADC1 and ADC2 */
|
| | | #define ADC_ExternalTrigInjecConv_T3_CC4 ((uint32_t)0x00004000) /*!< For ADC1 and ADC2 */
|
| | | #define ADC_ExternalTrigInjecConv_T4_TRGO ((uint32_t)0x00005000) /*!< For ADC1 and ADC2 */
|
| | | #define ADC_ExternalTrigInjecConv_Ext_IT15_TIM8_CC4 ((uint32_t)0x00006000) /*!< For ADC1 and ADC2 */
|
| | |
|
| | | #define ADC_ExternalTrigInjecConv_T1_TRGO ((uint32_t)0x00000000) /*!< For ADC1, ADC2 and ADC3 */
|
| | | #define ADC_ExternalTrigInjecConv_T1_CC4 ((uint32_t)0x00001000) /*!< For ADC1, ADC2 and ADC3 */
|
| | | #define ADC_ExternalTrigInjecConv_None ((uint32_t)0x00007000) /*!< For ADC1, ADC2 and ADC3 */
|
| | |
|
| | | #define ADC_ExternalTrigInjecConv_T4_CC3 ((uint32_t)0x00002000) /*!< For ADC3 only */
|
| | | #define ADC_ExternalTrigInjecConv_T8_CC2 ((uint32_t)0x00003000) /*!< For ADC3 only */
|
| | | #define ADC_ExternalTrigInjecConv_T8_CC4 ((uint32_t)0x00004000) /*!< For ADC3 only */
|
| | | #define ADC_ExternalTrigInjecConv_T5_TRGO ((uint32_t)0x00005000) /*!< For ADC3 only */
|
| | | #define ADC_ExternalTrigInjecConv_T5_CC4 ((uint32_t)0x00006000) /*!< For ADC3 only */
|
| | |
|
| | | #define IS_ADC_EXT_INJEC_TRIG(INJTRIG) (((INJTRIG) == ADC_ExternalTrigInjecConv_T1_TRGO) || \
|
| | | ((INJTRIG) == ADC_ExternalTrigInjecConv_T1_CC4) || \
|
| | | ((INJTRIG) == ADC_ExternalTrigInjecConv_T2_TRGO) || \
|
| | | ((INJTRIG) == ADC_ExternalTrigInjecConv_T2_CC1) || \
|
| | | ((INJTRIG) == ADC_ExternalTrigInjecConv_T3_CC4) || \
|
| | | ((INJTRIG) == ADC_ExternalTrigInjecConv_T4_TRGO) || \
|
| | | ((INJTRIG) == ADC_ExternalTrigInjecConv_Ext_IT15_TIM8_CC4) || \
|
| | | ((INJTRIG) == ADC_ExternalTrigInjecConv_None) || \
|
| | | ((INJTRIG) == ADC_ExternalTrigInjecConv_T4_CC3) || \
|
| | | ((INJTRIG) == ADC_ExternalTrigInjecConv_T8_CC2) || \
|
| | | ((INJTRIG) == ADC_ExternalTrigInjecConv_T8_CC4) || \
|
| | | ((INJTRIG) == ADC_ExternalTrigInjecConv_T5_TRGO) || \
|
| | | ((INJTRIG) == ADC_ExternalTrigInjecConv_T5_CC4))
|
| | | /**
|
| | | * @}
|
| | | */
|
| | |
|
| | | /** @defgroup ADC_injected_channel_selection |
| | | * @{
|
| | | */
|
| | |
|
| | | #define ADC_InjectedChannel_1 ((uint8_t)0x14)
|
| | | #define ADC_InjectedChannel_2 ((uint8_t)0x18)
|
| | | #define ADC_InjectedChannel_3 ((uint8_t)0x1C)
|
| | | #define ADC_InjectedChannel_4 ((uint8_t)0x20)
|
| | | #define IS_ADC_INJECTED_CHANNEL(CHANNEL) (((CHANNEL) == ADC_InjectedChannel_1) || \
|
| | | ((CHANNEL) == ADC_InjectedChannel_2) || \
|
| | | ((CHANNEL) == ADC_InjectedChannel_3) || \
|
| | | ((CHANNEL) == ADC_InjectedChannel_4))
|
| | | /**
|
| | | * @}
|
| | | */
|
| | |
|
| | | /** @defgroup ADC_analog_watchdog_selection |
| | | * @{
|
| | | */
|
| | |
|
| | | #define ADC_AnalogWatchdog_SingleRegEnable ((uint32_t)0x00800200)
|
| | | #define ADC_AnalogWatchdog_SingleInjecEnable ((uint32_t)0x00400200)
|
| | | #define ADC_AnalogWatchdog_SingleRegOrInjecEnable ((uint32_t)0x00C00200)
|
| | | #define ADC_AnalogWatchdog_AllRegEnable ((uint32_t)0x00800000)
|
| | | #define ADC_AnalogWatchdog_AllInjecEnable ((uint32_t)0x00400000)
|
| | | #define ADC_AnalogWatchdog_AllRegAllInjecEnable ((uint32_t)0x00C00000)
|
| | | #define ADC_AnalogWatchdog_None ((uint32_t)0x00000000)
|
| | |
|
| | | #define IS_ADC_ANALOG_WATCHDOG(WATCHDOG) (((WATCHDOG) == ADC_AnalogWatchdog_SingleRegEnable) || \
|
| | | ((WATCHDOG) == ADC_AnalogWatchdog_SingleInjecEnable) || \
|
| | | ((WATCHDOG) == ADC_AnalogWatchdog_SingleRegOrInjecEnable) || \
|
| | | ((WATCHDOG) == ADC_AnalogWatchdog_AllRegEnable) || \
|
| | | ((WATCHDOG) == ADC_AnalogWatchdog_AllInjecEnable) || \
|
| | | ((WATCHDOG) == ADC_AnalogWatchdog_AllRegAllInjecEnable) || \
|
| | | ((WATCHDOG) == ADC_AnalogWatchdog_None))
|
| | | /**
|
| | | * @}
|
| | | */
|
| | |
|
| | | /** @defgroup ADC_interrupts_definition |
| | | * @{
|
| | | */
|
| | |
|
| | | #define ADC_IT_EOC ((uint16_t)0x0220)
|
| | | #define ADC_IT_AWD ((uint16_t)0x0140)
|
| | | #define ADC_IT_JEOC ((uint16_t)0x0480)
|
| | |
|
| | | #define IS_ADC_IT(IT) ((((IT) & (uint16_t)0xF81F) == 0x00) && ((IT) != 0x00))
|
| | |
|
| | | #define IS_ADC_GET_IT(IT) (((IT) == ADC_IT_EOC) || ((IT) == ADC_IT_AWD) || \
|
| | | ((IT) == ADC_IT_JEOC))
|
| | | /**
|
| | | * @}
|
| | | */
|
| | |
|
| | | /** @defgroup ADC_flags_definition |
| | | * @{
|
| | | */
|
| | |
|
| | | #define ADC_FLAG_AWD ((uint8_t)0x01)
|
| | | #define ADC_FLAG_EOC ((uint8_t)0x02)
|
| | | #define ADC_FLAG_JEOC ((uint8_t)0x04)
|
| | | #define ADC_FLAG_JSTRT ((uint8_t)0x08)
|
| | | #define ADC_FLAG_STRT ((uint8_t)0x10)
|
| | | #define IS_ADC_CLEAR_FLAG(FLAG) ((((FLAG) & (uint8_t)0xE0) == 0x00) && ((FLAG) != 0x00))
|
| | | #define IS_ADC_GET_FLAG(FLAG) (((FLAG) == ADC_FLAG_AWD) || ((FLAG) == ADC_FLAG_EOC) || \
|
| | | ((FLAG) == ADC_FLAG_JEOC) || ((FLAG)== ADC_FLAG_JSTRT) || \
|
| | | ((FLAG) == ADC_FLAG_STRT))
|
| | | /**
|
| | | * @}
|
| | | */
|
| | |
|
| | | /** @defgroup ADC_thresholds |
| | | * @{
|
| | | */
|
| | |
|
| | | #define IS_ADC_THRESHOLD(THRESHOLD) ((THRESHOLD) <= 0xFFF)
|
| | |
|
| | | /**
|
| | | * @}
|
| | | */
|
| | |
|
| | | /** @defgroup ADC_injected_offset |
| | | * @{
|
| | | */
|
| | |
|
| | | #define IS_ADC_OFFSET(OFFSET) ((OFFSET) <= 0xFFF)
|
| | |
|
| | | /**
|
| | | * @}
|
| | | */
|
| | |
|
| | | /** @defgroup ADC_injected_length |
| | | * @{
|
| | | */
|
| | |
|
| | | #define IS_ADC_INJECTED_LENGTH(LENGTH) (((LENGTH) >= 0x1) && ((LENGTH) <= 0x4))
|
| | |
|
| | | /**
|
| | | * @}
|
| | | */
|
| | |
|
| | | /** @defgroup ADC_injected_rank |
| | | * @{
|
| | | */
|
| | |
|
| | | #define IS_ADC_INJECTED_RANK(RANK) (((RANK) >= 0x1) && ((RANK) <= 0x4))
|
| | |
|
| | | /**
|
| | | * @}
|
| | | */ |
| | |
|
| | |
|
| | | /** @defgroup ADC_regular_length |
| | | * @{
|
| | | */
|
| | |
|
| | | #define IS_ADC_REGULAR_LENGTH(LENGTH) (((LENGTH) >= 0x1) && ((LENGTH) <= 0x10))
|
| | | /**
|
| | | * @}
|
| | | */
|
| | |
|
| | | /** @defgroup ADC_regular_rank |
| | | * @{
|
| | | */
|
| | |
|
| | | #define IS_ADC_REGULAR_RANK(RANK) (((RANK) >= 0x1) && ((RANK) <= 0x10))
|
| | |
|
| | | /**
|
| | | * @}
|
| | | */
|
| | |
|
| | | /** @defgroup ADC_regular_discontinuous_mode_number |
| | | * @{
|
| | | */
|
| | |
|
| | | #define IS_ADC_REGULAR_DISC_NUMBER(NUMBER) (((NUMBER) >= 0x1) && ((NUMBER) <= 0x8))
|
| | |
|
| | | /**
|
| | | * @}
|
| | | */
|
| | |
|
| | | /**
|
| | | * @}
|
| | | */
|
| | |
|
| | | /** @defgroup ADC_Exported_Macros
|
| | | * @{
|
| | | */
|
| | |
|
| | | /**
|
| | | * @}
|
| | | */
|
| | |
|
| | | /** @defgroup ADC_Exported_Functions
|
| | | * @{
|
| | | */
|
| | |
|
| | | void ADC_DeInit(ADC_TypeDef* ADCx);
|
| | | void ADC_Init(ADC_TypeDef* ADCx, ADC_InitTypeDef* ADC_InitStruct);
|
| | | void ADC_StructInit(ADC_InitTypeDef* ADC_InitStruct);
|
| | | void ADC_Cmd(ADC_TypeDef* ADCx, FunctionalState NewState);
|
| | | void ADC_DMACmd(ADC_TypeDef* ADCx, FunctionalState NewState);
|
| | | void ADC_ITConfig(ADC_TypeDef* ADCx, uint16_t ADC_IT, FunctionalState NewState);
|
| | | void ADC_ResetCalibration(ADC_TypeDef* ADCx);
|
| | | FlagStatus ADC_GetResetCalibrationStatus(ADC_TypeDef* ADCx);
|
| | | void ADC_StartCalibration(ADC_TypeDef* ADCx);
|
| | | FlagStatus ADC_GetCalibrationStatus(ADC_TypeDef* ADCx);
|
| | | void ADC_SoftwareStartConvCmd(ADC_TypeDef* ADCx, FunctionalState NewState);
|
| | | FlagStatus ADC_GetSoftwareStartConvStatus(ADC_TypeDef* ADCx);
|
| | | void ADC_DiscModeChannelCountConfig(ADC_TypeDef* ADCx, uint8_t Number);
|
| | | void ADC_DiscModeCmd(ADC_TypeDef* ADCx, FunctionalState NewState);
|
| | | void ADC_RegularChannelConfig(ADC_TypeDef* ADCx, uint8_t ADC_Channel, uint8_t Rank, uint8_t ADC_SampleTime);
|
| | | void ADC_ExternalTrigConvCmd(ADC_TypeDef* ADCx, FunctionalState NewState);
|
| | | uint16_t ADC_GetConversionValue(ADC_TypeDef* ADCx);
|
| | | uint32_t ADC_GetDualModeConversionValue(void);
|
| | | void ADC_AutoInjectedConvCmd(ADC_TypeDef* ADCx, FunctionalState NewState);
|
| | | void ADC_InjectedDiscModeCmd(ADC_TypeDef* ADCx, FunctionalState NewState);
|
| | | void ADC_ExternalTrigInjectedConvConfig(ADC_TypeDef* ADCx, uint32_t ADC_ExternalTrigInjecConv);
|
| | | void ADC_ExternalTrigInjectedConvCmd(ADC_TypeDef* ADCx, FunctionalState NewState);
|
| | | void ADC_SoftwareStartInjectedConvCmd(ADC_TypeDef* ADCx, FunctionalState NewState);
|
| | | FlagStatus ADC_GetSoftwareStartInjectedConvCmdStatus(ADC_TypeDef* ADCx);
|
| | | void ADC_InjectedChannelConfig(ADC_TypeDef* ADCx, uint8_t ADC_Channel, uint8_t Rank, uint8_t ADC_SampleTime);
|
| | | void ADC_InjectedSequencerLengthConfig(ADC_TypeDef* ADCx, uint8_t Length);
|
| | | void ADC_SetInjectedOffset(ADC_TypeDef* ADCx, uint8_t ADC_InjectedChannel, uint16_t Offset);
|
| | | uint16_t ADC_GetInjectedConversionValue(ADC_TypeDef* ADCx, uint8_t ADC_InjectedChannel);
|
| | | void ADC_AnalogWatchdogCmd(ADC_TypeDef* ADCx, uint32_t ADC_AnalogWatchdog);
|
| | | void ADC_AnalogWatchdogThresholdsConfig(ADC_TypeDef* ADCx, uint16_t HighThreshold, uint16_t LowThreshold);
|
| | | void ADC_AnalogWatchdogSingleChannelConfig(ADC_TypeDef* ADCx, uint8_t ADC_Channel);
|
| | | void ADC_TempSensorVrefintCmd(FunctionalState NewState);
|
| | | FlagStatus ADC_GetFlagStatus(ADC_TypeDef* ADCx, uint8_t ADC_FLAG);
|
| | | void ADC_ClearFlag(ADC_TypeDef* ADCx, uint8_t ADC_FLAG);
|
| | | ITStatus ADC_GetITStatus(ADC_TypeDef* ADCx, uint16_t ADC_IT);
|
| | | void ADC_ClearITPendingBit(ADC_TypeDef* ADCx, uint16_t ADC_IT);
|
| | |
|
| | | #ifdef __cplusplus
|
| | | }
|
| | | #endif
|
| | |
|
| | | #endif /*__STM32F10x_ADC_H */
|
| | |
|
| | | /**
|
| | | * @}
|
| | | */
|
| | |
|
| | | /**
|
| | | * @}
|
| | | */
|
| | |
|
| | | /**
|
| | | * @}
|
| | | */
|
| | |
|
| | | /******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/
|
New file |
| | |
| | | /**
|
| | | ******************************************************************************
|
| | | * @file stm32f10x_bkp.h
|
| | | * @author MCD Application Team
|
| | | * @version V3.5.0
|
| | | * @date 11-March-2011
|
| | | * @brief This file contains all the functions prototypes for the BKP firmware |
| | | * library.
|
| | | ******************************************************************************
|
| | | * @attention
|
| | | *
|
| | | * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
|
| | | * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE
|
| | | * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY
|
| | | * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING
|
| | | * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE
|
| | | * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
|
| | | *
|
| | | * <h2><center>© COPYRIGHT 2011 STMicroelectronics</center></h2>
|
| | | ******************************************************************************
|
| | | */
|
| | |
|
| | | /* Define to prevent recursive inclusion -------------------------------------*/
|
| | | #ifndef __STM32F10x_BKP_H
|
| | | #define __STM32F10x_BKP_H
|
| | |
|
| | | #ifdef __cplusplus
|
| | | extern "C" {
|
| | | #endif
|
| | |
|
| | | /* Includes ------------------------------------------------------------------*/
|
| | | #include "stm32f10x.h"
|
| | |
|
| | | /** @addtogroup STM32F10x_StdPeriph_Driver
|
| | | * @{
|
| | | */
|
| | |
|
| | | /** @addtogroup BKP
|
| | | * @{
|
| | | */
|
| | |
|
| | | /** @defgroup BKP_Exported_Types
|
| | | * @{
|
| | | */
|
| | |
|
| | | /**
|
| | | * @}
|
| | | */
|
| | |
|
| | | /** @defgroup BKP_Exported_Constants
|
| | | * @{
|
| | | */
|
| | |
|
| | | /** @defgroup Tamper_Pin_active_level |
| | | * @{
|
| | | */
|
| | |
|
| | | #define BKP_TamperPinLevel_High ((uint16_t)0x0000)
|
| | | #define BKP_TamperPinLevel_Low ((uint16_t)0x0001)
|
| | | #define IS_BKP_TAMPER_PIN_LEVEL(LEVEL) (((LEVEL) == BKP_TamperPinLevel_High) || \
|
| | | ((LEVEL) == BKP_TamperPinLevel_Low))
|
| | | /**
|
| | | * @}
|
| | | */
|
| | |
|
| | | /** @defgroup RTC_output_source_to_output_on_the_Tamper_pin |
| | | * @{
|
| | | */
|
| | |
|
| | | #define BKP_RTCOutputSource_None ((uint16_t)0x0000)
|
| | | #define BKP_RTCOutputSource_CalibClock ((uint16_t)0x0080)
|
| | | #define BKP_RTCOutputSource_Alarm ((uint16_t)0x0100)
|
| | | #define BKP_RTCOutputSource_Second ((uint16_t)0x0300)
|
| | | #define IS_BKP_RTC_OUTPUT_SOURCE(SOURCE) (((SOURCE) == BKP_RTCOutputSource_None) || \
|
| | | ((SOURCE) == BKP_RTCOutputSource_CalibClock) || \
|
| | | ((SOURCE) == BKP_RTCOutputSource_Alarm) || \
|
| | | ((SOURCE) == BKP_RTCOutputSource_Second))
|
| | | /**
|
| | | * @}
|
| | | */
|
| | |
|
| | | /** @defgroup Data_Backup_Register |
| | | * @{
|
| | | */
|
| | |
|
| | | #define BKP_DR1 ((uint16_t)0x0004)
|
| | | #define BKP_DR2 ((uint16_t)0x0008)
|
| | | #define BKP_DR3 ((uint16_t)0x000C)
|
| | | #define BKP_DR4 ((uint16_t)0x0010)
|
| | | #define BKP_DR5 ((uint16_t)0x0014)
|
| | | #define BKP_DR6 ((uint16_t)0x0018)
|
| | | #define BKP_DR7 ((uint16_t)0x001C)
|
| | | #define BKP_DR8 ((uint16_t)0x0020)
|
| | | #define BKP_DR9 ((uint16_t)0x0024)
|
| | | #define BKP_DR10 ((uint16_t)0x0028)
|
| | | #define BKP_DR11 ((uint16_t)0x0040)
|
| | | #define BKP_DR12 ((uint16_t)0x0044)
|
| | | #define BKP_DR13 ((uint16_t)0x0048)
|
| | | #define BKP_DR14 ((uint16_t)0x004C)
|
| | | #define BKP_DR15 ((uint16_t)0x0050)
|
| | | #define BKP_DR16 ((uint16_t)0x0054)
|
| | | #define BKP_DR17 ((uint16_t)0x0058)
|
| | | #define BKP_DR18 ((uint16_t)0x005C)
|
| | | #define BKP_DR19 ((uint16_t)0x0060)
|
| | | #define BKP_DR20 ((uint16_t)0x0064)
|
| | | #define BKP_DR21 ((uint16_t)0x0068)
|
| | | #define BKP_DR22 ((uint16_t)0x006C)
|
| | | #define BKP_DR23 ((uint16_t)0x0070)
|
| | | #define BKP_DR24 ((uint16_t)0x0074)
|
| | | #define BKP_DR25 ((uint16_t)0x0078)
|
| | | #define BKP_DR26 ((uint16_t)0x007C)
|
| | | #define BKP_DR27 ((uint16_t)0x0080)
|
| | | #define BKP_DR28 ((uint16_t)0x0084)
|
| | | #define BKP_DR29 ((uint16_t)0x0088)
|
| | | #define BKP_DR30 ((uint16_t)0x008C)
|
| | | #define BKP_DR31 ((uint16_t)0x0090)
|
| | | #define BKP_DR32 ((uint16_t)0x0094)
|
| | | #define BKP_DR33 ((uint16_t)0x0098)
|
| | | #define BKP_DR34 ((uint16_t)0x009C)
|
| | | #define BKP_DR35 ((uint16_t)0x00A0)
|
| | | #define BKP_DR36 ((uint16_t)0x00A4)
|
| | | #define BKP_DR37 ((uint16_t)0x00A8)
|
| | | #define BKP_DR38 ((uint16_t)0x00AC)
|
| | | #define BKP_DR39 ((uint16_t)0x00B0)
|
| | | #define BKP_DR40 ((uint16_t)0x00B4)
|
| | | #define BKP_DR41 ((uint16_t)0x00B8)
|
| | | #define BKP_DR42 ((uint16_t)0x00BC)
|
| | |
|
| | | #define IS_BKP_DR(DR) (((DR) == BKP_DR1) || ((DR) == BKP_DR2) || ((DR) == BKP_DR3) || \
|
| | | ((DR) == BKP_DR4) || ((DR) == BKP_DR5) || ((DR) == BKP_DR6) || \
|
| | | ((DR) == BKP_DR7) || ((DR) == BKP_DR8) || ((DR) == BKP_DR9) || \
|
| | | ((DR) == BKP_DR10) || ((DR) == BKP_DR11) || ((DR) == BKP_DR12) || \
|
| | | ((DR) == BKP_DR13) || ((DR) == BKP_DR14) || ((DR) == BKP_DR15) || \
|
| | | ((DR) == BKP_DR16) || ((DR) == BKP_DR17) || ((DR) == BKP_DR18) || \
|
| | | ((DR) == BKP_DR19) || ((DR) == BKP_DR20) || ((DR) == BKP_DR21) || \
|
| | | ((DR) == BKP_DR22) || ((DR) == BKP_DR23) || ((DR) == BKP_DR24) || \
|
| | | ((DR) == BKP_DR25) || ((DR) == BKP_DR26) || ((DR) == BKP_DR27) || \
|
| | | ((DR) == BKP_DR28) || ((DR) == BKP_DR29) || ((DR) == BKP_DR30) || \
|
| | | ((DR) == BKP_DR31) || ((DR) == BKP_DR32) || ((DR) == BKP_DR33) || \
|
| | | ((DR) == BKP_DR34) || ((DR) == BKP_DR35) || ((DR) == BKP_DR36) || \
|
| | | ((DR) == BKP_DR37) || ((DR) == BKP_DR38) || ((DR) == BKP_DR39) || \
|
| | | ((DR) == BKP_DR40) || ((DR) == BKP_DR41) || ((DR) == BKP_DR42))
|
| | |
|
| | | #define IS_BKP_CALIBRATION_VALUE(VALUE) ((VALUE) <= 0x7F)
|
| | | /**
|
| | | * @}
|
| | | */
|
| | |
|
| | | /**
|
| | | * @}
|
| | | */
|
| | |
|
| | | /** @defgroup BKP_Exported_Macros
|
| | | * @{
|
| | | */
|
| | |
|
| | | /**
|
| | | * @}
|
| | | */
|
| | |
|
| | | /** @defgroup BKP_Exported_Functions
|
| | | * @{
|
| | | */
|
| | |
|
| | | void BKP_DeInit(void);
|
| | | void BKP_TamperPinLevelConfig(uint16_t BKP_TamperPinLevel);
|
| | | void BKP_TamperPinCmd(FunctionalState NewState);
|
| | | void BKP_ITConfig(FunctionalState NewState);
|
| | | void BKP_RTCOutputConfig(uint16_t BKP_RTCOutputSource);
|
| | | void BKP_SetRTCCalibrationValue(uint8_t CalibrationValue);
|
| | | void BKP_WriteBackupRegister(uint16_t BKP_DR, uint16_t Data);
|
| | | uint16_t BKP_ReadBackupRegister(uint16_t BKP_DR);
|
| | | FlagStatus BKP_GetFlagStatus(void);
|
| | | void BKP_ClearFlag(void);
|
| | | ITStatus BKP_GetITStatus(void);
|
| | | void BKP_ClearITPendingBit(void);
|
| | |
|
| | | #ifdef __cplusplus
|
| | | }
|
| | | #endif
|
| | |
|
| | | #endif /* __STM32F10x_BKP_H */
|
| | | /**
|
| | | * @}
|
| | | */
|
| | |
|
| | | /**
|
| | | * @}
|
| | | */
|
| | |
|
| | | /**
|
| | | * @}
|
| | | */
|
| | |
|
| | | /******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/
|
New file |
| | |
| | | /**
|
| | | ******************************************************************************
|
| | | * @file stm32f10x_can.h
|
| | | * @author MCD Application Team
|
| | | * @version V3.5.0
|
| | | * @date 11-March-2011
|
| | | * @brief This file contains all the functions prototypes for the CAN firmware |
| | | * library.
|
| | | ******************************************************************************
|
| | | * @attention
|
| | | *
|
| | | * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
|
| | | * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE
|
| | | * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY
|
| | | * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING
|
| | | * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE
|
| | | * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
|
| | | *
|
| | | * <h2><center>© COPYRIGHT 2011 STMicroelectronics</center></h2>
|
| | | ******************************************************************************
|
| | | */
|
| | |
|
| | | /* Define to prevent recursive inclusion -------------------------------------*/
|
| | | #ifndef __STM32F10x_CAN_H
|
| | | #define __STM32F10x_CAN_H
|
| | |
|
| | | #ifdef __cplusplus
|
| | | extern "C" {
|
| | | #endif
|
| | |
|
| | | /* Includes ------------------------------------------------------------------*/
|
| | | #include "stm32f10x.h"
|
| | |
|
| | | /** @addtogroup STM32F10x_StdPeriph_Driver
|
| | | * @{
|
| | | */
|
| | |
|
| | | /** @addtogroup CAN
|
| | | * @{
|
| | | */
|
| | |
|
| | | /** @defgroup CAN_Exported_Types
|
| | | * @{
|
| | | */
|
| | |
|
| | | #define IS_CAN_ALL_PERIPH(PERIPH) (((PERIPH) == CAN1) || \
|
| | | ((PERIPH) == CAN2))
|
| | |
|
| | | /** |
| | | * @brief CAN init structure definition
|
| | | */
|
| | |
|
| | | typedef struct
|
| | | {
|
| | | uint16_t CAN_Prescaler; /*!< Specifies the length of a time quantum. |
| | | It ranges from 1 to 1024. */
|
| | | |
| | | uint8_t CAN_Mode; /*!< Specifies the CAN operating mode.
|
| | | This parameter can be a value of |
| | | @ref CAN_operating_mode */
|
| | |
|
| | | uint8_t CAN_SJW; /*!< Specifies the maximum number of time quanta |
| | | the CAN hardware is allowed to lengthen or |
| | | shorten a bit to perform resynchronization.
|
| | | This parameter can be a value of |
| | | @ref CAN_synchronisation_jump_width */
|
| | |
|
| | | uint8_t CAN_BS1; /*!< Specifies the number of time quanta in Bit |
| | | Segment 1. This parameter can be a value of |
| | | @ref CAN_time_quantum_in_bit_segment_1 */
|
| | |
|
| | | uint8_t CAN_BS2; /*!< Specifies the number of time quanta in Bit |
| | | Segment 2.
|
| | | This parameter can be a value of |
| | | @ref CAN_time_quantum_in_bit_segment_2 */
|
| | | |
| | | FunctionalState CAN_TTCM; /*!< Enable or disable the time triggered |
| | | communication mode. This parameter can be set |
| | | either to ENABLE or DISABLE. */
|
| | | |
| | | FunctionalState CAN_ABOM; /*!< Enable or disable the automatic bus-off |
| | | management. This parameter can be set either |
| | | to ENABLE or DISABLE. */
|
| | |
|
| | | FunctionalState CAN_AWUM; /*!< Enable or disable the automatic wake-up mode. |
| | | This parameter can be set either to ENABLE or |
| | | DISABLE. */
|
| | |
|
| | | FunctionalState CAN_NART; /*!< Enable or disable the no-automatic |
| | | retransmission mode. This parameter can be |
| | | set either to ENABLE or DISABLE. */
|
| | |
|
| | | FunctionalState CAN_RFLM; /*!< Enable or disable the Receive FIFO Locked mode.
|
| | | This parameter can be set either to ENABLE |
| | | or DISABLE. */
|
| | |
|
| | | FunctionalState CAN_TXFP; /*!< Enable or disable the transmit FIFO priority.
|
| | | This parameter can be set either to ENABLE |
| | | or DISABLE. */
|
| | | } CAN_InitTypeDef;
|
| | |
|
| | | /** |
| | | * @brief CAN filter init structure definition
|
| | | */
|
| | |
|
| | | typedef struct
|
| | | {
|
| | | uint16_t CAN_FilterIdHigh; /*!< Specifies the filter identification number (MSBs for a 32-bit
|
| | | configuration, first one for a 16-bit configuration).
|
| | | This parameter can be a value between 0x0000 and 0xFFFF */
|
| | |
|
| | | uint16_t CAN_FilterIdLow; /*!< Specifies the filter identification number (LSBs for a 32-bit
|
| | | configuration, second one for a 16-bit configuration).
|
| | | This parameter can be a value between 0x0000 and 0xFFFF */
|
| | |
|
| | | uint16_t CAN_FilterMaskIdHigh; /*!< Specifies the filter mask number or identification number,
|
| | | according to the mode (MSBs for a 32-bit configuration,
|
| | | first one for a 16-bit configuration).
|
| | | This parameter can be a value between 0x0000 and 0xFFFF */
|
| | |
|
| | | uint16_t CAN_FilterMaskIdLow; /*!< Specifies the filter mask number or identification number,
|
| | | according to the mode (LSBs for a 32-bit configuration,
|
| | | second one for a 16-bit configuration).
|
| | | This parameter can be a value between 0x0000 and 0xFFFF */
|
| | |
|
| | | uint16_t CAN_FilterFIFOAssignment; /*!< Specifies the FIFO (0 or 1) which will be assigned to the filter.
|
| | | This parameter can be a value of @ref CAN_filter_FIFO */
|
| | | |
| | | uint8_t CAN_FilterNumber; /*!< Specifies the filter which will be initialized. It ranges from 0 to 13. */
|
| | |
|
| | | uint8_t CAN_FilterMode; /*!< Specifies the filter mode to be initialized.
|
| | | This parameter can be a value of @ref CAN_filter_mode */
|
| | |
|
| | | uint8_t CAN_FilterScale; /*!< Specifies the filter scale.
|
| | | This parameter can be a value of @ref CAN_filter_scale */
|
| | |
|
| | | FunctionalState CAN_FilterActivation; /*!< Enable or disable the filter.
|
| | | This parameter can be set either to ENABLE or DISABLE. */
|
| | | } CAN_FilterInitTypeDef;
|
| | |
|
| | | /** |
| | | * @brief CAN Tx message structure definition |
| | | */
|
| | |
|
| | | typedef struct
|
| | | {
|
| | | uint32_t StdId; /*!< Specifies the standard identifier.
|
| | | This parameter can be a value between 0 to 0x7FF. */
|
| | |
|
| | | uint32_t ExtId; /*!< Specifies the extended identifier.
|
| | | This parameter can be a value between 0 to 0x1FFFFFFF. */
|
| | |
|
| | | uint8_t IDE; /*!< Specifies the type of identifier for the message that |
| | | will be transmitted. This parameter can be a value |
| | | of @ref CAN_identifier_type */
|
| | |
|
| | | uint8_t RTR; /*!< Specifies the type of frame for the message that will |
| | | be transmitted. This parameter can be a value of |
| | | @ref CAN_remote_transmission_request */
|
| | |
|
| | | uint8_t DLC; /*!< Specifies the length of the frame that will be |
| | | transmitted. This parameter can be a value between |
| | | 0 to 8 */
|
| | |
|
| | | uint8_t Data[8]; /*!< Contains the data to be transmitted. It ranges from 0 |
| | | to 0xFF. */
|
| | | } CanTxMsg;
|
| | |
|
| | | /** |
| | | * @brief CAN Rx message structure definition |
| | | */
|
| | |
|
| | | typedef struct
|
| | | {
|
| | | uint32_t StdId; /*!< Specifies the standard identifier.
|
| | | This parameter can be a value between 0 to 0x7FF. */
|
| | |
|
| | | uint32_t ExtId; /*!< Specifies the extended identifier.
|
| | | This parameter can be a value between 0 to 0x1FFFFFFF. */
|
| | |
|
| | | uint8_t IDE; /*!< Specifies the type of identifier for the message that |
| | | will be received. This parameter can be a value of |
| | | @ref CAN_identifier_type */
|
| | |
|
| | | uint8_t RTR; /*!< Specifies the type of frame for the received message.
|
| | | This parameter can be a value of |
| | | @ref CAN_remote_transmission_request */
|
| | |
|
| | | uint8_t DLC; /*!< Specifies the length of the frame that will be received.
|
| | | This parameter can be a value between 0 to 8 */
|
| | |
|
| | | uint8_t Data[8]; /*!< Contains the data to be received. It ranges from 0 to |
| | | 0xFF. */
|
| | |
|
| | | uint8_t FMI; /*!< Specifies the index of the filter the message stored in |
| | | the mailbox passes through. This parameter can be a |
| | | value between 0 to 0xFF */
|
| | | } CanRxMsg;
|
| | |
|
| | | /**
|
| | | * @}
|
| | | */
|
| | |
|
| | | /** @defgroup CAN_Exported_Constants
|
| | | * @{
|
| | | */
|
| | |
|
| | | /** @defgroup CAN_sleep_constants |
| | | * @{
|
| | | */
|
| | |
|
| | | #define CAN_InitStatus_Failed ((uint8_t)0x00) /*!< CAN initialization failed */
|
| | | #define CAN_InitStatus_Success ((uint8_t)0x01) /*!< CAN initialization OK */
|
| | |
|
| | | /**
|
| | | * @}
|
| | | */
|
| | |
|
| | | /** @defgroup CAN_Mode |
| | | * @{
|
| | | */
|
| | |
|
| | | #define CAN_Mode_Normal ((uint8_t)0x00) /*!< normal mode */
|
| | | #define CAN_Mode_LoopBack ((uint8_t)0x01) /*!< loopback mode */
|
| | | #define CAN_Mode_Silent ((uint8_t)0x02) /*!< silent mode */
|
| | | #define CAN_Mode_Silent_LoopBack ((uint8_t)0x03) /*!< loopback combined with silent mode */
|
| | |
|
| | | #define IS_CAN_MODE(MODE) (((MODE) == CAN_Mode_Normal) || \
|
| | | ((MODE) == CAN_Mode_LoopBack)|| \
|
| | | ((MODE) == CAN_Mode_Silent) || \
|
| | | ((MODE) == CAN_Mode_Silent_LoopBack))
|
| | | /**
|
| | | * @}
|
| | | */
|
| | |
|
| | |
|
| | | /**
|
| | | * @defgroup CAN_Operating_Mode |
| | | * @{
|
| | | */ |
| | | #define CAN_OperatingMode_Initialization ((uint8_t)0x00) /*!< Initialization mode */
|
| | | #define CAN_OperatingMode_Normal ((uint8_t)0x01) /*!< Normal mode */
|
| | | #define CAN_OperatingMode_Sleep ((uint8_t)0x02) /*!< sleep mode */
|
| | |
|
| | |
|
| | | #define IS_CAN_OPERATING_MODE(MODE) (((MODE) == CAN_OperatingMode_Initialization) ||\
|
| | | ((MODE) == CAN_OperatingMode_Normal)|| \
|
| | | ((MODE) == CAN_OperatingMode_Sleep))
|
| | | /**
|
| | | * @}
|
| | | */
|
| | | |
| | | /**
|
| | | * @defgroup CAN_Mode_Status
|
| | | * @{
|
| | | */ |
| | |
|
| | | #define CAN_ModeStatus_Failed ((uint8_t)0x00) /*!< CAN entering the specific mode failed */
|
| | | #define CAN_ModeStatus_Success ((uint8_t)!CAN_ModeStatus_Failed) /*!< CAN entering the specific mode Succeed */
|
| | |
|
| | |
|
| | | /**
|
| | | * @}
|
| | | */
|
| | |
|
| | | /** @defgroup CAN_synchronisation_jump_width |
| | | * @{
|
| | | */
|
| | |
|
| | | #define CAN_SJW_1tq ((uint8_t)0x00) /*!< 1 time quantum */
|
| | | #define CAN_SJW_2tq ((uint8_t)0x01) /*!< 2 time quantum */
|
| | | #define CAN_SJW_3tq ((uint8_t)0x02) /*!< 3 time quantum */
|
| | | #define CAN_SJW_4tq ((uint8_t)0x03) /*!< 4 time quantum */
|
| | |
|
| | | #define IS_CAN_SJW(SJW) (((SJW) == CAN_SJW_1tq) || ((SJW) == CAN_SJW_2tq)|| \
|
| | | ((SJW) == CAN_SJW_3tq) || ((SJW) == CAN_SJW_4tq))
|
| | | /**
|
| | | * @}
|
| | | */
|
| | |
|
| | | /** @defgroup CAN_time_quantum_in_bit_segment_1 |
| | | * @{
|
| | | */
|
| | |
|
| | | #define CAN_BS1_1tq ((uint8_t)0x00) /*!< 1 time quantum */
|
| | | #define CAN_BS1_2tq ((uint8_t)0x01) /*!< 2 time quantum */
|
| | | #define CAN_BS1_3tq ((uint8_t)0x02) /*!< 3 time quantum */
|
| | | #define CAN_BS1_4tq ((uint8_t)0x03) /*!< 4 time quantum */
|
| | | #define CAN_BS1_5tq ((uint8_t)0x04) /*!< 5 time quantum */
|
| | | #define CAN_BS1_6tq ((uint8_t)0x05) /*!< 6 time quantum */
|
| | | #define CAN_BS1_7tq ((uint8_t)0x06) /*!< 7 time quantum */
|
| | | #define CAN_BS1_8tq ((uint8_t)0x07) /*!< 8 time quantum */
|
| | | #define CAN_BS1_9tq ((uint8_t)0x08) /*!< 9 time quantum */
|
| | | #define CAN_BS1_10tq ((uint8_t)0x09) /*!< 10 time quantum */
|
| | | #define CAN_BS1_11tq ((uint8_t)0x0A) /*!< 11 time quantum */
|
| | | #define CAN_BS1_12tq ((uint8_t)0x0B) /*!< 12 time quantum */
|
| | | #define CAN_BS1_13tq ((uint8_t)0x0C) /*!< 13 time quantum */
|
| | | #define CAN_BS1_14tq ((uint8_t)0x0D) /*!< 14 time quantum */
|
| | | #define CAN_BS1_15tq ((uint8_t)0x0E) /*!< 15 time quantum */
|
| | | #define CAN_BS1_16tq ((uint8_t)0x0F) /*!< 16 time quantum */
|
| | |
|
| | | #define IS_CAN_BS1(BS1) ((BS1) <= CAN_BS1_16tq)
|
| | | /**
|
| | | * @}
|
| | | */
|
| | |
|
| | | /** @defgroup CAN_time_quantum_in_bit_segment_2 |
| | | * @{
|
| | | */
|
| | |
|
| | | #define CAN_BS2_1tq ((uint8_t)0x00) /*!< 1 time quantum */
|
| | | #define CAN_BS2_2tq ((uint8_t)0x01) /*!< 2 time quantum */
|
| | | #define CAN_BS2_3tq ((uint8_t)0x02) /*!< 3 time quantum */
|
| | | #define CAN_BS2_4tq ((uint8_t)0x03) /*!< 4 time quantum */
|
| | | #define CAN_BS2_5tq ((uint8_t)0x04) /*!< 5 time quantum */
|
| | | #define CAN_BS2_6tq ((uint8_t)0x05) /*!< 6 time quantum */
|
| | | #define CAN_BS2_7tq ((uint8_t)0x06) /*!< 7 time quantum */
|
| | | #define CAN_BS2_8tq ((uint8_t)0x07) /*!< 8 time quantum */
|
| | |
|
| | | #define IS_CAN_BS2(BS2) ((BS2) <= CAN_BS2_8tq)
|
| | |
|
| | | /**
|
| | | * @}
|
| | | */
|
| | |
|
| | | /** @defgroup CAN_clock_prescaler |
| | | * @{
|
| | | */
|
| | |
|
| | | #define IS_CAN_PRESCALER(PRESCALER) (((PRESCALER) >= 1) && ((PRESCALER) <= 1024))
|
| | |
|
| | | /**
|
| | | * @}
|
| | | */
|
| | |
|
| | | /** @defgroup CAN_filter_number |
| | | * @{
|
| | | */
|
| | | #ifndef STM32F10X_CL
|
| | | #define IS_CAN_FILTER_NUMBER(NUMBER) ((NUMBER) <= 13)
|
| | | #else
|
| | | #define IS_CAN_FILTER_NUMBER(NUMBER) ((NUMBER) <= 27)
|
| | | #endif /* STM32F10X_CL */ |
| | | /**
|
| | | * @}
|
| | | */
|
| | |
|
| | | /** @defgroup CAN_filter_mode |
| | | * @{
|
| | | */
|
| | |
|
| | | #define CAN_FilterMode_IdMask ((uint8_t)0x00) /*!< identifier/mask mode */
|
| | | #define CAN_FilterMode_IdList ((uint8_t)0x01) /*!< identifier list mode */
|
| | |
|
| | | #define IS_CAN_FILTER_MODE(MODE) (((MODE) == CAN_FilterMode_IdMask) || \
|
| | | ((MODE) == CAN_FilterMode_IdList))
|
| | | /**
|
| | | * @}
|
| | | */
|
| | |
|
| | | /** @defgroup CAN_filter_scale |
| | | * @{
|
| | | */
|
| | |
|
| | | #define CAN_FilterScale_16bit ((uint8_t)0x00) /*!< Two 16-bit filters */
|
| | | #define CAN_FilterScale_32bit ((uint8_t)0x01) /*!< One 32-bit filter */
|
| | |
|
| | | #define IS_CAN_FILTER_SCALE(SCALE) (((SCALE) == CAN_FilterScale_16bit) || \
|
| | | ((SCALE) == CAN_FilterScale_32bit))
|
| | |
|
| | | /**
|
| | | * @}
|
| | | */
|
| | |
|
| | | /** @defgroup CAN_filter_FIFO
|
| | | * @{
|
| | | */
|
| | |
|
| | | #define CAN_Filter_FIFO0 ((uint8_t)0x00) /*!< Filter FIFO 0 assignment for filter x */
|
| | | #define CAN_Filter_FIFO1 ((uint8_t)0x01) /*!< Filter FIFO 1 assignment for filter x */
|
| | | #define IS_CAN_FILTER_FIFO(FIFO) (((FIFO) == CAN_FilterFIFO0) || \
|
| | | ((FIFO) == CAN_FilterFIFO1))
|
| | | /**
|
| | | * @}
|
| | | */
|
| | |
|
| | | /** @defgroup Start_bank_filter_for_slave_CAN |
| | | * @{
|
| | | */
|
| | | #define IS_CAN_BANKNUMBER(BANKNUMBER) (((BANKNUMBER) >= 1) && ((BANKNUMBER) <= 27))
|
| | | /**
|
| | | * @}
|
| | | */
|
| | |
|
| | | /** @defgroup CAN_Tx |
| | | * @{
|
| | | */
|
| | |
|
| | | #define IS_CAN_TRANSMITMAILBOX(TRANSMITMAILBOX) ((TRANSMITMAILBOX) <= ((uint8_t)0x02))
|
| | | #define IS_CAN_STDID(STDID) ((STDID) <= ((uint32_t)0x7FF))
|
| | | #define IS_CAN_EXTID(EXTID) ((EXTID) <= ((uint32_t)0x1FFFFFFF))
|
| | | #define IS_CAN_DLC(DLC) ((DLC) <= ((uint8_t)0x08))
|
| | |
|
| | | /**
|
| | | * @}
|
| | | */
|
| | |
|
| | | /** @defgroup CAN_identifier_type |
| | | * @{
|
| | | */
|
| | |
|
| | | #define CAN_Id_Standard ((uint32_t)0x00000000) /*!< Standard Id */
|
| | | #define CAN_Id_Extended ((uint32_t)0x00000004) /*!< Extended Id */
|
| | | #define IS_CAN_IDTYPE(IDTYPE) (((IDTYPE) == CAN_Id_Standard) || \
|
| | | ((IDTYPE) == CAN_Id_Extended))
|
| | | /**
|
| | | * @}
|
| | | */
|
| | |
|
| | | /** @defgroup CAN_remote_transmission_request |
| | | * @{
|
| | | */
|
| | |
|
| | | #define CAN_RTR_Data ((uint32_t)0x00000000) /*!< Data frame */
|
| | | #define CAN_RTR_Remote ((uint32_t)0x00000002) /*!< Remote frame */
|
| | | #define IS_CAN_RTR(RTR) (((RTR) == CAN_RTR_Data) || ((RTR) == CAN_RTR_Remote))
|
| | |
|
| | | /**
|
| | | * @}
|
| | | */
|
| | |
|
| | | /** @defgroup CAN_transmit_constants |
| | | * @{
|
| | | */
|
| | |
|
| | | #define CAN_TxStatus_Failed ((uint8_t)0x00)/*!< CAN transmission failed */
|
| | | #define CAN_TxStatus_Ok ((uint8_t)0x01) /*!< CAN transmission succeeded */
|
| | | #define CAN_TxStatus_Pending ((uint8_t)0x02) /*!< CAN transmission pending */
|
| | | #define CAN_TxStatus_NoMailBox ((uint8_t)0x04) /*!< CAN cell did not provide an empty mailbox */
|
| | |
|
| | | /**
|
| | | * @}
|
| | | */
|
| | |
|
| | | /** @defgroup CAN_receive_FIFO_number_constants |
| | | * @{
|
| | | */
|
| | |
|
| | | #define CAN_FIFO0 ((uint8_t)0x00) /*!< CAN FIFO 0 used to receive */
|
| | | #define CAN_FIFO1 ((uint8_t)0x01) /*!< CAN FIFO 1 used to receive */
|
| | |
|
| | | #define IS_CAN_FIFO(FIFO) (((FIFO) == CAN_FIFO0) || ((FIFO) == CAN_FIFO1))
|
| | |
|
| | | /**
|
| | | * @}
|
| | | */
|
| | |
|
| | | /** @defgroup CAN_sleep_constants |
| | | * @{
|
| | | */
|
| | |
|
| | | #define CAN_Sleep_Failed ((uint8_t)0x00) /*!< CAN did not enter the sleep mode */
|
| | | #define CAN_Sleep_Ok ((uint8_t)0x01) /*!< CAN entered the sleep mode */
|
| | |
|
| | | /**
|
| | | * @}
|
| | | */
|
| | |
|
| | | /** @defgroup CAN_wake_up_constants |
| | | * @{
|
| | | */
|
| | |
|
| | | #define CAN_WakeUp_Failed ((uint8_t)0x00) /*!< CAN did not leave the sleep mode */
|
| | | #define CAN_WakeUp_Ok ((uint8_t)0x01) /*!< CAN leaved the sleep mode */
|
| | |
|
| | | /**
|
| | | * @}
|
| | | */
|
| | |
|
| | | /**
|
| | | * @defgroup CAN_Error_Code_constants
|
| | | * @{
|
| | | */ |
| | | |
| | | #define CAN_ErrorCode_NoErr ((uint8_t)0x00) /*!< No Error */ |
| | | #define CAN_ErrorCode_StuffErr ((uint8_t)0x10) /*!< Stuff Error */ |
| | | #define CAN_ErrorCode_FormErr ((uint8_t)0x20) /*!< Form Error */ |
| | | #define CAN_ErrorCode_ACKErr ((uint8_t)0x30) /*!< Acknowledgment Error */ |
| | | #define CAN_ErrorCode_BitRecessiveErr ((uint8_t)0x40) /*!< Bit Recessive Error */ |
| | | #define CAN_ErrorCode_BitDominantErr ((uint8_t)0x50) /*!< Bit Dominant Error */ |
| | | #define CAN_ErrorCode_CRCErr ((uint8_t)0x60) /*!< CRC Error */ |
| | | #define CAN_ErrorCode_SoftwareSetErr ((uint8_t)0x70) /*!< Software Set Error */ |
| | |
|
| | |
|
| | | /**
|
| | | * @}
|
| | | */
|
| | |
|
| | | /** @defgroup CAN_flags |
| | | * @{
|
| | | */
|
| | | /* If the flag is 0x3XXXXXXX, it means that it can be used with CAN_GetFlagStatus()
|
| | | and CAN_ClearFlag() functions. */
|
| | | /* If the flag is 0x1XXXXXXX, it means that it can only be used with CAN_GetFlagStatus() function. */
|
| | |
|
| | | /* Transmit Flags */
|
| | | #define CAN_FLAG_RQCP0 ((uint32_t)0x38000001) /*!< Request MailBox0 Flag */
|
| | | #define CAN_FLAG_RQCP1 ((uint32_t)0x38000100) /*!< Request MailBox1 Flag */
|
| | | #define CAN_FLAG_RQCP2 ((uint32_t)0x38010000) /*!< Request MailBox2 Flag */
|
| | |
|
| | | /* Receive Flags */
|
| | | #define CAN_FLAG_FMP0 ((uint32_t)0x12000003) /*!< FIFO 0 Message Pending Flag */
|
| | | #define CAN_FLAG_FF0 ((uint32_t)0x32000008) /*!< FIFO 0 Full Flag */
|
| | | #define CAN_FLAG_FOV0 ((uint32_t)0x32000010) /*!< FIFO 0 Overrun Flag */
|
| | | #define CAN_FLAG_FMP1 ((uint32_t)0x14000003) /*!< FIFO 1 Message Pending Flag */
|
| | | #define CAN_FLAG_FF1 ((uint32_t)0x34000008) /*!< FIFO 1 Full Flag */
|
| | | #define CAN_FLAG_FOV1 ((uint32_t)0x34000010) /*!< FIFO 1 Overrun Flag */
|
| | |
|
| | | /* Operating Mode Flags */
|
| | | #define CAN_FLAG_WKU ((uint32_t)0x31000008) /*!< Wake up Flag */
|
| | | #define CAN_FLAG_SLAK ((uint32_t)0x31000012) /*!< Sleep acknowledge Flag */
|
| | | /* Note: When SLAK intterupt is disabled (SLKIE=0), no polling on SLAKI is possible. |
| | | In this case the SLAK bit can be polled.*/
|
| | |
|
| | | /* Error Flags */
|
| | | #define CAN_FLAG_EWG ((uint32_t)0x10F00001) /*!< Error Warning Flag */
|
| | | #define CAN_FLAG_EPV ((uint32_t)0x10F00002) /*!< Error Passive Flag */
|
| | | #define CAN_FLAG_BOF ((uint32_t)0x10F00004) /*!< Bus-Off Flag */
|
| | | #define CAN_FLAG_LEC ((uint32_t)0x30F00070) /*!< Last error code Flag */
|
| | |
|
| | | #define IS_CAN_GET_FLAG(FLAG) (((FLAG) == CAN_FLAG_LEC) || ((FLAG) == CAN_FLAG_BOF) || \
|
| | | ((FLAG) == CAN_FLAG_EPV) || ((FLAG) == CAN_FLAG_EWG) || \
|
| | | ((FLAG) == CAN_FLAG_WKU) || ((FLAG) == CAN_FLAG_FOV0) || \
|
| | | ((FLAG) == CAN_FLAG_FF0) || ((FLAG) == CAN_FLAG_FMP0) || \
|
| | | ((FLAG) == CAN_FLAG_FOV1) || ((FLAG) == CAN_FLAG_FF1) || \
|
| | | ((FLAG) == CAN_FLAG_FMP1) || ((FLAG) == CAN_FLAG_RQCP2) || \
|
| | | ((FLAG) == CAN_FLAG_RQCP1)|| ((FLAG) == CAN_FLAG_RQCP0) || \
|
| | | ((FLAG) == CAN_FLAG_SLAK ))
|
| | |
|
| | | #define IS_CAN_CLEAR_FLAG(FLAG)(((FLAG) == CAN_FLAG_LEC) || ((FLAG) == CAN_FLAG_RQCP2) || \
|
| | | ((FLAG) == CAN_FLAG_RQCP1) || ((FLAG) == CAN_FLAG_RQCP0) || \
|
| | | ((FLAG) == CAN_FLAG_FF0) || ((FLAG) == CAN_FLAG_FOV0) ||\
|
| | | ((FLAG) == CAN_FLAG_FF1) || ((FLAG) == CAN_FLAG_FOV1) || \
|
| | | ((FLAG) == CAN_FLAG_WKU) || ((FLAG) == CAN_FLAG_SLAK))
|
| | | /**
|
| | | * @}
|
| | | */
|
| | |
|
| | | |
| | | /** @defgroup CAN_interrupts |
| | | * @{
|
| | | */
|
| | |
|
| | |
|
| | | |
| | | #define CAN_IT_TME ((uint32_t)0x00000001) /*!< Transmit mailbox empty Interrupt*/
|
| | |
|
| | | /* Receive Interrupts */
|
| | | #define CAN_IT_FMP0 ((uint32_t)0x00000002) /*!< FIFO 0 message pending Interrupt*/
|
| | | #define CAN_IT_FF0 ((uint32_t)0x00000004) /*!< FIFO 0 full Interrupt*/
|
| | | #define CAN_IT_FOV0 ((uint32_t)0x00000008) /*!< FIFO 0 overrun Interrupt*/
|
| | | #define CAN_IT_FMP1 ((uint32_t)0x00000010) /*!< FIFO 1 message pending Interrupt*/
|
| | | #define CAN_IT_FF1 ((uint32_t)0x00000020) /*!< FIFO 1 full Interrupt*/
|
| | | #define CAN_IT_FOV1 ((uint32_t)0x00000040) /*!< FIFO 1 overrun Interrupt*/
|
| | |
|
| | | /* Operating Mode Interrupts */
|
| | | #define CAN_IT_WKU ((uint32_t)0x00010000) /*!< Wake-up Interrupt*/
|
| | | #define CAN_IT_SLK ((uint32_t)0x00020000) /*!< Sleep acknowledge Interrupt*/
|
| | |
|
| | | /* Error Interrupts */
|
| | | #define CAN_IT_EWG ((uint32_t)0x00000100) /*!< Error warning Interrupt*/
|
| | | #define CAN_IT_EPV ((uint32_t)0x00000200) /*!< Error passive Interrupt*/
|
| | | #define CAN_IT_BOF ((uint32_t)0x00000400) /*!< Bus-off Interrupt*/
|
| | | #define CAN_IT_LEC ((uint32_t)0x00000800) /*!< Last error code Interrupt*/
|
| | | #define CAN_IT_ERR ((uint32_t)0x00008000) /*!< Error Interrupt*/
|
| | |
|
| | | /* Flags named as Interrupts : kept only for FW compatibility */
|
| | | #define CAN_IT_RQCP0 CAN_IT_TME
|
| | | #define CAN_IT_RQCP1 CAN_IT_TME
|
| | | #define CAN_IT_RQCP2 CAN_IT_TME
|
| | |
|
| | |
|
| | | #define IS_CAN_IT(IT) (((IT) == CAN_IT_TME) || ((IT) == CAN_IT_FMP0) ||\
|
| | | ((IT) == CAN_IT_FF0) || ((IT) == CAN_IT_FOV0) ||\
|
| | | ((IT) == CAN_IT_FMP1) || ((IT) == CAN_IT_FF1) ||\
|
| | | ((IT) == CAN_IT_FOV1) || ((IT) == CAN_IT_EWG) ||\
|
| | | ((IT) == CAN_IT_EPV) || ((IT) == CAN_IT_BOF) ||\
|
| | | ((IT) == CAN_IT_LEC) || ((IT) == CAN_IT_ERR) ||\
|
| | | ((IT) == CAN_IT_WKU) || ((IT) == CAN_IT_SLK))
|
| | |
|
| | | #define IS_CAN_CLEAR_IT(IT) (((IT) == CAN_IT_TME) || ((IT) == CAN_IT_FF0) ||\
|
| | | ((IT) == CAN_IT_FOV0)|| ((IT) == CAN_IT_FF1) ||\
|
| | | ((IT) == CAN_IT_FOV1)|| ((IT) == CAN_IT_EWG) ||\
|
| | | ((IT) == CAN_IT_EPV) || ((IT) == CAN_IT_BOF) ||\
|
| | | ((IT) == CAN_IT_LEC) || ((IT) == CAN_IT_ERR) ||\
|
| | | ((IT) == CAN_IT_WKU) || ((IT) == CAN_IT_SLK))
|
| | |
|
| | | /**
|
| | | * @}
|
| | | */
|
| | |
|
| | | /** @defgroup CAN_Legacy |
| | | * @{
|
| | | */
|
| | | #define CANINITFAILED CAN_InitStatus_Failed
|
| | | #define CANINITOK CAN_InitStatus_Success
|
| | | #define CAN_FilterFIFO0 CAN_Filter_FIFO0
|
| | | #define CAN_FilterFIFO1 CAN_Filter_FIFO1
|
| | | #define CAN_ID_STD CAN_Id_Standard |
| | | #define CAN_ID_EXT CAN_Id_Extended
|
| | | #define CAN_RTR_DATA CAN_RTR_Data |
| | | #define CAN_RTR_REMOTE CAN_RTR_Remote
|
| | | #define CANTXFAILE CAN_TxStatus_Failed
|
| | | #define CANTXOK CAN_TxStatus_Ok
|
| | | #define CANTXPENDING CAN_TxStatus_Pending
|
| | | #define CAN_NO_MB CAN_TxStatus_NoMailBox
|
| | | #define CANSLEEPFAILED CAN_Sleep_Failed
|
| | | #define CANSLEEPOK CAN_Sleep_Ok
|
| | | #define CANWAKEUPFAILED CAN_WakeUp_Failed |
| | | #define CANWAKEUPOK CAN_WakeUp_Ok |
| | |
|
| | | /**
|
| | | * @}
|
| | | */
|
| | |
|
| | | /**
|
| | | * @}
|
| | | */
|
| | |
|
| | | /** @defgroup CAN_Exported_Macros
|
| | | * @{
|
| | | */
|
| | |
|
| | | /**
|
| | | * @}
|
| | | */
|
| | |
|
| | | /** @defgroup CAN_Exported_Functions
|
| | | * @{
|
| | | */
|
| | | /* Function used to set the CAN configuration to the default reset state *****/ |
| | | void CAN_DeInit(CAN_TypeDef* CANx);
|
| | |
|
| | | /* Initialization and Configuration functions *********************************/ |
| | | uint8_t CAN_Init(CAN_TypeDef* CANx, CAN_InitTypeDef* CAN_InitStruct);
|
| | | void CAN_FilterInit(CAN_FilterInitTypeDef* CAN_FilterInitStruct);
|
| | | void CAN_StructInit(CAN_InitTypeDef* CAN_InitStruct);
|
| | | void CAN_SlaveStartBank(uint8_t CAN_BankNumber); |
| | | void CAN_DBGFreeze(CAN_TypeDef* CANx, FunctionalState NewState);
|
| | | void CAN_TTComModeCmd(CAN_TypeDef* CANx, FunctionalState NewState);
|
| | |
|
| | | /* Transmit functions *********************************************************/
|
| | | uint8_t CAN_Transmit(CAN_TypeDef* CANx, CanTxMsg* TxMessage);
|
| | | uint8_t CAN_TransmitStatus(CAN_TypeDef* CANx, uint8_t TransmitMailbox);
|
| | | void CAN_CancelTransmit(CAN_TypeDef* CANx, uint8_t Mailbox);
|
| | |
|
| | | /* Receive functions **********************************************************/
|
| | | void CAN_Receive(CAN_TypeDef* CANx, uint8_t FIFONumber, CanRxMsg* RxMessage);
|
| | | void CAN_FIFORelease(CAN_TypeDef* CANx, uint8_t FIFONumber);
|
| | | uint8_t CAN_MessagePending(CAN_TypeDef* CANx, uint8_t FIFONumber);
|
| | |
|
| | |
|
| | | /* Operation modes functions **************************************************/
|
| | | uint8_t CAN_OperatingModeRequest(CAN_TypeDef* CANx, uint8_t CAN_OperatingMode);
|
| | | uint8_t CAN_Sleep(CAN_TypeDef* CANx);
|
| | | uint8_t CAN_WakeUp(CAN_TypeDef* CANx);
|
| | |
|
| | | /* Error management functions *************************************************/
|
| | | uint8_t CAN_GetLastErrorCode(CAN_TypeDef* CANx);
|
| | | uint8_t CAN_GetReceiveErrorCounter(CAN_TypeDef* CANx);
|
| | | uint8_t CAN_GetLSBTransmitErrorCounter(CAN_TypeDef* CANx);
|
| | |
|
| | | /* Interrupts and flags management functions **********************************/
|
| | | void CAN_ITConfig(CAN_TypeDef* CANx, uint32_t CAN_IT, FunctionalState NewState);
|
| | | FlagStatus CAN_GetFlagStatus(CAN_TypeDef* CANx, uint32_t CAN_FLAG);
|
| | | void CAN_ClearFlag(CAN_TypeDef* CANx, uint32_t CAN_FLAG);
|
| | | ITStatus CAN_GetITStatus(CAN_TypeDef* CANx, uint32_t CAN_IT);
|
| | | void CAN_ClearITPendingBit(CAN_TypeDef* CANx, uint32_t CAN_IT);
|
| | |
|
| | | #ifdef __cplusplus
|
| | | }
|
| | | #endif
|
| | |
|
| | | #endif /* __STM32F10x_CAN_H */
|
| | | /**
|
| | | * @}
|
| | | */
|
| | |
|
| | | /**
|
| | | * @}
|
| | | */
|
| | |
|
| | | /**
|
| | | * @}
|
| | | */
|
| | |
|
| | | /******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/
|
New file |
| | |
| | | /**
|
| | | ******************************************************************************
|
| | | * @file stm32f10x_cec.h
|
| | | * @author MCD Application Team
|
| | | * @version V3.5.0
|
| | | * @date 11-March-2011
|
| | | * @brief This file contains all the functions prototypes for the CEC firmware |
| | | * library.
|
| | | ******************************************************************************
|
| | | * @attention
|
| | | *
|
| | | * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
|
| | | * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE
|
| | | * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY
|
| | | * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING
|
| | | * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE
|
| | | * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
|
| | | *
|
| | | * <h2><center>© COPYRIGHT 2011 STMicroelectronics</center></h2>
|
| | | ******************************************************************************
|
| | | */
|
| | |
|
| | | /* Define to prevent recursive inclusion -------------------------------------*/
|
| | | #ifndef __STM32F10x_CEC_H
|
| | | #define __STM32F10x_CEC_H
|
| | |
|
| | | #ifdef __cplusplus
|
| | | extern "C" {
|
| | | #endif
|
| | |
|
| | | /* Includes ------------------------------------------------------------------*/
|
| | | #include "stm32f10x.h"
|
| | |
|
| | | /** @addtogroup STM32F10x_StdPeriph_Driver
|
| | | * @{
|
| | | */
|
| | |
|
| | | /** @addtogroup CEC
|
| | | * @{
|
| | | */
|
| | | |
| | |
|
| | | /** @defgroup CEC_Exported_Types
|
| | | * @{
|
| | | */
|
| | | |
| | | /** |
| | | * @brief CEC Init structure definition |
| | | */ |
| | | typedef struct
|
| | | {
|
| | | uint16_t CEC_BitTimingMode; /*!< Configures the CEC Bit Timing Error Mode. |
| | | This parameter can be a value of @ref CEC_BitTiming_Mode */
|
| | | uint16_t CEC_BitPeriodMode; /*!< Configures the CEC Bit Period Error Mode. |
| | | This parameter can be a value of @ref CEC_BitPeriod_Mode */
|
| | | }CEC_InitTypeDef;
|
| | |
|
| | | /**
|
| | | * @}
|
| | | */
|
| | |
|
| | | /** @defgroup CEC_Exported_Constants
|
| | | * @{
|
| | | */ |
| | | |
| | | /** @defgroup CEC_BitTiming_Mode |
| | | * @{
|
| | | */ |
| | | #define CEC_BitTimingStdMode ((uint16_t)0x00) /*!< Bit timing error Standard Mode */
|
| | | #define CEC_BitTimingErrFreeMode CEC_CFGR_BTEM /*!< Bit timing error Free Mode */
|
| | |
|
| | | #define IS_CEC_BIT_TIMING_ERROR_MODE(MODE) (((MODE) == CEC_BitTimingStdMode) || \
|
| | | ((MODE) == CEC_BitTimingErrFreeMode))
|
| | | /**
|
| | | * @}
|
| | | */
|
| | |
|
| | | /** @defgroup CEC_BitPeriod_Mode |
| | | * @{
|
| | | */ |
| | | #define CEC_BitPeriodStdMode ((uint16_t)0x00) /*!< Bit period error Standard Mode */
|
| | | #define CEC_BitPeriodFlexibleMode CEC_CFGR_BPEM /*!< Bit period error Flexible Mode */
|
| | |
|
| | | #define IS_CEC_BIT_PERIOD_ERROR_MODE(MODE) (((MODE) == CEC_BitPeriodStdMode) || \
|
| | | ((MODE) == CEC_BitPeriodFlexibleMode))
|
| | | /**
|
| | | * @}
|
| | | */ |
| | |
|
| | |
|
| | | /** @defgroup CEC_interrupts_definition |
| | | * @{
|
| | | */ |
| | | #define CEC_IT_TERR CEC_CSR_TERR
|
| | | #define CEC_IT_TBTRF CEC_CSR_TBTRF
|
| | | #define CEC_IT_RERR CEC_CSR_RERR
|
| | | #define CEC_IT_RBTF CEC_CSR_RBTF
|
| | | #define IS_CEC_GET_IT(IT) (((IT) == CEC_IT_TERR) || ((IT) == CEC_IT_TBTRF) || \
|
| | | ((IT) == CEC_IT_RERR) || ((IT) == CEC_IT_RBTF))
|
| | | /**
|
| | | * @}
|
| | | */ |
| | |
|
| | |
|
| | | /** @defgroup CEC_Own_Address |
| | | * @{
|
| | | */ |
| | | #define IS_CEC_ADDRESS(ADDRESS) ((ADDRESS) < 0x10)
|
| | | /**
|
| | | * @}
|
| | | */ |
| | |
|
| | | /** @defgroup CEC_Prescaler |
| | | * @{
|
| | | */ |
| | | #define IS_CEC_PRESCALER(PRESCALER) ((PRESCALER) <= 0x3FFF)
|
| | |
|
| | | /**
|
| | | * @}
|
| | | */
|
| | |
|
| | | /** @defgroup CEC_flags_definition |
| | | * @{
|
| | | */
|
| | | |
| | | /** |
| | | * @brief ESR register flags |
| | | */ |
| | | #define CEC_FLAG_BTE ((uint32_t)0x10010000)
|
| | | #define CEC_FLAG_BPE ((uint32_t)0x10020000)
|
| | | #define CEC_FLAG_RBTFE ((uint32_t)0x10040000)
|
| | | #define CEC_FLAG_SBE ((uint32_t)0x10080000)
|
| | | #define CEC_FLAG_ACKE ((uint32_t)0x10100000)
|
| | | #define CEC_FLAG_LINE ((uint32_t)0x10200000)
|
| | | #define CEC_FLAG_TBTFE ((uint32_t)0x10400000)
|
| | |
|
| | | /** |
| | | * @brief CSR register flags |
| | | */ |
| | | #define CEC_FLAG_TEOM ((uint32_t)0x00000002) |
| | | #define CEC_FLAG_TERR ((uint32_t)0x00000004)
|
| | | #define CEC_FLAG_TBTRF ((uint32_t)0x00000008)
|
| | | #define CEC_FLAG_RSOM ((uint32_t)0x00000010)
|
| | | #define CEC_FLAG_REOM ((uint32_t)0x00000020)
|
| | | #define CEC_FLAG_RERR ((uint32_t)0x00000040)
|
| | | #define CEC_FLAG_RBTF ((uint32_t)0x00000080)
|
| | |
|
| | | #define IS_CEC_CLEAR_FLAG(FLAG) ((((FLAG) & (uint32_t)0xFFFFFF03) == 0x00) && ((FLAG) != 0x00))
|
| | | |
| | | #define IS_CEC_GET_FLAG(FLAG) (((FLAG) == CEC_FLAG_BTE) || ((FLAG) == CEC_FLAG_BPE) || \
|
| | | ((FLAG) == CEC_FLAG_RBTFE) || ((FLAG)== CEC_FLAG_SBE) || \
|
| | | ((FLAG) == CEC_FLAG_ACKE) || ((FLAG) == CEC_FLAG_LINE) || \
|
| | | ((FLAG) == CEC_FLAG_TBTFE) || ((FLAG) == CEC_FLAG_TEOM) || \
|
| | | ((FLAG) == CEC_FLAG_TERR) || ((FLAG) == CEC_FLAG_TBTRF) || \
|
| | | ((FLAG) == CEC_FLAG_RSOM) || ((FLAG) == CEC_FLAG_REOM) || \
|
| | | ((FLAG) == CEC_FLAG_RERR) || ((FLAG) == CEC_FLAG_RBTF))
|
| | |
|
| | | /**
|
| | | * @}
|
| | | */ |
| | |
|
| | | /**
|
| | | * @}
|
| | | */ |
| | |
|
| | | /** @defgroup CEC_Exported_Macros
|
| | | * @{
|
| | | */
|
| | | |
| | | /**
|
| | | * @}
|
| | | */
|
| | |
|
| | | /** @defgroup CEC_Exported_Functions
|
| | | * @{
|
| | | */ |
| | | void CEC_DeInit(void);
|
| | | void CEC_Init(CEC_InitTypeDef* CEC_InitStruct);
|
| | | void CEC_Cmd(FunctionalState NewState);
|
| | | void CEC_ITConfig(FunctionalState NewState);
|
| | | void CEC_OwnAddressConfig(uint8_t CEC_OwnAddress);
|
| | | void CEC_SetPrescaler(uint16_t CEC_Prescaler);
|
| | | void CEC_SendDataByte(uint8_t Data);
|
| | | uint8_t CEC_ReceiveDataByte(void);
|
| | | void CEC_StartOfMessage(void);
|
| | | void CEC_EndOfMessageCmd(FunctionalState NewState);
|
| | | FlagStatus CEC_GetFlagStatus(uint32_t CEC_FLAG);
|
| | | void CEC_ClearFlag(uint32_t CEC_FLAG);
|
| | | ITStatus CEC_GetITStatus(uint8_t CEC_IT);
|
| | | void CEC_ClearITPendingBit(uint16_t CEC_IT);
|
| | |
|
| | | #ifdef __cplusplus
|
| | | }
|
| | | #endif
|
| | |
|
| | | #endif /* __STM32F10x_CEC_H */
|
| | |
|
| | | /**
|
| | | * @}
|
| | | */ |
| | |
|
| | | /**
|
| | | * @}
|
| | | */ |
| | |
|
| | | /**
|
| | | * @}
|
| | | */ |
| | |
|
| | | /******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/
|
New file |
| | |
| | | /**
|
| | | ******************************************************************************
|
| | | * @file Project/STM32F10x_StdPeriph_Template/stm32f10x_conf.h |
| | | * @author MCD Application Team
|
| | | * @version V3.5.0
|
| | | * @date 08-April-2011
|
| | | * @brief Library configuration file.
|
| | | ******************************************************************************
|
| | | * @attention
|
| | | *
|
| | | * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
|
| | | * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE
|
| | | * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY
|
| | | * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING
|
| | | * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE
|
| | | * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
|
| | | *
|
| | | * <h2><center>© COPYRIGHT 2011 STMicroelectronics</center></h2>
|
| | | ******************************************************************************
|
| | | */
|
| | |
|
| | | /* Define to prevent recursive inclusion -------------------------------------*/
|
| | | #ifndef __STM32F10x_CONF_H
|
| | | #define __STM32F10x_CONF_H
|
| | |
|
| | | /* Includes ------------------------------------------------------------------*/
|
| | | /* Uncomment/Comment the line below to enable/disable peripheral header file inclusion */
|
| | | #include "stm32f10x_adc.h"
|
| | | #include "stm32f10x_bkp.h"
|
| | | #include "stm32f10x_can.h"
|
| | | #include "stm32f10x_cec.h"
|
| | | #include "stm32f10x_crc.h"
|
| | | #include "stm32f10x_dac.h"
|
| | | #include "stm32f10x_dbgmcu.h"
|
| | | #include "stm32f10x_dma.h"
|
| | | #include "stm32f10x_exti.h"
|
| | | #include "stm32f10x_flash.h"
|
| | | #include "stm32f10x_fsmc.h"
|
| | | #include "stm32f10x_gpio.h"
|
| | | #include "stm32f10x_i2c.h"
|
| | | #include "stm32f10x_iwdg.h"
|
| | | #include "stm32f10x_pwr.h"
|
| | | #include "stm32f10x_rcc.h"
|
| | | #include "stm32f10x_rtc.h"
|
| | | #include "stm32f10x_sdio.h"
|
| | | #include "stm32f10x_spi.h"
|
| | | #include "stm32f10x_tim.h"
|
| | | #include "stm32f10x_usart.h"
|
| | | #include "stm32f10x_wwdg.h"
|
| | | #include "misc.h" /* High level functions for NVIC and SysTick (add-on to CMSIS functions) */
|
| | |
|
| | | /* Exported types ------------------------------------------------------------*/
|
| | | /* Exported constants --------------------------------------------------------*/
|
| | | /* Uncomment the line below to expanse the "assert_param" macro in the |
| | | Standard Peripheral Library drivers code */
|
| | | /* #define USE_FULL_ASSERT 1 */
|
| | |
|
| | | /* Exported macro ------------------------------------------------------------*/
|
| | | #ifdef USE_FULL_ASSERT
|
| | |
|
| | | /**
|
| | | * @brief The assert_param macro is used for function's parameters check.
|
| | | * @param expr: If expr is false, it calls assert_failed function which reports |
| | | * the name of the source file and the source line number of the call |
| | | * that failed. If expr is true, it returns no value.
|
| | | * @retval None
|
| | | */
|
| | | #define assert_param(expr) ((expr) ? (void)0 : assert_failed((uint8_t *)__FILE__, __LINE__))
|
| | | /* Exported functions ------------------------------------------------------- */
|
| | | void assert_failed(uint8_t* file, uint32_t line);
|
| | | #else
|
| | | #define assert_param(expr) ((void)0)
|
| | | #endif /* USE_FULL_ASSERT */
|
| | |
|
| | | #endif /* __STM32F10x_CONF_H */
|
| | |
|
| | | /******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/
|
New file |
| | |
| | | /**
|
| | | ******************************************************************************
|
| | | * @file stm32f10x_crc.h
|
| | | * @author MCD Application Team
|
| | | * @version V3.5.0
|
| | | * @date 11-March-2011
|
| | | * @brief This file contains all the functions prototypes for the CRC firmware |
| | | * library.
|
| | | ******************************************************************************
|
| | | * @attention
|
| | | *
|
| | | * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
|
| | | * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE
|
| | | * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY
|
| | | * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING
|
| | | * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE
|
| | | * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
|
| | | *
|
| | | * <h2><center>© COPYRIGHT 2011 STMicroelectronics</center></h2>
|
| | | ******************************************************************************
|
| | | */
|
| | |
|
| | | /* Define to prevent recursive inclusion -------------------------------------*/
|
| | | #ifndef __STM32F10x_CRC_H
|
| | | #define __STM32F10x_CRC_H
|
| | |
|
| | | #ifdef __cplusplus
|
| | | extern "C" {
|
| | | #endif
|
| | |
|
| | | /* Includes ------------------------------------------------------------------*/
|
| | | #include "stm32f10x.h"
|
| | |
|
| | | /** @addtogroup STM32F10x_StdPeriph_Driver
|
| | | * @{
|
| | | */
|
| | |
|
| | | /** @addtogroup CRC
|
| | | * @{
|
| | | */
|
| | |
|
| | | /** @defgroup CRC_Exported_Types
|
| | | * @{
|
| | | */
|
| | |
|
| | | /**
|
| | | * @}
|
| | | */
|
| | |
|
| | | /** @defgroup CRC_Exported_Constants
|
| | | * @{
|
| | | */
|
| | |
|
| | | /**
|
| | | * @}
|
| | | */
|
| | |
|
| | | /** @defgroup CRC_Exported_Macros
|
| | | * @{
|
| | | */
|
| | |
|
| | | /**
|
| | | * @}
|
| | | */
|
| | |
|
| | | /** @defgroup CRC_Exported_Functions
|
| | | * @{
|
| | | */
|
| | |
|
| | | void CRC_ResetDR(void);
|
| | | uint32_t CRC_CalcCRC(uint32_t Data);
|
| | | uint32_t CRC_CalcBlockCRC(uint32_t pBuffer[], uint32_t BufferLength);
|
| | | uint32_t CRC_GetCRC(void);
|
| | | void CRC_SetIDRegister(uint8_t IDValue);
|
| | | uint8_t CRC_GetIDRegister(void);
|
| | |
|
| | | #ifdef __cplusplus
|
| | | }
|
| | | #endif
|
| | |
|
| | | #endif /* __STM32F10x_CRC_H */
|
| | | /**
|
| | | * @}
|
| | | */
|
| | |
|
| | | /**
|
| | | * @}
|
| | | */
|
| | |
|
| | | /**
|
| | | * @}
|
| | | */
|
| | |
|
| | | /******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/
|
New file |
| | |
| | | /**
|
| | | ******************************************************************************
|
| | | * @file stm32f10x_dac.h
|
| | | * @author MCD Application Team
|
| | | * @version V3.5.0
|
| | | * @date 11-March-2011
|
| | | * @brief This file contains all the functions prototypes for the DAC firmware |
| | | * library.
|
| | | ******************************************************************************
|
| | | * @attention
|
| | | *
|
| | | * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
|
| | | * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE
|
| | | * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY
|
| | | * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING
|
| | | * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE
|
| | | * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
|
| | | *
|
| | | * <h2><center>© COPYRIGHT 2011 STMicroelectronics</center></h2>
|
| | | ******************************************************************************
|
| | | */
|
| | |
|
| | | /* Define to prevent recursive inclusion -------------------------------------*/
|
| | | #ifndef __STM32F10x_DAC_H
|
| | | #define __STM32F10x_DAC_H
|
| | |
|
| | | #ifdef __cplusplus
|
| | | extern "C" {
|
| | | #endif
|
| | |
|
| | | /* Includes ------------------------------------------------------------------*/
|
| | | #include "stm32f10x.h"
|
| | |
|
| | | /** @addtogroup STM32F10x_StdPeriph_Driver
|
| | | * @{
|
| | | */
|
| | |
|
| | | /** @addtogroup DAC
|
| | | * @{
|
| | | */
|
| | |
|
| | | /** @defgroup DAC_Exported_Types
|
| | | * @{
|
| | | */
|
| | |
|
| | | /** |
| | | * @brief DAC Init structure definition
|
| | | */
|
| | |
|
| | | typedef struct
|
| | | {
|
| | | uint32_t DAC_Trigger; /*!< Specifies the external trigger for the selected DAC channel.
|
| | | This parameter can be a value of @ref DAC_trigger_selection */
|
| | |
|
| | | uint32_t DAC_WaveGeneration; /*!< Specifies whether DAC channel noise waves or triangle waves
|
| | | are generated, or whether no wave is generated.
|
| | | This parameter can be a value of @ref DAC_wave_generation */
|
| | |
|
| | | uint32_t DAC_LFSRUnmask_TriangleAmplitude; /*!< Specifies the LFSR mask for noise wave generation or
|
| | | the maximum amplitude triangle generation for the DAC channel. |
| | | This parameter can be a value of @ref DAC_lfsrunmask_triangleamplitude */
|
| | |
|
| | | uint32_t DAC_OutputBuffer; /*!< Specifies whether the DAC channel output buffer is enabled or disabled.
|
| | | This parameter can be a value of @ref DAC_output_buffer */
|
| | | }DAC_InitTypeDef;
|
| | |
|
| | | /**
|
| | | * @}
|
| | | */
|
| | |
|
| | | /** @defgroup DAC_Exported_Constants
|
| | | * @{
|
| | | */
|
| | |
|
| | | /** @defgroup DAC_trigger_selection |
| | | * @{
|
| | | */
|
| | |
|
| | | #define DAC_Trigger_None ((uint32_t)0x00000000) /*!< Conversion is automatic once the DAC1_DHRxxxx register |
| | | has been loaded, and not by external trigger */
|
| | | #define DAC_Trigger_T6_TRGO ((uint32_t)0x00000004) /*!< TIM6 TRGO selected as external conversion trigger for DAC channel */
|
| | | #define DAC_Trigger_T8_TRGO ((uint32_t)0x0000000C) /*!< TIM8 TRGO selected as external conversion trigger for DAC channel
|
| | | only in High-density devices*/
|
| | | #define DAC_Trigger_T3_TRGO ((uint32_t)0x0000000C) /*!< TIM8 TRGO selected as external conversion trigger for DAC channel
|
| | | only in Connectivity line, Medium-density and Low-density Value Line devices */
|
| | | #define DAC_Trigger_T7_TRGO ((uint32_t)0x00000014) /*!< TIM7 TRGO selected as external conversion trigger for DAC channel */
|
| | | #define DAC_Trigger_T5_TRGO ((uint32_t)0x0000001C) /*!< TIM5 TRGO selected as external conversion trigger for DAC channel */
|
| | | #define DAC_Trigger_T15_TRGO ((uint32_t)0x0000001C) /*!< TIM15 TRGO selected as external conversion trigger for DAC channel |
| | | only in Medium-density and Low-density Value Line devices*/
|
| | | #define DAC_Trigger_T2_TRGO ((uint32_t)0x00000024) /*!< TIM2 TRGO selected as external conversion trigger for DAC channel */
|
| | | #define DAC_Trigger_T4_TRGO ((uint32_t)0x0000002C) /*!< TIM4 TRGO selected as external conversion trigger for DAC channel */
|
| | | #define DAC_Trigger_Ext_IT9 ((uint32_t)0x00000034) /*!< EXTI Line9 event selected as external conversion trigger for DAC channel */
|
| | | #define DAC_Trigger_Software ((uint32_t)0x0000003C) /*!< Conversion started by software trigger for DAC channel */
|
| | |
|
| | | #define IS_DAC_TRIGGER(TRIGGER) (((TRIGGER) == DAC_Trigger_None) || \
|
| | | ((TRIGGER) == DAC_Trigger_T6_TRGO) || \
|
| | | ((TRIGGER) == DAC_Trigger_T8_TRGO) || \
|
| | | ((TRIGGER) == DAC_Trigger_T7_TRGO) || \
|
| | | ((TRIGGER) == DAC_Trigger_T5_TRGO) || \
|
| | | ((TRIGGER) == DAC_Trigger_T2_TRGO) || \
|
| | | ((TRIGGER) == DAC_Trigger_T4_TRGO) || \
|
| | | ((TRIGGER) == DAC_Trigger_Ext_IT9) || \
|
| | | ((TRIGGER) == DAC_Trigger_Software))
|
| | |
|
| | | /**
|
| | | * @}
|
| | | */
|
| | |
|
| | | /** @defgroup DAC_wave_generation |
| | | * @{
|
| | | */
|
| | |
|
| | | #define DAC_WaveGeneration_None ((uint32_t)0x00000000)
|
| | | #define DAC_WaveGeneration_Noise ((uint32_t)0x00000040)
|
| | | #define DAC_WaveGeneration_Triangle ((uint32_t)0x00000080)
|
| | | #define IS_DAC_GENERATE_WAVE(WAVE) (((WAVE) == DAC_WaveGeneration_None) || \
|
| | | ((WAVE) == DAC_WaveGeneration_Noise) || \
|
| | | ((WAVE) == DAC_WaveGeneration_Triangle))
|
| | | /**
|
| | | * @}
|
| | | */
|
| | |
|
| | | /** @defgroup DAC_lfsrunmask_triangleamplitude
|
| | | * @{
|
| | | */
|
| | |
|
| | | #define DAC_LFSRUnmask_Bit0 ((uint32_t)0x00000000) /*!< Unmask DAC channel LFSR bit0 for noise wave generation */
|
| | | #define DAC_LFSRUnmask_Bits1_0 ((uint32_t)0x00000100) /*!< Unmask DAC channel LFSR bit[1:0] for noise wave generation */
|
| | | #define DAC_LFSRUnmask_Bits2_0 ((uint32_t)0x00000200) /*!< Unmask DAC channel LFSR bit[2:0] for noise wave generation */
|
| | | #define DAC_LFSRUnmask_Bits3_0 ((uint32_t)0x00000300) /*!< Unmask DAC channel LFSR bit[3:0] for noise wave generation */
|
| | | #define DAC_LFSRUnmask_Bits4_0 ((uint32_t)0x00000400) /*!< Unmask DAC channel LFSR bit[4:0] for noise wave generation */
|
| | | #define DAC_LFSRUnmask_Bits5_0 ((uint32_t)0x00000500) /*!< Unmask DAC channel LFSR bit[5:0] for noise wave generation */
|
| | | #define DAC_LFSRUnmask_Bits6_0 ((uint32_t)0x00000600) /*!< Unmask DAC channel LFSR bit[6:0] for noise wave generation */
|
| | | #define DAC_LFSRUnmask_Bits7_0 ((uint32_t)0x00000700) /*!< Unmask DAC channel LFSR bit[7:0] for noise wave generation */
|
| | | #define DAC_LFSRUnmask_Bits8_0 ((uint32_t)0x00000800) /*!< Unmask DAC channel LFSR bit[8:0] for noise wave generation */
|
| | | #define DAC_LFSRUnmask_Bits9_0 ((uint32_t)0x00000900) /*!< Unmask DAC channel LFSR bit[9:0] for noise wave generation */
|
| | | #define DAC_LFSRUnmask_Bits10_0 ((uint32_t)0x00000A00) /*!< Unmask DAC channel LFSR bit[10:0] for noise wave generation */
|
| | | #define DAC_LFSRUnmask_Bits11_0 ((uint32_t)0x00000B00) /*!< Unmask DAC channel LFSR bit[11:0] for noise wave generation */
|
| | | #define DAC_TriangleAmplitude_1 ((uint32_t)0x00000000) /*!< Select max triangle amplitude of 1 */
|
| | | #define DAC_TriangleAmplitude_3 ((uint32_t)0x00000100) /*!< Select max triangle amplitude of 3 */
|
| | | #define DAC_TriangleAmplitude_7 ((uint32_t)0x00000200) /*!< Select max triangle amplitude of 7 */
|
| | | #define DAC_TriangleAmplitude_15 ((uint32_t)0x00000300) /*!< Select max triangle amplitude of 15 */
|
| | | #define DAC_TriangleAmplitude_31 ((uint32_t)0x00000400) /*!< Select max triangle amplitude of 31 */
|
| | | #define DAC_TriangleAmplitude_63 ((uint32_t)0x00000500) /*!< Select max triangle amplitude of 63 */
|
| | | #define DAC_TriangleAmplitude_127 ((uint32_t)0x00000600) /*!< Select max triangle amplitude of 127 */
|
| | | #define DAC_TriangleAmplitude_255 ((uint32_t)0x00000700) /*!< Select max triangle amplitude of 255 */
|
| | | #define DAC_TriangleAmplitude_511 ((uint32_t)0x00000800) /*!< Select max triangle amplitude of 511 */
|
| | | #define DAC_TriangleAmplitude_1023 ((uint32_t)0x00000900) /*!< Select max triangle amplitude of 1023 */
|
| | | #define DAC_TriangleAmplitude_2047 ((uint32_t)0x00000A00) /*!< Select max triangle amplitude of 2047 */
|
| | | #define DAC_TriangleAmplitude_4095 ((uint32_t)0x00000B00) /*!< Select max triangle amplitude of 4095 */
|
| | |
|
| | | #define IS_DAC_LFSR_UNMASK_TRIANGLE_AMPLITUDE(VALUE) (((VALUE) == DAC_LFSRUnmask_Bit0) || \
|
| | | ((VALUE) == DAC_LFSRUnmask_Bits1_0) || \
|
| | | ((VALUE) == DAC_LFSRUnmask_Bits2_0) || \
|
| | | ((VALUE) == DAC_LFSRUnmask_Bits3_0) || \
|
| | | ((VALUE) == DAC_LFSRUnmask_Bits4_0) || \
|
| | | ((VALUE) == DAC_LFSRUnmask_Bits5_0) || \
|
| | | ((VALUE) == DAC_LFSRUnmask_Bits6_0) || \
|
| | | ((VALUE) == DAC_LFSRUnmask_Bits7_0) || \
|
| | | ((VALUE) == DAC_LFSRUnmask_Bits8_0) || \
|
| | | ((VALUE) == DAC_LFSRUnmask_Bits9_0) || \
|
| | | ((VALUE) == DAC_LFSRUnmask_Bits10_0) || \
|
| | | ((VALUE) == DAC_LFSRUnmask_Bits11_0) || \
|
| | | ((VALUE) == DAC_TriangleAmplitude_1) || \
|
| | | ((VALUE) == DAC_TriangleAmplitude_3) || \
|
| | | ((VALUE) == DAC_TriangleAmplitude_7) || \
|
| | | ((VALUE) == DAC_TriangleAmplitude_15) || \
|
| | | ((VALUE) == DAC_TriangleAmplitude_31) || \
|
| | | ((VALUE) == DAC_TriangleAmplitude_63) || \
|
| | | ((VALUE) == DAC_TriangleAmplitude_127) || \
|
| | | ((VALUE) == DAC_TriangleAmplitude_255) || \
|
| | | ((VALUE) == DAC_TriangleAmplitude_511) || \
|
| | | ((VALUE) == DAC_TriangleAmplitude_1023) || \
|
| | | ((VALUE) == DAC_TriangleAmplitude_2047) || \
|
| | | ((VALUE) == DAC_TriangleAmplitude_4095))
|
| | | /**
|
| | | * @}
|
| | | */
|
| | |
|
| | | /** @defgroup DAC_output_buffer |
| | | * @{
|
| | | */
|
| | |
|
| | | #define DAC_OutputBuffer_Enable ((uint32_t)0x00000000)
|
| | | #define DAC_OutputBuffer_Disable ((uint32_t)0x00000002)
|
| | | #define IS_DAC_OUTPUT_BUFFER_STATE(STATE) (((STATE) == DAC_OutputBuffer_Enable) || \
|
| | | ((STATE) == DAC_OutputBuffer_Disable))
|
| | | /**
|
| | | * @}
|
| | | */
|
| | |
|
| | | /** @defgroup DAC_Channel_selection |
| | | * @{
|
| | | */
|
| | |
|
| | | #define DAC_Channel_1 ((uint32_t)0x00000000)
|
| | | #define DAC_Channel_2 ((uint32_t)0x00000010)
|
| | | #define IS_DAC_CHANNEL(CHANNEL) (((CHANNEL) == DAC_Channel_1) || \
|
| | | ((CHANNEL) == DAC_Channel_2))
|
| | | /**
|
| | | * @}
|
| | | */
|
| | |
|
| | | /** @defgroup DAC_data_alignment |
| | | * @{
|
| | | */
|
| | |
|
| | | #define DAC_Align_12b_R ((uint32_t)0x00000000)
|
| | | #define DAC_Align_12b_L ((uint32_t)0x00000004)
|
| | | #define DAC_Align_8b_R ((uint32_t)0x00000008)
|
| | | #define IS_DAC_ALIGN(ALIGN) (((ALIGN) == DAC_Align_12b_R) || \
|
| | | ((ALIGN) == DAC_Align_12b_L) || \
|
| | | ((ALIGN) == DAC_Align_8b_R))
|
| | | /**
|
| | | * @}
|
| | | */
|
| | |
|
| | | /** @defgroup DAC_wave_generation |
| | | * @{
|
| | | */
|
| | |
|
| | | #define DAC_Wave_Noise ((uint32_t)0x00000040)
|
| | | #define DAC_Wave_Triangle ((uint32_t)0x00000080)
|
| | | #define IS_DAC_WAVE(WAVE) (((WAVE) == DAC_Wave_Noise) || \
|
| | | ((WAVE) == DAC_Wave_Triangle))
|
| | | /**
|
| | | * @}
|
| | | */
|
| | |
|
| | | /** @defgroup DAC_data |
| | | * @{
|
| | | */
|
| | |
|
| | | #define IS_DAC_DATA(DATA) ((DATA) <= 0xFFF0) |
| | | /**
|
| | | * @}
|
| | | */
|
| | | #if defined (STM32F10X_LD_VL) || defined (STM32F10X_MD_VL) || defined (STM32F10X_HD_VL)
|
| | | /** @defgroup DAC_interrupts_definition |
| | | * @{
|
| | | */ |
| | | |
| | | #define DAC_IT_DMAUDR ((uint32_t)0x00002000) |
| | | #define IS_DAC_IT(IT) (((IT) == DAC_IT_DMAUDR)) |
| | |
|
| | | /**
|
| | | * @}
|
| | | */ |
| | |
|
| | | /** @defgroup DAC_flags_definition |
| | | * @{
|
| | | */ |
| | | |
| | | #define DAC_FLAG_DMAUDR ((uint32_t)0x00002000) |
| | | #define IS_DAC_FLAG(FLAG) (((FLAG) == DAC_FLAG_DMAUDR)) |
| | |
|
| | | /**
|
| | | * @}
|
| | | */
|
| | | #endif
|
| | |
|
| | | /**
|
| | | * @}
|
| | | */
|
| | |
|
| | | /** @defgroup DAC_Exported_Macros
|
| | | * @{
|
| | | */
|
| | |
|
| | | /**
|
| | | * @}
|
| | | */
|
| | |
|
| | | /** @defgroup DAC_Exported_Functions
|
| | | * @{
|
| | | */
|
| | |
|
| | | void DAC_DeInit(void);
|
| | | void DAC_Init(uint32_t DAC_Channel, DAC_InitTypeDef* DAC_InitStruct);
|
| | | void DAC_StructInit(DAC_InitTypeDef* DAC_InitStruct);
|
| | | void DAC_Cmd(uint32_t DAC_Channel, FunctionalState NewState);
|
| | | #if defined (STM32F10X_LD_VL) || defined (STM32F10X_MD_VL) || defined (STM32F10X_HD_VL)
|
| | | void DAC_ITConfig(uint32_t DAC_Channel, uint32_t DAC_IT, FunctionalState NewState);
|
| | | #endif
|
| | | void DAC_DMACmd(uint32_t DAC_Channel, FunctionalState NewState);
|
| | | void DAC_SoftwareTriggerCmd(uint32_t DAC_Channel, FunctionalState NewState);
|
| | | void DAC_DualSoftwareTriggerCmd(FunctionalState NewState);
|
| | | void DAC_WaveGenerationCmd(uint32_t DAC_Channel, uint32_t DAC_Wave, FunctionalState NewState);
|
| | | void DAC_SetChannel1Data(uint32_t DAC_Align, uint16_t Data);
|
| | | void DAC_SetChannel2Data(uint32_t DAC_Align, uint16_t Data);
|
| | | void DAC_SetDualChannelData(uint32_t DAC_Align, uint16_t Data2, uint16_t Data1);
|
| | | uint16_t DAC_GetDataOutputValue(uint32_t DAC_Channel);
|
| | | #if defined (STM32F10X_LD_VL) || defined (STM32F10X_MD_VL) || defined (STM32F10X_HD_VL) |
| | | FlagStatus DAC_GetFlagStatus(uint32_t DAC_Channel, uint32_t DAC_FLAG);
|
| | | void DAC_ClearFlag(uint32_t DAC_Channel, uint32_t DAC_FLAG);
|
| | | ITStatus DAC_GetITStatus(uint32_t DAC_Channel, uint32_t DAC_IT);
|
| | | void DAC_ClearITPendingBit(uint32_t DAC_Channel, uint32_t DAC_IT);
|
| | | #endif
|
| | |
|
| | | #ifdef __cplusplus
|
| | | }
|
| | | #endif
|
| | |
|
| | | #endif /*__STM32F10x_DAC_H */
|
| | | /**
|
| | | * @}
|
| | | */
|
| | |
|
| | | /**
|
| | | * @}
|
| | | */
|
| | |
|
| | | /**
|
| | | * @}
|
| | | */
|
| | |
|
| | | /******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/
|
New file |
| | |
| | | /**
|
| | | ******************************************************************************
|
| | | * @file stm32f10x_dbgmcu.h
|
| | | * @author MCD Application Team
|
| | | * @version V3.5.0
|
| | | * @date 11-March-2011
|
| | | * @brief This file contains all the functions prototypes for the DBGMCU |
| | | * firmware library.
|
| | | ******************************************************************************
|
| | | * @attention
|
| | | *
|
| | | * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
|
| | | * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE
|
| | | * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY
|
| | | * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING
|
| | | * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE
|
| | | * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
|
| | | *
|
| | | * <h2><center>© COPYRIGHT 2011 STMicroelectronics</center></h2>
|
| | | ******************************************************************************
|
| | | */
|
| | |
|
| | | /* Define to prevent recursive inclusion -------------------------------------*/
|
| | | #ifndef __STM32F10x_DBGMCU_H
|
| | | #define __STM32F10x_DBGMCU_H
|
| | |
|
| | | #ifdef __cplusplus
|
| | | extern "C" {
|
| | | #endif
|
| | |
|
| | | /* Includes ------------------------------------------------------------------*/
|
| | | #include "stm32f10x.h"
|
| | |
|
| | | /** @addtogroup STM32F10x_StdPeriph_Driver
|
| | | * @{
|
| | | */
|
| | |
|
| | | /** @addtogroup DBGMCU
|
| | | * @{
|
| | | */
|
| | |
|
| | | /** @defgroup DBGMCU_Exported_Types
|
| | | * @{
|
| | | */
|
| | |
|
| | | /**
|
| | | * @}
|
| | | */
|
| | |
|
| | | /** @defgroup DBGMCU_Exported_Constants
|
| | | * @{
|
| | | */
|
| | |
|
| | | #define DBGMCU_SLEEP ((uint32_t)0x00000001)
|
| | | #define DBGMCU_STOP ((uint32_t)0x00000002)
|
| | | #define DBGMCU_STANDBY ((uint32_t)0x00000004)
|
| | | #define DBGMCU_IWDG_STOP ((uint32_t)0x00000100)
|
| | | #define DBGMCU_WWDG_STOP ((uint32_t)0x00000200)
|
| | | #define DBGMCU_TIM1_STOP ((uint32_t)0x00000400)
|
| | | #define DBGMCU_TIM2_STOP ((uint32_t)0x00000800)
|
| | | #define DBGMCU_TIM3_STOP ((uint32_t)0x00001000)
|
| | | #define DBGMCU_TIM4_STOP ((uint32_t)0x00002000)
|
| | | #define DBGMCU_CAN1_STOP ((uint32_t)0x00004000)
|
| | | #define DBGMCU_I2C1_SMBUS_TIMEOUT ((uint32_t)0x00008000)
|
| | | #define DBGMCU_I2C2_SMBUS_TIMEOUT ((uint32_t)0x00010000)
|
| | | #define DBGMCU_TIM8_STOP ((uint32_t)0x00020000)
|
| | | #define DBGMCU_TIM5_STOP ((uint32_t)0x00040000)
|
| | | #define DBGMCU_TIM6_STOP ((uint32_t)0x00080000)
|
| | | #define DBGMCU_TIM7_STOP ((uint32_t)0x00100000)
|
| | | #define DBGMCU_CAN2_STOP ((uint32_t)0x00200000)
|
| | | #define DBGMCU_TIM15_STOP ((uint32_t)0x00400000)
|
| | | #define DBGMCU_TIM16_STOP ((uint32_t)0x00800000)
|
| | | #define DBGMCU_TIM17_STOP ((uint32_t)0x01000000)
|
| | | #define DBGMCU_TIM12_STOP ((uint32_t)0x02000000)
|
| | | #define DBGMCU_TIM13_STOP ((uint32_t)0x04000000)
|
| | | #define DBGMCU_TIM14_STOP ((uint32_t)0x08000000)
|
| | | #define DBGMCU_TIM9_STOP ((uint32_t)0x10000000)
|
| | | #define DBGMCU_TIM10_STOP ((uint32_t)0x20000000)
|
| | | #define DBGMCU_TIM11_STOP ((uint32_t)0x40000000)
|
| | | |
| | | #define IS_DBGMCU_PERIPH(PERIPH) ((((PERIPH) & 0x800000F8) == 0x00) && ((PERIPH) != 0x00))
|
| | | /**
|
| | | * @}
|
| | | */ |
| | |
|
| | | /** @defgroup DBGMCU_Exported_Macros
|
| | | * @{
|
| | | */
|
| | |
|
| | | /**
|
| | | * @}
|
| | | */
|
| | |
|
| | | /** @defgroup DBGMCU_Exported_Functions
|
| | | * @{
|
| | | */
|
| | |
|
| | | uint32_t DBGMCU_GetREVID(void);
|
| | | uint32_t DBGMCU_GetDEVID(void);
|
| | | void DBGMCU_Config(uint32_t DBGMCU_Periph, FunctionalState NewState);
|
| | |
|
| | | #ifdef __cplusplus
|
| | | }
|
| | | #endif
|
| | |
|
| | | #endif /* __STM32F10x_DBGMCU_H */
|
| | | /**
|
| | | * @}
|
| | | */
|
| | |
|
| | | /**
|
| | | * @}
|
| | | */
|
| | |
|
| | | /**
|
| | | * @}
|
| | | */
|
| | |
|
| | | /******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/
|
New file |
| | |
| | | /**
|
| | | ******************************************************************************
|
| | | * @file stm32f10x_dma.h
|
| | | * @author MCD Application Team
|
| | | * @version V3.5.0
|
| | | * @date 11-March-2011
|
| | | * @brief This file contains all the functions prototypes for the DMA firmware |
| | | * library.
|
| | | ******************************************************************************
|
| | | * @attention
|
| | | *
|
| | | * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
|
| | | * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE
|
| | | * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY
|
| | | * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING
|
| | | * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE
|
| | | * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
|
| | | *
|
| | | * <h2><center>© COPYRIGHT 2011 STMicroelectronics</center></h2>
|
| | | ******************************************************************************
|
| | | */
|
| | |
|
| | | /* Define to prevent recursive inclusion -------------------------------------*/
|
| | | #ifndef __STM32F10x_DMA_H
|
| | | #define __STM32F10x_DMA_H
|
| | |
|
| | | #ifdef __cplusplus
|
| | | extern "C" {
|
| | | #endif
|
| | |
|
| | | /* Includes ------------------------------------------------------------------*/
|
| | | #include "stm32f10x.h"
|
| | |
|
| | | /** @addtogroup STM32F10x_StdPeriph_Driver
|
| | | * @{
|
| | | */
|
| | |
|
| | | /** @addtogroup DMA
|
| | | * @{
|
| | | */
|
| | |
|
| | | /** @defgroup DMA_Exported_Types
|
| | | * @{
|
| | | */
|
| | |
|
| | | /** |
| | | * @brief DMA Init structure definition
|
| | | */
|
| | |
|
| | | typedef struct
|
| | | {
|
| | | uint32_t DMA_PeripheralBaseAddr; /*!< Specifies the peripheral base address for DMAy Channelx. */
|
| | |
|
| | | uint32_t DMA_MemoryBaseAddr; /*!< Specifies the memory base address for DMAy Channelx. */
|
| | |
|
| | | uint32_t DMA_DIR; /*!< Specifies if the peripheral is the source or destination.
|
| | | This parameter can be a value of @ref DMA_data_transfer_direction */
|
| | |
|
| | | uint32_t DMA_BufferSize; /*!< Specifies the buffer size, in data unit, of the specified Channel. |
| | | The data unit is equal to the configuration set in DMA_PeripheralDataSize
|
| | | or DMA_MemoryDataSize members depending in the transfer direction. */
|
| | |
|
| | | uint32_t DMA_PeripheralInc; /*!< Specifies whether the Peripheral address register is incremented or not.
|
| | | This parameter can be a value of @ref DMA_peripheral_incremented_mode */
|
| | |
|
| | | uint32_t DMA_MemoryInc; /*!< Specifies whether the memory address register is incremented or not.
|
| | | This parameter can be a value of @ref DMA_memory_incremented_mode */
|
| | |
|
| | | uint32_t DMA_PeripheralDataSize; /*!< Specifies the Peripheral data width.
|
| | | This parameter can be a value of @ref DMA_peripheral_data_size */
|
| | |
|
| | | uint32_t DMA_MemoryDataSize; /*!< Specifies the Memory data width.
|
| | | This parameter can be a value of @ref DMA_memory_data_size */
|
| | |
|
| | | uint32_t DMA_Mode; /*!< Specifies the operation mode of the DMAy Channelx.
|
| | | This parameter can be a value of @ref DMA_circular_normal_mode.
|
| | | @note: The circular buffer mode cannot be used if the memory-to-memory
|
| | | data transfer is configured on the selected Channel */
|
| | |
|
| | | uint32_t DMA_Priority; /*!< Specifies the software priority for the DMAy Channelx.
|
| | | This parameter can be a value of @ref DMA_priority_level */
|
| | |
|
| | | uint32_t DMA_M2M; /*!< Specifies if the DMAy Channelx will be used in memory-to-memory transfer.
|
| | | This parameter can be a value of @ref DMA_memory_to_memory */
|
| | | }DMA_InitTypeDef;
|
| | |
|
| | | /**
|
| | | * @}
|
| | | */
|
| | |
|
| | | /** @defgroup DMA_Exported_Constants
|
| | | * @{
|
| | | */
|
| | |
|
| | | #define IS_DMA_ALL_PERIPH(PERIPH) (((PERIPH) == DMA1_Channel1) || \
|
| | | ((PERIPH) == DMA1_Channel2) || \
|
| | | ((PERIPH) == DMA1_Channel3) || \
|
| | | ((PERIPH) == DMA1_Channel4) || \
|
| | | ((PERIPH) == DMA1_Channel5) || \
|
| | | ((PERIPH) == DMA1_Channel6) || \
|
| | | ((PERIPH) == DMA1_Channel7) || \
|
| | | ((PERIPH) == DMA2_Channel1) || \
|
| | | ((PERIPH) == DMA2_Channel2) || \
|
| | | ((PERIPH) == DMA2_Channel3) || \
|
| | | ((PERIPH) == DMA2_Channel4) || \
|
| | | ((PERIPH) == DMA2_Channel5))
|
| | |
|
| | | /** @defgroup DMA_data_transfer_direction |
| | | * @{
|
| | | */
|
| | |
|
| | | #define DMA_DIR_PeripheralDST ((uint32_t)0x00000010)
|
| | | #define DMA_DIR_PeripheralSRC ((uint32_t)0x00000000)
|
| | | #define IS_DMA_DIR(DIR) (((DIR) == DMA_DIR_PeripheralDST) || \
|
| | | ((DIR) == DMA_DIR_PeripheralSRC))
|
| | | /**
|
| | | * @}
|
| | | */
|
| | |
|
| | | /** @defgroup DMA_peripheral_incremented_mode |
| | | * @{
|
| | | */
|
| | |
|
| | | #define DMA_PeripheralInc_Enable ((uint32_t)0x00000040)
|
| | | #define DMA_PeripheralInc_Disable ((uint32_t)0x00000000)
|
| | | #define IS_DMA_PERIPHERAL_INC_STATE(STATE) (((STATE) == DMA_PeripheralInc_Enable) || \
|
| | | ((STATE) == DMA_PeripheralInc_Disable))
|
| | | /**
|
| | | * @}
|
| | | */
|
| | |
|
| | | /** @defgroup DMA_memory_incremented_mode |
| | | * @{
|
| | | */
|
| | |
|
| | | #define DMA_MemoryInc_Enable ((uint32_t)0x00000080)
|
| | | #define DMA_MemoryInc_Disable ((uint32_t)0x00000000)
|
| | | #define IS_DMA_MEMORY_INC_STATE(STATE) (((STATE) == DMA_MemoryInc_Enable) || \
|
| | | ((STATE) == DMA_MemoryInc_Disable))
|
| | | /**
|
| | | * @}
|
| | | */
|
| | |
|
| | | /** @defgroup DMA_peripheral_data_size |
| | | * @{
|
| | | */
|
| | |
|
| | | #define DMA_PeripheralDataSize_Byte ((uint32_t)0x00000000)
|
| | | #define DMA_PeripheralDataSize_HalfWord ((uint32_t)0x00000100)
|
| | | #define DMA_PeripheralDataSize_Word ((uint32_t)0x00000200)
|
| | | #define IS_DMA_PERIPHERAL_DATA_SIZE(SIZE) (((SIZE) == DMA_PeripheralDataSize_Byte) || \
|
| | | ((SIZE) == DMA_PeripheralDataSize_HalfWord) || \
|
| | | ((SIZE) == DMA_PeripheralDataSize_Word))
|
| | | /**
|
| | | * @}
|
| | | */
|
| | |
|
| | | /** @defgroup DMA_memory_data_size |
| | | * @{
|
| | | */
|
| | |
|
| | | #define DMA_MemoryDataSize_Byte ((uint32_t)0x00000000)
|
| | | #define DMA_MemoryDataSize_HalfWord ((uint32_t)0x00000400)
|
| | | #define DMA_MemoryDataSize_Word ((uint32_t)0x00000800)
|
| | | #define IS_DMA_MEMORY_DATA_SIZE(SIZE) (((SIZE) == DMA_MemoryDataSize_Byte) || \
|
| | | ((SIZE) == DMA_MemoryDataSize_HalfWord) || \
|
| | | ((SIZE) == DMA_MemoryDataSize_Word))
|
| | | /**
|
| | | * @}
|
| | | */
|
| | |
|
| | | /** @defgroup DMA_circular_normal_mode |
| | | * @{
|
| | | */
|
| | |
|
| | | #define DMA_Mode_Circular ((uint32_t)0x00000020)
|
| | | #define DMA_Mode_Normal ((uint32_t)0x00000000)
|
| | | #define IS_DMA_MODE(MODE) (((MODE) == DMA_Mode_Circular) || ((MODE) == DMA_Mode_Normal))
|
| | | /**
|
| | | * @}
|
| | | */
|
| | |
|
| | | /** @defgroup DMA_priority_level |
| | | * @{
|
| | | */
|
| | |
|
| | | #define DMA_Priority_VeryHigh ((uint32_t)0x00003000)
|
| | | #define DMA_Priority_High ((uint32_t)0x00002000)
|
| | | #define DMA_Priority_Medium ((uint32_t)0x00001000)
|
| | | #define DMA_Priority_Low ((uint32_t)0x00000000)
|
| | | #define IS_DMA_PRIORITY(PRIORITY) (((PRIORITY) == DMA_Priority_VeryHigh) || \
|
| | | ((PRIORITY) == DMA_Priority_High) || \
|
| | | ((PRIORITY) == DMA_Priority_Medium) || \
|
| | | ((PRIORITY) == DMA_Priority_Low))
|
| | | /**
|
| | | * @}
|
| | | */
|
| | |
|
| | | /** @defgroup DMA_memory_to_memory |
| | | * @{
|
| | | */
|
| | |
|
| | | #define DMA_M2M_Enable ((uint32_t)0x00004000)
|
| | | #define DMA_M2M_Disable ((uint32_t)0x00000000)
|
| | | #define IS_DMA_M2M_STATE(STATE) (((STATE) == DMA_M2M_Enable) || ((STATE) == DMA_M2M_Disable))
|
| | |
|
| | | /**
|
| | | * @}
|
| | | */
|
| | |
|
| | | /** @defgroup DMA_interrupts_definition |
| | | * @{
|
| | | */
|
| | |
|
| | | #define DMA_IT_TC ((uint32_t)0x00000002)
|
| | | #define DMA_IT_HT ((uint32_t)0x00000004)
|
| | | #define DMA_IT_TE ((uint32_t)0x00000008)
|
| | | #define IS_DMA_CONFIG_IT(IT) ((((IT) & 0xFFFFFFF1) == 0x00) && ((IT) != 0x00))
|
| | |
|
| | | #define DMA1_IT_GL1 ((uint32_t)0x00000001)
|
| | | #define DMA1_IT_TC1 ((uint32_t)0x00000002)
|
| | | #define DMA1_IT_HT1 ((uint32_t)0x00000004)
|
| | | #define DMA1_IT_TE1 ((uint32_t)0x00000008)
|
| | | #define DMA1_IT_GL2 ((uint32_t)0x00000010)
|
| | | #define DMA1_IT_TC2 ((uint32_t)0x00000020)
|
| | | #define DMA1_IT_HT2 ((uint32_t)0x00000040)
|
| | | #define DMA1_IT_TE2 ((uint32_t)0x00000080)
|
| | | #define DMA1_IT_GL3 ((uint32_t)0x00000100)
|
| | | #define DMA1_IT_TC3 ((uint32_t)0x00000200)
|
| | | #define DMA1_IT_HT3 ((uint32_t)0x00000400)
|
| | | #define DMA1_IT_TE3 ((uint32_t)0x00000800)
|
| | | #define DMA1_IT_GL4 ((uint32_t)0x00001000)
|
| | | #define DMA1_IT_TC4 ((uint32_t)0x00002000)
|
| | | #define DMA1_IT_HT4 ((uint32_t)0x00004000)
|
| | | #define DMA1_IT_TE4 ((uint32_t)0x00008000)
|
| | | #define DMA1_IT_GL5 ((uint32_t)0x00010000)
|
| | | #define DMA1_IT_TC5 ((uint32_t)0x00020000)
|
| | | #define DMA1_IT_HT5 ((uint32_t)0x00040000)
|
| | | #define DMA1_IT_TE5 ((uint32_t)0x00080000)
|
| | | #define DMA1_IT_GL6 ((uint32_t)0x00100000)
|
| | | #define DMA1_IT_TC6 ((uint32_t)0x00200000)
|
| | | #define DMA1_IT_HT6 ((uint32_t)0x00400000)
|
| | | #define DMA1_IT_TE6 ((uint32_t)0x00800000)
|
| | | #define DMA1_IT_GL7 ((uint32_t)0x01000000)
|
| | | #define DMA1_IT_TC7 ((uint32_t)0x02000000)
|
| | | #define DMA1_IT_HT7 ((uint32_t)0x04000000)
|
| | | #define DMA1_IT_TE7 ((uint32_t)0x08000000)
|
| | |
|
| | | #define DMA2_IT_GL1 ((uint32_t)0x10000001)
|
| | | #define DMA2_IT_TC1 ((uint32_t)0x10000002)
|
| | | #define DMA2_IT_HT1 ((uint32_t)0x10000004)
|
| | | #define DMA2_IT_TE1 ((uint32_t)0x10000008)
|
| | | #define DMA2_IT_GL2 ((uint32_t)0x10000010)
|
| | | #define DMA2_IT_TC2 ((uint32_t)0x10000020)
|
| | | #define DMA2_IT_HT2 ((uint32_t)0x10000040)
|
| | | #define DMA2_IT_TE2 ((uint32_t)0x10000080)
|
| | | #define DMA2_IT_GL3 ((uint32_t)0x10000100)
|
| | | #define DMA2_IT_TC3 ((uint32_t)0x10000200)
|
| | | #define DMA2_IT_HT3 ((uint32_t)0x10000400)
|
| | | #define DMA2_IT_TE3 ((uint32_t)0x10000800)
|
| | | #define DMA2_IT_GL4 ((uint32_t)0x10001000)
|
| | | #define DMA2_IT_TC4 ((uint32_t)0x10002000)
|
| | | #define DMA2_IT_HT4 ((uint32_t)0x10004000)
|
| | | #define DMA2_IT_TE4 ((uint32_t)0x10008000)
|
| | | #define DMA2_IT_GL5 ((uint32_t)0x10010000)
|
| | | #define DMA2_IT_TC5 ((uint32_t)0x10020000)
|
| | | #define DMA2_IT_HT5 ((uint32_t)0x10040000)
|
| | | #define DMA2_IT_TE5 ((uint32_t)0x10080000)
|
| | |
|
| | | #define IS_DMA_CLEAR_IT(IT) (((((IT) & 0xF0000000) == 0x00) || (((IT) & 0xEFF00000) == 0x00)) && ((IT) != 0x00))
|
| | |
|
| | | #define IS_DMA_GET_IT(IT) (((IT) == DMA1_IT_GL1) || ((IT) == DMA1_IT_TC1) || \
|
| | | ((IT) == DMA1_IT_HT1) || ((IT) == DMA1_IT_TE1) || \
|
| | | ((IT) == DMA1_IT_GL2) || ((IT) == DMA1_IT_TC2) || \
|
| | | ((IT) == DMA1_IT_HT2) || ((IT) == DMA1_IT_TE2) || \
|
| | | ((IT) == DMA1_IT_GL3) || ((IT) == DMA1_IT_TC3) || \
|
| | | ((IT) == DMA1_IT_HT3) || ((IT) == DMA1_IT_TE3) || \
|
| | | ((IT) == DMA1_IT_GL4) || ((IT) == DMA1_IT_TC4) || \
|
| | | ((IT) == DMA1_IT_HT4) || ((IT) == DMA1_IT_TE4) || \
|
| | | ((IT) == DMA1_IT_GL5) || ((IT) == DMA1_IT_TC5) || \
|
| | | ((IT) == DMA1_IT_HT5) || ((IT) == DMA1_IT_TE5) || \
|
| | | ((IT) == DMA1_IT_GL6) || ((IT) == DMA1_IT_TC6) || \
|
| | | ((IT) == DMA1_IT_HT6) || ((IT) == DMA1_IT_TE6) || \
|
| | | ((IT) == DMA1_IT_GL7) || ((IT) == DMA1_IT_TC7) || \
|
| | | ((IT) == DMA1_IT_HT7) || ((IT) == DMA1_IT_TE7) || \
|
| | | ((IT) == DMA2_IT_GL1) || ((IT) == DMA2_IT_TC1) || \
|
| | | ((IT) == DMA2_IT_HT1) || ((IT) == DMA2_IT_TE1) || \
|
| | | ((IT) == DMA2_IT_GL2) || ((IT) == DMA2_IT_TC2) || \
|
| | | ((IT) == DMA2_IT_HT2) || ((IT) == DMA2_IT_TE2) || \
|
| | | ((IT) == DMA2_IT_GL3) || ((IT) == DMA2_IT_TC3) || \
|
| | | ((IT) == DMA2_IT_HT3) || ((IT) == DMA2_IT_TE3) || \
|
| | | ((IT) == DMA2_IT_GL4) || ((IT) == DMA2_IT_TC4) || \
|
| | | ((IT) == DMA2_IT_HT4) || ((IT) == DMA2_IT_TE4) || \
|
| | | ((IT) == DMA2_IT_GL5) || ((IT) == DMA2_IT_TC5) || \
|
| | | ((IT) == DMA2_IT_HT5) || ((IT) == DMA2_IT_TE5))
|
| | |
|
| | | /**
|
| | | * @}
|
| | | */
|
| | |
|
| | | /** @defgroup DMA_flags_definition |
| | | * @{
|
| | | */
|
| | | #define DMA1_FLAG_GL1 ((uint32_t)0x00000001)
|
| | | #define DMA1_FLAG_TC1 ((uint32_t)0x00000002)
|
| | | #define DMA1_FLAG_HT1 ((uint32_t)0x00000004)
|
| | | #define DMA1_FLAG_TE1 ((uint32_t)0x00000008)
|
| | | #define DMA1_FLAG_GL2 ((uint32_t)0x00000010)
|
| | | #define DMA1_FLAG_TC2 ((uint32_t)0x00000020)
|
| | | #define DMA1_FLAG_HT2 ((uint32_t)0x00000040)
|
| | | #define DMA1_FLAG_TE2 ((uint32_t)0x00000080)
|
| | | #define DMA1_FLAG_GL3 ((uint32_t)0x00000100)
|
| | | #define DMA1_FLAG_TC3 ((uint32_t)0x00000200)
|
| | | #define DMA1_FLAG_HT3 ((uint32_t)0x00000400)
|
| | | #define DMA1_FLAG_TE3 ((uint32_t)0x00000800)
|
| | | #define DMA1_FLAG_GL4 ((uint32_t)0x00001000)
|
| | | #define DMA1_FLAG_TC4 ((uint32_t)0x00002000)
|
| | | #define DMA1_FLAG_HT4 ((uint32_t)0x00004000)
|
| | | #define DMA1_FLAG_TE4 ((uint32_t)0x00008000)
|
| | | #define DMA1_FLAG_GL5 ((uint32_t)0x00010000)
|
| | | #define DMA1_FLAG_TC5 ((uint32_t)0x00020000)
|
| | | #define DMA1_FLAG_HT5 ((uint32_t)0x00040000)
|
| | | #define DMA1_FLAG_TE5 ((uint32_t)0x00080000)
|
| | | #define DMA1_FLAG_GL6 ((uint32_t)0x00100000)
|
| | | #define DMA1_FLAG_TC6 ((uint32_t)0x00200000)
|
| | | #define DMA1_FLAG_HT6 ((uint32_t)0x00400000)
|
| | | #define DMA1_FLAG_TE6 ((uint32_t)0x00800000)
|
| | | #define DMA1_FLAG_GL7 ((uint32_t)0x01000000)
|
| | | #define DMA1_FLAG_TC7 ((uint32_t)0x02000000)
|
| | | #define DMA1_FLAG_HT7 ((uint32_t)0x04000000)
|
| | | #define DMA1_FLAG_TE7 ((uint32_t)0x08000000)
|
| | |
|
| | | #define DMA2_FLAG_GL1 ((uint32_t)0x10000001)
|
| | | #define DMA2_FLAG_TC1 ((uint32_t)0x10000002)
|
| | | #define DMA2_FLAG_HT1 ((uint32_t)0x10000004)
|
| | | #define DMA2_FLAG_TE1 ((uint32_t)0x10000008)
|
| | | #define DMA2_FLAG_GL2 ((uint32_t)0x10000010)
|
| | | #define DMA2_FLAG_TC2 ((uint32_t)0x10000020)
|
| | | #define DMA2_FLAG_HT2 ((uint32_t)0x10000040)
|
| | | #define DMA2_FLAG_TE2 ((uint32_t)0x10000080)
|
| | | #define DMA2_FLAG_GL3 ((uint32_t)0x10000100)
|
| | | #define DMA2_FLAG_TC3 ((uint32_t)0x10000200)
|
| | | #define DMA2_FLAG_HT3 ((uint32_t)0x10000400)
|
| | | #define DMA2_FLAG_TE3 ((uint32_t)0x10000800)
|
| | | #define DMA2_FLAG_GL4 ((uint32_t)0x10001000)
|
| | | #define DMA2_FLAG_TC4 ((uint32_t)0x10002000)
|
| | | #define DMA2_FLAG_HT4 ((uint32_t)0x10004000)
|
| | | #define DMA2_FLAG_TE4 ((uint32_t)0x10008000)
|
| | | #define DMA2_FLAG_GL5 ((uint32_t)0x10010000)
|
| | | #define DMA2_FLAG_TC5 ((uint32_t)0x10020000)
|
| | | #define DMA2_FLAG_HT5 ((uint32_t)0x10040000)
|
| | | #define DMA2_FLAG_TE5 ((uint32_t)0x10080000)
|
| | |
|
| | | #define IS_DMA_CLEAR_FLAG(FLAG) (((((FLAG) & 0xF0000000) == 0x00) || (((FLAG) & 0xEFF00000) == 0x00)) && ((FLAG) != 0x00))
|
| | |
|
| | | #define IS_DMA_GET_FLAG(FLAG) (((FLAG) == DMA1_FLAG_GL1) || ((FLAG) == DMA1_FLAG_TC1) || \
|
| | | ((FLAG) == DMA1_FLAG_HT1) || ((FLAG) == DMA1_FLAG_TE1) || \
|
| | | ((FLAG) == DMA1_FLAG_GL2) || ((FLAG) == DMA1_FLAG_TC2) || \
|
| | | ((FLAG) == DMA1_FLAG_HT2) || ((FLAG) == DMA1_FLAG_TE2) || \
|
| | | ((FLAG) == DMA1_FLAG_GL3) || ((FLAG) == DMA1_FLAG_TC3) || \
|
| | | ((FLAG) == DMA1_FLAG_HT3) || ((FLAG) == DMA1_FLAG_TE3) || \
|
| | | ((FLAG) == DMA1_FLAG_GL4) || ((FLAG) == DMA1_FLAG_TC4) || \
|
| | | ((FLAG) == DMA1_FLAG_HT4) || ((FLAG) == DMA1_FLAG_TE4) || \
|
| | | ((FLAG) == DMA1_FLAG_GL5) || ((FLAG) == DMA1_FLAG_TC5) || \
|
| | | ((FLAG) == DMA1_FLAG_HT5) || ((FLAG) == DMA1_FLAG_TE5) || \
|
| | | ((FLAG) == DMA1_FLAG_GL6) || ((FLAG) == DMA1_FLAG_TC6) || \
|
| | | ((FLAG) == DMA1_FLAG_HT6) || ((FLAG) == DMA1_FLAG_TE6) || \
|
| | | ((FLAG) == DMA1_FLAG_GL7) || ((FLAG) == DMA1_FLAG_TC7) || \
|
| | | ((FLAG) == DMA1_FLAG_HT7) || ((FLAG) == DMA1_FLAG_TE7) || \
|
| | | ((FLAG) == DMA2_FLAG_GL1) || ((FLAG) == DMA2_FLAG_TC1) || \
|
| | | ((FLAG) == DMA2_FLAG_HT1) || ((FLAG) == DMA2_FLAG_TE1) || \
|
| | | ((FLAG) == DMA2_FLAG_GL2) || ((FLAG) == DMA2_FLAG_TC2) || \
|
| | | ((FLAG) == DMA2_FLAG_HT2) || ((FLAG) == DMA2_FLAG_TE2) || \
|
| | | ((FLAG) == DMA2_FLAG_GL3) || ((FLAG) == DMA2_FLAG_TC3) || \
|
| | | ((FLAG) == DMA2_FLAG_HT3) || ((FLAG) == DMA2_FLAG_TE3) || \
|
| | | ((FLAG) == DMA2_FLAG_GL4) || ((FLAG) == DMA2_FLAG_TC4) || \
|
| | | ((FLAG) == DMA2_FLAG_HT4) || ((FLAG) == DMA2_FLAG_TE4) || \
|
| | | ((FLAG) == DMA2_FLAG_GL5) || ((FLAG) == DMA2_FLAG_TC5) || \
|
| | | ((FLAG) == DMA2_FLAG_HT5) || ((FLAG) == DMA2_FLAG_TE5))
|
| | | /**
|
| | | * @}
|
| | | */
|
| | |
|
| | | /** @defgroup DMA_Buffer_Size |
| | | * @{
|
| | | */
|
| | |
|
| | | #define IS_DMA_BUFFER_SIZE(SIZE) (((SIZE) >= 0x1) && ((SIZE) < 0x10000))
|
| | |
|
| | | /**
|
| | | * @}
|
| | | */
|
| | |
|
| | | /**
|
| | | * @}
|
| | | */
|
| | |
|
| | | /** @defgroup DMA_Exported_Macros
|
| | | * @{
|
| | | */
|
| | |
|
| | | /**
|
| | | * @}
|
| | | */
|
| | |
|
| | | /** @defgroup DMA_Exported_Functions
|
| | | * @{
|
| | | */
|
| | |
|
| | | void DMA_DeInit(DMA_Channel_TypeDef* DMAy_Channelx);
|
| | | void DMA_Init(DMA_Channel_TypeDef* DMAy_Channelx, DMA_InitTypeDef* DMA_InitStruct);
|
| | | void DMA_StructInit(DMA_InitTypeDef* DMA_InitStruct);
|
| | | void DMA_Cmd(DMA_Channel_TypeDef* DMAy_Channelx, FunctionalState NewState);
|
| | | void DMA_ITConfig(DMA_Channel_TypeDef* DMAy_Channelx, uint32_t DMA_IT, FunctionalState NewState);
|
| | | void DMA_SetCurrDataCounter(DMA_Channel_TypeDef* DMAy_Channelx, uint16_t DataNumber); |
| | | uint16_t DMA_GetCurrDataCounter(DMA_Channel_TypeDef* DMAy_Channelx);
|
| | | FlagStatus DMA_GetFlagStatus(uint32_t DMAy_FLAG);
|
| | | void DMA_ClearFlag(uint32_t DMAy_FLAG);
|
| | | ITStatus DMA_GetITStatus(uint32_t DMAy_IT);
|
| | | void DMA_ClearITPendingBit(uint32_t DMAy_IT);
|
| | |
|
| | | #ifdef __cplusplus
|
| | | }
|
| | | #endif
|
| | |
|
| | | #endif /*__STM32F10x_DMA_H */
|
| | | /**
|
| | | * @}
|
| | | */
|
| | |
|
| | | /**
|
| | | * @}
|
| | | */
|
| | |
|
| | | /**
|
| | | * @}
|
| | | */
|
| | |
|
| | | /******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/
|
New file |
| | |
| | | /**
|
| | | ******************************************************************************
|
| | | * @file stm32f10x_exti.h
|
| | | * @author MCD Application Team
|
| | | * @version V3.5.0
|
| | | * @date 11-March-2011
|
| | | * @brief This file contains all the functions prototypes for the EXTI firmware
|
| | | * library.
|
| | | ******************************************************************************
|
| | | * @attention
|
| | | *
|
| | | * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
|
| | | * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE
|
| | | * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY
|
| | | * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING
|
| | | * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE
|
| | | * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
|
| | | *
|
| | | * <h2><center>© COPYRIGHT 2011 STMicroelectronics</center></h2>
|
| | | ******************************************************************************
|
| | | */
|
| | |
|
| | | /* Define to prevent recursive inclusion -------------------------------------*/
|
| | | #ifndef __STM32F10x_EXTI_H
|
| | | #define __STM32F10x_EXTI_H
|
| | |
|
| | | #ifdef __cplusplus
|
| | | extern "C" {
|
| | | #endif
|
| | |
|
| | | /* Includes ------------------------------------------------------------------*/
|
| | | #include "stm32f10x.h"
|
| | |
|
| | | /** @addtogroup STM32F10x_StdPeriph_Driver
|
| | | * @{
|
| | | */
|
| | |
|
| | | /** @addtogroup EXTI
|
| | | * @{
|
| | | */
|
| | |
|
| | | /** @defgroup EXTI_Exported_Types
|
| | | * @{
|
| | | */
|
| | |
|
| | | /** |
| | | * @brief EXTI mode enumeration |
| | | */
|
| | |
|
| | | typedef enum
|
| | | {
|
| | | EXTI_Mode_Interrupt = 0x00,
|
| | | EXTI_Mode_Event = 0x04
|
| | | }EXTIMode_TypeDef;
|
| | |
|
| | | #define IS_EXTI_MODE(MODE) (((MODE) == EXTI_Mode_Interrupt) || ((MODE) == EXTI_Mode_Event))
|
| | |
|
| | | /** |
| | | * @brief EXTI Trigger enumeration |
| | | */
|
| | |
|
| | | typedef enum
|
| | | {
|
| | | EXTI_Trigger_Rising = 0x08,
|
| | | EXTI_Trigger_Falling = 0x0C, |
| | | EXTI_Trigger_Rising_Falling = 0x10
|
| | | }EXTITrigger_TypeDef;
|
| | |
|
| | | #define IS_EXTI_TRIGGER(TRIGGER) (((TRIGGER) == EXTI_Trigger_Rising) || \
|
| | | ((TRIGGER) == EXTI_Trigger_Falling) || \
|
| | | ((TRIGGER) == EXTI_Trigger_Rising_Falling))
|
| | | /** |
| | | * @brief EXTI Init Structure definition |
| | | */
|
| | |
|
| | | typedef struct
|
| | | {
|
| | | uint32_t EXTI_Line; /*!< Specifies the EXTI lines to be enabled or disabled.
|
| | | This parameter can be any combination of @ref EXTI_Lines */
|
| | | |
| | | EXTIMode_TypeDef EXTI_Mode; /*!< Specifies the mode for the EXTI lines.
|
| | | This parameter can be a value of @ref EXTIMode_TypeDef */
|
| | |
|
| | | EXTITrigger_TypeDef EXTI_Trigger; /*!< Specifies the trigger signal active edge for the EXTI lines.
|
| | | This parameter can be a value of @ref EXTIMode_TypeDef */
|
| | |
|
| | | FunctionalState EXTI_LineCmd; /*!< Specifies the new state of the selected EXTI lines.
|
| | | This parameter can be set either to ENABLE or DISABLE */ |
| | | }EXTI_InitTypeDef;
|
| | |
|
| | | /**
|
| | | * @}
|
| | | */
|
| | |
|
| | | /** @defgroup EXTI_Exported_Constants
|
| | | * @{
|
| | | */
|
| | |
|
| | | /** @defgroup EXTI_Lines |
| | | * @{
|
| | | */
|
| | |
|
| | | #define EXTI_Line0 ((uint32_t)0x00001) /*!< External interrupt line 0 */
|
| | | #define EXTI_Line1 ((uint32_t)0x00002) /*!< External interrupt line 1 */
|
| | | #define EXTI_Line2 ((uint32_t)0x00004) /*!< External interrupt line 2 */
|
| | | #define EXTI_Line3 ((uint32_t)0x00008) /*!< External interrupt line 3 */
|
| | | #define EXTI_Line4 ((uint32_t)0x00010) /*!< External interrupt line 4 */
|
| | | #define EXTI_Line5 ((uint32_t)0x00020) /*!< External interrupt line 5 */
|
| | | #define EXTI_Line6 ((uint32_t)0x00040) /*!< External interrupt line 6 */
|
| | | #define EXTI_Line7 ((uint32_t)0x00080) /*!< External interrupt line 7 */
|
| | | #define EXTI_Line8 ((uint32_t)0x00100) /*!< External interrupt line 8 */
|
| | | #define EXTI_Line9 ((uint32_t)0x00200) /*!< External interrupt line 9 */
|
| | | #define EXTI_Line10 ((uint32_t)0x00400) /*!< External interrupt line 10 */
|
| | | #define EXTI_Line11 ((uint32_t)0x00800) /*!< External interrupt line 11 */
|
| | | #define EXTI_Line12 ((uint32_t)0x01000) /*!< External interrupt line 12 */
|
| | | #define EXTI_Line13 ((uint32_t)0x02000) /*!< External interrupt line 13 */
|
| | | #define EXTI_Line14 ((uint32_t)0x04000) /*!< External interrupt line 14 */
|
| | | #define EXTI_Line15 ((uint32_t)0x08000) /*!< External interrupt line 15 */
|
| | | #define EXTI_Line16 ((uint32_t)0x10000) /*!< External interrupt line 16 Connected to the PVD Output */
|
| | | #define EXTI_Line17 ((uint32_t)0x20000) /*!< External interrupt line 17 Connected to the RTC Alarm event */
|
| | | #define EXTI_Line18 ((uint32_t)0x40000) /*!< External interrupt line 18 Connected to the USB Device/USB OTG FS
|
| | | Wakeup from suspend event */ |
| | | #define EXTI_Line19 ((uint32_t)0x80000) /*!< External interrupt line 19 Connected to the Ethernet Wakeup event */
|
| | | |
| | | #define IS_EXTI_LINE(LINE) ((((LINE) & (uint32_t)0xFFF00000) == 0x00) && ((LINE) != (uint16_t)0x00))
|
| | | #define IS_GET_EXTI_LINE(LINE) (((LINE) == EXTI_Line0) || ((LINE) == EXTI_Line1) || \
|
| | | ((LINE) == EXTI_Line2) || ((LINE) == EXTI_Line3) || \
|
| | | ((LINE) == EXTI_Line4) || ((LINE) == EXTI_Line5) || \
|
| | | ((LINE) == EXTI_Line6) || ((LINE) == EXTI_Line7) || \
|
| | | ((LINE) == EXTI_Line8) || ((LINE) == EXTI_Line9) || \
|
| | | ((LINE) == EXTI_Line10) || ((LINE) == EXTI_Line11) || \
|
| | | ((LINE) == EXTI_Line12) || ((LINE) == EXTI_Line13) || \
|
| | | ((LINE) == EXTI_Line14) || ((LINE) == EXTI_Line15) || \
|
| | | ((LINE) == EXTI_Line16) || ((LINE) == EXTI_Line17) || \
|
| | | ((LINE) == EXTI_Line18) || ((LINE) == EXTI_Line19))
|
| | |
|
| | | |
| | | /**
|
| | | * @}
|
| | | */
|
| | |
|
| | | /**
|
| | | * @}
|
| | | */
|
| | |
|
| | | /** @defgroup EXTI_Exported_Macros
|
| | | * @{
|
| | | */
|
| | |
|
| | | /**
|
| | | * @}
|
| | | */
|
| | |
|
| | | /** @defgroup EXTI_Exported_Functions
|
| | | * @{
|
| | | */
|
| | |
|
| | | void EXTI_DeInit(void);
|
| | | void EXTI_Init(EXTI_InitTypeDef* EXTI_InitStruct);
|
| | | void EXTI_StructInit(EXTI_InitTypeDef* EXTI_InitStruct);
|
| | | void EXTI_GenerateSWInterrupt(uint32_t EXTI_Line);
|
| | | FlagStatus EXTI_GetFlagStatus(uint32_t EXTI_Line);
|
| | | void EXTI_ClearFlag(uint32_t EXTI_Line);
|
| | | ITStatus EXTI_GetITStatus(uint32_t EXTI_Line);
|
| | | void EXTI_ClearITPendingBit(uint32_t EXTI_Line);
|
| | |
|
| | | #ifdef __cplusplus
|
| | | }
|
| | | #endif
|
| | |
|
| | | #endif /* __STM32F10x_EXTI_H */
|
| | | /**
|
| | | * @}
|
| | | */
|
| | |
|
| | | /**
|
| | | * @}
|
| | | */
|
| | |
|
| | | /**
|
| | | * @}
|
| | | */
|
| | |
|
| | | /******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/
|
New file |
| | |
| | | /**
|
| | | ******************************************************************************
|
| | | * @file stm32f10x_flash.h
|
| | | * @author MCD Application Team
|
| | | * @version V3.5.0
|
| | | * @date 11-March-2011
|
| | | * @brief This file contains all the functions prototypes for the FLASH |
| | | * firmware library.
|
| | | ******************************************************************************
|
| | | * @attention
|
| | | *
|
| | | * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
|
| | | * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE
|
| | | * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY
|
| | | * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING
|
| | | * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE
|
| | | * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
|
| | | *
|
| | | * <h2><center>© COPYRIGHT 2011 STMicroelectronics</center></h2>
|
| | | ******************************************************************************
|
| | | */
|
| | |
|
| | | /* Define to prevent recursive inclusion -------------------------------------*/
|
| | | #ifndef __STM32F10x_FLASH_H
|
| | | #define __STM32F10x_FLASH_H
|
| | |
|
| | | #ifdef __cplusplus
|
| | | extern "C" {
|
| | | #endif
|
| | |
|
| | | /* Includes ------------------------------------------------------------------*/
|
| | | #include "stm32f10x.h"
|
| | |
|
| | | /** @addtogroup STM32F10x_StdPeriph_Driver
|
| | | * @{
|
| | | */
|
| | |
|
| | | /** @addtogroup FLASH
|
| | | * @{
|
| | | */
|
| | |
|
| | | /** @defgroup FLASH_Exported_Types
|
| | | * @{
|
| | | */
|
| | |
|
| | | /** |
| | | * @brief FLASH Status |
| | | */
|
| | |
|
| | | typedef enum
|
| | | { |
| | | FLASH_BUSY = 1,
|
| | | FLASH_ERROR_PG,
|
| | | FLASH_ERROR_WRP,
|
| | | FLASH_COMPLETE,
|
| | | FLASH_TIMEOUT
|
| | | }FLASH_Status;
|
| | |
|
| | | /**
|
| | | * @}
|
| | | */
|
| | |
|
| | | /** @defgroup FLASH_Exported_Constants
|
| | | * @{
|
| | | */
|
| | |
|
| | | /** @defgroup Flash_Latency |
| | | * @{
|
| | | */
|
| | |
|
| | | #define FLASH_Latency_0 ((uint32_t)0x00000000) /*!< FLASH Zero Latency cycle */
|
| | | #define FLASH_Latency_1 ((uint32_t)0x00000001) /*!< FLASH One Latency cycle */
|
| | | #define FLASH_Latency_2 ((uint32_t)0x00000002) /*!< FLASH Two Latency cycles */
|
| | | #define IS_FLASH_LATENCY(LATENCY) (((LATENCY) == FLASH_Latency_0) || \
|
| | | ((LATENCY) == FLASH_Latency_1) || \
|
| | | ((LATENCY) == FLASH_Latency_2))
|
| | | /**
|
| | | * @}
|
| | | */
|
| | |
|
| | | /** @defgroup Half_Cycle_Enable_Disable |
| | | * @{
|
| | | */
|
| | |
|
| | | #define FLASH_HalfCycleAccess_Enable ((uint32_t)0x00000008) /*!< FLASH Half Cycle Enable */
|
| | | #define FLASH_HalfCycleAccess_Disable ((uint32_t)0x00000000) /*!< FLASH Half Cycle Disable */
|
| | | #define IS_FLASH_HALFCYCLEACCESS_STATE(STATE) (((STATE) == FLASH_HalfCycleAccess_Enable) || \
|
| | | ((STATE) == FLASH_HalfCycleAccess_Disable)) |
| | | /**
|
| | | * @}
|
| | | */
|
| | |
|
| | | /** @defgroup Prefetch_Buffer_Enable_Disable |
| | | * @{
|
| | | */
|
| | |
|
| | | #define FLASH_PrefetchBuffer_Enable ((uint32_t)0x00000010) /*!< FLASH Prefetch Buffer Enable */
|
| | | #define FLASH_PrefetchBuffer_Disable ((uint32_t)0x00000000) /*!< FLASH Prefetch Buffer Disable */
|
| | | #define IS_FLASH_PREFETCHBUFFER_STATE(STATE) (((STATE) == FLASH_PrefetchBuffer_Enable) || \
|
| | | ((STATE) == FLASH_PrefetchBuffer_Disable)) |
| | | /**
|
| | | * @}
|
| | | */
|
| | |
|
| | | /** @defgroup Option_Bytes_Write_Protection |
| | | * @{
|
| | | */
|
| | |
|
| | | /* Values to be used with STM32 Low and Medium density devices */
|
| | | #define FLASH_WRProt_Pages0to3 ((uint32_t)0x00000001) /*!< STM32 Low and Medium density devices: Write protection of page 0 to 3 */
|
| | | #define FLASH_WRProt_Pages4to7 ((uint32_t)0x00000002) /*!< STM32 Low and Medium density devices: Write protection of page 4 to 7 */
|
| | | #define FLASH_WRProt_Pages8to11 ((uint32_t)0x00000004) /*!< STM32 Low and Medium density devices: Write protection of page 8 to 11 */
|
| | | #define FLASH_WRProt_Pages12to15 ((uint32_t)0x00000008) /*!< STM32 Low and Medium density devices: Write protection of page 12 to 15 */
|
| | | #define FLASH_WRProt_Pages16to19 ((uint32_t)0x00000010) /*!< STM32 Low and Medium density devices: Write protection of page 16 to 19 */
|
| | | #define FLASH_WRProt_Pages20to23 ((uint32_t)0x00000020) /*!< STM32 Low and Medium density devices: Write protection of page 20 to 23 */
|
| | | #define FLASH_WRProt_Pages24to27 ((uint32_t)0x00000040) /*!< STM32 Low and Medium density devices: Write protection of page 24 to 27 */
|
| | | #define FLASH_WRProt_Pages28to31 ((uint32_t)0x00000080) /*!< STM32 Low and Medium density devices: Write protection of page 28 to 31 */
|
| | |
|
| | | /* Values to be used with STM32 Medium-density devices */
|
| | | #define FLASH_WRProt_Pages32to35 ((uint32_t)0x00000100) /*!< STM32 Medium-density devices: Write protection of page 32 to 35 */
|
| | | #define FLASH_WRProt_Pages36to39 ((uint32_t)0x00000200) /*!< STM32 Medium-density devices: Write protection of page 36 to 39 */
|
| | | #define FLASH_WRProt_Pages40to43 ((uint32_t)0x00000400) /*!< STM32 Medium-density devices: Write protection of page 40 to 43 */
|
| | | #define FLASH_WRProt_Pages44to47 ((uint32_t)0x00000800) /*!< STM32 Medium-density devices: Write protection of page 44 to 47 */
|
| | | #define FLASH_WRProt_Pages48to51 ((uint32_t)0x00001000) /*!< STM32 Medium-density devices: Write protection of page 48 to 51 */
|
| | | #define FLASH_WRProt_Pages52to55 ((uint32_t)0x00002000) /*!< STM32 Medium-density devices: Write protection of page 52 to 55 */
|
| | | #define FLASH_WRProt_Pages56to59 ((uint32_t)0x00004000) /*!< STM32 Medium-density devices: Write protection of page 56 to 59 */
|
| | | #define FLASH_WRProt_Pages60to63 ((uint32_t)0x00008000) /*!< STM32 Medium-density devices: Write protection of page 60 to 63 */
|
| | | #define FLASH_WRProt_Pages64to67 ((uint32_t)0x00010000) /*!< STM32 Medium-density devices: Write protection of page 64 to 67 */
|
| | | #define FLASH_WRProt_Pages68to71 ((uint32_t)0x00020000) /*!< STM32 Medium-density devices: Write protection of page 68 to 71 */
|
| | | #define FLASH_WRProt_Pages72to75 ((uint32_t)0x00040000) /*!< STM32 Medium-density devices: Write protection of page 72 to 75 */
|
| | | #define FLASH_WRProt_Pages76to79 ((uint32_t)0x00080000) /*!< STM32 Medium-density devices: Write protection of page 76 to 79 */
|
| | | #define FLASH_WRProt_Pages80to83 ((uint32_t)0x00100000) /*!< STM32 Medium-density devices: Write protection of page 80 to 83 */
|
| | | #define FLASH_WRProt_Pages84to87 ((uint32_t)0x00200000) /*!< STM32 Medium-density devices: Write protection of page 84 to 87 */
|
| | | #define FLASH_WRProt_Pages88to91 ((uint32_t)0x00400000) /*!< STM32 Medium-density devices: Write protection of page 88 to 91 */
|
| | | #define FLASH_WRProt_Pages92to95 ((uint32_t)0x00800000) /*!< STM32 Medium-density devices: Write protection of page 92 to 95 */
|
| | | #define FLASH_WRProt_Pages96to99 ((uint32_t)0x01000000) /*!< STM32 Medium-density devices: Write protection of page 96 to 99 */
|
| | | #define FLASH_WRProt_Pages100to103 ((uint32_t)0x02000000) /*!< STM32 Medium-density devices: Write protection of page 100 to 103 */
|
| | | #define FLASH_WRProt_Pages104to107 ((uint32_t)0x04000000) /*!< STM32 Medium-density devices: Write protection of page 104 to 107 */
|
| | | #define FLASH_WRProt_Pages108to111 ((uint32_t)0x08000000) /*!< STM32 Medium-density devices: Write protection of page 108 to 111 */
|
| | | #define FLASH_WRProt_Pages112to115 ((uint32_t)0x10000000) /*!< STM32 Medium-density devices: Write protection of page 112 to 115 */
|
| | | #define FLASH_WRProt_Pages116to119 ((uint32_t)0x20000000) /*!< STM32 Medium-density devices: Write protection of page 115 to 119 */
|
| | | #define FLASH_WRProt_Pages120to123 ((uint32_t)0x40000000) /*!< STM32 Medium-density devices: Write protection of page 120 to 123 */
|
| | | #define FLASH_WRProt_Pages124to127 ((uint32_t)0x80000000) /*!< STM32 Medium-density devices: Write protection of page 124 to 127 */
|
| | |
|
| | | /* Values to be used with STM32 High-density and STM32F10X Connectivity line devices */
|
| | | #define FLASH_WRProt_Pages0to1 ((uint32_t)0x00000001) /*!< STM32 High-density, XL-density and Connectivity line devices:
|
| | | Write protection of page 0 to 1 */
|
| | | #define FLASH_WRProt_Pages2to3 ((uint32_t)0x00000002) /*!< STM32 High-density, XL-density and Connectivity line devices:
|
| | | Write protection of page 2 to 3 */
|
| | | #define FLASH_WRProt_Pages4to5 ((uint32_t)0x00000004) /*!< STM32 High-density, XL-density and Connectivity line devices:
|
| | | Write protection of page 4 to 5 */
|
| | | #define FLASH_WRProt_Pages6to7 ((uint32_t)0x00000008) /*!< STM32 High-density, XL-density and Connectivity line devices:
|
| | | Write protection of page 6 to 7 */
|
| | | #define FLASH_WRProt_Pages8to9 ((uint32_t)0x00000010) /*!< STM32 High-density, XL-density and Connectivity line devices:
|
| | | Write protection of page 8 to 9 */
|
| | | #define FLASH_WRProt_Pages10to11 ((uint32_t)0x00000020) /*!< STM32 High-density, XL-density and Connectivity line devices:
|
| | | Write protection of page 10 to 11 */
|
| | | #define FLASH_WRProt_Pages12to13 ((uint32_t)0x00000040) /*!< STM32 High-density, XL-density and Connectivity line devices:
|
| | | Write protection of page 12 to 13 */
|
| | | #define FLASH_WRProt_Pages14to15 ((uint32_t)0x00000080) /*!< STM32 High-density, XL-density and Connectivity line devices:
|
| | | Write protection of page 14 to 15 */
|
| | | #define FLASH_WRProt_Pages16to17 ((uint32_t)0x00000100) /*!< STM32 High-density, XL-density and Connectivity line devices:
|
| | | Write protection of page 16 to 17 */
|
| | | #define FLASH_WRProt_Pages18to19 ((uint32_t)0x00000200) /*!< STM32 High-density, XL-density and Connectivity line devices:
|
| | | Write protection of page 18 to 19 */
|
| | | #define FLASH_WRProt_Pages20to21 ((uint32_t)0x00000400) /*!< STM32 High-density, XL-density and Connectivity line devices:
|
| | | Write protection of page 20 to 21 */
|
| | | #define FLASH_WRProt_Pages22to23 ((uint32_t)0x00000800) /*!< STM32 High-density, XL-density and Connectivity line devices:
|
| | | Write protection of page 22 to 23 */
|
| | | #define FLASH_WRProt_Pages24to25 ((uint32_t)0x00001000) /*!< STM32 High-density, XL-density and Connectivity line devices:
|
| | | Write protection of page 24 to 25 */
|
| | | #define FLASH_WRProt_Pages26to27 ((uint32_t)0x00002000) /*!< STM32 High-density, XL-density and Connectivity line devices:
|
| | | Write protection of page 26 to 27 */
|
| | | #define FLASH_WRProt_Pages28to29 ((uint32_t)0x00004000) /*!< STM32 High-density, XL-density and Connectivity line devices:
|
| | | Write protection of page 28 to 29 */
|
| | | #define FLASH_WRProt_Pages30to31 ((uint32_t)0x00008000) /*!< STM32 High-density, XL-density and Connectivity line devices:
|
| | | Write protection of page 30 to 31 */
|
| | | #define FLASH_WRProt_Pages32to33 ((uint32_t)0x00010000) /*!< STM32 High-density, XL-density and Connectivity line devices:
|
| | | Write protection of page 32 to 33 */
|
| | | #define FLASH_WRProt_Pages34to35 ((uint32_t)0x00020000) /*!< STM32 High-density, XL-density and Connectivity line devices:
|
| | | Write protection of page 34 to 35 */
|
| | | #define FLASH_WRProt_Pages36to37 ((uint32_t)0x00040000) /*!< STM32 High-density, XL-density and Connectivity line devices:
|
| | | Write protection of page 36 to 37 */
|
| | | #define FLASH_WRProt_Pages38to39 ((uint32_t)0x00080000) /*!< STM32 High-density, XL-density and Connectivity line devices:
|
| | | Write protection of page 38 to 39 */
|
| | | #define FLASH_WRProt_Pages40to41 ((uint32_t)0x00100000) /*!< STM32 High-density, XL-density and Connectivity line devices:
|
| | | Write protection of page 40 to 41 */
|
| | | #define FLASH_WRProt_Pages42to43 ((uint32_t)0x00200000) /*!< STM32 High-density, XL-density and Connectivity line devices:
|
| | | Write protection of page 42 to 43 */
|
| | | #define FLASH_WRProt_Pages44to45 ((uint32_t)0x00400000) /*!< STM32 High-density, XL-density and Connectivity line devices:
|
| | | Write protection of page 44 to 45 */
|
| | | #define FLASH_WRProt_Pages46to47 ((uint32_t)0x00800000) /*!< STM32 High-density, XL-density and Connectivity line devices:
|
| | | Write protection of page 46 to 47 */
|
| | | #define FLASH_WRProt_Pages48to49 ((uint32_t)0x01000000) /*!< STM32 High-density, XL-density and Connectivity line devices:
|
| | | Write protection of page 48 to 49 */
|
| | | #define FLASH_WRProt_Pages50to51 ((uint32_t)0x02000000) /*!< STM32 High-density, XL-density and Connectivity line devices:
|
| | | Write protection of page 50 to 51 */
|
| | | #define FLASH_WRProt_Pages52to53 ((uint32_t)0x04000000) /*!< STM32 High-density, XL-density and Connectivity line devices:
|
| | | Write protection of page 52 to 53 */
|
| | | #define FLASH_WRProt_Pages54to55 ((uint32_t)0x08000000) /*!< STM32 High-density, XL-density and Connectivity line devices:
|
| | | Write protection of page 54 to 55 */
|
| | | #define FLASH_WRProt_Pages56to57 ((uint32_t)0x10000000) /*!< STM32 High-density, XL-density and Connectivity line devices:
|
| | | Write protection of page 56 to 57 */
|
| | | #define FLASH_WRProt_Pages58to59 ((uint32_t)0x20000000) /*!< STM32 High-density, XL-density and Connectivity line devices:
|
| | | Write protection of page 58 to 59 */
|
| | | #define FLASH_WRProt_Pages60to61 ((uint32_t)0x40000000) /*!< STM32 High-density, XL-density and Connectivity line devices:
|
| | | Write protection of page 60 to 61 */
|
| | | #define FLASH_WRProt_Pages62to127 ((uint32_t)0x80000000) /*!< STM32 Connectivity line devices: Write protection of page 62 to 127 */
|
| | | #define FLASH_WRProt_Pages62to255 ((uint32_t)0x80000000) /*!< STM32 Medium-density devices: Write protection of page 62 to 255 */
|
| | | #define FLASH_WRProt_Pages62to511 ((uint32_t)0x80000000) /*!< STM32 XL-density devices: Write protection of page 62 to 511 */
|
| | |
|
| | | #define FLASH_WRProt_AllPages ((uint32_t)0xFFFFFFFF) /*!< Write protection of all Pages */
|
| | |
|
| | | #define IS_FLASH_WRPROT_PAGE(PAGE) (((PAGE) != 0x00000000))
|
| | |
|
| | | #define IS_FLASH_ADDRESS(ADDRESS) (((ADDRESS) >= 0x08000000) && ((ADDRESS) < 0x080FFFFF))
|
| | |
|
| | | #define IS_OB_DATA_ADDRESS(ADDRESS) (((ADDRESS) == 0x1FFFF804) || ((ADDRESS) == 0x1FFFF806))
|
| | |
|
| | | /**
|
| | | * @}
|
| | | */
|
| | |
|
| | | /** @defgroup Option_Bytes_IWatchdog |
| | | * @{
|
| | | */
|
| | |
|
| | | #define OB_IWDG_SW ((uint16_t)0x0001) /*!< Software IWDG selected */
|
| | | #define OB_IWDG_HW ((uint16_t)0x0000) /*!< Hardware IWDG selected */
|
| | | #define IS_OB_IWDG_SOURCE(SOURCE) (((SOURCE) == OB_IWDG_SW) || ((SOURCE) == OB_IWDG_HW))
|
| | |
|
| | | /**
|
| | | * @}
|
| | | */
|
| | |
|
| | | /** @defgroup Option_Bytes_nRST_STOP |
| | | * @{
|
| | | */
|
| | |
|
| | | #define OB_STOP_NoRST ((uint16_t)0x0002) /*!< No reset generated when entering in STOP */
|
| | | #define OB_STOP_RST ((uint16_t)0x0000) /*!< Reset generated when entering in STOP */
|
| | | #define IS_OB_STOP_SOURCE(SOURCE) (((SOURCE) == OB_STOP_NoRST) || ((SOURCE) == OB_STOP_RST))
|
| | |
|
| | | /**
|
| | | * @}
|
| | | */
|
| | |
|
| | | /** @defgroup Option_Bytes_nRST_STDBY |
| | | * @{
|
| | | */
|
| | |
|
| | | #define OB_STDBY_NoRST ((uint16_t)0x0004) /*!< No reset generated when entering in STANDBY */
|
| | | #define OB_STDBY_RST ((uint16_t)0x0000) /*!< Reset generated when entering in STANDBY */
|
| | | #define IS_OB_STDBY_SOURCE(SOURCE) (((SOURCE) == OB_STDBY_NoRST) || ((SOURCE) == OB_STDBY_RST))
|
| | |
|
| | | #ifdef STM32F10X_XL
|
| | | /**
|
| | | * @}
|
| | | */
|
| | | /** @defgroup FLASH_Boot
|
| | | * @{
|
| | | */
|
| | | #define FLASH_BOOT_Bank1 ((uint16_t)0x0000) /*!< At startup, if boot pins are set in boot from user Flash position
|
| | | and this parameter is selected the device will boot from Bank1(Default) */
|
| | | #define FLASH_BOOT_Bank2 ((uint16_t)0x0001) /*!< At startup, if boot pins are set in boot from user Flash position
|
| | | and this parameter is selected the device will boot from Bank 2 or Bank 1,
|
| | | depending on the activation of the bank */
|
| | | #define IS_FLASH_BOOT(BOOT) (((BOOT) == FLASH_BOOT_Bank1) || ((BOOT) == FLASH_BOOT_Bank2))
|
| | | #endif
|
| | | /**
|
| | | * @}
|
| | | */
|
| | | /** @defgroup FLASH_Interrupts |
| | | * @{
|
| | | */
|
| | | #ifdef STM32F10X_XL
|
| | | #define FLASH_IT_BANK2_ERROR ((uint32_t)0x80000400) /*!< FPEC BANK2 error interrupt source */
|
| | | #define FLASH_IT_BANK2_EOP ((uint32_t)0x80001000) /*!< End of FLASH BANK2 Operation Interrupt source */
|
| | |
|
| | | #define FLASH_IT_BANK1_ERROR FLASH_IT_ERROR /*!< FPEC BANK1 error interrupt source */
|
| | | #define FLASH_IT_BANK1_EOP FLASH_IT_EOP /*!< End of FLASH BANK1 Operation Interrupt source */
|
| | |
|
| | | #define FLASH_IT_ERROR ((uint32_t)0x00000400) /*!< FPEC BANK1 error interrupt source */
|
| | | #define FLASH_IT_EOP ((uint32_t)0x00001000) /*!< End of FLASH BANK1 Operation Interrupt source */
|
| | | #define IS_FLASH_IT(IT) ((((IT) & (uint32_t)0x7FFFEBFF) == 0x00000000) && (((IT) != 0x00000000)))
|
| | | #else
|
| | | #define FLASH_IT_ERROR ((uint32_t)0x00000400) /*!< FPEC error interrupt source */
|
| | | #define FLASH_IT_EOP ((uint32_t)0x00001000) /*!< End of FLASH Operation Interrupt source */
|
| | | #define FLASH_IT_BANK1_ERROR FLASH_IT_ERROR /*!< FPEC BANK1 error interrupt source */
|
| | | #define FLASH_IT_BANK1_EOP FLASH_IT_EOP /*!< End of FLASH BANK1 Operation Interrupt source */
|
| | |
|
| | | #define IS_FLASH_IT(IT) ((((IT) & (uint32_t)0xFFFFEBFF) == 0x00000000) && (((IT) != 0x00000000)))
|
| | | #endif
|
| | |
|
| | | /**
|
| | | * @}
|
| | | */
|
| | |
|
| | | /** @defgroup FLASH_Flags |
| | | * @{
|
| | | */
|
| | | #ifdef STM32F10X_XL
|
| | | #define FLASH_FLAG_BANK2_BSY ((uint32_t)0x80000001) /*!< FLASH BANK2 Busy flag */
|
| | | #define FLASH_FLAG_BANK2_EOP ((uint32_t)0x80000020) /*!< FLASH BANK2 End of Operation flag */
|
| | | #define FLASH_FLAG_BANK2_PGERR ((uint32_t)0x80000004) /*!< FLASH BANK2 Program error flag */
|
| | | #define FLASH_FLAG_BANK2_WRPRTERR ((uint32_t)0x80000010) /*!< FLASH BANK2 Write protected error flag */
|
| | |
|
| | | #define FLASH_FLAG_BANK1_BSY FLASH_FLAG_BSY /*!< FLASH BANK1 Busy flag*/
|
| | | #define FLASH_FLAG_BANK1_EOP FLASH_FLAG_EOP /*!< FLASH BANK1 End of Operation flag */
|
| | | #define FLASH_FLAG_BANK1_PGERR FLASH_FLAG_PGERR /*!< FLASH BANK1 Program error flag */
|
| | | #define FLASH_FLAG_BANK1_WRPRTERR FLASH_FLAG_WRPRTERR /*!< FLASH BANK1 Write protected error flag */
|
| | |
|
| | | #define FLASH_FLAG_BSY ((uint32_t)0x00000001) /*!< FLASH Busy flag */
|
| | | #define FLASH_FLAG_EOP ((uint32_t)0x00000020) /*!< FLASH End of Operation flag */
|
| | | #define FLASH_FLAG_PGERR ((uint32_t)0x00000004) /*!< FLASH Program error flag */
|
| | | #define FLASH_FLAG_WRPRTERR ((uint32_t)0x00000010) /*!< FLASH Write protected error flag */
|
| | | #define FLASH_FLAG_OPTERR ((uint32_t)0x00000001) /*!< FLASH Option Byte error flag */
|
| | | |
| | | #define IS_FLASH_CLEAR_FLAG(FLAG) ((((FLAG) & (uint32_t)0x7FFFFFCA) == 0x00000000) && ((FLAG) != 0x00000000))
|
| | | #define IS_FLASH_GET_FLAG(FLAG) (((FLAG) == FLASH_FLAG_BSY) || ((FLAG) == FLASH_FLAG_EOP) || \
|
| | | ((FLAG) == FLASH_FLAG_PGERR) || ((FLAG) == FLASH_FLAG_WRPRTERR) || \
|
| | | ((FLAG) == FLASH_FLAG_OPTERR)|| \
|
| | | ((FLAG) == FLASH_FLAG_BANK1_BSY) || ((FLAG) == FLASH_FLAG_BANK1_EOP) || \
|
| | | ((FLAG) == FLASH_FLAG_BANK1_PGERR) || ((FLAG) == FLASH_FLAG_BANK1_WRPRTERR) || \
|
| | | ((FLAG) == FLASH_FLAG_BANK2_BSY) || ((FLAG) == FLASH_FLAG_BANK2_EOP) || \
|
| | | ((FLAG) == FLASH_FLAG_BANK2_PGERR) || ((FLAG) == FLASH_FLAG_BANK2_WRPRTERR))
|
| | | #else
|
| | | #define FLASH_FLAG_BSY ((uint32_t)0x00000001) /*!< FLASH Busy flag */
|
| | | #define FLASH_FLAG_EOP ((uint32_t)0x00000020) /*!< FLASH End of Operation flag */
|
| | | #define FLASH_FLAG_PGERR ((uint32_t)0x00000004) /*!< FLASH Program error flag */
|
| | | #define FLASH_FLAG_WRPRTERR ((uint32_t)0x00000010) /*!< FLASH Write protected error flag */
|
| | | #define FLASH_FLAG_OPTERR ((uint32_t)0x00000001) /*!< FLASH Option Byte error flag */
|
| | |
|
| | | #define FLASH_FLAG_BANK1_BSY FLASH_FLAG_BSY /*!< FLASH BANK1 Busy flag*/
|
| | | #define FLASH_FLAG_BANK1_EOP FLASH_FLAG_EOP /*!< FLASH BANK1 End of Operation flag */
|
| | | #define FLASH_FLAG_BANK1_PGERR FLASH_FLAG_PGERR /*!< FLASH BANK1 Program error flag */
|
| | | #define FLASH_FLAG_BANK1_WRPRTERR FLASH_FLAG_WRPRTERR /*!< FLASH BANK1 Write protected error flag */
|
| | | |
| | | #define IS_FLASH_CLEAR_FLAG(FLAG) ((((FLAG) & (uint32_t)0xFFFFFFCA) == 0x00000000) && ((FLAG) != 0x00000000))
|
| | | #define IS_FLASH_GET_FLAG(FLAG) (((FLAG) == FLASH_FLAG_BSY) || ((FLAG) == FLASH_FLAG_EOP) || \
|
| | | ((FLAG) == FLASH_FLAG_PGERR) || ((FLAG) == FLASH_FLAG_WRPRTERR) || \
|
| | | ((FLAG) == FLASH_FLAG_BANK1_BSY) || ((FLAG) == FLASH_FLAG_BANK1_EOP) || \
|
| | | ((FLAG) == FLASH_FLAG_BANK1_PGERR) || ((FLAG) == FLASH_FLAG_BANK1_WRPRTERR) || \
|
| | | ((FLAG) == FLASH_FLAG_OPTERR))
|
| | | #endif
|
| | |
|
| | | /**
|
| | | * @}
|
| | | */
|
| | |
|
| | | /**
|
| | | * @}
|
| | | */
|
| | |
|
| | | /** @defgroup FLASH_Exported_Macros
|
| | | * @{
|
| | | */
|
| | |
|
| | | /**
|
| | | * @}
|
| | | */
|
| | |
|
| | | /** @defgroup FLASH_Exported_Functions
|
| | | * @{
|
| | | */
|
| | |
|
| | | /*------------ Functions used for all STM32F10x devices -----*/
|
| | | void FLASH_SetLatency(uint32_t FLASH_Latency);
|
| | | void FLASH_HalfCycleAccessCmd(uint32_t FLASH_HalfCycleAccess);
|
| | | void FLASH_PrefetchBufferCmd(uint32_t FLASH_PrefetchBuffer);
|
| | | void FLASH_Unlock(void);
|
| | | void FLASH_Lock(void);
|
| | | FLASH_Status FLASH_ErasePage(uint32_t Page_Address);
|
| | | FLASH_Status FLASH_EraseAllPages(void);
|
| | | FLASH_Status FLASH_EraseOptionBytes(void);
|
| | | FLASH_Status FLASH_ProgramWord(uint32_t Address, uint32_t Data);
|
| | | FLASH_Status FLASH_ProgramHalfWord(uint32_t Address, uint16_t Data);
|
| | | FLASH_Status FLASH_ProgramOptionByteData(uint32_t Address, uint8_t Data);
|
| | | FLASH_Status FLASH_EnableWriteProtection(uint32_t FLASH_Pages);
|
| | | FLASH_Status FLASH_ReadOutProtection(FunctionalState NewState);
|
| | | FLASH_Status FLASH_UserOptionByteConfig(uint16_t OB_IWDG, uint16_t OB_STOP, uint16_t OB_STDBY);
|
| | | uint32_t FLASH_GetUserOptionByte(void);
|
| | | uint32_t FLASH_GetWriteProtectionOptionByte(void);
|
| | | FlagStatus FLASH_GetReadOutProtectionStatus(void);
|
| | | FlagStatus FLASH_GetPrefetchBufferStatus(void);
|
| | | void FLASH_ITConfig(uint32_t FLASH_IT, FunctionalState NewState);
|
| | | FlagStatus FLASH_GetFlagStatus(uint32_t FLASH_FLAG);
|
| | | void FLASH_ClearFlag(uint32_t FLASH_FLAG);
|
| | | FLASH_Status FLASH_GetStatus(void);
|
| | | FLASH_Status FLASH_WaitForLastOperation(uint32_t Timeout);
|
| | |
|
| | | /*------------ New function used for all STM32F10x devices -----*/
|
| | | void FLASH_UnlockBank1(void);
|
| | | void FLASH_LockBank1(void);
|
| | | FLASH_Status FLASH_EraseAllBank1Pages(void);
|
| | | FLASH_Status FLASH_GetBank1Status(void);
|
| | | FLASH_Status FLASH_WaitForLastBank1Operation(uint32_t Timeout);
|
| | |
|
| | | #ifdef STM32F10X_XL
|
| | | /*---- New Functions used only with STM32F10x_XL density devices -----*/
|
| | | void FLASH_UnlockBank2(void);
|
| | | void FLASH_LockBank2(void);
|
| | | FLASH_Status FLASH_EraseAllBank2Pages(void);
|
| | | FLASH_Status FLASH_GetBank2Status(void);
|
| | | FLASH_Status FLASH_WaitForLastBank2Operation(uint32_t Timeout);
|
| | | FLASH_Status FLASH_BootConfig(uint16_t FLASH_BOOT);
|
| | | #endif
|
| | |
|
| | | #ifdef __cplusplus
|
| | | }
|
| | | #endif
|
| | |
|
| | | #endif /* __STM32F10x_FLASH_H */
|
| | | /**
|
| | | * @}
|
| | | */
|
| | |
|
| | | /**
|
| | | * @}
|
| | | */
|
| | |
|
| | | /**
|
| | | * @}
|
| | | */
|
| | |
|
| | | /******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/
|
New file |
| | |
| | | /**
|
| | | ******************************************************************************
|
| | | * @file stm32f10x_fsmc.h
|
| | | * @author MCD Application Team
|
| | | * @version V3.5.0
|
| | | * @date 11-March-2011
|
| | | * @brief This file contains all the functions prototypes for the FSMC firmware |
| | | * library.
|
| | | ******************************************************************************
|
| | | * @attention
|
| | | *
|
| | | * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
|
| | | * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE
|
| | | * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY
|
| | | * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING
|
| | | * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE
|
| | | * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
|
| | | *
|
| | | * <h2><center>© COPYRIGHT 2011 STMicroelectronics</center></h2>
|
| | | ******************************************************************************
|
| | | */
|
| | |
|
| | | /* Define to prevent recursive inclusion -------------------------------------*/
|
| | | #ifndef __STM32F10x_FSMC_H
|
| | | #define __STM32F10x_FSMC_H
|
| | |
|
| | | #ifdef __cplusplus
|
| | | extern "C" {
|
| | | #endif
|
| | |
|
| | | /* Includes ------------------------------------------------------------------*/
|
| | | #include "stm32f10x.h"
|
| | |
|
| | | /** @addtogroup STM32F10x_StdPeriph_Driver
|
| | | * @{
|
| | | */
|
| | |
|
| | | /** @addtogroup FSMC
|
| | | * @{
|
| | | */
|
| | |
|
| | | /** @defgroup FSMC_Exported_Types
|
| | | * @{
|
| | | */
|
| | |
|
| | | /** |
| | | * @brief Timing parameters For NOR/SRAM Banks |
| | | */
|
| | |
|
| | | typedef struct
|
| | | {
|
| | | uint32_t FSMC_AddressSetupTime; /*!< Defines the number of HCLK cycles to configure
|
| | | the duration of the address setup time. |
| | | This parameter can be a value between 0 and 0xF.
|
| | | @note: It is not used with synchronous NOR Flash memories. */
|
| | |
|
| | | uint32_t FSMC_AddressHoldTime; /*!< Defines the number of HCLK cycles to configure
|
| | | the duration of the address hold time.
|
| | | This parameter can be a value between 0 and 0xF. |
| | | @note: It is not used with synchronous NOR Flash memories.*/
|
| | |
|
| | | uint32_t FSMC_DataSetupTime; /*!< Defines the number of HCLK cycles to configure
|
| | | the duration of the data setup time.
|
| | | This parameter can be a value between 0 and 0xFF.
|
| | | @note: It is used for SRAMs, ROMs and asynchronous multiplexed NOR Flash memories. */
|
| | |
|
| | | uint32_t FSMC_BusTurnAroundDuration; /*!< Defines the number of HCLK cycles to configure
|
| | | the duration of the bus turnaround.
|
| | | This parameter can be a value between 0 and 0xF.
|
| | | @note: It is only used for multiplexed NOR Flash memories. */
|
| | |
|
| | | uint32_t FSMC_CLKDivision; /*!< Defines the period of CLK clock output signal, expressed in number of HCLK cycles.
|
| | | This parameter can be a value between 1 and 0xF.
|
| | | @note: This parameter is not used for asynchronous NOR Flash, SRAM or ROM accesses. */
|
| | |
|
| | | uint32_t FSMC_DataLatency; /*!< Defines the number of memory clock cycles to issue
|
| | | to the memory before getting the first data.
|
| | | The value of this parameter depends on the memory type as shown below:
|
| | | - It must be set to 0 in case of a CRAM
|
| | | - It is don't care in asynchronous NOR, SRAM or ROM accesses
|
| | | - It may assume a value between 0 and 0xF in NOR Flash memories
|
| | | with synchronous burst mode enable */
|
| | |
|
| | | uint32_t FSMC_AccessMode; /*!< Specifies the asynchronous access mode. |
| | | This parameter can be a value of @ref FSMC_Access_Mode */
|
| | | }FSMC_NORSRAMTimingInitTypeDef;
|
| | |
|
| | | /** |
| | | * @brief FSMC NOR/SRAM Init structure definition
|
| | | */
|
| | |
|
| | | typedef struct
|
| | | {
|
| | | uint32_t FSMC_Bank; /*!< Specifies the NOR/SRAM memory bank that will be used.
|
| | | This parameter can be a value of @ref FSMC_NORSRAM_Bank */
|
| | |
|
| | | uint32_t FSMC_DataAddressMux; /*!< Specifies whether the address and data values are
|
| | | multiplexed on the databus or not. |
| | | This parameter can be a value of @ref FSMC_Data_Address_Bus_Multiplexing */
|
| | |
|
| | | uint32_t FSMC_MemoryType; /*!< Specifies the type of external memory attached to
|
| | | the corresponding memory bank.
|
| | | This parameter can be a value of @ref FSMC_Memory_Type */
|
| | |
|
| | | uint32_t FSMC_MemoryDataWidth; /*!< Specifies the external memory device width.
|
| | | This parameter can be a value of @ref FSMC_Data_Width */
|
| | |
|
| | | uint32_t FSMC_BurstAccessMode; /*!< Enables or disables the burst access mode for Flash memory,
|
| | | valid only with synchronous burst Flash memories.
|
| | | This parameter can be a value of @ref FSMC_Burst_Access_Mode */
|
| | | |
| | | uint32_t FSMC_AsynchronousWait; /*!< Enables or disables wait signal during asynchronous transfers,
|
| | | valid only with asynchronous Flash memories.
|
| | | This parameter can be a value of @ref FSMC_AsynchronousWait */
|
| | |
|
| | | uint32_t FSMC_WaitSignalPolarity; /*!< Specifies the wait signal polarity, valid only when accessing
|
| | | the Flash memory in burst mode.
|
| | | This parameter can be a value of @ref FSMC_Wait_Signal_Polarity */
|
| | |
|
| | | uint32_t FSMC_WrapMode; /*!< Enables or disables the Wrapped burst access mode for Flash
|
| | | memory, valid only when accessing Flash memories in burst mode.
|
| | | This parameter can be a value of @ref FSMC_Wrap_Mode */
|
| | |
|
| | | uint32_t FSMC_WaitSignalActive; /*!< Specifies if the wait signal is asserted by the memory one
|
| | | clock cycle before the wait state or during the wait state,
|
| | | valid only when accessing memories in burst mode. |
| | | This parameter can be a value of @ref FSMC_Wait_Timing */
|
| | |
|
| | | uint32_t FSMC_WriteOperation; /*!< Enables or disables the write operation in the selected bank by the FSMC. |
| | | This parameter can be a value of @ref FSMC_Write_Operation */
|
| | |
|
| | | uint32_t FSMC_WaitSignal; /*!< Enables or disables the wait-state insertion via wait
|
| | | signal, valid for Flash memory access in burst mode. |
| | | This parameter can be a value of @ref FSMC_Wait_Signal */
|
| | |
|
| | | uint32_t FSMC_ExtendedMode; /*!< Enables or disables the extended mode.
|
| | | This parameter can be a value of @ref FSMC_Extended_Mode */
|
| | |
|
| | | uint32_t FSMC_WriteBurst; /*!< Enables or disables the write burst operation.
|
| | | This parameter can be a value of @ref FSMC_Write_Burst */ |
| | |
|
| | | FSMC_NORSRAMTimingInitTypeDef* FSMC_ReadWriteTimingStruct; /*!< Timing Parameters for write and read access if the ExtendedMode is not used*/ |
| | |
|
| | | FSMC_NORSRAMTimingInitTypeDef* FSMC_WriteTimingStruct; /*!< Timing Parameters for write access if the ExtendedMode is used*/ |
| | | }FSMC_NORSRAMInitTypeDef;
|
| | |
|
| | | /** |
| | | * @brief Timing parameters For FSMC NAND and PCCARD Banks
|
| | | */
|
| | |
|
| | | typedef struct
|
| | | {
|
| | | uint32_t FSMC_SetupTime; /*!< Defines the number of HCLK cycles to setup address before
|
| | | the command assertion for NAND-Flash read or write access
|
| | | to common/Attribute or I/O memory space (depending on
|
| | | the memory space timing to be configured).
|
| | | This parameter can be a value between 0 and 0xFF.*/
|
| | |
|
| | | uint32_t FSMC_WaitSetupTime; /*!< Defines the minimum number of HCLK cycles to assert the
|
| | | command for NAND-Flash read or write access to
|
| | | common/Attribute or I/O memory space (depending on the
|
| | | memory space timing to be configured). |
| | | This parameter can be a number between 0x00 and 0xFF */
|
| | |
|
| | | uint32_t FSMC_HoldSetupTime; /*!< Defines the number of HCLK clock cycles to hold address
|
| | | (and data for write access) after the command deassertion
|
| | | for NAND-Flash read or write access to common/Attribute
|
| | | or I/O memory space (depending on the memory space timing
|
| | | to be configured).
|
| | | This parameter can be a number between 0x00 and 0xFF */
|
| | |
|
| | | uint32_t FSMC_HiZSetupTime; /*!< Defines the number of HCLK clock cycles during which the
|
| | | databus is kept in HiZ after the start of a NAND-Flash
|
| | | write access to common/Attribute or I/O memory space (depending
|
| | | on the memory space timing to be configured).
|
| | | This parameter can be a number between 0x00 and 0xFF */
|
| | | }FSMC_NAND_PCCARDTimingInitTypeDef;
|
| | |
|
| | | /** |
| | | * @brief FSMC NAND Init structure definition
|
| | | */
|
| | |
|
| | | typedef struct
|
| | | {
|
| | | uint32_t FSMC_Bank; /*!< Specifies the NAND memory bank that will be used.
|
| | | This parameter can be a value of @ref FSMC_NAND_Bank */
|
| | |
|
| | | uint32_t FSMC_Waitfeature; /*!< Enables or disables the Wait feature for the NAND Memory Bank.
|
| | | This parameter can be any value of @ref FSMC_Wait_feature */
|
| | |
|
| | | uint32_t FSMC_MemoryDataWidth; /*!< Specifies the external memory device width.
|
| | | This parameter can be any value of @ref FSMC_Data_Width */
|
| | |
|
| | | uint32_t FSMC_ECC; /*!< Enables or disables the ECC computation.
|
| | | This parameter can be any value of @ref FSMC_ECC */
|
| | |
|
| | | uint32_t FSMC_ECCPageSize; /*!< Defines the page size for the extended ECC.
|
| | | This parameter can be any value of @ref FSMC_ECC_Page_Size */
|
| | |
|
| | | uint32_t FSMC_TCLRSetupTime; /*!< Defines the number of HCLK cycles to configure the
|
| | | delay between CLE low and RE low.
|
| | | This parameter can be a value between 0 and 0xFF. */
|
| | |
|
| | | uint32_t FSMC_TARSetupTime; /*!< Defines the number of HCLK cycles to configure the
|
| | | delay between ALE low and RE low.
|
| | | This parameter can be a number between 0x0 and 0xFF */ |
| | |
|
| | | FSMC_NAND_PCCARDTimingInitTypeDef* FSMC_CommonSpaceTimingStruct; /*!< FSMC Common Space Timing */ |
| | |
|
| | | FSMC_NAND_PCCARDTimingInitTypeDef* FSMC_AttributeSpaceTimingStruct; /*!< FSMC Attribute Space Timing */
|
| | | }FSMC_NANDInitTypeDef;
|
| | |
|
| | | /** |
| | | * @brief FSMC PCCARD Init structure definition
|
| | | */
|
| | |
|
| | | typedef struct
|
| | | {
|
| | | uint32_t FSMC_Waitfeature; /*!< Enables or disables the Wait feature for the Memory Bank.
|
| | | This parameter can be any value of @ref FSMC_Wait_feature */
|
| | |
|
| | | uint32_t FSMC_TCLRSetupTime; /*!< Defines the number of HCLK cycles to configure the
|
| | | delay between CLE low and RE low.
|
| | | This parameter can be a value between 0 and 0xFF. */
|
| | |
|
| | | uint32_t FSMC_TARSetupTime; /*!< Defines the number of HCLK cycles to configure the
|
| | | delay between ALE low and RE low.
|
| | | This parameter can be a number between 0x0 and 0xFF */ |
| | |
|
| | | |
| | | FSMC_NAND_PCCARDTimingInitTypeDef* FSMC_CommonSpaceTimingStruct; /*!< FSMC Common Space Timing */
|
| | |
|
| | | FSMC_NAND_PCCARDTimingInitTypeDef* FSMC_AttributeSpaceTimingStruct; /*!< FSMC Attribute Space Timing */ |
| | | |
| | | FSMC_NAND_PCCARDTimingInitTypeDef* FSMC_IOSpaceTimingStruct; /*!< FSMC IO Space Timing */ |
| | | }FSMC_PCCARDInitTypeDef;
|
| | |
|
| | | /**
|
| | | * @}
|
| | | */
|
| | |
|
| | | /** @defgroup FSMC_Exported_Constants
|
| | | * @{
|
| | | */
|
| | |
|
| | | /** @defgroup FSMC_NORSRAM_Bank |
| | | * @{
|
| | | */
|
| | | #define FSMC_Bank1_NORSRAM1 ((uint32_t)0x00000000)
|
| | | #define FSMC_Bank1_NORSRAM2 ((uint32_t)0x00000002)
|
| | | #define FSMC_Bank1_NORSRAM3 ((uint32_t)0x00000004)
|
| | | #define FSMC_Bank1_NORSRAM4 ((uint32_t)0x00000006)
|
| | | /**
|
| | | * @}
|
| | | */
|
| | |
|
| | | /** @defgroup FSMC_NAND_Bank |
| | | * @{
|
| | | */ |
| | | #define FSMC_Bank2_NAND ((uint32_t)0x00000010)
|
| | | #define FSMC_Bank3_NAND ((uint32_t)0x00000100)
|
| | | /**
|
| | | * @}
|
| | | */
|
| | |
|
| | | /** @defgroup FSMC_PCCARD_Bank |
| | | * @{
|
| | | */ |
| | | #define FSMC_Bank4_PCCARD ((uint32_t)0x00001000)
|
| | | /**
|
| | | * @}
|
| | | */
|
| | |
|
| | | #define IS_FSMC_NORSRAM_BANK(BANK) (((BANK) == FSMC_Bank1_NORSRAM1) || \
|
| | | ((BANK) == FSMC_Bank1_NORSRAM2) || \
|
| | | ((BANK) == FSMC_Bank1_NORSRAM3) || \
|
| | | ((BANK) == FSMC_Bank1_NORSRAM4))
|
| | |
|
| | | #define IS_FSMC_NAND_BANK(BANK) (((BANK) == FSMC_Bank2_NAND) || \
|
| | | ((BANK) == FSMC_Bank3_NAND))
|
| | |
|
| | | #define IS_FSMC_GETFLAG_BANK(BANK) (((BANK) == FSMC_Bank2_NAND) || \
|
| | | ((BANK) == FSMC_Bank3_NAND) || \
|
| | | ((BANK) == FSMC_Bank4_PCCARD))
|
| | |
|
| | | #define IS_FSMC_IT_BANK(BANK) (((BANK) == FSMC_Bank2_NAND) || \
|
| | | ((BANK) == FSMC_Bank3_NAND) || \
|
| | | ((BANK) == FSMC_Bank4_PCCARD))
|
| | |
|
| | | /** @defgroup NOR_SRAM_Controller |
| | | * @{
|
| | | */
|
| | |
|
| | | /** @defgroup FSMC_Data_Address_Bus_Multiplexing |
| | | * @{
|
| | | */
|
| | |
|
| | | #define FSMC_DataAddressMux_Disable ((uint32_t)0x00000000)
|
| | | #define FSMC_DataAddressMux_Enable ((uint32_t)0x00000002)
|
| | | #define IS_FSMC_MUX(MUX) (((MUX) == FSMC_DataAddressMux_Disable) || \
|
| | | ((MUX) == FSMC_DataAddressMux_Enable))
|
| | |
|
| | | /**
|
| | | * @}
|
| | | */
|
| | |
|
| | | /** @defgroup FSMC_Memory_Type |
| | | * @{
|
| | | */
|
| | |
|
| | | #define FSMC_MemoryType_SRAM ((uint32_t)0x00000000)
|
| | | #define FSMC_MemoryType_PSRAM ((uint32_t)0x00000004)
|
| | | #define FSMC_MemoryType_NOR ((uint32_t)0x00000008)
|
| | | #define IS_FSMC_MEMORY(MEMORY) (((MEMORY) == FSMC_MemoryType_SRAM) || \
|
| | | ((MEMORY) == FSMC_MemoryType_PSRAM)|| \
|
| | | ((MEMORY) == FSMC_MemoryType_NOR))
|
| | |
|
| | | /**
|
| | | * @}
|
| | | */
|
| | |
|
| | | /** @defgroup FSMC_Data_Width |
| | | * @{
|
| | | */
|
| | |
|
| | | #define FSMC_MemoryDataWidth_8b ((uint32_t)0x00000000)
|
| | | #define FSMC_MemoryDataWidth_16b ((uint32_t)0x00000010)
|
| | | #define IS_FSMC_MEMORY_WIDTH(WIDTH) (((WIDTH) == FSMC_MemoryDataWidth_8b) || \
|
| | | ((WIDTH) == FSMC_MemoryDataWidth_16b))
|
| | |
|
| | | /**
|
| | | * @}
|
| | | */
|
| | |
|
| | | /** @defgroup FSMC_Burst_Access_Mode |
| | | * @{
|
| | | */
|
| | |
|
| | | #define FSMC_BurstAccessMode_Disable ((uint32_t)0x00000000) |
| | | #define FSMC_BurstAccessMode_Enable ((uint32_t)0x00000100)
|
| | | #define IS_FSMC_BURSTMODE(STATE) (((STATE) == FSMC_BurstAccessMode_Disable) || \
|
| | | ((STATE) == FSMC_BurstAccessMode_Enable))
|
| | | /**
|
| | | * @}
|
| | | */
|
| | | |
| | | /** @defgroup FSMC_AsynchronousWait |
| | | * @{
|
| | | */
|
| | | #define FSMC_AsynchronousWait_Disable ((uint32_t)0x00000000)
|
| | | #define FSMC_AsynchronousWait_Enable ((uint32_t)0x00008000)
|
| | | #define IS_FSMC_ASYNWAIT(STATE) (((STATE) == FSMC_AsynchronousWait_Disable) || \
|
| | | ((STATE) == FSMC_AsynchronousWait_Enable))
|
| | |
|
| | | /**
|
| | | * @}
|
| | | */
|
| | | |
| | | /** @defgroup FSMC_Wait_Signal_Polarity |
| | | * @{
|
| | | */
|
| | |
|
| | | #define FSMC_WaitSignalPolarity_Low ((uint32_t)0x00000000)
|
| | | #define FSMC_WaitSignalPolarity_High ((uint32_t)0x00000200)
|
| | | #define IS_FSMC_WAIT_POLARITY(POLARITY) (((POLARITY) == FSMC_WaitSignalPolarity_Low) || \
|
| | | ((POLARITY) == FSMC_WaitSignalPolarity_High)) |
| | |
|
| | | /**
|
| | | * @}
|
| | | */
|
| | |
|
| | | /** @defgroup FSMC_Wrap_Mode |
| | | * @{
|
| | | */
|
| | |
|
| | | #define FSMC_WrapMode_Disable ((uint32_t)0x00000000)
|
| | | #define FSMC_WrapMode_Enable ((uint32_t)0x00000400) |
| | | #define IS_FSMC_WRAP_MODE(MODE) (((MODE) == FSMC_WrapMode_Disable) || \
|
| | | ((MODE) == FSMC_WrapMode_Enable))
|
| | |
|
| | | /**
|
| | | * @}
|
| | | */
|
| | |
|
| | | /** @defgroup FSMC_Wait_Timing |
| | | * @{
|
| | | */
|
| | |
|
| | | #define FSMC_WaitSignalActive_BeforeWaitState ((uint32_t)0x00000000)
|
| | | #define FSMC_WaitSignalActive_DuringWaitState ((uint32_t)0x00000800) |
| | | #define IS_FSMC_WAIT_SIGNAL_ACTIVE(ACTIVE) (((ACTIVE) == FSMC_WaitSignalActive_BeforeWaitState) || \
|
| | | ((ACTIVE) == FSMC_WaitSignalActive_DuringWaitState))
|
| | |
|
| | | /**
|
| | | * @}
|
| | | */
|
| | |
|
| | | /** @defgroup FSMC_Write_Operation |
| | | * @{
|
| | | */
|
| | |
|
| | | #define FSMC_WriteOperation_Disable ((uint32_t)0x00000000)
|
| | | #define FSMC_WriteOperation_Enable ((uint32_t)0x00001000)
|
| | | #define IS_FSMC_WRITE_OPERATION(OPERATION) (((OPERATION) == FSMC_WriteOperation_Disable) || \
|
| | | ((OPERATION) == FSMC_WriteOperation_Enable))
|
| | | |
| | | /**
|
| | | * @}
|
| | | */
|
| | |
|
| | | /** @defgroup FSMC_Wait_Signal |
| | | * @{
|
| | | */
|
| | |
|
| | | #define FSMC_WaitSignal_Disable ((uint32_t)0x00000000)
|
| | | #define FSMC_WaitSignal_Enable ((uint32_t)0x00002000) |
| | | #define IS_FSMC_WAITE_SIGNAL(SIGNAL) (((SIGNAL) == FSMC_WaitSignal_Disable) || \
|
| | | ((SIGNAL) == FSMC_WaitSignal_Enable))
|
| | | /**
|
| | | * @}
|
| | | */
|
| | |
|
| | | /** @defgroup FSMC_Extended_Mode |
| | | * @{
|
| | | */
|
| | |
|
| | | #define FSMC_ExtendedMode_Disable ((uint32_t)0x00000000)
|
| | | #define FSMC_ExtendedMode_Enable ((uint32_t)0x00004000)
|
| | |
|
| | | #define IS_FSMC_EXTENDED_MODE(MODE) (((MODE) == FSMC_ExtendedMode_Disable) || \
|
| | | ((MODE) == FSMC_ExtendedMode_Enable)) |
| | |
|
| | | /**
|
| | | * @}
|
| | | */
|
| | |
|
| | | /** @defgroup FSMC_Write_Burst |
| | | * @{
|
| | | */
|
| | |
|
| | | #define FSMC_WriteBurst_Disable ((uint32_t)0x00000000)
|
| | | #define FSMC_WriteBurst_Enable ((uint32_t)0x00080000) |
| | | #define IS_FSMC_WRITE_BURST(BURST) (((BURST) == FSMC_WriteBurst_Disable) || \
|
| | | ((BURST) == FSMC_WriteBurst_Enable))
|
| | | /**
|
| | | * @}
|
| | | */
|
| | |
|
| | | /** @defgroup FSMC_Address_Setup_Time |
| | | * @{
|
| | | */
|
| | |
|
| | | #define IS_FSMC_ADDRESS_SETUP_TIME(TIME) ((TIME) <= 0xF)
|
| | |
|
| | | /**
|
| | | * @}
|
| | | */
|
| | |
|
| | | /** @defgroup FSMC_Address_Hold_Time |
| | | * @{
|
| | | */
|
| | |
|
| | | #define IS_FSMC_ADDRESS_HOLD_TIME(TIME) ((TIME) <= 0xF)
|
| | |
|
| | | /**
|
| | | * @}
|
| | | */
|
| | |
|
| | | /** @defgroup FSMC_Data_Setup_Time |
| | | * @{
|
| | | */
|
| | |
|
| | | #define IS_FSMC_DATASETUP_TIME(TIME) (((TIME) > 0) && ((TIME) <= 0xFF))
|
| | |
|
| | | /**
|
| | | * @}
|
| | | */
|
| | |
|
| | | /** @defgroup FSMC_Bus_Turn_around_Duration |
| | | * @{
|
| | | */
|
| | |
|
| | | #define IS_FSMC_TURNAROUND_TIME(TIME) ((TIME) <= 0xF)
|
| | |
|
| | | /**
|
| | | * @}
|
| | | */
|
| | |
|
| | | /** @defgroup FSMC_CLK_Division |
| | | * @{
|
| | | */
|
| | |
|
| | | #define IS_FSMC_CLK_DIV(DIV) ((DIV) <= 0xF)
|
| | |
|
| | | /**
|
| | | * @}
|
| | | */
|
| | |
|
| | | /** @defgroup FSMC_Data_Latency |
| | | * @{
|
| | | */
|
| | |
|
| | | #define IS_FSMC_DATA_LATENCY(LATENCY) ((LATENCY) <= 0xF)
|
| | |
|
| | | /**
|
| | | * @}
|
| | | */
|
| | |
|
| | | /** @defgroup FSMC_Access_Mode |
| | | * @{
|
| | | */
|
| | |
|
| | | #define FSMC_AccessMode_A ((uint32_t)0x00000000)
|
| | | #define FSMC_AccessMode_B ((uint32_t)0x10000000) |
| | | #define FSMC_AccessMode_C ((uint32_t)0x20000000)
|
| | | #define FSMC_AccessMode_D ((uint32_t)0x30000000)
|
| | | #define IS_FSMC_ACCESS_MODE(MODE) (((MODE) == FSMC_AccessMode_A) || \
|
| | | ((MODE) == FSMC_AccessMode_B) || \
|
| | | ((MODE) == FSMC_AccessMode_C) || \
|
| | | ((MODE) == FSMC_AccessMode_D)) |
| | |
|
| | | /**
|
| | | * @}
|
| | | */
|
| | |
|
| | | /**
|
| | | * @}
|
| | | */
|
| | | |
| | | /** @defgroup NAND_PCCARD_Controller |
| | | * @{
|
| | | */
|
| | |
|
| | | /** @defgroup FSMC_Wait_feature |
| | | * @{
|
| | | */
|
| | |
|
| | | #define FSMC_Waitfeature_Disable ((uint32_t)0x00000000)
|
| | | #define FSMC_Waitfeature_Enable ((uint32_t)0x00000002)
|
| | | #define IS_FSMC_WAIT_FEATURE(FEATURE) (((FEATURE) == FSMC_Waitfeature_Disable) || \
|
| | | ((FEATURE) == FSMC_Waitfeature_Enable))
|
| | |
|
| | | /**
|
| | | * @}
|
| | | */
|
| | |
|
| | |
|
| | | /** @defgroup FSMC_ECC |
| | | * @{
|
| | | */
|
| | |
|
| | | #define FSMC_ECC_Disable ((uint32_t)0x00000000)
|
| | | #define FSMC_ECC_Enable ((uint32_t)0x00000040)
|
| | | #define IS_FSMC_ECC_STATE(STATE) (((STATE) == FSMC_ECC_Disable) || \
|
| | | ((STATE) == FSMC_ECC_Enable))
|
| | |
|
| | | /**
|
| | | * @}
|
| | | */
|
| | |
|
| | | /** @defgroup FSMC_ECC_Page_Size |
| | | * @{
|
| | | */
|
| | |
|
| | | #define FSMC_ECCPageSize_256Bytes ((uint32_t)0x00000000)
|
| | | #define FSMC_ECCPageSize_512Bytes ((uint32_t)0x00020000)
|
| | | #define FSMC_ECCPageSize_1024Bytes ((uint32_t)0x00040000)
|
| | | #define FSMC_ECCPageSize_2048Bytes ((uint32_t)0x00060000)
|
| | | #define FSMC_ECCPageSize_4096Bytes ((uint32_t)0x00080000)
|
| | | #define FSMC_ECCPageSize_8192Bytes ((uint32_t)0x000A0000)
|
| | | #define IS_FSMC_ECCPAGE_SIZE(SIZE) (((SIZE) == FSMC_ECCPageSize_256Bytes) || \
|
| | | ((SIZE) == FSMC_ECCPageSize_512Bytes) || \
|
| | | ((SIZE) == FSMC_ECCPageSize_1024Bytes) || \
|
| | | ((SIZE) == FSMC_ECCPageSize_2048Bytes) || \
|
| | | ((SIZE) == FSMC_ECCPageSize_4096Bytes) || \
|
| | | ((SIZE) == FSMC_ECCPageSize_8192Bytes))
|
| | |
|
| | | /**
|
| | | * @}
|
| | | */
|
| | |
|
| | | /** @defgroup FSMC_TCLR_Setup_Time |
| | | * @{
|
| | | */
|
| | |
|
| | | #define IS_FSMC_TCLR_TIME(TIME) ((TIME) <= 0xFF)
|
| | |
|
| | | /**
|
| | | * @}
|
| | | */
|
| | |
|
| | | /** @defgroup FSMC_TAR_Setup_Time |
| | | * @{
|
| | | */
|
| | |
|
| | | #define IS_FSMC_TAR_TIME(TIME) ((TIME) <= 0xFF)
|
| | |
|
| | | /**
|
| | | * @}
|
| | | */
|
| | |
|
| | | /** @defgroup FSMC_Setup_Time |
| | | * @{
|
| | | */
|
| | |
|
| | | #define IS_FSMC_SETUP_TIME(TIME) ((TIME) <= 0xFF)
|
| | |
|
| | | /**
|
| | | * @}
|
| | | */
|
| | |
|
| | | /** @defgroup FSMC_Wait_Setup_Time |
| | | * @{
|
| | | */
|
| | |
|
| | | #define IS_FSMC_WAIT_TIME(TIME) ((TIME) <= 0xFF)
|
| | |
|
| | | /**
|
| | | * @}
|
| | | */
|
| | |
|
| | | /** @defgroup FSMC_Hold_Setup_Time |
| | | * @{
|
| | | */
|
| | |
|
| | | #define IS_FSMC_HOLD_TIME(TIME) ((TIME) <= 0xFF)
|
| | |
|
| | | /**
|
| | | * @}
|
| | | */
|
| | |
|
| | | /** @defgroup FSMC_HiZ_Setup_Time |
| | | * @{
|
| | | */
|
| | |
|
| | | #define IS_FSMC_HIZ_TIME(TIME) ((TIME) <= 0xFF)
|
| | |
|
| | | /**
|
| | | * @}
|
| | | */
|
| | |
|
| | | /** @defgroup FSMC_Interrupt_sources |
| | | * @{
|
| | | */
|
| | |
|
| | | #define FSMC_IT_RisingEdge ((uint32_t)0x00000008)
|
| | | #define FSMC_IT_Level ((uint32_t)0x00000010)
|
| | | #define FSMC_IT_FallingEdge ((uint32_t)0x00000020)
|
| | | #define IS_FSMC_IT(IT) ((((IT) & (uint32_t)0xFFFFFFC7) == 0x00000000) && ((IT) != 0x00000000))
|
| | | #define IS_FSMC_GET_IT(IT) (((IT) == FSMC_IT_RisingEdge) || \
|
| | | ((IT) == FSMC_IT_Level) || \
|
| | | ((IT) == FSMC_IT_FallingEdge)) |
| | | /**
|
| | | * @}
|
| | | */
|
| | |
|
| | | /** @defgroup FSMC_Flags |
| | | * @{
|
| | | */
|
| | |
|
| | | #define FSMC_FLAG_RisingEdge ((uint32_t)0x00000001)
|
| | | #define FSMC_FLAG_Level ((uint32_t)0x00000002)
|
| | | #define FSMC_FLAG_FallingEdge ((uint32_t)0x00000004)
|
| | | #define FSMC_FLAG_FEMPT ((uint32_t)0x00000040)
|
| | | #define IS_FSMC_GET_FLAG(FLAG) (((FLAG) == FSMC_FLAG_RisingEdge) || \
|
| | | ((FLAG) == FSMC_FLAG_Level) || \
|
| | | ((FLAG) == FSMC_FLAG_FallingEdge) || \
|
| | | ((FLAG) == FSMC_FLAG_FEMPT))
|
| | |
|
| | | #define IS_FSMC_CLEAR_FLAG(FLAG) ((((FLAG) & (uint32_t)0xFFFFFFF8) == 0x00000000) && ((FLAG) != 0x00000000))
|
| | |
|
| | | /**
|
| | | * @}
|
| | | */
|
| | |
|
| | | /**
|
| | | * @}
|
| | | */
|
| | |
|
| | | /**
|
| | | * @}
|
| | | */
|
| | |
|
| | | /** @defgroup FSMC_Exported_Macros
|
| | | * @{
|
| | | */
|
| | |
|
| | | /**
|
| | | * @}
|
| | | */
|
| | |
|
| | | /** @defgroup FSMC_Exported_Functions
|
| | | * @{
|
| | | */
|
| | |
|
| | | void FSMC_NORSRAMDeInit(uint32_t FSMC_Bank);
|
| | | void FSMC_NANDDeInit(uint32_t FSMC_Bank);
|
| | | void FSMC_PCCARDDeInit(void);
|
| | | void FSMC_NORSRAMInit(FSMC_NORSRAMInitTypeDef* FSMC_NORSRAMInitStruct);
|
| | | void FSMC_NANDInit(FSMC_NANDInitTypeDef* FSMC_NANDInitStruct);
|
| | | void FSMC_PCCARDInit(FSMC_PCCARDInitTypeDef* FSMC_PCCARDInitStruct);
|
| | | void FSMC_NORSRAMStructInit(FSMC_NORSRAMInitTypeDef* FSMC_NORSRAMInitStruct);
|
| | | void FSMC_NANDStructInit(FSMC_NANDInitTypeDef* FSMC_NANDInitStruct);
|
| | | void FSMC_PCCARDStructInit(FSMC_PCCARDInitTypeDef* FSMC_PCCARDInitStruct);
|
| | | void FSMC_NORSRAMCmd(uint32_t FSMC_Bank, FunctionalState NewState);
|
| | | void FSMC_NANDCmd(uint32_t FSMC_Bank, FunctionalState NewState);
|
| | | void FSMC_PCCARDCmd(FunctionalState NewState);
|
| | | void FSMC_NANDECCCmd(uint32_t FSMC_Bank, FunctionalState NewState);
|
| | | uint32_t FSMC_GetECC(uint32_t FSMC_Bank);
|
| | | void FSMC_ITConfig(uint32_t FSMC_Bank, uint32_t FSMC_IT, FunctionalState NewState);
|
| | | FlagStatus FSMC_GetFlagStatus(uint32_t FSMC_Bank, uint32_t FSMC_FLAG);
|
| | | void FSMC_ClearFlag(uint32_t FSMC_Bank, uint32_t FSMC_FLAG);
|
| | | ITStatus FSMC_GetITStatus(uint32_t FSMC_Bank, uint32_t FSMC_IT);
|
| | | void FSMC_ClearITPendingBit(uint32_t FSMC_Bank, uint32_t FSMC_IT);
|
| | |
|
| | | #ifdef __cplusplus
|
| | | }
|
| | | #endif
|
| | |
|
| | | #endif /*__STM32F10x_FSMC_H */
|
| | | /**
|
| | | * @}
|
| | | */
|
| | |
|
| | | /**
|
| | | * @}
|
| | | */
|
| | |
|
| | | /**
|
| | | * @}
|
| | | */ |
| | |
|
| | | /******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/
|
New file |
| | |
| | | /**
|
| | | ******************************************************************************
|
| | | * @file stm32f10x_gpio.h
|
| | | * @author MCD Application Team
|
| | | * @version V3.5.0
|
| | | * @date 11-March-2011
|
| | | * @brief This file contains all the functions prototypes for the GPIO |
| | | * firmware library.
|
| | | ******************************************************************************
|
| | | * @attention
|
| | | *
|
| | | * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
|
| | | * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE
|
| | | * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY
|
| | | * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING
|
| | | * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE
|
| | | * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
|
| | | *
|
| | | * <h2><center>© COPYRIGHT 2011 STMicroelectronics</center></h2>
|
| | | ******************************************************************************
|
| | | */
|
| | |
|
| | | /* Define to prevent recursive inclusion -------------------------------------*/
|
| | | #ifndef __STM32F10x_GPIO_H
|
| | | #define __STM32F10x_GPIO_H
|
| | |
|
| | | #ifdef __cplusplus
|
| | | extern "C" {
|
| | | #endif
|
| | |
|
| | | /* Includes ------------------------------------------------------------------*/
|
| | | #include "stm32f10x.h"
|
| | |
|
| | | /** @addtogroup STM32F10x_StdPeriph_Driver
|
| | | * @{
|
| | | */
|
| | |
|
| | | /** @addtogroup GPIO
|
| | | * @{
|
| | | */
|
| | |
|
| | | /** @defgroup GPIO_Exported_Types
|
| | | * @{
|
| | | */
|
| | |
|
| | | #define IS_GPIO_ALL_PERIPH(PERIPH) (((PERIPH) == GPIOA) || \
|
| | | ((PERIPH) == GPIOB) || \
|
| | | ((PERIPH) == GPIOC) || \
|
| | | ((PERIPH) == GPIOD) || \
|
| | | ((PERIPH) == GPIOE) || \
|
| | | ((PERIPH) == GPIOF) || \
|
| | | ((PERIPH) == GPIOG))
|
| | | |
| | | /** |
| | | * @brief Output Maximum frequency selection |
| | | */
|
| | |
|
| | | typedef enum
|
| | | { |
| | | GPIO_Speed_10MHz = 1,
|
| | | GPIO_Speed_2MHz, |
| | | GPIO_Speed_50MHz
|
| | | }GPIOSpeed_TypeDef;
|
| | | #define IS_GPIO_SPEED(SPEED) (((SPEED) == GPIO_Speed_10MHz) || ((SPEED) == GPIO_Speed_2MHz) || \
|
| | | ((SPEED) == GPIO_Speed_50MHz))
|
| | |
|
| | | /** |
| | | * @brief Configuration Mode enumeration |
| | | */
|
| | |
|
| | | typedef enum
|
| | | { GPIO_Mode_AIN = 0x0,
|
| | | GPIO_Mode_IN_FLOATING = 0x04,
|
| | | GPIO_Mode_IPD = 0x28,
|
| | | GPIO_Mode_IPU = 0x48,
|
| | | GPIO_Mode_Out_OD = 0x14,
|
| | | GPIO_Mode_Out_PP = 0x10,
|
| | | GPIO_Mode_AF_OD = 0x1C,
|
| | | GPIO_Mode_AF_PP = 0x18
|
| | | }GPIOMode_TypeDef;
|
| | |
|
| | | #define IS_GPIO_MODE(MODE) (((MODE) == GPIO_Mode_AIN) || ((MODE) == GPIO_Mode_IN_FLOATING) || \
|
| | | ((MODE) == GPIO_Mode_IPD) || ((MODE) == GPIO_Mode_IPU) || \
|
| | | ((MODE) == GPIO_Mode_Out_OD) || ((MODE) == GPIO_Mode_Out_PP) || \
|
| | | ((MODE) == GPIO_Mode_AF_OD) || ((MODE) == GPIO_Mode_AF_PP))
|
| | |
|
| | | /** |
| | | * @brief GPIO Init structure definition |
| | | */
|
| | |
|
| | | typedef struct
|
| | | {
|
| | | uint16_t GPIO_Pin; /*!< Specifies the GPIO pins to be configured.
|
| | | This parameter can be any value of @ref GPIO_pins_define */
|
| | |
|
| | | GPIOSpeed_TypeDef GPIO_Speed; /*!< Specifies the speed for the selected pins.
|
| | | This parameter can be a value of @ref GPIOSpeed_TypeDef */
|
| | |
|
| | | GPIOMode_TypeDef GPIO_Mode; /*!< Specifies the operating mode for the selected pins.
|
| | | This parameter can be a value of @ref GPIOMode_TypeDef */
|
| | | }GPIO_InitTypeDef;
|
| | |
|
| | |
|
| | | /** |
| | | * @brief Bit_SET and Bit_RESET enumeration |
| | | */
|
| | |
|
| | | typedef enum
|
| | | { Bit_RESET = 0,
|
| | | Bit_SET
|
| | | }BitAction;
|
| | |
|
| | | #define IS_GPIO_BIT_ACTION(ACTION) (((ACTION) == Bit_RESET) || ((ACTION) == Bit_SET))
|
| | |
|
| | | /**
|
| | | * @}
|
| | | */
|
| | |
|
| | | /** @defgroup GPIO_Exported_Constants
|
| | | * @{
|
| | | */
|
| | |
|
| | | /** @defgroup GPIO_pins_define |
| | | * @{
|
| | | */
|
| | |
|
| | | #define GPIO_Pin_0 ((uint16_t)0x0001) /*!< Pin 0 selected */
|
| | | #define GPIO_Pin_1 ((uint16_t)0x0002) /*!< Pin 1 selected */
|
| | | #define GPIO_Pin_2 ((uint16_t)0x0004) /*!< Pin 2 selected */
|
| | | #define GPIO_Pin_3 ((uint16_t)0x0008) /*!< Pin 3 selected */
|
| | | #define GPIO_Pin_4 ((uint16_t)0x0010) /*!< Pin 4 selected */
|
| | | #define GPIO_Pin_5 ((uint16_t)0x0020) /*!< Pin 5 selected */
|
| | | #define GPIO_Pin_6 ((uint16_t)0x0040) /*!< Pin 6 selected */
|
| | | #define GPIO_Pin_7 ((uint16_t)0x0080) /*!< Pin 7 selected */
|
| | | #define GPIO_Pin_8 ((uint16_t)0x0100) /*!< Pin 8 selected */
|
| | | #define GPIO_Pin_9 ((uint16_t)0x0200) /*!< Pin 9 selected */
|
| | | #define GPIO_Pin_10 ((uint16_t)0x0400) /*!< Pin 10 selected */
|
| | | #define GPIO_Pin_11 ((uint16_t)0x0800) /*!< Pin 11 selected */
|
| | | #define GPIO_Pin_12 ((uint16_t)0x1000) /*!< Pin 12 selected */
|
| | | #define GPIO_Pin_13 ((uint16_t)0x2000) /*!< Pin 13 selected */
|
| | | #define GPIO_Pin_14 ((uint16_t)0x4000) /*!< Pin 14 selected */
|
| | | #define GPIO_Pin_15 ((uint16_t)0x8000) /*!< Pin 15 selected */
|
| | | #define GPIO_Pin_All ((uint16_t)0xFFFF) /*!< All pins selected */
|
| | |
|
| | | #define IS_GPIO_PIN(PIN) ((((PIN) & (uint16_t)0x00) == 0x00) && ((PIN) != (uint16_t)0x00))
|
| | |
|
| | | #define IS_GET_GPIO_PIN(PIN) (((PIN) == GPIO_Pin_0) || \
|
| | | ((PIN) == GPIO_Pin_1) || \
|
| | | ((PIN) == GPIO_Pin_2) || \
|
| | | ((PIN) == GPIO_Pin_3) || \
|
| | | ((PIN) == GPIO_Pin_4) || \
|
| | | ((PIN) == GPIO_Pin_5) || \
|
| | | ((PIN) == GPIO_Pin_6) || \
|
| | | ((PIN) == GPIO_Pin_7) || \
|
| | | ((PIN) == GPIO_Pin_8) || \
|
| | | ((PIN) == GPIO_Pin_9) || \
|
| | | ((PIN) == GPIO_Pin_10) || \
|
| | | ((PIN) == GPIO_Pin_11) || \
|
| | | ((PIN) == GPIO_Pin_12) || \
|
| | | ((PIN) == GPIO_Pin_13) || \
|
| | | ((PIN) == GPIO_Pin_14) || \
|
| | | ((PIN) == GPIO_Pin_15))
|
| | |
|
| | | /**
|
| | | * @}
|
| | | */
|
| | |
|
| | | /** @defgroup GPIO_Remap_define |
| | | * @{
|
| | | */
|
| | |
|
| | | #define GPIO_Remap_SPI1 ((uint32_t)0x00000001) /*!< SPI1 Alternate Function mapping */
|
| | | #define GPIO_Remap_I2C1 ((uint32_t)0x00000002) /*!< I2C1 Alternate Function mapping */
|
| | | #define GPIO_Remap_USART1 ((uint32_t)0x00000004) /*!< USART1 Alternate Function mapping */
|
| | | #define GPIO_Remap_USART2 ((uint32_t)0x00000008) /*!< USART2 Alternate Function mapping */
|
| | | #define GPIO_PartialRemap_USART3 ((uint32_t)0x00140010) /*!< USART3 Partial Alternate Function mapping */
|
| | | #define GPIO_FullRemap_USART3 ((uint32_t)0x00140030) /*!< USART3 Full Alternate Function mapping */
|
| | | #define GPIO_PartialRemap_TIM1 ((uint32_t)0x00160040) /*!< TIM1 Partial Alternate Function mapping */
|
| | | #define GPIO_FullRemap_TIM1 ((uint32_t)0x001600C0) /*!< TIM1 Full Alternate Function mapping */
|
| | | #define GPIO_PartialRemap1_TIM2 ((uint32_t)0x00180100) /*!< TIM2 Partial1 Alternate Function mapping */
|
| | | #define GPIO_PartialRemap2_TIM2 ((uint32_t)0x00180200) /*!< TIM2 Partial2 Alternate Function mapping */
|
| | | #define GPIO_FullRemap_TIM2 ((uint32_t)0x00180300) /*!< TIM2 Full Alternate Function mapping */
|
| | | #define GPIO_PartialRemap_TIM3 ((uint32_t)0x001A0800) /*!< TIM3 Partial Alternate Function mapping */
|
| | | #define GPIO_FullRemap_TIM3 ((uint32_t)0x001A0C00) /*!< TIM3 Full Alternate Function mapping */
|
| | | #define GPIO_Remap_TIM4 ((uint32_t)0x00001000) /*!< TIM4 Alternate Function mapping */
|
| | | #define GPIO_Remap1_CAN1 ((uint32_t)0x001D4000) /*!< CAN1 Alternate Function mapping */
|
| | | #define GPIO_Remap2_CAN1 ((uint32_t)0x001D6000) /*!< CAN1 Alternate Function mapping */
|
| | | #define GPIO_Remap_PD01 ((uint32_t)0x00008000) /*!< PD01 Alternate Function mapping */
|
| | | #define GPIO_Remap_TIM5CH4_LSI ((uint32_t)0x00200001) /*!< LSI connected to TIM5 Channel4 input capture for calibration */
|
| | | #define GPIO_Remap_ADC1_ETRGINJ ((uint32_t)0x00200002) /*!< ADC1 External Trigger Injected Conversion remapping */
|
| | | #define GPIO_Remap_ADC1_ETRGREG ((uint32_t)0x00200004) /*!< ADC1 External Trigger Regular Conversion remapping */
|
| | | #define GPIO_Remap_ADC2_ETRGINJ ((uint32_t)0x00200008) /*!< ADC2 External Trigger Injected Conversion remapping */
|
| | | #define GPIO_Remap_ADC2_ETRGREG ((uint32_t)0x00200010) /*!< ADC2 External Trigger Regular Conversion remapping */
|
| | | #define GPIO_Remap_ETH ((uint32_t)0x00200020) /*!< Ethernet remapping (only for Connectivity line devices) */
|
| | | #define GPIO_Remap_CAN2 ((uint32_t)0x00200040) /*!< CAN2 remapping (only for Connectivity line devices) */
|
| | | #define GPIO_Remap_SWJ_NoJTRST ((uint32_t)0x00300100) /*!< Full SWJ Enabled (JTAG-DP + SW-DP) but without JTRST */
|
| | | #define GPIO_Remap_SWJ_JTAGDisable ((uint32_t)0x00300200) /*!< JTAG-DP Disabled and SW-DP Enabled */
|
| | | #define GPIO_Remap_SWJ_Disable ((uint32_t)0x00300400) /*!< Full SWJ Disabled (JTAG-DP + SW-DP) */
|
| | | #define GPIO_Remap_SPI3 ((uint32_t)0x00201100) /*!< SPI3/I2S3 Alternate Function mapping (only for Connectivity line devices) */
|
| | | #define GPIO_Remap_TIM2ITR1_PTP_SOF ((uint32_t)0x00202000) /*!< Ethernet PTP output or USB OTG SOF (Start of Frame) connected
|
| | | to TIM2 Internal Trigger 1 for calibration
|
| | | (only for Connectivity line devices) */
|
| | | #define GPIO_Remap_PTP_PPS ((uint32_t)0x00204000) /*!< Ethernet MAC PPS_PTS output on PB05 (only for Connectivity line devices) */
|
| | |
|
| | | #define GPIO_Remap_TIM15 ((uint32_t)0x80000001) /*!< TIM15 Alternate Function mapping (only for Value line devices) */
|
| | | #define GPIO_Remap_TIM16 ((uint32_t)0x80000002) /*!< TIM16 Alternate Function mapping (only for Value line devices) */
|
| | | #define GPIO_Remap_TIM17 ((uint32_t)0x80000004) /*!< TIM17 Alternate Function mapping (only for Value line devices) */
|
| | | #define GPIO_Remap_CEC ((uint32_t)0x80000008) /*!< CEC Alternate Function mapping (only for Value line devices) */
|
| | | #define GPIO_Remap_TIM1_DMA ((uint32_t)0x80000010) /*!< TIM1 DMA requests mapping (only for Value line devices) */
|
| | |
|
| | | #define GPIO_Remap_TIM9 ((uint32_t)0x80000020) /*!< TIM9 Alternate Function mapping (only for XL-density devices) */
|
| | | #define GPIO_Remap_TIM10 ((uint32_t)0x80000040) /*!< TIM10 Alternate Function mapping (only for XL-density devices) */
|
| | | #define GPIO_Remap_TIM11 ((uint32_t)0x80000080) /*!< TIM11 Alternate Function mapping (only for XL-density devices) */
|
| | | #define GPIO_Remap_TIM13 ((uint32_t)0x80000100) /*!< TIM13 Alternate Function mapping (only for High density Value line and XL-density devices) */
|
| | | #define GPIO_Remap_TIM14 ((uint32_t)0x80000200) /*!< TIM14 Alternate Function mapping (only for High density Value line and XL-density devices) */
|
| | | #define GPIO_Remap_FSMC_NADV ((uint32_t)0x80000400) /*!< FSMC_NADV Alternate Function mapping (only for High density Value line and XL-density devices) */
|
| | |
|
| | | #define GPIO_Remap_TIM67_DAC_DMA ((uint32_t)0x80000800) /*!< TIM6/TIM7 and DAC DMA requests remapping (only for High density Value line devices) */
|
| | | #define GPIO_Remap_TIM12 ((uint32_t)0x80001000) /*!< TIM12 Alternate Function mapping (only for High density Value line devices) */
|
| | | #define GPIO_Remap_MISC ((uint32_t)0x80002000) /*!< Miscellaneous Remap (DMA2 Channel5 Position and DAC Trigger remapping, |
| | | only for High density Value line devices) */ |
| | |
|
| | | #define IS_GPIO_REMAP(REMAP) (((REMAP) == GPIO_Remap_SPI1) || ((REMAP) == GPIO_Remap_I2C1) || \
|
| | | ((REMAP) == GPIO_Remap_USART1) || ((REMAP) == GPIO_Remap_USART2) || \
|
| | | ((REMAP) == GPIO_PartialRemap_USART3) || ((REMAP) == GPIO_FullRemap_USART3) || \
|
| | | ((REMAP) == GPIO_PartialRemap_TIM1) || ((REMAP) == GPIO_FullRemap_TIM1) || \
|
| | | ((REMAP) == GPIO_PartialRemap1_TIM2) || ((REMAP) == GPIO_PartialRemap2_TIM2) || \
|
| | | ((REMAP) == GPIO_FullRemap_TIM2) || ((REMAP) == GPIO_PartialRemap_TIM3) || \
|
| | | ((REMAP) == GPIO_FullRemap_TIM3) || ((REMAP) == GPIO_Remap_TIM4) || \
|
| | | ((REMAP) == GPIO_Remap1_CAN1) || ((REMAP) == GPIO_Remap2_CAN1) || \
|
| | | ((REMAP) == GPIO_Remap_PD01) || ((REMAP) == GPIO_Remap_TIM5CH4_LSI) || \
|
| | | ((REMAP) == GPIO_Remap_ADC1_ETRGINJ) ||((REMAP) == GPIO_Remap_ADC1_ETRGREG) || \
|
| | | ((REMAP) == GPIO_Remap_ADC2_ETRGINJ) ||((REMAP) == GPIO_Remap_ADC2_ETRGREG) || \
|
| | | ((REMAP) == GPIO_Remap_ETH) ||((REMAP) == GPIO_Remap_CAN2) || \
|
| | | ((REMAP) == GPIO_Remap_SWJ_NoJTRST) || ((REMAP) == GPIO_Remap_SWJ_JTAGDisable) || \
|
| | | ((REMAP) == GPIO_Remap_SWJ_Disable)|| ((REMAP) == GPIO_Remap_SPI3) || \
|
| | | ((REMAP) == GPIO_Remap_TIM2ITR1_PTP_SOF) || ((REMAP) == GPIO_Remap_PTP_PPS) || \
|
| | | ((REMAP) == GPIO_Remap_TIM15) || ((REMAP) == GPIO_Remap_TIM16) || \
|
| | | ((REMAP) == GPIO_Remap_TIM17) || ((REMAP) == GPIO_Remap_CEC) || \
|
| | | ((REMAP) == GPIO_Remap_TIM1_DMA) || ((REMAP) == GPIO_Remap_TIM9) || \
|
| | | ((REMAP) == GPIO_Remap_TIM10) || ((REMAP) == GPIO_Remap_TIM11) || \
|
| | | ((REMAP) == GPIO_Remap_TIM13) || ((REMAP) == GPIO_Remap_TIM14) || \
|
| | | ((REMAP) == GPIO_Remap_FSMC_NADV) || ((REMAP) == GPIO_Remap_TIM67_DAC_DMA) || \
|
| | | ((REMAP) == GPIO_Remap_TIM12) || ((REMAP) == GPIO_Remap_MISC))
|
| | | |
| | | /**
|
| | | * @}
|
| | | */ |
| | |
|
| | | /** @defgroup GPIO_Port_Sources |
| | | * @{
|
| | | */
|
| | |
|
| | | #define GPIO_PortSourceGPIOA ((uint8_t)0x00)
|
| | | #define GPIO_PortSourceGPIOB ((uint8_t)0x01)
|
| | | #define GPIO_PortSourceGPIOC ((uint8_t)0x02)
|
| | | #define GPIO_PortSourceGPIOD ((uint8_t)0x03)
|
| | | #define GPIO_PortSourceGPIOE ((uint8_t)0x04)
|
| | | #define GPIO_PortSourceGPIOF ((uint8_t)0x05)
|
| | | #define GPIO_PortSourceGPIOG ((uint8_t)0x06)
|
| | | #define IS_GPIO_EVENTOUT_PORT_SOURCE(PORTSOURCE) (((PORTSOURCE) == GPIO_PortSourceGPIOA) || \
|
| | | ((PORTSOURCE) == GPIO_PortSourceGPIOB) || \
|
| | | ((PORTSOURCE) == GPIO_PortSourceGPIOC) || \
|
| | | ((PORTSOURCE) == GPIO_PortSourceGPIOD) || \
|
| | | ((PORTSOURCE) == GPIO_PortSourceGPIOE))
|
| | |
|
| | | #define IS_GPIO_EXTI_PORT_SOURCE(PORTSOURCE) (((PORTSOURCE) == GPIO_PortSourceGPIOA) || \
|
| | | ((PORTSOURCE) == GPIO_PortSourceGPIOB) || \
|
| | | ((PORTSOURCE) == GPIO_PortSourceGPIOC) || \
|
| | | ((PORTSOURCE) == GPIO_PortSourceGPIOD) || \
|
| | | ((PORTSOURCE) == GPIO_PortSourceGPIOE) || \
|
| | | ((PORTSOURCE) == GPIO_PortSourceGPIOF) || \
|
| | | ((PORTSOURCE) == GPIO_PortSourceGPIOG))
|
| | |
|
| | | /**
|
| | | * @}
|
| | | */
|
| | |
|
| | | /** @defgroup GPIO_Pin_sources |
| | | * @{
|
| | | */
|
| | |
|
| | | #define GPIO_PinSource0 ((uint8_t)0x00)
|
| | | #define GPIO_PinSource1 ((uint8_t)0x01)
|
| | | #define GPIO_PinSource2 ((uint8_t)0x02)
|
| | | #define GPIO_PinSource3 ((uint8_t)0x03)
|
| | | #define GPIO_PinSource4 ((uint8_t)0x04)
|
| | | #define GPIO_PinSource5 ((uint8_t)0x05)
|
| | | #define GPIO_PinSource6 ((uint8_t)0x06)
|
| | | #define GPIO_PinSource7 ((uint8_t)0x07)
|
| | | #define GPIO_PinSource8 ((uint8_t)0x08)
|
| | | #define GPIO_PinSource9 ((uint8_t)0x09)
|
| | | #define GPIO_PinSource10 ((uint8_t)0x0A)
|
| | | #define GPIO_PinSource11 ((uint8_t)0x0B)
|
| | | #define GPIO_PinSource12 ((uint8_t)0x0C)
|
| | | #define GPIO_PinSource13 ((uint8_t)0x0D)
|
| | | #define GPIO_PinSource14 ((uint8_t)0x0E)
|
| | | #define GPIO_PinSource15 ((uint8_t)0x0F)
|
| | |
|
| | | #define IS_GPIO_PIN_SOURCE(PINSOURCE) (((PINSOURCE) == GPIO_PinSource0) || \
|
| | | ((PINSOURCE) == GPIO_PinSource1) || \
|
| | | ((PINSOURCE) == GPIO_PinSource2) || \
|
| | | ((PINSOURCE) == GPIO_PinSource3) || \
|
| | | ((PINSOURCE) == GPIO_PinSource4) || \
|
| | | ((PINSOURCE) == GPIO_PinSource5) || \
|
| | | ((PINSOURCE) == GPIO_PinSource6) || \
|
| | | ((PINSOURCE) == GPIO_PinSource7) || \
|
| | | ((PINSOURCE) == GPIO_PinSource8) || \
|
| | | ((PINSOURCE) == GPIO_PinSource9) || \
|
| | | ((PINSOURCE) == GPIO_PinSource10) || \
|
| | | ((PINSOURCE) == GPIO_PinSource11) || \
|
| | | ((PINSOURCE) == GPIO_PinSource12) || \
|
| | | ((PINSOURCE) == GPIO_PinSource13) || \
|
| | | ((PINSOURCE) == GPIO_PinSource14) || \
|
| | | ((PINSOURCE) == GPIO_PinSource15))
|
| | |
|
| | | /**
|
| | | * @}
|
| | | */
|
| | |
|
| | | /** @defgroup Ethernet_Media_Interface |
| | | * @{
|
| | | */ |
| | | #define GPIO_ETH_MediaInterface_MII ((u32)0x00000000) |
| | | #define GPIO_ETH_MediaInterface_RMII ((u32)0x00000001) |
| | |
|
| | | #define IS_GPIO_ETH_MEDIA_INTERFACE(INTERFACE) (((INTERFACE) == GPIO_ETH_MediaInterface_MII) || \
|
| | | ((INTERFACE) == GPIO_ETH_MediaInterface_RMII))
|
| | |
|
| | | /**
|
| | | * @}
|
| | | */ |
| | | /**
|
| | | * @}
|
| | | */
|
| | |
|
| | | /** @defgroup GPIO_Exported_Macros
|
| | | * @{
|
| | | */
|
| | |
|
| | | /**
|
| | | * @}
|
| | | */
|
| | |
|
| | | /** @defgroup GPIO_Exported_Functions
|
| | | * @{
|
| | | */
|
| | |
|
| | | void GPIO_DeInit(GPIO_TypeDef* GPIOx);
|
| | | void GPIO_AFIODeInit(void);
|
| | | void GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef* GPIO_InitStruct);
|
| | | void GPIO_StructInit(GPIO_InitTypeDef* GPIO_InitStruct);
|
| | | uint8_t GPIO_ReadInputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
|
| | | uint16_t GPIO_ReadInputData(GPIO_TypeDef* GPIOx);
|
| | | uint8_t GPIO_ReadOutputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
|
| | | uint16_t GPIO_ReadOutputData(GPIO_TypeDef* GPIOx);
|
| | | void GPIO_SetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
|
| | | void GPIO_ResetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
|
| | | void GPIO_WriteBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, BitAction BitVal);
|
| | | void GPIO_Write(GPIO_TypeDef* GPIOx, uint16_t PortVal);
|
| | | void GPIO_PinLockConfig(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
|
| | | void GPIO_EventOutputConfig(uint8_t GPIO_PortSource, uint8_t GPIO_PinSource);
|
| | | void GPIO_EventOutputCmd(FunctionalState NewState);
|
| | | void GPIO_PinRemapConfig(uint32_t GPIO_Remap, FunctionalState NewState);
|
| | | void GPIO_EXTILineConfig(uint8_t GPIO_PortSource, uint8_t GPIO_PinSource);
|
| | | void GPIO_ETH_MediaInterfaceConfig(uint32_t GPIO_ETH_MediaInterface);
|
| | |
|
| | | #ifdef __cplusplus
|
| | | }
|
| | | #endif
|
| | |
|
| | | #endif /* __STM32F10x_GPIO_H */
|
| | | /**
|
| | | * @}
|
| | | */
|
| | |
|
| | | /**
|
| | | * @}
|
| | | */
|
| | |
|
| | | /**
|
| | | * @}
|
| | | */
|
| | |
|
| | | /******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/
|
New file |
| | |
| | | /**
|
| | | ******************************************************************************
|
| | | * @file stm32f10x_i2c.h
|
| | | * @author MCD Application Team
|
| | | * @version V3.5.0
|
| | | * @date 11-March-2011
|
| | | * @brief This file contains all the functions prototypes for the I2C firmware |
| | | * library.
|
| | | ******************************************************************************
|
| | | * @attention
|
| | | *
|
| | | * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
|
| | | * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE
|
| | | * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY
|
| | | * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING
|
| | | * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE
|
| | | * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
|
| | | *
|
| | | * <h2><center>© COPYRIGHT 2011 STMicroelectronics</center></h2>
|
| | | ******************************************************************************
|
| | | */
|
| | |
|
| | | /* Define to prevent recursive inclusion -------------------------------------*/
|
| | | #ifndef __STM32F10x_I2C_H
|
| | | #define __STM32F10x_I2C_H
|
| | |
|
| | | #ifdef __cplusplus
|
| | | extern "C" {
|
| | | #endif
|
| | |
|
| | | /* Includes ------------------------------------------------------------------*/
|
| | | #include "stm32f10x.h"
|
| | |
|
| | | /** @addtogroup STM32F10x_StdPeriph_Driver
|
| | | * @{
|
| | | */
|
| | |
|
| | | /** @addtogroup I2C
|
| | | * @{
|
| | | */
|
| | |
|
| | | /** @defgroup I2C_Exported_Types
|
| | | * @{
|
| | | */
|
| | |
|
| | | /** |
| | | * @brief I2C Init structure definition |
| | | */
|
| | |
|
| | | typedef struct
|
| | | {
|
| | | uint32_t I2C_ClockSpeed; /*!< Specifies the clock frequency.
|
| | | This parameter must be set to a value lower than 400kHz */
|
| | |
|
| | | uint16_t I2C_Mode; /*!< Specifies the I2C mode.
|
| | | This parameter can be a value of @ref I2C_mode */
|
| | |
|
| | | uint16_t I2C_DutyCycle; /*!< Specifies the I2C fast mode duty cycle.
|
| | | This parameter can be a value of @ref I2C_duty_cycle_in_fast_mode */
|
| | |
|
| | | uint16_t I2C_OwnAddress1; /*!< Specifies the first device own address.
|
| | | This parameter can be a 7-bit or 10-bit address. */
|
| | |
|
| | | uint16_t I2C_Ack; /*!< Enables or disables the acknowledgement.
|
| | | This parameter can be a value of @ref I2C_acknowledgement */
|
| | |
|
| | | uint16_t I2C_AcknowledgedAddress; /*!< Specifies if 7-bit or 10-bit address is acknowledged.
|
| | | This parameter can be a value of @ref I2C_acknowledged_address */
|
| | | }I2C_InitTypeDef;
|
| | |
|
| | | /**
|
| | | * @}
|
| | | */ |
| | |
|
| | |
|
| | | /** @defgroup I2C_Exported_Constants
|
| | | * @{
|
| | | */
|
| | |
|
| | | #define IS_I2C_ALL_PERIPH(PERIPH) (((PERIPH) == I2C1) || \
|
| | | ((PERIPH) == I2C2))
|
| | | /** @defgroup I2C_mode |
| | | * @{
|
| | | */
|
| | |
|
| | | #define I2C_Mode_I2C ((uint16_t)0x0000)
|
| | | #define I2C_Mode_SMBusDevice ((uint16_t)0x0002) |
| | | #define I2C_Mode_SMBusHost ((uint16_t)0x000A)
|
| | | #define IS_I2C_MODE(MODE) (((MODE) == I2C_Mode_I2C) || \
|
| | | ((MODE) == I2C_Mode_SMBusDevice) || \
|
| | | ((MODE) == I2C_Mode_SMBusHost))
|
| | | /**
|
| | | * @}
|
| | | */
|
| | |
|
| | | /** @defgroup I2C_duty_cycle_in_fast_mode |
| | | * @{
|
| | | */
|
| | |
|
| | | #define I2C_DutyCycle_16_9 ((uint16_t)0x4000) /*!< I2C fast mode Tlow/Thigh = 16/9 */
|
| | | #define I2C_DutyCycle_2 ((uint16_t)0xBFFF) /*!< I2C fast mode Tlow/Thigh = 2 */
|
| | | #define IS_I2C_DUTY_CYCLE(CYCLE) (((CYCLE) == I2C_DutyCycle_16_9) || \
|
| | | ((CYCLE) == I2C_DutyCycle_2))
|
| | | /**
|
| | | * @}
|
| | | */ |
| | |
|
| | | /** @defgroup I2C_acknowledgement
|
| | | * @{
|
| | | */
|
| | |
|
| | | #define I2C_Ack_Enable ((uint16_t)0x0400)
|
| | | #define I2C_Ack_Disable ((uint16_t)0x0000)
|
| | | #define IS_I2C_ACK_STATE(STATE) (((STATE) == I2C_Ack_Enable) || \
|
| | | ((STATE) == I2C_Ack_Disable))
|
| | | /**
|
| | | * @}
|
| | | */
|
| | |
|
| | | /** @defgroup I2C_transfer_direction |
| | | * @{
|
| | | */
|
| | |
|
| | | #define I2C_Direction_Transmitter ((uint8_t)0x00)
|
| | | #define I2C_Direction_Receiver ((uint8_t)0x01)
|
| | | #define IS_I2C_DIRECTION(DIRECTION) (((DIRECTION) == I2C_Direction_Transmitter) || \
|
| | | ((DIRECTION) == I2C_Direction_Receiver))
|
| | | /**
|
| | | * @}
|
| | | */
|
| | |
|
| | | /** @defgroup I2C_acknowledged_address |
| | | * @{
|
| | | */
|
| | |
|
| | | #define I2C_AcknowledgedAddress_7bit ((uint16_t)0x4000)
|
| | | #define I2C_AcknowledgedAddress_10bit ((uint16_t)0xC000)
|
| | | #define IS_I2C_ACKNOWLEDGE_ADDRESS(ADDRESS) (((ADDRESS) == I2C_AcknowledgedAddress_7bit) || \
|
| | | ((ADDRESS) == I2C_AcknowledgedAddress_10bit))
|
| | | /**
|
| | | * @}
|
| | | */ |
| | |
|
| | | /** @defgroup I2C_registers |
| | | * @{
|
| | | */
|
| | |
|
| | | #define I2C_Register_CR1 ((uint8_t)0x00)
|
| | | #define I2C_Register_CR2 ((uint8_t)0x04)
|
| | | #define I2C_Register_OAR1 ((uint8_t)0x08)
|
| | | #define I2C_Register_OAR2 ((uint8_t)0x0C)
|
| | | #define I2C_Register_DR ((uint8_t)0x10)
|
| | | #define I2C_Register_SR1 ((uint8_t)0x14)
|
| | | #define I2C_Register_SR2 ((uint8_t)0x18)
|
| | | #define I2C_Register_CCR ((uint8_t)0x1C)
|
| | | #define I2C_Register_TRISE ((uint8_t)0x20)
|
| | | #define IS_I2C_REGISTER(REGISTER) (((REGISTER) == I2C_Register_CR1) || \
|
| | | ((REGISTER) == I2C_Register_CR2) || \
|
| | | ((REGISTER) == I2C_Register_OAR1) || \
|
| | | ((REGISTER) == I2C_Register_OAR2) || \
|
| | | ((REGISTER) == I2C_Register_DR) || \
|
| | | ((REGISTER) == I2C_Register_SR1) || \
|
| | | ((REGISTER) == I2C_Register_SR2) || \
|
| | | ((REGISTER) == I2C_Register_CCR) || \
|
| | | ((REGISTER) == I2C_Register_TRISE))
|
| | | /**
|
| | | * @}
|
| | | */
|
| | |
|
| | | /** @defgroup I2C_SMBus_alert_pin_level |
| | | * @{
|
| | | */
|
| | |
|
| | | #define I2C_SMBusAlert_Low ((uint16_t)0x2000)
|
| | | #define I2C_SMBusAlert_High ((uint16_t)0xDFFF)
|
| | | #define IS_I2C_SMBUS_ALERT(ALERT) (((ALERT) == I2C_SMBusAlert_Low) || \
|
| | | ((ALERT) == I2C_SMBusAlert_High))
|
| | | /**
|
| | | * @}
|
| | | */
|
| | |
|
| | | /** @defgroup I2C_PEC_position |
| | | * @{
|
| | | */
|
| | |
|
| | | #define I2C_PECPosition_Next ((uint16_t)0x0800)
|
| | | #define I2C_PECPosition_Current ((uint16_t)0xF7FF)
|
| | | #define IS_I2C_PEC_POSITION(POSITION) (((POSITION) == I2C_PECPosition_Next) || \
|
| | | ((POSITION) == I2C_PECPosition_Current))
|
| | | /**
|
| | | * @}
|
| | | */ |
| | |
|
| | | /** @defgroup I2C_NCAK_position |
| | | * @{
|
| | | */
|
| | |
|
| | | #define I2C_NACKPosition_Next ((uint16_t)0x0800)
|
| | | #define I2C_NACKPosition_Current ((uint16_t)0xF7FF)
|
| | | #define IS_I2C_NACK_POSITION(POSITION) (((POSITION) == I2C_NACKPosition_Next) || \
|
| | | ((POSITION) == I2C_NACKPosition_Current))
|
| | | /**
|
| | | * @}
|
| | | */ |
| | |
|
| | | /** @defgroup I2C_interrupts_definition |
| | | * @{
|
| | | */
|
| | |
|
| | | #define I2C_IT_BUF ((uint16_t)0x0400)
|
| | | #define I2C_IT_EVT ((uint16_t)0x0200)
|
| | | #define I2C_IT_ERR ((uint16_t)0x0100)
|
| | | #define IS_I2C_CONFIG_IT(IT) ((((IT) & (uint16_t)0xF8FF) == 0x00) && ((IT) != 0x00))
|
| | | /**
|
| | | * @}
|
| | | */ |
| | |
|
| | | /** @defgroup I2C_interrupts_definition |
| | | * @{
|
| | | */
|
| | |
|
| | | #define I2C_IT_SMBALERT ((uint32_t)0x01008000)
|
| | | #define I2C_IT_TIMEOUT ((uint32_t)0x01004000)
|
| | | #define I2C_IT_PECERR ((uint32_t)0x01001000)
|
| | | #define I2C_IT_OVR ((uint32_t)0x01000800)
|
| | | #define I2C_IT_AF ((uint32_t)0x01000400)
|
| | | #define I2C_IT_ARLO ((uint32_t)0x01000200)
|
| | | #define I2C_IT_BERR ((uint32_t)0x01000100)
|
| | | #define I2C_IT_TXE ((uint32_t)0x06000080)
|
| | | #define I2C_IT_RXNE ((uint32_t)0x06000040)
|
| | | #define I2C_IT_STOPF ((uint32_t)0x02000010)
|
| | | #define I2C_IT_ADD10 ((uint32_t)0x02000008)
|
| | | #define I2C_IT_BTF ((uint32_t)0x02000004)
|
| | | #define I2C_IT_ADDR ((uint32_t)0x02000002)
|
| | | #define I2C_IT_SB ((uint32_t)0x02000001)
|
| | |
|
| | | #define IS_I2C_CLEAR_IT(IT) ((((IT) & (uint16_t)0x20FF) == 0x00) && ((IT) != (uint16_t)0x00))
|
| | |
|
| | | #define IS_I2C_GET_IT(IT) (((IT) == I2C_IT_SMBALERT) || ((IT) == I2C_IT_TIMEOUT) || \
|
| | | ((IT) == I2C_IT_PECERR) || ((IT) == I2C_IT_OVR) || \
|
| | | ((IT) == I2C_IT_AF) || ((IT) == I2C_IT_ARLO) || \
|
| | | ((IT) == I2C_IT_BERR) || ((IT) == I2C_IT_TXE) || \
|
| | | ((IT) == I2C_IT_RXNE) || ((IT) == I2C_IT_STOPF) || \
|
| | | ((IT) == I2C_IT_ADD10) || ((IT) == I2C_IT_BTF) || \
|
| | | ((IT) == I2C_IT_ADDR) || ((IT) == I2C_IT_SB))
|
| | | /**
|
| | | * @}
|
| | | */
|
| | |
|
| | | /** @defgroup I2C_flags_definition |
| | | * @{
|
| | | */
|
| | |
|
| | | /** |
| | | * @brief SR2 register flags |
| | | */
|
| | |
|
| | | #define I2C_FLAG_DUALF ((uint32_t)0x00800000)
|
| | | #define I2C_FLAG_SMBHOST ((uint32_t)0x00400000)
|
| | | #define I2C_FLAG_SMBDEFAULT ((uint32_t)0x00200000)
|
| | | #define I2C_FLAG_GENCALL ((uint32_t)0x00100000)
|
| | | #define I2C_FLAG_TRA ((uint32_t)0x00040000)
|
| | | #define I2C_FLAG_BUSY ((uint32_t)0x00020000)
|
| | | #define I2C_FLAG_MSL ((uint32_t)0x00010000)
|
| | |
|
| | | /** |
| | | * @brief SR1 register flags |
| | | */
|
| | |
|
| | | #define I2C_FLAG_SMBALERT ((uint32_t)0x10008000)
|
| | | #define I2C_FLAG_TIMEOUT ((uint32_t)0x10004000)
|
| | | #define I2C_FLAG_PECERR ((uint32_t)0x10001000)
|
| | | #define I2C_FLAG_OVR ((uint32_t)0x10000800)
|
| | | #define I2C_FLAG_AF ((uint32_t)0x10000400)
|
| | | #define I2C_FLAG_ARLO ((uint32_t)0x10000200)
|
| | | #define I2C_FLAG_BERR ((uint32_t)0x10000100)
|
| | | #define I2C_FLAG_TXE ((uint32_t)0x10000080)
|
| | | #define I2C_FLAG_RXNE ((uint32_t)0x10000040)
|
| | | #define I2C_FLAG_STOPF ((uint32_t)0x10000010)
|
| | | #define I2C_FLAG_ADD10 ((uint32_t)0x10000008)
|
| | | #define I2C_FLAG_BTF ((uint32_t)0x10000004)
|
| | | #define I2C_FLAG_ADDR ((uint32_t)0x10000002)
|
| | | #define I2C_FLAG_SB ((uint32_t)0x10000001)
|
| | |
|
| | | #define IS_I2C_CLEAR_FLAG(FLAG) ((((FLAG) & (uint16_t)0x20FF) == 0x00) && ((FLAG) != (uint16_t)0x00))
|
| | |
|
| | | #define IS_I2C_GET_FLAG(FLAG) (((FLAG) == I2C_FLAG_DUALF) || ((FLAG) == I2C_FLAG_SMBHOST) || \
|
| | | ((FLAG) == I2C_FLAG_SMBDEFAULT) || ((FLAG) == I2C_FLAG_GENCALL) || \
|
| | | ((FLAG) == I2C_FLAG_TRA) || ((FLAG) == I2C_FLAG_BUSY) || \
|
| | | ((FLAG) == I2C_FLAG_MSL) || ((FLAG) == I2C_FLAG_SMBALERT) || \
|
| | | ((FLAG) == I2C_FLAG_TIMEOUT) || ((FLAG) == I2C_FLAG_PECERR) || \
|
| | | ((FLAG) == I2C_FLAG_OVR) || ((FLAG) == I2C_FLAG_AF) || \
|
| | | ((FLAG) == I2C_FLAG_ARLO) || ((FLAG) == I2C_FLAG_BERR) || \
|
| | | ((FLAG) == I2C_FLAG_TXE) || ((FLAG) == I2C_FLAG_RXNE) || \
|
| | | ((FLAG) == I2C_FLAG_STOPF) || ((FLAG) == I2C_FLAG_ADD10) || \
|
| | | ((FLAG) == I2C_FLAG_BTF) || ((FLAG) == I2C_FLAG_ADDR) || \
|
| | | ((FLAG) == I2C_FLAG_SB))
|
| | | /**
|
| | | * @}
|
| | | */
|
| | |
|
| | | /** @defgroup I2C_Events |
| | | * @{
|
| | | */
|
| | |
|
| | | /*========================================
|
| | | |
| | | I2C Master Events (Events grouped in order of communication)
|
| | | ==========================================*/
|
| | | /** |
| | | * @brief Communication start
|
| | | * |
| | | * After sending the START condition (I2C_GenerateSTART() function) the master |
| | | * has to wait for this event. It means that the Start condition has been correctly |
| | | * released on the I2C bus (the bus is free, no other devices is communicating).
|
| | | * |
| | | */
|
| | | /* --EV5 */
|
| | | #define I2C_EVENT_MASTER_MODE_SELECT ((uint32_t)0x00030001) /* BUSY, MSL and SB flag */
|
| | |
|
| | | /** |
| | | * @brief Address Acknowledge
|
| | | * |
| | | * After checking on EV5 (start condition correctly released on the bus), the |
| | | * master sends the address of the slave(s) with which it will communicate |
| | | * (I2C_Send7bitAddress() function, it also determines the direction of the communication: |
| | | * Master transmitter or Receiver). Then the master has to wait that a slave acknowledges |
| | | * his address. If an acknowledge is sent on the bus, one of the following events will |
| | | * be set:
|
| | | * |
| | | * 1) In case of Master Receiver (7-bit addressing): the I2C_EVENT_MASTER_RECEIVER_MODE_SELECTED |
| | | * event is set.
|
| | | * |
| | | * 2) In case of Master Transmitter (7-bit addressing): the I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED |
| | | * is set
|
| | | * |
| | | * 3) In case of 10-Bit addressing mode, the master (just after generating the START |
| | | * and checking on EV5) has to send the header of 10-bit addressing mode (I2C_SendData() |
| | | * function). Then master should wait on EV9. It means that the 10-bit addressing |
| | | * header has been correctly sent on the bus. Then master should send the second part of |
| | | * the 10-bit address (LSB) using the function I2C_Send7bitAddress(). Then master |
| | | * should wait for event EV6. |
| | | * |
| | | */
|
| | |
|
| | | /* --EV6 */
|
| | | #define I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED ((uint32_t)0x00070082) /* BUSY, MSL, ADDR, TXE and TRA flags */
|
| | | #define I2C_EVENT_MASTER_RECEIVER_MODE_SELECTED ((uint32_t)0x00030002) /* BUSY, MSL and ADDR flags */
|
| | | /* --EV9 */
|
| | | #define I2C_EVENT_MASTER_MODE_ADDRESS10 ((uint32_t)0x00030008) /* BUSY, MSL and ADD10 flags */
|
| | |
|
| | | /** |
| | | * @brief Communication events
|
| | | * |
| | | * If a communication is established (START condition generated and slave address |
| | | * acknowledged) then the master has to check on one of the following events for |
| | | * communication procedures:
|
| | | * |
| | | * 1) Master Receiver mode: The master has to wait on the event EV7 then to read |
| | | * the data received from the slave (I2C_ReceiveData() function).
|
| | | * |
| | | * 2) Master Transmitter mode: The master has to send data (I2C_SendData() |
| | | * function) then to wait on event EV8 or EV8_2.
|
| | | * These two events are similar: |
| | | * - EV8 means that the data has been written in the data register and is |
| | | * being shifted out.
|
| | | * - EV8_2 means that the data has been physically shifted out and output |
| | | * on the bus.
|
| | | * In most cases, using EV8 is sufficient for the application.
|
| | | * Using EV8_2 leads to a slower communication but ensure more reliable test.
|
| | | * EV8_2 is also more suitable than EV8 for testing on the last data transmission |
| | | * (before Stop condition generation).
|
| | | * |
| | | * @note In case the user software does not guarantee that this event EV7 is |
| | | * managed before the current byte end of transfer, then user may check on EV7 |
| | | * and BTF flag at the same time (ie. (I2C_EVENT_MASTER_BYTE_RECEIVED | I2C_FLAG_BTF)).
|
| | | * In this case the communication may be slower.
|
| | | * |
| | | */
|
| | |
|
| | | /* Master RECEIVER mode -----------------------------*/ |
| | | /* --EV7 */
|
| | | #define I2C_EVENT_MASTER_BYTE_RECEIVED ((uint32_t)0x00030040) /* BUSY, MSL and RXNE flags */
|
| | |
|
| | | /* Master TRANSMITTER mode --------------------------*/
|
| | | /* --EV8 */
|
| | | #define I2C_EVENT_MASTER_BYTE_TRANSMITTING ((uint32_t)0x00070080) /* TRA, BUSY, MSL, TXE flags */
|
| | | /* --EV8_2 */
|
| | | #define I2C_EVENT_MASTER_BYTE_TRANSMITTED ((uint32_t)0x00070084) /* TRA, BUSY, MSL, TXE and BTF flags */
|
| | |
|
| | |
|
| | | /*========================================
|
| | | |
| | | I2C Slave Events (Events grouped in order of communication)
|
| | | ==========================================*/
|
| | |
|
| | | /** |
| | | * @brief Communication start events
|
| | | * |
| | | * Wait on one of these events at the start of the communication. It means that |
| | | * the I2C peripheral detected a Start condition on the bus (generated by master |
| | | * device) followed by the peripheral address. The peripheral generates an ACK |
| | | * condition on the bus (if the acknowledge feature is enabled through function |
| | | * I2C_AcknowledgeConfig()) and the events listed above are set :
|
| | | * |
| | | * 1) In normal case (only one address managed by the slave), when the address |
| | | * sent by the master matches the own address of the peripheral (configured by |
| | | * I2C_OwnAddress1 field) the I2C_EVENT_SLAVE_XXX_ADDRESS_MATCHED event is set |
| | | * (where XXX could be TRANSMITTER or RECEIVER).
|
| | | * |
| | | * 2) In case the address sent by the master matches the second address of the |
| | | * peripheral (configured by the function I2C_OwnAddress2Config() and enabled |
| | | * by the function I2C_DualAddressCmd()) the events I2C_EVENT_SLAVE_XXX_SECONDADDRESS_MATCHED |
| | | * (where XXX could be TRANSMITTER or RECEIVER) are set.
|
| | | * |
| | | * 3) In case the address sent by the master is General Call (address 0x00) and |
| | | * if the General Call is enabled for the peripheral (using function I2C_GeneralCallCmd()) |
| | | * the following event is set I2C_EVENT_SLAVE_GENERALCALLADDRESS_MATCHED. |
| | | * |
| | | */
|
| | |
|
| | | /* --EV1 (all the events below are variants of EV1) */ |
| | | /* 1) Case of One Single Address managed by the slave */
|
| | | #define I2C_EVENT_SLAVE_RECEIVER_ADDRESS_MATCHED ((uint32_t)0x00020002) /* BUSY and ADDR flags */
|
| | | #define I2C_EVENT_SLAVE_TRANSMITTER_ADDRESS_MATCHED ((uint32_t)0x00060082) /* TRA, BUSY, TXE and ADDR flags */
|
| | |
|
| | | /* 2) Case of Dual address managed by the slave */
|
| | | #define I2C_EVENT_SLAVE_RECEIVER_SECONDADDRESS_MATCHED ((uint32_t)0x00820000) /* DUALF and BUSY flags */
|
| | | #define I2C_EVENT_SLAVE_TRANSMITTER_SECONDADDRESS_MATCHED ((uint32_t)0x00860080) /* DUALF, TRA, BUSY and TXE flags */
|
| | |
|
| | | /* 3) Case of General Call enabled for the slave */
|
| | | #define I2C_EVENT_SLAVE_GENERALCALLADDRESS_MATCHED ((uint32_t)0x00120000) /* GENCALL and BUSY flags */
|
| | |
|
| | | /** |
| | | * @brief Communication events
|
| | | * |
| | | * Wait on one of these events when EV1 has already been checked and: |
| | | * |
| | | * - Slave RECEIVER mode:
|
| | | * - EV2: When the application is expecting a data byte to be received. |
| | | * - EV4: When the application is expecting the end of the communication: master |
| | | * sends a stop condition and data transmission is stopped.
|
| | | * |
| | | * - Slave Transmitter mode:
|
| | | * - EV3: When a byte has been transmitted by the slave and the application is expecting |
| | | * the end of the byte transmission. The two events I2C_EVENT_SLAVE_BYTE_TRANSMITTED and
|
| | | * I2C_EVENT_SLAVE_BYTE_TRANSMITTING are similar. The second one can optionally be |
| | | * used when the user software doesn't guarantee the EV3 is managed before the
|
| | | * current byte end of transfer.
|
| | | * - EV3_2: When the master sends a NACK in order to tell slave that data transmission |
| | | * shall end (before sending the STOP condition). In this case slave has to stop sending |
| | | * data bytes and expect a Stop condition on the bus.
|
| | | * |
| | | * @note In case the user software does not guarantee that the event EV2 is |
| | | * managed before the current byte end of transfer, then user may check on EV2 |
| | | * and BTF flag at the same time (ie. (I2C_EVENT_SLAVE_BYTE_RECEIVED | I2C_FLAG_BTF)).
|
| | | * In this case the communication may be slower.
|
| | | *
|
| | | */
|
| | |
|
| | | /* Slave RECEIVER mode --------------------------*/ |
| | | /* --EV2 */
|
| | | #define I2C_EVENT_SLAVE_BYTE_RECEIVED ((uint32_t)0x00020040) /* BUSY and RXNE flags */
|
| | | /* --EV4 */
|
| | | #define I2C_EVENT_SLAVE_STOP_DETECTED ((uint32_t)0x00000010) /* STOPF flag */
|
| | |
|
| | | /* Slave TRANSMITTER mode -----------------------*/
|
| | | /* --EV3 */
|
| | | #define I2C_EVENT_SLAVE_BYTE_TRANSMITTED ((uint32_t)0x00060084) /* TRA, BUSY, TXE and BTF flags */
|
| | | #define I2C_EVENT_SLAVE_BYTE_TRANSMITTING ((uint32_t)0x00060080) /* TRA, BUSY and TXE flags */
|
| | | /* --EV3_2 */
|
| | | #define I2C_EVENT_SLAVE_ACK_FAILURE ((uint32_t)0x00000400) /* AF flag */
|
| | |
|
| | | /*=========================== End of Events Description ==========================================*/
|
| | |
|
| | | #define IS_I2C_EVENT(EVENT) (((EVENT) == I2C_EVENT_SLAVE_TRANSMITTER_ADDRESS_MATCHED) || \
|
| | | ((EVENT) == I2C_EVENT_SLAVE_RECEIVER_ADDRESS_MATCHED) || \
|
| | | ((EVENT) == I2C_EVENT_SLAVE_TRANSMITTER_SECONDADDRESS_MATCHED) || \
|
| | | ((EVENT) == I2C_EVENT_SLAVE_RECEIVER_SECONDADDRESS_MATCHED) || \
|
| | | ((EVENT) == I2C_EVENT_SLAVE_GENERALCALLADDRESS_MATCHED) || \
|
| | | ((EVENT) == I2C_EVENT_SLAVE_BYTE_RECEIVED) || \
|
| | | ((EVENT) == (I2C_EVENT_SLAVE_BYTE_RECEIVED | I2C_FLAG_DUALF)) || \
|
| | | ((EVENT) == (I2C_EVENT_SLAVE_BYTE_RECEIVED | I2C_FLAG_GENCALL)) || \
|
| | | ((EVENT) == I2C_EVENT_SLAVE_BYTE_TRANSMITTED) || \
|
| | | ((EVENT) == (I2C_EVENT_SLAVE_BYTE_TRANSMITTED | I2C_FLAG_DUALF)) || \
|
| | | ((EVENT) == (I2C_EVENT_SLAVE_BYTE_TRANSMITTED | I2C_FLAG_GENCALL)) || \
|
| | | ((EVENT) == I2C_EVENT_SLAVE_STOP_DETECTED) || \
|
| | | ((EVENT) == I2C_EVENT_MASTER_MODE_SELECT) || \
|
| | | ((EVENT) == I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED) || \
|
| | | ((EVENT) == I2C_EVENT_MASTER_RECEIVER_MODE_SELECTED) || \
|
| | | ((EVENT) == I2C_EVENT_MASTER_BYTE_RECEIVED) || \
|
| | | ((EVENT) == I2C_EVENT_MASTER_BYTE_TRANSMITTED) || \
|
| | | ((EVENT) == I2C_EVENT_MASTER_BYTE_TRANSMITTING) || \
|
| | | ((EVENT) == I2C_EVENT_MASTER_MODE_ADDRESS10) || \
|
| | | ((EVENT) == I2C_EVENT_SLAVE_ACK_FAILURE))
|
| | | /**
|
| | | * @}
|
| | | */
|
| | |
|
| | | /** @defgroup I2C_own_address1 |
| | | * @{
|
| | | */
|
| | |
|
| | | #define IS_I2C_OWN_ADDRESS1(ADDRESS1) ((ADDRESS1) <= 0x3FF)
|
| | | /**
|
| | | * @}
|
| | | */
|
| | |
|
| | | /** @defgroup I2C_clock_speed |
| | | * @{
|
| | | */
|
| | |
|
| | | #define IS_I2C_CLOCK_SPEED(SPEED) (((SPEED) >= 0x1) && ((SPEED) <= 400000))
|
| | | /**
|
| | | * @}
|
| | | */
|
| | |
|
| | | /**
|
| | | * @}
|
| | | */
|
| | |
|
| | | /** @defgroup I2C_Exported_Macros
|
| | | * @{
|
| | | */
|
| | |
|
| | | /**
|
| | | * @}
|
| | | */
|
| | |
|
| | | /** @defgroup I2C_Exported_Functions
|
| | | * @{
|
| | | */
|
| | |
|
| | | void I2C_DeInit(I2C_TypeDef* I2Cx);
|
| | | void I2C_Init(I2C_TypeDef* I2Cx, I2C_InitTypeDef* I2C_InitStruct);
|
| | | void I2C_StructInit(I2C_InitTypeDef* I2C_InitStruct);
|
| | | void I2C_Cmd(I2C_TypeDef* I2Cx, FunctionalState NewState);
|
| | | void I2C_DMACmd(I2C_TypeDef* I2Cx, FunctionalState NewState);
|
| | | void I2C_DMALastTransferCmd(I2C_TypeDef* I2Cx, FunctionalState NewState);
|
| | | void I2C_GenerateSTART(I2C_TypeDef* I2Cx, FunctionalState NewState);
|
| | | void I2C_GenerateSTOP(I2C_TypeDef* I2Cx, FunctionalState NewState);
|
| | | void I2C_AcknowledgeConfig(I2C_TypeDef* I2Cx, FunctionalState NewState);
|
| | | void I2C_OwnAddress2Config(I2C_TypeDef* I2Cx, uint8_t Address);
|
| | | void I2C_DualAddressCmd(I2C_TypeDef* I2Cx, FunctionalState NewState);
|
| | | void I2C_GeneralCallCmd(I2C_TypeDef* I2Cx, FunctionalState NewState);
|
| | | void I2C_ITConfig(I2C_TypeDef* I2Cx, uint16_t I2C_IT, FunctionalState NewState);
|
| | | void I2C_SendData(I2C_TypeDef* I2Cx, uint8_t Data);
|
| | | uint8_t I2C_ReceiveData(I2C_TypeDef* I2Cx);
|
| | | void I2C_Send7bitAddress(I2C_TypeDef* I2Cx, uint8_t Address, uint8_t I2C_Direction);
|
| | | uint16_t I2C_ReadRegister(I2C_TypeDef* I2Cx, uint8_t I2C_Register);
|
| | | void I2C_SoftwareResetCmd(I2C_TypeDef* I2Cx, FunctionalState NewState);
|
| | | void I2C_NACKPositionConfig(I2C_TypeDef* I2Cx, uint16_t I2C_NACKPosition);
|
| | | void I2C_SMBusAlertConfig(I2C_TypeDef* I2Cx, uint16_t I2C_SMBusAlert);
|
| | | void I2C_TransmitPEC(I2C_TypeDef* I2Cx, FunctionalState NewState);
|
| | | void I2C_PECPositionConfig(I2C_TypeDef* I2Cx, uint16_t I2C_PECPosition);
|
| | | void I2C_CalculatePEC(I2C_TypeDef* I2Cx, FunctionalState NewState);
|
| | | uint8_t I2C_GetPEC(I2C_TypeDef* I2Cx);
|
| | | void I2C_ARPCmd(I2C_TypeDef* I2Cx, FunctionalState NewState);
|
| | | void I2C_StretchClockCmd(I2C_TypeDef* I2Cx, FunctionalState NewState);
|
| | | void I2C_FastModeDutyCycleConfig(I2C_TypeDef* I2Cx, uint16_t I2C_DutyCycle);
|
| | |
|
| | | /**
|
| | | * @brief
|
| | | ****************************************************************************************
|
| | | *
|
| | | * I2C State Monitoring Functions
|
| | | * |
| | | **************************************************************************************** |
| | | * This I2C driver provides three different ways for I2C state monitoring
|
| | | * depending on the application requirements and constraints:
|
| | | * |
| | | * |
| | | * 1) Basic state monitoring:
|
| | | * Using I2C_CheckEvent() function:
|
| | | * It compares the status registers (SR1 and SR2) content to a given event
|
| | | * (can be the combination of one or more flags).
|
| | | * It returns SUCCESS if the current status includes the given flags |
| | | * and returns ERROR if one or more flags are missing in the current status.
|
| | | * - When to use:
|
| | | * - This function is suitable for most applications as well as for startup |
| | | * activity since the events are fully described in the product reference manual |
| | | * (RM0008).
|
| | | * - It is also suitable for users who need to define their own events.
|
| | | * - Limitations:
|
| | | * - If an error occurs (ie. error flags are set besides to the monitored flags),
|
| | | * the I2C_CheckEvent() function may return SUCCESS despite the communication
|
| | | * hold or corrupted real state. |
| | | * In this case, it is advised to use error interrupts to monitor the error
|
| | | * events and handle them in the interrupt IRQ handler.
|
| | | * |
| | | * @note |
| | | * For error management, it is advised to use the following functions:
|
| | | * - I2C_ITConfig() to configure and enable the error interrupts (I2C_IT_ERR).
|
| | | * - I2Cx_ER_IRQHandler() which is called when the error interrupt occurs.
|
| | | * Where x is the peripheral instance (I2C1, I2C2 ...)
|
| | | * - I2C_GetFlagStatus() or I2C_GetITStatus() to be called into I2Cx_ER_IRQHandler()
|
| | | * in order to determine which error occurred.
|
| | | * - I2C_ClearFlag() or I2C_ClearITPendingBit() and/or I2C_SoftwareResetCmd()
|
| | | * and/or I2C_GenerateStop() in order to clear the error flag and source,
|
| | | * and return to correct communication status.
|
| | | * |
| | | *
|
| | | * 2) Advanced state monitoring:
|
| | | * Using the function I2C_GetLastEvent() which returns the image of both status |
| | | * registers in a single word (uint32_t) (Status Register 2 value is shifted left |
| | | * by 16 bits and concatenated to Status Register 1).
|
| | | * - When to use:
|
| | | * - This function is suitable for the same applications above but it allows to
|
| | | * overcome the limitations of I2C_GetFlagStatus() function (see below).
|
| | | * The returned value could be compared to events already defined in the |
| | | * library (stm32f10x_i2c.h) or to custom values defined by user.
|
| | | * - This function is suitable when multiple flags are monitored at the same time.
|
| | | * - At the opposite of I2C_CheckEvent() function, this function allows user to
|
| | | * choose when an event is accepted (when all events flags are set and no |
| | | * other flags are set or just when the needed flags are set like |
| | | * I2C_CheckEvent() function).
|
| | | * - Limitations:
|
| | | * - User may need to define his own events.
|
| | | * - Same remark concerning the error management is applicable for this |
| | | * function if user decides to check only regular communication flags (and |
| | | * ignores error flags).
|
| | | * |
| | | *
|
| | | * 3) Flag-based state monitoring:
|
| | | * Using the function I2C_GetFlagStatus() which simply returns the status of |
| | | * one single flag (ie. I2C_FLAG_RXNE ...). |
| | | * - When to use:
|
| | | * - This function could be used for specific applications or in debug phase.
|
| | | * - It is suitable when only one flag checking is needed (most I2C events |
| | | * are monitored through multiple flags).
|
| | | * - Limitations: |
| | | * - When calling this function, the Status register is accessed. Some flags are
|
| | | * cleared when the status register is accessed. So checking the status
|
| | | * of one Flag, may clear other ones.
|
| | | * - Function may need to be called twice or more in order to monitor one |
| | | * single event.
|
| | | * |
| | | */
|
| | |
|
| | | /**
|
| | | * |
| | | * 1) Basic state monitoring
|
| | | *******************************************************************************
|
| | | */
|
| | | ErrorStatus I2C_CheckEvent(I2C_TypeDef* I2Cx, uint32_t I2C_EVENT);
|
| | | /**
|
| | | * |
| | | * 2) Advanced state monitoring
|
| | | *******************************************************************************
|
| | | */
|
| | | uint32_t I2C_GetLastEvent(I2C_TypeDef* I2Cx);
|
| | | /**
|
| | | * |
| | | * 3) Flag-based state monitoring
|
| | | *******************************************************************************
|
| | | */
|
| | | FlagStatus I2C_GetFlagStatus(I2C_TypeDef* I2Cx, uint32_t I2C_FLAG);
|
| | | /**
|
| | | *
|
| | | *******************************************************************************
|
| | | */
|
| | |
|
| | | void I2C_ClearFlag(I2C_TypeDef* I2Cx, uint32_t I2C_FLAG);
|
| | | ITStatus I2C_GetITStatus(I2C_TypeDef* I2Cx, uint32_t I2C_IT);
|
| | | void I2C_ClearITPendingBit(I2C_TypeDef* I2Cx, uint32_t I2C_IT);
|
| | |
|
| | | #ifdef __cplusplus
|
| | | }
|
| | | #endif
|
| | |
|
| | | #endif /*__STM32F10x_I2C_H */
|
| | | /**
|
| | | * @}
|
| | | */ |
| | |
|
| | | /**
|
| | | * @}
|
| | | */ |
| | |
|
| | | /**
|
| | | * @}
|
| | | */ |
| | |
|
| | | /******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/
|
New file |
| | |
| | | /**
|
| | | ******************************************************************************
|
| | | * @file Project/STM32F10x_StdPeriph_Template/stm32f10x_it.h |
| | | * @author MCD Application Team
|
| | | * @version V3.5.0
|
| | | * @date 08-April-2011
|
| | | * @brief This file contains the headers of the interrupt handlers.
|
| | | ******************************************************************************
|
| | | * @attention
|
| | | *
|
| | | * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
|
| | | * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE
|
| | | * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY
|
| | | * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING
|
| | | * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE
|
| | | * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
|
| | | *
|
| | | * <h2><center>© COPYRIGHT 2011 STMicroelectronics</center></h2>
|
| | | ******************************************************************************
|
| | | */ |
| | |
|
| | | /* Define to prevent recursive inclusion -------------------------------------*/
|
| | | #ifndef __STM32F10x_IT_H
|
| | | #define __STM32F10x_IT_H
|
| | |
|
| | | #ifdef __cplusplus
|
| | | extern "C" {
|
| | | #endif |
| | |
|
| | | /* Includes ------------------------------------------------------------------*/
|
| | | #include "stm32f10x.h"
|
| | |
|
| | | /* Exported types ------------------------------------------------------------*/
|
| | | /* Exported constants --------------------------------------------------------*/
|
| | | /* Exported macro ------------------------------------------------------------*/
|
| | | /* Exported functions ------------------------------------------------------- */
|
| | |
|
| | | void NMI_Handler(void);
|
| | | void HardFault_Handler(void);
|
| | | void MemManage_Handler(void);
|
| | | void BusFault_Handler(void);
|
| | | void UsageFault_Handler(void);
|
| | | void SVC_Handler(void);
|
| | | void DebugMon_Handler(void);
|
| | | void PendSV_Handler(void);
|
| | | void SysTick_Handler(void);
|
| | |
|
| | | #ifdef __cplusplus
|
| | | }
|
| | | #endif
|
| | |
|
| | | #endif /* __STM32F10x_IT_H */
|
| | |
|
| | | /******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/
|
New file |
| | |
| | | /**
|
| | | ******************************************************************************
|
| | | * @file stm32f10x_iwdg.h
|
| | | * @author MCD Application Team
|
| | | * @version V3.5.0
|
| | | * @date 11-March-2011
|
| | | * @brief This file contains all the functions prototypes for the IWDG |
| | | * firmware library.
|
| | | ******************************************************************************
|
| | | * @attention
|
| | | *
|
| | | * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
|
| | | * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE
|
| | | * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY
|
| | | * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING
|
| | | * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE
|
| | | * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
|
| | | *
|
| | | * <h2><center>© COPYRIGHT 2011 STMicroelectronics</center></h2>
|
| | | ******************************************************************************
|
| | | */
|
| | |
|
| | | /* Define to prevent recursive inclusion -------------------------------------*/
|
| | | #ifndef __STM32F10x_IWDG_H
|
| | | #define __STM32F10x_IWDG_H
|
| | |
|
| | | #ifdef __cplusplus
|
| | | extern "C" {
|
| | | #endif
|
| | |
|
| | | /* Includes ------------------------------------------------------------------*/
|
| | | #include "stm32f10x.h"
|
| | |
|
| | | /** @addtogroup STM32F10x_StdPeriph_Driver
|
| | | * @{
|
| | | */
|
| | |
|
| | | /** @addtogroup IWDG
|
| | | * @{
|
| | | */
|
| | |
|
| | | /** @defgroup IWDG_Exported_Types
|
| | | * @{
|
| | | */
|
| | |
|
| | | /**
|
| | | * @}
|
| | | */
|
| | |
|
| | | /** @defgroup IWDG_Exported_Constants
|
| | | * @{
|
| | | */
|
| | |
|
| | | /** @defgroup IWDG_WriteAccess
|
| | | * @{
|
| | | */
|
| | |
|
| | | #define IWDG_WriteAccess_Enable ((uint16_t)0x5555)
|
| | | #define IWDG_WriteAccess_Disable ((uint16_t)0x0000)
|
| | | #define IS_IWDG_WRITE_ACCESS(ACCESS) (((ACCESS) == IWDG_WriteAccess_Enable) || \
|
| | | ((ACCESS) == IWDG_WriteAccess_Disable))
|
| | | /**
|
| | | * @}
|
| | | */
|
| | |
|
| | | /** @defgroup IWDG_prescaler |
| | | * @{
|
| | | */
|
| | |
|
| | | #define IWDG_Prescaler_4 ((uint8_t)0x00)
|
| | | #define IWDG_Prescaler_8 ((uint8_t)0x01)
|
| | | #define IWDG_Prescaler_16 ((uint8_t)0x02)
|
| | | #define IWDG_Prescaler_32 ((uint8_t)0x03)
|
| | | #define IWDG_Prescaler_64 ((uint8_t)0x04)
|
| | | #define IWDG_Prescaler_128 ((uint8_t)0x05)
|
| | | #define IWDG_Prescaler_256 ((uint8_t)0x06)
|
| | | #define IS_IWDG_PRESCALER(PRESCALER) (((PRESCALER) == IWDG_Prescaler_4) || \
|
| | | ((PRESCALER) == IWDG_Prescaler_8) || \
|
| | | ((PRESCALER) == IWDG_Prescaler_16) || \
|
| | | ((PRESCALER) == IWDG_Prescaler_32) || \
|
| | | ((PRESCALER) == IWDG_Prescaler_64) || \
|
| | | ((PRESCALER) == IWDG_Prescaler_128)|| \
|
| | | ((PRESCALER) == IWDG_Prescaler_256))
|
| | | /**
|
| | | * @}
|
| | | */
|
| | |
|
| | | /** @defgroup IWDG_Flag |
| | | * @{
|
| | | */
|
| | |
|
| | | #define IWDG_FLAG_PVU ((uint16_t)0x0001)
|
| | | #define IWDG_FLAG_RVU ((uint16_t)0x0002)
|
| | | #define IS_IWDG_FLAG(FLAG) (((FLAG) == IWDG_FLAG_PVU) || ((FLAG) == IWDG_FLAG_RVU))
|
| | | #define IS_IWDG_RELOAD(RELOAD) ((RELOAD) <= 0xFFF)
|
| | | /**
|
| | | * @}
|
| | | */
|
| | |
|
| | | /**
|
| | | * @}
|
| | | */
|
| | |
|
| | | /** @defgroup IWDG_Exported_Macros
|
| | | * @{
|
| | | */
|
| | |
|
| | | /**
|
| | | * @}
|
| | | */
|
| | |
|
| | | /** @defgroup IWDG_Exported_Functions
|
| | | * @{
|
| | | */
|
| | |
|
| | | void IWDG_WriteAccessCmd(uint16_t IWDG_WriteAccess);
|
| | | void IWDG_SetPrescaler(uint8_t IWDG_Prescaler);
|
| | | void IWDG_SetReload(uint16_t Reload);
|
| | | void IWDG_ReloadCounter(void);
|
| | | void IWDG_Enable(void);
|
| | | FlagStatus IWDG_GetFlagStatus(uint16_t IWDG_FLAG);
|
| | |
|
| | | #ifdef __cplusplus
|
| | | }
|
| | | #endif
|
| | |
|
| | | #endif /* __STM32F10x_IWDG_H */
|
| | | /**
|
| | | * @}
|
| | | */
|
| | |
|
| | | /**
|
| | | * @}
|
| | | */
|
| | |
|
| | | /**
|
| | | * @}
|
| | | */
|
| | |
|
| | | /******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/
|
New file |
| | |
| | | /**
|
| | | ******************************************************************************
|
| | | * @file stm32f10x_pwr.h
|
| | | * @author MCD Application Team
|
| | | * @version V3.5.0
|
| | | * @date 11-March-2011
|
| | | * @brief This file contains all the functions prototypes for the PWR firmware |
| | | * library.
|
| | | ******************************************************************************
|
| | | * @attention
|
| | | *
|
| | | * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
|
| | | * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE
|
| | | * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY
|
| | | * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING
|
| | | * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE
|
| | | * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
|
| | | *
|
| | | * <h2><center>© COPYRIGHT 2011 STMicroelectronics</center></h2>
|
| | | ******************************************************************************
|
| | | */
|
| | |
|
| | | /* Define to prevent recursive inclusion -------------------------------------*/
|
| | | #ifndef __STM32F10x_PWR_H
|
| | | #define __STM32F10x_PWR_H
|
| | |
|
| | | #ifdef __cplusplus
|
| | | extern "C" {
|
| | | #endif
|
| | |
|
| | | /* Includes ------------------------------------------------------------------*/
|
| | | #include "stm32f10x.h"
|
| | |
|
| | | /** @addtogroup STM32F10x_StdPeriph_Driver
|
| | | * @{
|
| | | */
|
| | |
|
| | | /** @addtogroup PWR
|
| | | * @{
|
| | | */ |
| | |
|
| | | /** @defgroup PWR_Exported_Types
|
| | | * @{
|
| | | */ |
| | |
|
| | | /**
|
| | | * @}
|
| | | */ |
| | |
|
| | | /** @defgroup PWR_Exported_Constants
|
| | | * @{
|
| | | */ |
| | |
|
| | | /** @defgroup PVD_detection_level |
| | | * @{
|
| | | */ |
| | |
|
| | | #define PWR_PVDLevel_2V2 ((uint32_t)0x00000000)
|
| | | #define PWR_PVDLevel_2V3 ((uint32_t)0x00000020)
|
| | | #define PWR_PVDLevel_2V4 ((uint32_t)0x00000040)
|
| | | #define PWR_PVDLevel_2V5 ((uint32_t)0x00000060)
|
| | | #define PWR_PVDLevel_2V6 ((uint32_t)0x00000080)
|
| | | #define PWR_PVDLevel_2V7 ((uint32_t)0x000000A0)
|
| | | #define PWR_PVDLevel_2V8 ((uint32_t)0x000000C0)
|
| | | #define PWR_PVDLevel_2V9 ((uint32_t)0x000000E0)
|
| | | #define IS_PWR_PVD_LEVEL(LEVEL) (((LEVEL) == PWR_PVDLevel_2V2) || ((LEVEL) == PWR_PVDLevel_2V3)|| \
|
| | | ((LEVEL) == PWR_PVDLevel_2V4) || ((LEVEL) == PWR_PVDLevel_2V5)|| \
|
| | | ((LEVEL) == PWR_PVDLevel_2V6) || ((LEVEL) == PWR_PVDLevel_2V7)|| \
|
| | | ((LEVEL) == PWR_PVDLevel_2V8) || ((LEVEL) == PWR_PVDLevel_2V9))
|
| | | /**
|
| | | * @}
|
| | | */
|
| | |
|
| | | /** @defgroup Regulator_state_is_STOP_mode |
| | | * @{
|
| | | */
|
| | |
|
| | | #define PWR_Regulator_ON ((uint32_t)0x00000000)
|
| | | #define PWR_Regulator_LowPower ((uint32_t)0x00000001)
|
| | | #define IS_PWR_REGULATOR(REGULATOR) (((REGULATOR) == PWR_Regulator_ON) || \
|
| | | ((REGULATOR) == PWR_Regulator_LowPower))
|
| | | /**
|
| | | * @}
|
| | | */
|
| | |
|
| | | /** @defgroup STOP_mode_entry |
| | | * @{
|
| | | */
|
| | |
|
| | | #define PWR_STOPEntry_WFI ((uint8_t)0x01)
|
| | | #define PWR_STOPEntry_WFE ((uint8_t)0x02)
|
| | | #define IS_PWR_STOP_ENTRY(ENTRY) (((ENTRY) == PWR_STOPEntry_WFI) || ((ENTRY) == PWR_STOPEntry_WFE))
|
| | | |
| | | /**
|
| | | * @}
|
| | | */
|
| | |
|
| | | /** @defgroup PWR_Flag |
| | | * @{
|
| | | */
|
| | |
|
| | | #define PWR_FLAG_WU ((uint32_t)0x00000001)
|
| | | #define PWR_FLAG_SB ((uint32_t)0x00000002)
|
| | | #define PWR_FLAG_PVDO ((uint32_t)0x00000004)
|
| | | #define IS_PWR_GET_FLAG(FLAG) (((FLAG) == PWR_FLAG_WU) || ((FLAG) == PWR_FLAG_SB) || \
|
| | | ((FLAG) == PWR_FLAG_PVDO))
|
| | |
|
| | | #define IS_PWR_CLEAR_FLAG(FLAG) (((FLAG) == PWR_FLAG_WU) || ((FLAG) == PWR_FLAG_SB))
|
| | | /**
|
| | | * @}
|
| | | */
|
| | |
|
| | | /**
|
| | | * @}
|
| | | */
|
| | |
|
| | | /** @defgroup PWR_Exported_Macros
|
| | | * @{
|
| | | */
|
| | |
|
| | | /**
|
| | | * @}
|
| | | */
|
| | |
|
| | | /** @defgroup PWR_Exported_Functions
|
| | | * @{
|
| | | */
|
| | |
|
| | | void PWR_DeInit(void);
|
| | | void PWR_BackupAccessCmd(FunctionalState NewState);
|
| | | void PWR_PVDCmd(FunctionalState NewState);
|
| | | void PWR_PVDLevelConfig(uint32_t PWR_PVDLevel);
|
| | | void PWR_WakeUpPinCmd(FunctionalState NewState);
|
| | | void PWR_EnterSTOPMode(uint32_t PWR_Regulator, uint8_t PWR_STOPEntry);
|
| | | void PWR_EnterSTANDBYMode(void);
|
| | | FlagStatus PWR_GetFlagStatus(uint32_t PWR_FLAG);
|
| | | void PWR_ClearFlag(uint32_t PWR_FLAG);
|
| | |
|
| | | #ifdef __cplusplus
|
| | | }
|
| | | #endif
|
| | |
|
| | | #endif /* __STM32F10x_PWR_H */
|
| | | /**
|
| | | * @}
|
| | | */
|
| | |
|
| | | /**
|
| | | * @}
|
| | | */
|
| | |
|
| | | /**
|
| | | * @}
|
| | | */
|
| | |
|
| | | /******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/
|
New file |
| | |
| | | /**
|
| | | ******************************************************************************
|
| | | * @file stm32f10x_rcc.h
|
| | | * @author MCD Application Team
|
| | | * @version V3.5.0
|
| | | * @date 11-March-2011
|
| | | * @brief This file contains all the functions prototypes for the RCC firmware |
| | | * library.
|
| | | ******************************************************************************
|
| | | * @attention
|
| | | *
|
| | | * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
|
| | | * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE
|
| | | * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY
|
| | | * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING
|
| | | * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE
|
| | | * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
|
| | | *
|
| | | * <h2><center>© COPYRIGHT 2011 STMicroelectronics</center></h2>
|
| | | ******************************************************************************
|
| | | */
|
| | |
|
| | | /* Define to prevent recursive inclusion -------------------------------------*/
|
| | | #ifndef __STM32F10x_RCC_H
|
| | | #define __STM32F10x_RCC_H
|
| | |
|
| | | #ifdef __cplusplus
|
| | | extern "C" {
|
| | | #endif
|
| | |
|
| | | /* Includes ------------------------------------------------------------------*/
|
| | | #include "stm32f10x.h"
|
| | |
|
| | | /** @addtogroup STM32F10x_StdPeriph_Driver
|
| | | * @{
|
| | | */
|
| | |
|
| | | /** @addtogroup RCC
|
| | | * @{
|
| | | */
|
| | |
|
| | | /** @defgroup RCC_Exported_Types
|
| | | * @{
|
| | | */
|
| | |
|
| | | typedef struct
|
| | | {
|
| | | uint32_t SYSCLK_Frequency; /*!< returns SYSCLK clock frequency expressed in Hz */
|
| | | uint32_t HCLK_Frequency; /*!< returns HCLK clock frequency expressed in Hz */
|
| | | uint32_t PCLK1_Frequency; /*!< returns PCLK1 clock frequency expressed in Hz */
|
| | | uint32_t PCLK2_Frequency; /*!< returns PCLK2 clock frequency expressed in Hz */
|
| | | uint32_t ADCCLK_Frequency; /*!< returns ADCCLK clock frequency expressed in Hz */
|
| | | }RCC_ClocksTypeDef;
|
| | |
|
| | | /**
|
| | | * @}
|
| | | */
|
| | |
|
| | | /** @defgroup RCC_Exported_Constants
|
| | | * @{
|
| | | */
|
| | |
|
| | | /** @defgroup HSE_configuration |
| | | * @{
|
| | | */
|
| | |
|
| | | #define RCC_HSE_OFF ((uint32_t)0x00000000)
|
| | | #define RCC_HSE_ON ((uint32_t)0x00010000)
|
| | | #define RCC_HSE_Bypass ((uint32_t)0x00040000)
|
| | | #define IS_RCC_HSE(HSE) (((HSE) == RCC_HSE_OFF) || ((HSE) == RCC_HSE_ON) || \
|
| | | ((HSE) == RCC_HSE_Bypass))
|
| | |
|
| | | /**
|
| | | * @}
|
| | | */ |
| | |
|
| | | /** @defgroup PLL_entry_clock_source |
| | | * @{
|
| | | */
|
| | |
|
| | | #define RCC_PLLSource_HSI_Div2 ((uint32_t)0x00000000)
|
| | |
|
| | | #if !defined (STM32F10X_LD_VL) && !defined (STM32F10X_MD_VL) && !defined (STM32F10X_HD_VL) && !defined (STM32F10X_CL)
|
| | | #define RCC_PLLSource_HSE_Div1 ((uint32_t)0x00010000)
|
| | | #define RCC_PLLSource_HSE_Div2 ((uint32_t)0x00030000)
|
| | | #define IS_RCC_PLL_SOURCE(SOURCE) (((SOURCE) == RCC_PLLSource_HSI_Div2) || \
|
| | | ((SOURCE) == RCC_PLLSource_HSE_Div1) || \
|
| | | ((SOURCE) == RCC_PLLSource_HSE_Div2))
|
| | | #else
|
| | | #define RCC_PLLSource_PREDIV1 ((uint32_t)0x00010000)
|
| | | #define IS_RCC_PLL_SOURCE(SOURCE) (((SOURCE) == RCC_PLLSource_HSI_Div2) || \
|
| | | ((SOURCE) == RCC_PLLSource_PREDIV1))
|
| | | #endif /* STM32F10X_CL */ |
| | |
|
| | | /**
|
| | | * @}
|
| | | */ |
| | |
|
| | | /** @defgroup PLL_multiplication_factor |
| | | * @{
|
| | | */
|
| | | #ifndef STM32F10X_CL
|
| | | #define RCC_PLLMul_2 ((uint32_t)0x00000000)
|
| | | #define RCC_PLLMul_3 ((uint32_t)0x00040000)
|
| | | #define RCC_PLLMul_4 ((uint32_t)0x00080000)
|
| | | #define RCC_PLLMul_5 ((uint32_t)0x000C0000)
|
| | | #define RCC_PLLMul_6 ((uint32_t)0x00100000)
|
| | | #define RCC_PLLMul_7 ((uint32_t)0x00140000)
|
| | | #define RCC_PLLMul_8 ((uint32_t)0x00180000)
|
| | | #define RCC_PLLMul_9 ((uint32_t)0x001C0000)
|
| | | #define RCC_PLLMul_10 ((uint32_t)0x00200000)
|
| | | #define RCC_PLLMul_11 ((uint32_t)0x00240000)
|
| | | #define RCC_PLLMul_12 ((uint32_t)0x00280000)
|
| | | #define RCC_PLLMul_13 ((uint32_t)0x002C0000)
|
| | | #define RCC_PLLMul_14 ((uint32_t)0x00300000)
|
| | | #define RCC_PLLMul_15 ((uint32_t)0x00340000)
|
| | | #define RCC_PLLMul_16 ((uint32_t)0x00380000)
|
| | | #define IS_RCC_PLL_MUL(MUL) (((MUL) == RCC_PLLMul_2) || ((MUL) == RCC_PLLMul_3) || \
|
| | | ((MUL) == RCC_PLLMul_4) || ((MUL) == RCC_PLLMul_5) || \
|
| | | ((MUL) == RCC_PLLMul_6) || ((MUL) == RCC_PLLMul_7) || \
|
| | | ((MUL) == RCC_PLLMul_8) || ((MUL) == RCC_PLLMul_9) || \
|
| | | ((MUL) == RCC_PLLMul_10) || ((MUL) == RCC_PLLMul_11) || \
|
| | | ((MUL) == RCC_PLLMul_12) || ((MUL) == RCC_PLLMul_13) || \
|
| | | ((MUL) == RCC_PLLMul_14) || ((MUL) == RCC_PLLMul_15) || \
|
| | | ((MUL) == RCC_PLLMul_16))
|
| | |
|
| | | #else
|
| | | #define RCC_PLLMul_4 ((uint32_t)0x00080000)
|
| | | #define RCC_PLLMul_5 ((uint32_t)0x000C0000)
|
| | | #define RCC_PLLMul_6 ((uint32_t)0x00100000)
|
| | | #define RCC_PLLMul_7 ((uint32_t)0x00140000)
|
| | | #define RCC_PLLMul_8 ((uint32_t)0x00180000)
|
| | | #define RCC_PLLMul_9 ((uint32_t)0x001C0000)
|
| | | #define RCC_PLLMul_6_5 ((uint32_t)0x00340000)
|
| | |
|
| | | #define IS_RCC_PLL_MUL(MUL) (((MUL) == RCC_PLLMul_4) || ((MUL) == RCC_PLLMul_5) || \
|
| | | ((MUL) == RCC_PLLMul_6) || ((MUL) == RCC_PLLMul_7) || \
|
| | | ((MUL) == RCC_PLLMul_8) || ((MUL) == RCC_PLLMul_9) || \
|
| | | ((MUL) == RCC_PLLMul_6_5))
|
| | | #endif /* STM32F10X_CL */ |
| | | /**
|
| | | * @}
|
| | | */
|
| | |
|
| | | /** @defgroup PREDIV1_division_factor
|
| | | * @{
|
| | | */
|
| | | #if defined (STM32F10X_LD_VL) || defined (STM32F10X_MD_VL) || defined (STM32F10X_HD_VL) || defined (STM32F10X_CL)
|
| | | #define RCC_PREDIV1_Div1 ((uint32_t)0x00000000)
|
| | | #define RCC_PREDIV1_Div2 ((uint32_t)0x00000001)
|
| | | #define RCC_PREDIV1_Div3 ((uint32_t)0x00000002)
|
| | | #define RCC_PREDIV1_Div4 ((uint32_t)0x00000003)
|
| | | #define RCC_PREDIV1_Div5 ((uint32_t)0x00000004)
|
| | | #define RCC_PREDIV1_Div6 ((uint32_t)0x00000005)
|
| | | #define RCC_PREDIV1_Div7 ((uint32_t)0x00000006)
|
| | | #define RCC_PREDIV1_Div8 ((uint32_t)0x00000007)
|
| | | #define RCC_PREDIV1_Div9 ((uint32_t)0x00000008)
|
| | | #define RCC_PREDIV1_Div10 ((uint32_t)0x00000009)
|
| | | #define RCC_PREDIV1_Div11 ((uint32_t)0x0000000A)
|
| | | #define RCC_PREDIV1_Div12 ((uint32_t)0x0000000B)
|
| | | #define RCC_PREDIV1_Div13 ((uint32_t)0x0000000C)
|
| | | #define RCC_PREDIV1_Div14 ((uint32_t)0x0000000D)
|
| | | #define RCC_PREDIV1_Div15 ((uint32_t)0x0000000E)
|
| | | #define RCC_PREDIV1_Div16 ((uint32_t)0x0000000F)
|
| | |
|
| | | #define IS_RCC_PREDIV1(PREDIV1) (((PREDIV1) == RCC_PREDIV1_Div1) || ((PREDIV1) == RCC_PREDIV1_Div2) || \
|
| | | ((PREDIV1) == RCC_PREDIV1_Div3) || ((PREDIV1) == RCC_PREDIV1_Div4) || \
|
| | | ((PREDIV1) == RCC_PREDIV1_Div5) || ((PREDIV1) == RCC_PREDIV1_Div6) || \
|
| | | ((PREDIV1) == RCC_PREDIV1_Div7) || ((PREDIV1) == RCC_PREDIV1_Div8) || \
|
| | | ((PREDIV1) == RCC_PREDIV1_Div9) || ((PREDIV1) == RCC_PREDIV1_Div10) || \
|
| | | ((PREDIV1) == RCC_PREDIV1_Div11) || ((PREDIV1) == RCC_PREDIV1_Div12) || \
|
| | | ((PREDIV1) == RCC_PREDIV1_Div13) || ((PREDIV1) == RCC_PREDIV1_Div14) || \
|
| | | ((PREDIV1) == RCC_PREDIV1_Div15) || ((PREDIV1) == RCC_PREDIV1_Div16))
|
| | | #endif
|
| | | /**
|
| | | * @}
|
| | | */
|
| | |
|
| | |
|
| | | /** @defgroup PREDIV1_clock_source
|
| | | * @{
|
| | | */
|
| | | #ifdef STM32F10X_CL
|
| | | /* PREDIV1 clock source (for STM32 connectivity line devices) */
|
| | | #define RCC_PREDIV1_Source_HSE ((uint32_t)0x00000000) |
| | | #define RCC_PREDIV1_Source_PLL2 ((uint32_t)0x00010000) |
| | |
|
| | | #define IS_RCC_PREDIV1_SOURCE(SOURCE) (((SOURCE) == RCC_PREDIV1_Source_HSE) || \
|
| | | ((SOURCE) == RCC_PREDIV1_Source_PLL2)) |
| | | #elif defined (STM32F10X_LD_VL) || defined (STM32F10X_MD_VL) || defined (STM32F10X_HD_VL)
|
| | | /* PREDIV1 clock source (for STM32 Value line devices) */
|
| | | #define RCC_PREDIV1_Source_HSE ((uint32_t)0x00000000) |
| | |
|
| | | #define IS_RCC_PREDIV1_SOURCE(SOURCE) (((SOURCE) == RCC_PREDIV1_Source_HSE)) |
| | | #endif
|
| | | /**
|
| | | * @}
|
| | | */
|
| | |
|
| | | #ifdef STM32F10X_CL
|
| | | /** @defgroup PREDIV2_division_factor
|
| | | * @{
|
| | | */
|
| | | |
| | | #define RCC_PREDIV2_Div1 ((uint32_t)0x00000000)
|
| | | #define RCC_PREDIV2_Div2 ((uint32_t)0x00000010)
|
| | | #define RCC_PREDIV2_Div3 ((uint32_t)0x00000020)
|
| | | #define RCC_PREDIV2_Div4 ((uint32_t)0x00000030)
|
| | | #define RCC_PREDIV2_Div5 ((uint32_t)0x00000040)
|
| | | #define RCC_PREDIV2_Div6 ((uint32_t)0x00000050)
|
| | | #define RCC_PREDIV2_Div7 ((uint32_t)0x00000060)
|
| | | #define RCC_PREDIV2_Div8 ((uint32_t)0x00000070)
|
| | | #define RCC_PREDIV2_Div9 ((uint32_t)0x00000080)
|
| | | #define RCC_PREDIV2_Div10 ((uint32_t)0x00000090)
|
| | | #define RCC_PREDIV2_Div11 ((uint32_t)0x000000A0)
|
| | | #define RCC_PREDIV2_Div12 ((uint32_t)0x000000B0)
|
| | | #define RCC_PREDIV2_Div13 ((uint32_t)0x000000C0)
|
| | | #define RCC_PREDIV2_Div14 ((uint32_t)0x000000D0)
|
| | | #define RCC_PREDIV2_Div15 ((uint32_t)0x000000E0)
|
| | | #define RCC_PREDIV2_Div16 ((uint32_t)0x000000F0)
|
| | |
|
| | | #define IS_RCC_PREDIV2(PREDIV2) (((PREDIV2) == RCC_PREDIV2_Div1) || ((PREDIV2) == RCC_PREDIV2_Div2) || \
|
| | | ((PREDIV2) == RCC_PREDIV2_Div3) || ((PREDIV2) == RCC_PREDIV2_Div4) || \
|
| | | ((PREDIV2) == RCC_PREDIV2_Div5) || ((PREDIV2) == RCC_PREDIV2_Div6) || \
|
| | | ((PREDIV2) == RCC_PREDIV2_Div7) || ((PREDIV2) == RCC_PREDIV2_Div8) || \
|
| | | ((PREDIV2) == RCC_PREDIV2_Div9) || ((PREDIV2) == RCC_PREDIV2_Div10) || \
|
| | | ((PREDIV2) == RCC_PREDIV2_Div11) || ((PREDIV2) == RCC_PREDIV2_Div12) || \
|
| | | ((PREDIV2) == RCC_PREDIV2_Div13) || ((PREDIV2) == RCC_PREDIV2_Div14) || \
|
| | | ((PREDIV2) == RCC_PREDIV2_Div15) || ((PREDIV2) == RCC_PREDIV2_Div16))
|
| | | /**
|
| | | * @}
|
| | | */
|
| | |
|
| | |
|
| | | /** @defgroup PLL2_multiplication_factor
|
| | | * @{
|
| | | */
|
| | | |
| | | #define RCC_PLL2Mul_8 ((uint32_t)0x00000600)
|
| | | #define RCC_PLL2Mul_9 ((uint32_t)0x00000700)
|
| | | #define RCC_PLL2Mul_10 ((uint32_t)0x00000800)
|
| | | #define RCC_PLL2Mul_11 ((uint32_t)0x00000900)
|
| | | #define RCC_PLL2Mul_12 ((uint32_t)0x00000A00)
|
| | | #define RCC_PLL2Mul_13 ((uint32_t)0x00000B00)
|
| | | #define RCC_PLL2Mul_14 ((uint32_t)0x00000C00)
|
| | | #define RCC_PLL2Mul_16 ((uint32_t)0x00000E00)
|
| | | #define RCC_PLL2Mul_20 ((uint32_t)0x00000F00)
|
| | |
|
| | | #define IS_RCC_PLL2_MUL(MUL) (((MUL) == RCC_PLL2Mul_8) || ((MUL) == RCC_PLL2Mul_9) || \
|
| | | ((MUL) == RCC_PLL2Mul_10) || ((MUL) == RCC_PLL2Mul_11) || \
|
| | | ((MUL) == RCC_PLL2Mul_12) || ((MUL) == RCC_PLL2Mul_13) || \
|
| | | ((MUL) == RCC_PLL2Mul_14) || ((MUL) == RCC_PLL2Mul_16) || \
|
| | | ((MUL) == RCC_PLL2Mul_20))
|
| | | /**
|
| | | * @}
|
| | | */
|
| | |
|
| | |
|
| | | /** @defgroup PLL3_multiplication_factor
|
| | | * @{
|
| | | */
|
| | |
|
| | | #define RCC_PLL3Mul_8 ((uint32_t)0x00006000)
|
| | | #define RCC_PLL3Mul_9 ((uint32_t)0x00007000)
|
| | | #define RCC_PLL3Mul_10 ((uint32_t)0x00008000)
|
| | | #define RCC_PLL3Mul_11 ((uint32_t)0x00009000)
|
| | | #define RCC_PLL3Mul_12 ((uint32_t)0x0000A000)
|
| | | #define RCC_PLL3Mul_13 ((uint32_t)0x0000B000)
|
| | | #define RCC_PLL3Mul_14 ((uint32_t)0x0000C000)
|
| | | #define RCC_PLL3Mul_16 ((uint32_t)0x0000E000)
|
| | | #define RCC_PLL3Mul_20 ((uint32_t)0x0000F000)
|
| | |
|
| | | #define IS_RCC_PLL3_MUL(MUL) (((MUL) == RCC_PLL3Mul_8) || ((MUL) == RCC_PLL3Mul_9) || \
|
| | | ((MUL) == RCC_PLL3Mul_10) || ((MUL) == RCC_PLL3Mul_11) || \
|
| | | ((MUL) == RCC_PLL3Mul_12) || ((MUL) == RCC_PLL3Mul_13) || \
|
| | | ((MUL) == RCC_PLL3Mul_14) || ((MUL) == RCC_PLL3Mul_16) || \
|
| | | ((MUL) == RCC_PLL3Mul_20))
|
| | | /**
|
| | | * @}
|
| | | */
|
| | |
|
| | | #endif /* STM32F10X_CL */
|
| | |
|
| | |
|
| | | /** @defgroup System_clock_source |
| | | * @{
|
| | | */
|
| | |
|
| | | #define RCC_SYSCLKSource_HSI ((uint32_t)0x00000000)
|
| | | #define RCC_SYSCLKSource_HSE ((uint32_t)0x00000001)
|
| | | #define RCC_SYSCLKSource_PLLCLK ((uint32_t)0x00000002)
|
| | | #define IS_RCC_SYSCLK_SOURCE(SOURCE) (((SOURCE) == RCC_SYSCLKSource_HSI) || \
|
| | | ((SOURCE) == RCC_SYSCLKSource_HSE) || \
|
| | | ((SOURCE) == RCC_SYSCLKSource_PLLCLK))
|
| | | /**
|
| | | * @}
|
| | | */
|
| | |
|
| | | /** @defgroup AHB_clock_source |
| | | * @{
|
| | | */
|
| | |
|
| | | #define RCC_SYSCLK_Div1 ((uint32_t)0x00000000)
|
| | | #define RCC_SYSCLK_Div2 ((uint32_t)0x00000080)
|
| | | #define RCC_SYSCLK_Div4 ((uint32_t)0x00000090)
|
| | | #define RCC_SYSCLK_Div8 ((uint32_t)0x000000A0)
|
| | | #define RCC_SYSCLK_Div16 ((uint32_t)0x000000B0)
|
| | | #define RCC_SYSCLK_Div64 ((uint32_t)0x000000C0)
|
| | | #define RCC_SYSCLK_Div128 ((uint32_t)0x000000D0)
|
| | | #define RCC_SYSCLK_Div256 ((uint32_t)0x000000E0)
|
| | | #define RCC_SYSCLK_Div512 ((uint32_t)0x000000F0)
|
| | | #define IS_RCC_HCLK(HCLK) (((HCLK) == RCC_SYSCLK_Div1) || ((HCLK) == RCC_SYSCLK_Div2) || \
|
| | | ((HCLK) == RCC_SYSCLK_Div4) || ((HCLK) == RCC_SYSCLK_Div8) || \
|
| | | ((HCLK) == RCC_SYSCLK_Div16) || ((HCLK) == RCC_SYSCLK_Div64) || \
|
| | | ((HCLK) == RCC_SYSCLK_Div128) || ((HCLK) == RCC_SYSCLK_Div256) || \
|
| | | ((HCLK) == RCC_SYSCLK_Div512))
|
| | | /**
|
| | | * @}
|
| | | */ |
| | |
|
| | | /** @defgroup APB1_APB2_clock_source |
| | | * @{
|
| | | */
|
| | |
|
| | | #define RCC_HCLK_Div1 ((uint32_t)0x00000000)
|
| | | #define RCC_HCLK_Div2 ((uint32_t)0x00000400)
|
| | | #define RCC_HCLK_Div4 ((uint32_t)0x00000500)
|
| | | #define RCC_HCLK_Div8 ((uint32_t)0x00000600)
|
| | | #define RCC_HCLK_Div16 ((uint32_t)0x00000700)
|
| | | #define IS_RCC_PCLK(PCLK) (((PCLK) == RCC_HCLK_Div1) || ((PCLK) == RCC_HCLK_Div2) || \
|
| | | ((PCLK) == RCC_HCLK_Div4) || ((PCLK) == RCC_HCLK_Div8) || \
|
| | | ((PCLK) == RCC_HCLK_Div16))
|
| | | /**
|
| | | * @}
|
| | | */
|
| | |
|
| | | /** @defgroup RCC_Interrupt_source |
| | | * @{
|
| | | */
|
| | |
|
| | | #define RCC_IT_LSIRDY ((uint8_t)0x01)
|
| | | #define RCC_IT_LSERDY ((uint8_t)0x02)
|
| | | #define RCC_IT_HSIRDY ((uint8_t)0x04)
|
| | | #define RCC_IT_HSERDY ((uint8_t)0x08)
|
| | | #define RCC_IT_PLLRDY ((uint8_t)0x10)
|
| | | #define RCC_IT_CSS ((uint8_t)0x80)
|
| | |
|
| | | #ifndef STM32F10X_CL
|
| | | #define IS_RCC_IT(IT) ((((IT) & (uint8_t)0xE0) == 0x00) && ((IT) != 0x00))
|
| | | #define IS_RCC_GET_IT(IT) (((IT) == RCC_IT_LSIRDY) || ((IT) == RCC_IT_LSERDY) || \
|
| | | ((IT) == RCC_IT_HSIRDY) || ((IT) == RCC_IT_HSERDY) || \
|
| | | ((IT) == RCC_IT_PLLRDY) || ((IT) == RCC_IT_CSS))
|
| | | #define IS_RCC_CLEAR_IT(IT) ((((IT) & (uint8_t)0x60) == 0x00) && ((IT) != 0x00))
|
| | | #else
|
| | | #define RCC_IT_PLL2RDY ((uint8_t)0x20)
|
| | | #define RCC_IT_PLL3RDY ((uint8_t)0x40)
|
| | | #define IS_RCC_IT(IT) ((((IT) & (uint8_t)0x80) == 0x00) && ((IT) != 0x00))
|
| | | #define IS_RCC_GET_IT(IT) (((IT) == RCC_IT_LSIRDY) || ((IT) == RCC_IT_LSERDY) || \
|
| | | ((IT) == RCC_IT_HSIRDY) || ((IT) == RCC_IT_HSERDY) || \
|
| | | ((IT) == RCC_IT_PLLRDY) || ((IT) == RCC_IT_CSS) || \
|
| | | ((IT) == RCC_IT_PLL2RDY) || ((IT) == RCC_IT_PLL3RDY))
|
| | | #define IS_RCC_CLEAR_IT(IT) ((IT) != 0x00)
|
| | | #endif /* STM32F10X_CL */ |
| | |
|
| | |
|
| | | /**
|
| | | * @}
|
| | | */
|
| | |
|
| | | #ifndef STM32F10X_CL
|
| | | /** @defgroup USB_Device_clock_source |
| | | * @{
|
| | | */
|
| | |
|
| | | #define RCC_USBCLKSource_PLLCLK_1Div5 ((uint8_t)0x00)
|
| | | #define RCC_USBCLKSource_PLLCLK_Div1 ((uint8_t)0x01)
|
| | |
|
| | | #define IS_RCC_USBCLK_SOURCE(SOURCE) (((SOURCE) == RCC_USBCLKSource_PLLCLK_1Div5) || \
|
| | | ((SOURCE) == RCC_USBCLKSource_PLLCLK_Div1))
|
| | | /**
|
| | | * @}
|
| | | */
|
| | | #else
|
| | | /** @defgroup USB_OTG_FS_clock_source |
| | | * @{
|
| | | */
|
| | | #define RCC_OTGFSCLKSource_PLLVCO_Div3 ((uint8_t)0x00)
|
| | | #define RCC_OTGFSCLKSource_PLLVCO_Div2 ((uint8_t)0x01)
|
| | |
|
| | | #define IS_RCC_OTGFSCLK_SOURCE(SOURCE) (((SOURCE) == RCC_OTGFSCLKSource_PLLVCO_Div3) || \
|
| | | ((SOURCE) == RCC_OTGFSCLKSource_PLLVCO_Div2))
|
| | | /**
|
| | | * @}
|
| | | */
|
| | | #endif /* STM32F10X_CL */ |
| | |
|
| | |
|
| | | #ifdef STM32F10X_CL
|
| | | /** @defgroup I2S2_clock_source |
| | | * @{
|
| | | */
|
| | | #define RCC_I2S2CLKSource_SYSCLK ((uint8_t)0x00)
|
| | | #define RCC_I2S2CLKSource_PLL3_VCO ((uint8_t)0x01)
|
| | |
|
| | | #define IS_RCC_I2S2CLK_SOURCE(SOURCE) (((SOURCE) == RCC_I2S2CLKSource_SYSCLK) || \
|
| | | ((SOURCE) == RCC_I2S2CLKSource_PLL3_VCO))
|
| | | /**
|
| | | * @}
|
| | | */
|
| | |
|
| | | /** @defgroup I2S3_clock_source |
| | | * @{
|
| | | */
|
| | | #define RCC_I2S3CLKSource_SYSCLK ((uint8_t)0x00)
|
| | | #define RCC_I2S3CLKSource_PLL3_VCO ((uint8_t)0x01)
|
| | |
|
| | | #define IS_RCC_I2S3CLK_SOURCE(SOURCE) (((SOURCE) == RCC_I2S3CLKSource_SYSCLK) || \
|
| | | ((SOURCE) == RCC_I2S3CLKSource_PLL3_VCO)) |
| | | /**
|
| | | * @}
|
| | | */
|
| | | #endif /* STM32F10X_CL */ |
| | | |
| | |
|
| | | /** @defgroup ADC_clock_source |
| | | * @{
|
| | | */
|
| | |
|
| | | #define RCC_PCLK2_Div2 ((uint32_t)0x00000000)
|
| | | #define RCC_PCLK2_Div4 ((uint32_t)0x00004000)
|
| | | #define RCC_PCLK2_Div6 ((uint32_t)0x00008000)
|
| | | #define RCC_PCLK2_Div8 ((uint32_t)0x0000C000)
|
| | | #define IS_RCC_ADCCLK(ADCCLK) (((ADCCLK) == RCC_PCLK2_Div2) || ((ADCCLK) == RCC_PCLK2_Div4) || \
|
| | | ((ADCCLK) == RCC_PCLK2_Div6) || ((ADCCLK) == RCC_PCLK2_Div8))
|
| | | /**
|
| | | * @}
|
| | | */
|
| | |
|
| | | /** @defgroup LSE_configuration |
| | | * @{
|
| | | */
|
| | |
|
| | | #define RCC_LSE_OFF ((uint8_t)0x00)
|
| | | #define RCC_LSE_ON ((uint8_t)0x01)
|
| | | #define RCC_LSE_Bypass ((uint8_t)0x04)
|
| | | #define IS_RCC_LSE(LSE) (((LSE) == RCC_LSE_OFF) || ((LSE) == RCC_LSE_ON) || \
|
| | | ((LSE) == RCC_LSE_Bypass))
|
| | | /**
|
| | | * @}
|
| | | */
|
| | |
|
| | | /** @defgroup RTC_clock_source |
| | | * @{
|
| | | */
|
| | |
|
| | | #define RCC_RTCCLKSource_LSE ((uint32_t)0x00000100)
|
| | | #define RCC_RTCCLKSource_LSI ((uint32_t)0x00000200)
|
| | | #define RCC_RTCCLKSource_HSE_Div128 ((uint32_t)0x00000300)
|
| | | #define IS_RCC_RTCCLK_SOURCE(SOURCE) (((SOURCE) == RCC_RTCCLKSource_LSE) || \
|
| | | ((SOURCE) == RCC_RTCCLKSource_LSI) || \
|
| | | ((SOURCE) == RCC_RTCCLKSource_HSE_Div128))
|
| | | /**
|
| | | * @}
|
| | | */
|
| | |
|
| | | /** @defgroup AHB_peripheral |
| | | * @{
|
| | | */
|
| | |
|
| | | #define RCC_AHBPeriph_DMA1 ((uint32_t)0x00000001)
|
| | | #define RCC_AHBPeriph_DMA2 ((uint32_t)0x00000002)
|
| | | #define RCC_AHBPeriph_SRAM ((uint32_t)0x00000004)
|
| | | #define RCC_AHBPeriph_FLITF ((uint32_t)0x00000010)
|
| | | #define RCC_AHBPeriph_CRC ((uint32_t)0x00000040)
|
| | |
|
| | | #ifndef STM32F10X_CL
|
| | | #define RCC_AHBPeriph_FSMC ((uint32_t)0x00000100)
|
| | | #define RCC_AHBPeriph_SDIO ((uint32_t)0x00000400)
|
| | | #define IS_RCC_AHB_PERIPH(PERIPH) ((((PERIPH) & 0xFFFFFAA8) == 0x00) && ((PERIPH) != 0x00))
|
| | | #else
|
| | | #define RCC_AHBPeriph_OTG_FS ((uint32_t)0x00001000)
|
| | | #define RCC_AHBPeriph_ETH_MAC ((uint32_t)0x00004000)
|
| | | #define RCC_AHBPeriph_ETH_MAC_Tx ((uint32_t)0x00008000)
|
| | | #define RCC_AHBPeriph_ETH_MAC_Rx ((uint32_t)0x00010000)
|
| | |
|
| | | #define IS_RCC_AHB_PERIPH(PERIPH) ((((PERIPH) & 0xFFFE2FA8) == 0x00) && ((PERIPH) != 0x00))
|
| | | #define IS_RCC_AHB_PERIPH_RESET(PERIPH) ((((PERIPH) & 0xFFFFAFFF) == 0x00) && ((PERIPH) != 0x00))
|
| | | #endif /* STM32F10X_CL */
|
| | | /**
|
| | | * @}
|
| | | */
|
| | |
|
| | | /** @defgroup APB2_peripheral |
| | | * @{
|
| | | */
|
| | |
|
| | | #define RCC_APB2Periph_AFIO ((uint32_t)0x00000001)
|
| | | #define RCC_APB2Periph_GPIOA ((uint32_t)0x00000004)
|
| | | #define RCC_APB2Periph_GPIOB ((uint32_t)0x00000008)
|
| | | #define RCC_APB2Periph_GPIOC ((uint32_t)0x00000010)
|
| | | #define RCC_APB2Periph_GPIOD ((uint32_t)0x00000020)
|
| | | #define RCC_APB2Periph_GPIOE ((uint32_t)0x00000040)
|
| | | #define RCC_APB2Periph_GPIOF ((uint32_t)0x00000080)
|
| | | #define RCC_APB2Periph_GPIOG ((uint32_t)0x00000100)
|
| | | #define RCC_APB2Periph_ADC1 ((uint32_t)0x00000200)
|
| | | #define RCC_APB2Periph_ADC2 ((uint32_t)0x00000400)
|
| | | #define RCC_APB2Periph_TIM1 ((uint32_t)0x00000800)
|
| | | #define RCC_APB2Periph_SPI1 ((uint32_t)0x00001000)
|
| | | #define RCC_APB2Periph_TIM8 ((uint32_t)0x00002000)
|
| | | #define RCC_APB2Periph_USART1 ((uint32_t)0x00004000)
|
| | | #define RCC_APB2Periph_ADC3 ((uint32_t)0x00008000)
|
| | | #define RCC_APB2Periph_TIM15 ((uint32_t)0x00010000)
|
| | | #define RCC_APB2Periph_TIM16 ((uint32_t)0x00020000)
|
| | | #define RCC_APB2Periph_TIM17 ((uint32_t)0x00040000)
|
| | | #define RCC_APB2Periph_TIM9 ((uint32_t)0x00080000)
|
| | | #define RCC_APB2Periph_TIM10 ((uint32_t)0x00100000)
|
| | | #define RCC_APB2Periph_TIM11 ((uint32_t)0x00200000)
|
| | |
|
| | | #define IS_RCC_APB2_PERIPH(PERIPH) ((((PERIPH) & 0xFFC00002) == 0x00) && ((PERIPH) != 0x00))
|
| | | /**
|
| | | * @}
|
| | | */ |
| | |
|
| | | /** @defgroup APB1_peripheral |
| | | * @{
|
| | | */
|
| | |
|
| | | #define RCC_APB1Periph_TIM2 ((uint32_t)0x00000001)
|
| | | #define RCC_APB1Periph_TIM3 ((uint32_t)0x00000002)
|
| | | #define RCC_APB1Periph_TIM4 ((uint32_t)0x00000004)
|
| | | #define RCC_APB1Periph_TIM5 ((uint32_t)0x00000008)
|
| | | #define RCC_APB1Periph_TIM6 ((uint32_t)0x00000010)
|
| | | #define RCC_APB1Periph_TIM7 ((uint32_t)0x00000020)
|
| | | #define RCC_APB1Periph_TIM12 ((uint32_t)0x00000040)
|
| | | #define RCC_APB1Periph_TIM13 ((uint32_t)0x00000080)
|
| | | #define RCC_APB1Periph_TIM14 ((uint32_t)0x00000100)
|
| | | #define RCC_APB1Periph_WWDG ((uint32_t)0x00000800)
|
| | | #define RCC_APB1Periph_SPI2 ((uint32_t)0x00004000)
|
| | | #define RCC_APB1Periph_SPI3 ((uint32_t)0x00008000)
|
| | | #define RCC_APB1Periph_USART2 ((uint32_t)0x00020000)
|
| | | #define RCC_APB1Periph_USART3 ((uint32_t)0x00040000)
|
| | | #define RCC_APB1Periph_UART4 ((uint32_t)0x00080000)
|
| | | #define RCC_APB1Periph_UART5 ((uint32_t)0x00100000)
|
| | | #define RCC_APB1Periph_I2C1 ((uint32_t)0x00200000)
|
| | | #define RCC_APB1Periph_I2C2 ((uint32_t)0x00400000)
|
| | | #define RCC_APB1Periph_USB ((uint32_t)0x00800000)
|
| | | #define RCC_APB1Periph_CAN1 ((uint32_t)0x02000000)
|
| | | #define RCC_APB1Periph_CAN2 ((uint32_t)0x04000000)
|
| | | #define RCC_APB1Periph_BKP ((uint32_t)0x08000000)
|
| | | #define RCC_APB1Periph_PWR ((uint32_t)0x10000000)
|
| | | #define RCC_APB1Periph_DAC ((uint32_t)0x20000000)
|
| | | #define RCC_APB1Periph_CEC ((uint32_t)0x40000000)
|
| | | |
| | | #define IS_RCC_APB1_PERIPH(PERIPH) ((((PERIPH) & 0x81013600) == 0x00) && ((PERIPH) != 0x00))
|
| | |
|
| | | /**
|
| | | * @}
|
| | | */
|
| | |
|
| | | /** @defgroup Clock_source_to_output_on_MCO_pin |
| | | * @{
|
| | | */
|
| | |
|
| | | #define RCC_MCO_NoClock ((uint8_t)0x00)
|
| | | #define RCC_MCO_SYSCLK ((uint8_t)0x04)
|
| | | #define RCC_MCO_HSI ((uint8_t)0x05)
|
| | | #define RCC_MCO_HSE ((uint8_t)0x06)
|
| | | #define RCC_MCO_PLLCLK_Div2 ((uint8_t)0x07)
|
| | |
|
| | | #ifndef STM32F10X_CL
|
| | | #define IS_RCC_MCO(MCO) (((MCO) == RCC_MCO_NoClock) || ((MCO) == RCC_MCO_HSI) || \
|
| | | ((MCO) == RCC_MCO_SYSCLK) || ((MCO) == RCC_MCO_HSE) || \
|
| | | ((MCO) == RCC_MCO_PLLCLK_Div2))
|
| | | #else
|
| | | #define RCC_MCO_PLL2CLK ((uint8_t)0x08)
|
| | | #define RCC_MCO_PLL3CLK_Div2 ((uint8_t)0x09)
|
| | | #define RCC_MCO_XT1 ((uint8_t)0x0A)
|
| | | #define RCC_MCO_PLL3CLK ((uint8_t)0x0B)
|
| | |
|
| | | #define IS_RCC_MCO(MCO) (((MCO) == RCC_MCO_NoClock) || ((MCO) == RCC_MCO_HSI) || \
|
| | | ((MCO) == RCC_MCO_SYSCLK) || ((MCO) == RCC_MCO_HSE) || \
|
| | | ((MCO) == RCC_MCO_PLLCLK_Div2) || ((MCO) == RCC_MCO_PLL2CLK) || \
|
| | | ((MCO) == RCC_MCO_PLL3CLK_Div2) || ((MCO) == RCC_MCO_XT1) || \
|
| | | ((MCO) == RCC_MCO_PLL3CLK))
|
| | | #endif /* STM32F10X_CL */ |
| | |
|
| | | /**
|
| | | * @}
|
| | | */
|
| | |
|
| | | /** @defgroup RCC_Flag |
| | | * @{
|
| | | */
|
| | |
|
| | | #define RCC_FLAG_HSIRDY ((uint8_t)0x21)
|
| | | #define RCC_FLAG_HSERDY ((uint8_t)0x31)
|
| | | #define RCC_FLAG_PLLRDY ((uint8_t)0x39)
|
| | | #define RCC_FLAG_LSERDY ((uint8_t)0x41)
|
| | | #define RCC_FLAG_LSIRDY ((uint8_t)0x61)
|
| | | #define RCC_FLAG_PINRST ((uint8_t)0x7A)
|
| | | #define RCC_FLAG_PORRST ((uint8_t)0x7B)
|
| | | #define RCC_FLAG_SFTRST ((uint8_t)0x7C)
|
| | | #define RCC_FLAG_IWDGRST ((uint8_t)0x7D)
|
| | | #define RCC_FLAG_WWDGRST ((uint8_t)0x7E)
|
| | | #define RCC_FLAG_LPWRRST ((uint8_t)0x7F)
|
| | |
|
| | | #ifndef STM32F10X_CL
|
| | | #define IS_RCC_FLAG(FLAG) (((FLAG) == RCC_FLAG_HSIRDY) || ((FLAG) == RCC_FLAG_HSERDY) || \
|
| | | ((FLAG) == RCC_FLAG_PLLRDY) || ((FLAG) == RCC_FLAG_LSERDY) || \
|
| | | ((FLAG) == RCC_FLAG_LSIRDY) || ((FLAG) == RCC_FLAG_PINRST) || \
|
| | | ((FLAG) == RCC_FLAG_PORRST) || ((FLAG) == RCC_FLAG_SFTRST) || \
|
| | | ((FLAG) == RCC_FLAG_IWDGRST)|| ((FLAG) == RCC_FLAG_WWDGRST)|| \
|
| | | ((FLAG) == RCC_FLAG_LPWRRST))
|
| | | #else
|
| | | #define RCC_FLAG_PLL2RDY ((uint8_t)0x3B) |
| | | #define RCC_FLAG_PLL3RDY ((uint8_t)0x3D) |
| | | #define IS_RCC_FLAG(FLAG) (((FLAG) == RCC_FLAG_HSIRDY) || ((FLAG) == RCC_FLAG_HSERDY) || \
|
| | | ((FLAG) == RCC_FLAG_PLLRDY) || ((FLAG) == RCC_FLAG_LSERDY) || \
|
| | | ((FLAG) == RCC_FLAG_PLL2RDY) || ((FLAG) == RCC_FLAG_PLL3RDY) || \
|
| | | ((FLAG) == RCC_FLAG_LSIRDY) || ((FLAG) == RCC_FLAG_PINRST) || \
|
| | | ((FLAG) == RCC_FLAG_PORRST) || ((FLAG) == RCC_FLAG_SFTRST) || \
|
| | | ((FLAG) == RCC_FLAG_IWDGRST)|| ((FLAG) == RCC_FLAG_WWDGRST)|| \
|
| | | ((FLAG) == RCC_FLAG_LPWRRST))
|
| | | #endif /* STM32F10X_CL */ |
| | |
|
| | | #define IS_RCC_CALIBRATION_VALUE(VALUE) ((VALUE) <= 0x1F)
|
| | | /**
|
| | | * @}
|
| | | */
|
| | |
|
| | | /**
|
| | | * @}
|
| | | */
|
| | |
|
| | | /** @defgroup RCC_Exported_Macros
|
| | | * @{
|
| | | */
|
| | |
|
| | | /**
|
| | | * @}
|
| | | */
|
| | |
|
| | | /** @defgroup RCC_Exported_Functions
|
| | | * @{
|
| | | */
|
| | |
|
| | | void RCC_DeInit(void);
|
| | | void RCC_HSEConfig(uint32_t RCC_HSE);
|
| | | ErrorStatus RCC_WaitForHSEStartUp(void);
|
| | | void RCC_AdjustHSICalibrationValue(uint8_t HSICalibrationValue);
|
| | | void RCC_HSICmd(FunctionalState NewState);
|
| | | void RCC_PLLConfig(uint32_t RCC_PLLSource, uint32_t RCC_PLLMul);
|
| | | void RCC_PLLCmd(FunctionalState NewState);
|
| | |
|
| | | #if defined (STM32F10X_LD_VL) || defined (STM32F10X_MD_VL) || defined (STM32F10X_HD_VL) || defined (STM32F10X_CL)
|
| | | void RCC_PREDIV1Config(uint32_t RCC_PREDIV1_Source, uint32_t RCC_PREDIV1_Div);
|
| | | #endif
|
| | |
|
| | | #ifdef STM32F10X_CL
|
| | | void RCC_PREDIV2Config(uint32_t RCC_PREDIV2_Div);
|
| | | void RCC_PLL2Config(uint32_t RCC_PLL2Mul);
|
| | | void RCC_PLL2Cmd(FunctionalState NewState);
|
| | | void RCC_PLL3Config(uint32_t RCC_PLL3Mul);
|
| | | void RCC_PLL3Cmd(FunctionalState NewState);
|
| | | #endif /* STM32F10X_CL */ |
| | |
|
| | | void RCC_SYSCLKConfig(uint32_t RCC_SYSCLKSource);
|
| | | uint8_t RCC_GetSYSCLKSource(void);
|
| | | void RCC_HCLKConfig(uint32_t RCC_SYSCLK);
|
| | | void RCC_PCLK1Config(uint32_t RCC_HCLK);
|
| | | void RCC_PCLK2Config(uint32_t RCC_HCLK);
|
| | | void RCC_ITConfig(uint8_t RCC_IT, FunctionalState NewState);
|
| | |
|
| | | #ifndef STM32F10X_CL
|
| | | void RCC_USBCLKConfig(uint32_t RCC_USBCLKSource);
|
| | | #else
|
| | | void RCC_OTGFSCLKConfig(uint32_t RCC_OTGFSCLKSource);
|
| | | #endif /* STM32F10X_CL */ |
| | |
|
| | | void RCC_ADCCLKConfig(uint32_t RCC_PCLK2);
|
| | |
|
| | | #ifdef STM32F10X_CL
|
| | | void RCC_I2S2CLKConfig(uint32_t RCC_I2S2CLKSource); |
| | | void RCC_I2S3CLKConfig(uint32_t RCC_I2S3CLKSource);
|
| | | #endif /* STM32F10X_CL */ |
| | |
|
| | | void RCC_LSEConfig(uint8_t RCC_LSE);
|
| | | void RCC_LSICmd(FunctionalState NewState);
|
| | | void RCC_RTCCLKConfig(uint32_t RCC_RTCCLKSource);
|
| | | void RCC_RTCCLKCmd(FunctionalState NewState);
|
| | | void RCC_GetClocksFreq(RCC_ClocksTypeDef* RCC_Clocks);
|
| | | void RCC_AHBPeriphClockCmd(uint32_t RCC_AHBPeriph, FunctionalState NewState);
|
| | | void RCC_APB2PeriphClockCmd(uint32_t RCC_APB2Periph, FunctionalState NewState);
|
| | | void RCC_APB1PeriphClockCmd(uint32_t RCC_APB1Periph, FunctionalState NewState);
|
| | |
|
| | | #ifdef STM32F10X_CL
|
| | | void RCC_AHBPeriphResetCmd(uint32_t RCC_AHBPeriph, FunctionalState NewState);
|
| | | #endif /* STM32F10X_CL */ |
| | |
|
| | | void RCC_APB2PeriphResetCmd(uint32_t RCC_APB2Periph, FunctionalState NewState);
|
| | | void RCC_APB1PeriphResetCmd(uint32_t RCC_APB1Periph, FunctionalState NewState);
|
| | | void RCC_BackupResetCmd(FunctionalState NewState);
|
| | | void RCC_ClockSecuritySystemCmd(FunctionalState NewState);
|
| | | void RCC_MCOConfig(uint8_t RCC_MCO);
|
| | | FlagStatus RCC_GetFlagStatus(uint8_t RCC_FLAG);
|
| | | void RCC_ClearFlag(void);
|
| | | ITStatus RCC_GetITStatus(uint8_t RCC_IT);
|
| | | void RCC_ClearITPendingBit(uint8_t RCC_IT);
|
| | |
|
| | | #ifdef __cplusplus
|
| | | }
|
| | | #endif
|
| | |
|
| | | #endif /* __STM32F10x_RCC_H */
|
| | | /**
|
| | | * @}
|
| | | */
|
| | |
|
| | | /**
|
| | | * @}
|
| | | */
|
| | |
|
| | | /**
|
| | | * @}
|
| | | */ |
| | |
|
| | | /******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/
|
New file |
| | |
| | | /**
|
| | | ******************************************************************************
|
| | | * @file stm32f10x_rtc.h
|
| | | * @author MCD Application Team
|
| | | * @version V3.5.0
|
| | | * @date 11-March-2011
|
| | | * @brief This file contains all the functions prototypes for the RTC firmware |
| | | * library.
|
| | | ******************************************************************************
|
| | | * @attention
|
| | | *
|
| | | * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
|
| | | * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE
|
| | | * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY
|
| | | * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING
|
| | | * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE
|
| | | * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
|
| | | *
|
| | | * <h2><center>© COPYRIGHT 2011 STMicroelectronics</center></h2>
|
| | | ******************************************************************************
|
| | | */
|
| | |
|
| | | /* Define to prevent recursive inclusion -------------------------------------*/
|
| | | #ifndef __STM32F10x_RTC_H
|
| | | #define __STM32F10x_RTC_H
|
| | |
|
| | | #ifdef __cplusplus
|
| | | extern "C" {
|
| | | #endif
|
| | |
|
| | | /* Includes ------------------------------------------------------------------*/
|
| | | #include "stm32f10x.h"
|
| | |
|
| | | /** @addtogroup STM32F10x_StdPeriph_Driver
|
| | | * @{
|
| | | */
|
| | |
|
| | | /** @addtogroup RTC
|
| | | * @{
|
| | | */ |
| | |
|
| | | /** @defgroup RTC_Exported_Types
|
| | | * @{
|
| | | */ |
| | |
|
| | | /**
|
| | | * @}
|
| | | */ |
| | |
|
| | | /** @defgroup RTC_Exported_Constants
|
| | | * @{
|
| | | */
|
| | |
|
| | | /** @defgroup RTC_interrupts_define |
| | | * @{
|
| | | */
|
| | |
|
| | | #define RTC_IT_OW ((uint16_t)0x0004) /*!< Overflow interrupt */
|
| | | #define RTC_IT_ALR ((uint16_t)0x0002) /*!< Alarm interrupt */
|
| | | #define RTC_IT_SEC ((uint16_t)0x0001) /*!< Second interrupt */
|
| | | #define IS_RTC_IT(IT) ((((IT) & (uint16_t)0xFFF8) == 0x00) && ((IT) != 0x00))
|
| | | #define IS_RTC_GET_IT(IT) (((IT) == RTC_IT_OW) || ((IT) == RTC_IT_ALR) || \
|
| | | ((IT) == RTC_IT_SEC))
|
| | | /**
|
| | | * @}
|
| | | */ |
| | |
|
| | | /** @defgroup RTC_interrupts_flags |
| | | * @{
|
| | | */
|
| | |
|
| | | #define RTC_FLAG_RTOFF ((uint16_t)0x0020) /*!< RTC Operation OFF flag */
|
| | | #define RTC_FLAG_RSF ((uint16_t)0x0008) /*!< Registers Synchronized flag */
|
| | | #define RTC_FLAG_OW ((uint16_t)0x0004) /*!< Overflow flag */
|
| | | #define RTC_FLAG_ALR ((uint16_t)0x0002) /*!< Alarm flag */
|
| | | #define RTC_FLAG_SEC ((uint16_t)0x0001) /*!< Second flag */
|
| | | #define IS_RTC_CLEAR_FLAG(FLAG) ((((FLAG) & (uint16_t)0xFFF0) == 0x00) && ((FLAG) != 0x00))
|
| | | #define IS_RTC_GET_FLAG(FLAG) (((FLAG) == RTC_FLAG_RTOFF) || ((FLAG) == RTC_FLAG_RSF) || \
|
| | | ((FLAG) == RTC_FLAG_OW) || ((FLAG) == RTC_FLAG_ALR) || \
|
| | | ((FLAG) == RTC_FLAG_SEC))
|
| | | #define IS_RTC_PRESCALER(PRESCALER) ((PRESCALER) <= 0xFFFFF)
|
| | |
|
| | | /**
|
| | | * @}
|
| | | */
|
| | |
|
| | | /**
|
| | | * @}
|
| | | */
|
| | |
|
| | | /** @defgroup RTC_Exported_Macros
|
| | | * @{
|
| | | */
|
| | |
|
| | | /**
|
| | | * @}
|
| | | */
|
| | |
|
| | | /** @defgroup RTC_Exported_Functions
|
| | | * @{
|
| | | */
|
| | |
|
| | | void RTC_ITConfig(uint16_t RTC_IT, FunctionalState NewState);
|
| | | void RTC_EnterConfigMode(void);
|
| | | void RTC_ExitConfigMode(void);
|
| | | uint32_t RTC_GetCounter(void);
|
| | | void RTC_SetCounter(uint32_t CounterValue);
|
| | | void RTC_SetPrescaler(uint32_t PrescalerValue);
|
| | | void RTC_SetAlarm(uint32_t AlarmValue);
|
| | | uint32_t RTC_GetDivider(void);
|
| | | void RTC_WaitForLastTask(void);
|
| | | void RTC_WaitForSynchro(void);
|
| | | FlagStatus RTC_GetFlagStatus(uint16_t RTC_FLAG);
|
| | | void RTC_ClearFlag(uint16_t RTC_FLAG);
|
| | | ITStatus RTC_GetITStatus(uint16_t RTC_IT);
|
| | | void RTC_ClearITPendingBit(uint16_t RTC_IT);
|
| | |
|
| | | #ifdef __cplusplus
|
| | | }
|
| | | #endif
|
| | |
|
| | | #endif /* __STM32F10x_RTC_H */
|
| | | /**
|
| | | * @}
|
| | | */
|
| | |
|
| | | /**
|
| | | * @}
|
| | | */
|
| | |
|
| | | /**
|
| | | * @}
|
| | | */
|
| | |
|
| | | /******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/
|
New file |
| | |
| | | /**
|
| | | ******************************************************************************
|
| | | * @file stm32f10x_sdio.h
|
| | | * @author MCD Application Team
|
| | | * @version V3.5.0
|
| | | * @date 11-March-2011
|
| | | * @brief This file contains all the functions prototypes for the SDIO firmware
|
| | | * library.
|
| | | ******************************************************************************
|
| | | * @attention
|
| | | *
|
| | | * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
|
| | | * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE
|
| | | * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY
|
| | | * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING
|
| | | * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE
|
| | | * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
|
| | | *
|
| | | * <h2><center>© COPYRIGHT 2011 STMicroelectronics</center></h2>
|
| | | ******************************************************************************
|
| | | */
|
| | |
|
| | | /* Define to prevent recursive inclusion -------------------------------------*/
|
| | | #ifndef __STM32F10x_SDIO_H
|
| | | #define __STM32F10x_SDIO_H
|
| | |
|
| | | #ifdef __cplusplus
|
| | | extern "C" {
|
| | | #endif
|
| | |
|
| | | /* Includes ------------------------------------------------------------------*/
|
| | | #include "stm32f10x.h"
|
| | |
|
| | | /** @addtogroup STM32F10x_StdPeriph_Driver
|
| | | * @{
|
| | | */
|
| | |
|
| | | /** @addtogroup SDIO
|
| | | * @{
|
| | | */
|
| | |
|
| | | /** @defgroup SDIO_Exported_Types
|
| | | * @{
|
| | | */
|
| | |
|
| | | typedef struct
|
| | | {
|
| | | uint32_t SDIO_ClockEdge; /*!< Specifies the clock transition on which the bit capture is made.
|
| | | This parameter can be a value of @ref SDIO_Clock_Edge */
|
| | |
|
| | | uint32_t SDIO_ClockBypass; /*!< Specifies whether the SDIO Clock divider bypass is
|
| | | enabled or disabled.
|
| | | This parameter can be a value of @ref SDIO_Clock_Bypass */
|
| | |
|
| | | uint32_t SDIO_ClockPowerSave; /*!< Specifies whether SDIO Clock output is enabled or
|
| | | disabled when the bus is idle.
|
| | | This parameter can be a value of @ref SDIO_Clock_Power_Save */
|
| | |
|
| | | uint32_t SDIO_BusWide; /*!< Specifies the SDIO bus width.
|
| | | This parameter can be a value of @ref SDIO_Bus_Wide */
|
| | |
|
| | | uint32_t SDIO_HardwareFlowControl; /*!< Specifies whether the SDIO hardware flow control is enabled or disabled.
|
| | | This parameter can be a value of @ref SDIO_Hardware_Flow_Control */
|
| | |
|
| | | uint8_t SDIO_ClockDiv; /*!< Specifies the clock frequency of the SDIO controller.
|
| | | This parameter can be a value between 0x00 and 0xFF. */
|
| | | |
| | | } SDIO_InitTypeDef;
|
| | |
|
| | | typedef struct
|
| | | {
|
| | | uint32_t SDIO_Argument; /*!< Specifies the SDIO command argument which is sent
|
| | | to a card as part of a command message. If a command
|
| | | contains an argument, it must be loaded into this register
|
| | | before writing the command to the command register */
|
| | |
|
| | | uint32_t SDIO_CmdIndex; /*!< Specifies the SDIO command index. It must be lower than 0x40. */
|
| | |
|
| | | uint32_t SDIO_Response; /*!< Specifies the SDIO response type.
|
| | | This parameter can be a value of @ref SDIO_Response_Type */
|
| | |
|
| | | uint32_t SDIO_Wait; /*!< Specifies whether SDIO wait-for-interrupt request is enabled or disabled.
|
| | | This parameter can be a value of @ref SDIO_Wait_Interrupt_State */
|
| | |
|
| | | uint32_t SDIO_CPSM; /*!< Specifies whether SDIO Command path state machine (CPSM)
|
| | | is enabled or disabled.
|
| | | This parameter can be a value of @ref SDIO_CPSM_State */
|
| | | } SDIO_CmdInitTypeDef;
|
| | |
|
| | | typedef struct
|
| | | {
|
| | | uint32_t SDIO_DataTimeOut; /*!< Specifies the data timeout period in card bus clock periods. */
|
| | |
|
| | | uint32_t SDIO_DataLength; /*!< Specifies the number of data bytes to be transferred. */
|
| | | |
| | | uint32_t SDIO_DataBlockSize; /*!< Specifies the data block size for block transfer.
|
| | | This parameter can be a value of @ref SDIO_Data_Block_Size */
|
| | | |
| | | uint32_t SDIO_TransferDir; /*!< Specifies the data transfer direction, whether the transfer
|
| | | is a read or write.
|
| | | This parameter can be a value of @ref SDIO_Transfer_Direction */
|
| | | |
| | | uint32_t SDIO_TransferMode; /*!< Specifies whether data transfer is in stream or block mode.
|
| | | This parameter can be a value of @ref SDIO_Transfer_Type */
|
| | | |
| | | uint32_t SDIO_DPSM; /*!< Specifies whether SDIO Data path state machine (DPSM)
|
| | | is enabled or disabled.
|
| | | This parameter can be a value of @ref SDIO_DPSM_State */
|
| | | } SDIO_DataInitTypeDef;
|
| | |
|
| | | /**
|
| | | * @}
|
| | | */ |
| | |
|
| | | /** @defgroup SDIO_Exported_Constants
|
| | | * @{
|
| | | */
|
| | |
|
| | | /** @defgroup SDIO_Clock_Edge |
| | | * @{
|
| | | */
|
| | |
|
| | | #define SDIO_ClockEdge_Rising ((uint32_t)0x00000000)
|
| | | #define SDIO_ClockEdge_Falling ((uint32_t)0x00002000)
|
| | | #define IS_SDIO_CLOCK_EDGE(EDGE) (((EDGE) == SDIO_ClockEdge_Rising) || \
|
| | | ((EDGE) == SDIO_ClockEdge_Falling))
|
| | | /**
|
| | | * @}
|
| | | */
|
| | |
|
| | | /** @defgroup SDIO_Clock_Bypass |
| | | * @{
|
| | | */
|
| | |
|
| | | #define SDIO_ClockBypass_Disable ((uint32_t)0x00000000)
|
| | | #define SDIO_ClockBypass_Enable ((uint32_t)0x00000400) |
| | | #define IS_SDIO_CLOCK_BYPASS(BYPASS) (((BYPASS) == SDIO_ClockBypass_Disable) || \
|
| | | ((BYPASS) == SDIO_ClockBypass_Enable))
|
| | | /**
|
| | | * @}
|
| | | */ |
| | |
|
| | | /** @defgroup SDIO_Clock_Power_Save |
| | | * @{
|
| | | */
|
| | |
|
| | | #define SDIO_ClockPowerSave_Disable ((uint32_t)0x00000000)
|
| | | #define SDIO_ClockPowerSave_Enable ((uint32_t)0x00000200) |
| | | #define IS_SDIO_CLOCK_POWER_SAVE(SAVE) (((SAVE) == SDIO_ClockPowerSave_Disable) || \
|
| | | ((SAVE) == SDIO_ClockPowerSave_Enable))
|
| | | /**
|
| | | * @}
|
| | | */
|
| | |
|
| | | /** @defgroup SDIO_Bus_Wide |
| | | * @{
|
| | | */
|
| | |
|
| | | #define SDIO_BusWide_1b ((uint32_t)0x00000000)
|
| | | #define SDIO_BusWide_4b ((uint32_t)0x00000800)
|
| | | #define SDIO_BusWide_8b ((uint32_t)0x00001000)
|
| | | #define IS_SDIO_BUS_WIDE(WIDE) (((WIDE) == SDIO_BusWide_1b) || ((WIDE) == SDIO_BusWide_4b) || \
|
| | | ((WIDE) == SDIO_BusWide_8b))
|
| | |
|
| | | /**
|
| | | * @}
|
| | | */
|
| | |
|
| | | /** @defgroup SDIO_Hardware_Flow_Control |
| | | * @{
|
| | | */
|
| | |
|
| | | #define SDIO_HardwareFlowControl_Disable ((uint32_t)0x00000000)
|
| | | #define SDIO_HardwareFlowControl_Enable ((uint32_t)0x00004000)
|
| | | #define IS_SDIO_HARDWARE_FLOW_CONTROL(CONTROL) (((CONTROL) == SDIO_HardwareFlowControl_Disable) || \
|
| | | ((CONTROL) == SDIO_HardwareFlowControl_Enable))
|
| | | /**
|
| | | * @}
|
| | | */
|
| | |
|
| | | /** @defgroup SDIO_Power_State |
| | | * @{
|
| | | */
|
| | |
|
| | | #define SDIO_PowerState_OFF ((uint32_t)0x00000000)
|
| | | #define SDIO_PowerState_ON ((uint32_t)0x00000003)
|
| | | #define IS_SDIO_POWER_STATE(STATE) (((STATE) == SDIO_PowerState_OFF) || ((STATE) == SDIO_PowerState_ON)) |
| | | /**
|
| | | * @}
|
| | | */ |
| | |
|
| | |
|
| | | /** @defgroup SDIO_Interrupt_sources |
| | | * @{
|
| | | */
|
| | |
|
| | | #define SDIO_IT_CCRCFAIL ((uint32_t)0x00000001)
|
| | | #define SDIO_IT_DCRCFAIL ((uint32_t)0x00000002)
|
| | | #define SDIO_IT_CTIMEOUT ((uint32_t)0x00000004)
|
| | | #define SDIO_IT_DTIMEOUT ((uint32_t)0x00000008)
|
| | | #define SDIO_IT_TXUNDERR ((uint32_t)0x00000010)
|
| | | #define SDIO_IT_RXOVERR ((uint32_t)0x00000020)
|
| | | #define SDIO_IT_CMDREND ((uint32_t)0x00000040)
|
| | | #define SDIO_IT_CMDSENT ((uint32_t)0x00000080)
|
| | | #define SDIO_IT_DATAEND ((uint32_t)0x00000100)
|
| | | #define SDIO_IT_STBITERR ((uint32_t)0x00000200)
|
| | | #define SDIO_IT_DBCKEND ((uint32_t)0x00000400)
|
| | | #define SDIO_IT_CMDACT ((uint32_t)0x00000800)
|
| | | #define SDIO_IT_TXACT ((uint32_t)0x00001000)
|
| | | #define SDIO_IT_RXACT ((uint32_t)0x00002000)
|
| | | #define SDIO_IT_TXFIFOHE ((uint32_t)0x00004000)
|
| | | #define SDIO_IT_RXFIFOHF ((uint32_t)0x00008000)
|
| | | #define SDIO_IT_TXFIFOF ((uint32_t)0x00010000)
|
| | | #define SDIO_IT_RXFIFOF ((uint32_t)0x00020000)
|
| | | #define SDIO_IT_TXFIFOE ((uint32_t)0x00040000)
|
| | | #define SDIO_IT_RXFIFOE ((uint32_t)0x00080000)
|
| | | #define SDIO_IT_TXDAVL ((uint32_t)0x00100000)
|
| | | #define SDIO_IT_RXDAVL ((uint32_t)0x00200000)
|
| | | #define SDIO_IT_SDIOIT ((uint32_t)0x00400000)
|
| | | #define SDIO_IT_CEATAEND ((uint32_t)0x00800000)
|
| | | #define IS_SDIO_IT(IT) ((((IT) & (uint32_t)0xFF000000) == 0x00) && ((IT) != (uint32_t)0x00))
|
| | | /**
|
| | | * @}
|
| | | */ |
| | |
|
| | | /** @defgroup SDIO_Command_Index
|
| | | * @{
|
| | | */
|
| | |
|
| | | #define IS_SDIO_CMD_INDEX(INDEX) ((INDEX) < 0x40)
|
| | | /**
|
| | | * @}
|
| | | */
|
| | |
|
| | | /** @defgroup SDIO_Response_Type |
| | | * @{
|
| | | */
|
| | |
|
| | | #define SDIO_Response_No ((uint32_t)0x00000000)
|
| | | #define SDIO_Response_Short ((uint32_t)0x00000040)
|
| | | #define SDIO_Response_Long ((uint32_t)0x000000C0)
|
| | | #define IS_SDIO_RESPONSE(RESPONSE) (((RESPONSE) == SDIO_Response_No) || \
|
| | | ((RESPONSE) == SDIO_Response_Short) || \
|
| | | ((RESPONSE) == SDIO_Response_Long))
|
| | | /**
|
| | | * @}
|
| | | */
|
| | |
|
| | | /** @defgroup SDIO_Wait_Interrupt_State |
| | | * @{
|
| | | */
|
| | |
|
| | | #define SDIO_Wait_No ((uint32_t)0x00000000) /*!< SDIO No Wait, TimeOut is enabled */
|
| | | #define SDIO_Wait_IT ((uint32_t)0x00000100) /*!< SDIO Wait Interrupt Request */
|
| | | #define SDIO_Wait_Pend ((uint32_t)0x00000200) /*!< SDIO Wait End of transfer */
|
| | | #define IS_SDIO_WAIT(WAIT) (((WAIT) == SDIO_Wait_No) || ((WAIT) == SDIO_Wait_IT) || \
|
| | | ((WAIT) == SDIO_Wait_Pend))
|
| | | /**
|
| | | * @}
|
| | | */
|
| | |
|
| | | /** @defgroup SDIO_CPSM_State |
| | | * @{
|
| | | */
|
| | |
|
| | | #define SDIO_CPSM_Disable ((uint32_t)0x00000000)
|
| | | #define SDIO_CPSM_Enable ((uint32_t)0x00000400)
|
| | | #define IS_SDIO_CPSM(CPSM) (((CPSM) == SDIO_CPSM_Enable) || ((CPSM) == SDIO_CPSM_Disable))
|
| | | /**
|
| | | * @}
|
| | | */ |
| | |
|
| | | /** @defgroup SDIO_Response_Registers |
| | | * @{
|
| | | */
|
| | |
|
| | | #define SDIO_RESP1 ((uint32_t)0x00000000)
|
| | | #define SDIO_RESP2 ((uint32_t)0x00000004)
|
| | | #define SDIO_RESP3 ((uint32_t)0x00000008)
|
| | | #define SDIO_RESP4 ((uint32_t)0x0000000C)
|
| | | #define IS_SDIO_RESP(RESP) (((RESP) == SDIO_RESP1) || ((RESP) == SDIO_RESP2) || \
|
| | | ((RESP) == SDIO_RESP3) || ((RESP) == SDIO_RESP4))
|
| | | /**
|
| | | * @}
|
| | | */
|
| | |
|
| | | /** @defgroup SDIO_Data_Length |
| | | * @{
|
| | | */
|
| | |
|
| | | #define IS_SDIO_DATA_LENGTH(LENGTH) ((LENGTH) <= 0x01FFFFFF)
|
| | | /**
|
| | | * @}
|
| | | */
|
| | |
|
| | | /** @defgroup SDIO_Data_Block_Size |
| | | * @{
|
| | | */
|
| | |
|
| | | #define SDIO_DataBlockSize_1b ((uint32_t)0x00000000)
|
| | | #define SDIO_DataBlockSize_2b ((uint32_t)0x00000010)
|
| | | #define SDIO_DataBlockSize_4b ((uint32_t)0x00000020)
|
| | | #define SDIO_DataBlockSize_8b ((uint32_t)0x00000030)
|
| | | #define SDIO_DataBlockSize_16b ((uint32_t)0x00000040)
|
| | | #define SDIO_DataBlockSize_32b ((uint32_t)0x00000050)
|
| | | #define SDIO_DataBlockSize_64b ((uint32_t)0x00000060)
|
| | | #define SDIO_DataBlockSize_128b ((uint32_t)0x00000070)
|
| | | #define SDIO_DataBlockSize_256b ((uint32_t)0x00000080)
|
| | | #define SDIO_DataBlockSize_512b ((uint32_t)0x00000090)
|
| | | #define SDIO_DataBlockSize_1024b ((uint32_t)0x000000A0)
|
| | | #define SDIO_DataBlockSize_2048b ((uint32_t)0x000000B0)
|
| | | #define SDIO_DataBlockSize_4096b ((uint32_t)0x000000C0)
|
| | | #define SDIO_DataBlockSize_8192b ((uint32_t)0x000000D0)
|
| | | #define SDIO_DataBlockSize_16384b ((uint32_t)0x000000E0)
|
| | | #define IS_SDIO_BLOCK_SIZE(SIZE) (((SIZE) == SDIO_DataBlockSize_1b) || \
|
| | | ((SIZE) == SDIO_DataBlockSize_2b) || \
|
| | | ((SIZE) == SDIO_DataBlockSize_4b) || \
|
| | | ((SIZE) == SDIO_DataBlockSize_8b) || \
|
| | | ((SIZE) == SDIO_DataBlockSize_16b) || \
|
| | | ((SIZE) == SDIO_DataBlockSize_32b) || \
|
| | | ((SIZE) == SDIO_DataBlockSize_64b) || \
|
| | | ((SIZE) == SDIO_DataBlockSize_128b) || \
|
| | | ((SIZE) == SDIO_DataBlockSize_256b) || \
|
| | | ((SIZE) == SDIO_DataBlockSize_512b) || \
|
| | | ((SIZE) == SDIO_DataBlockSize_1024b) || \
|
| | | ((SIZE) == SDIO_DataBlockSize_2048b) || \
|
| | | ((SIZE) == SDIO_DataBlockSize_4096b) || \
|
| | | ((SIZE) == SDIO_DataBlockSize_8192b) || \
|
| | | ((SIZE) == SDIO_DataBlockSize_16384b)) |
| | | /**
|
| | | * @}
|
| | | */
|
| | |
|
| | | /** @defgroup SDIO_Transfer_Direction |
| | | * @{
|
| | | */
|
| | |
|
| | | #define SDIO_TransferDir_ToCard ((uint32_t)0x00000000)
|
| | | #define SDIO_TransferDir_ToSDIO ((uint32_t)0x00000002)
|
| | | #define IS_SDIO_TRANSFER_DIR(DIR) (((DIR) == SDIO_TransferDir_ToCard) || \
|
| | | ((DIR) == SDIO_TransferDir_ToSDIO))
|
| | | /**
|
| | | * @}
|
| | | */
|
| | |
|
| | | /** @defgroup SDIO_Transfer_Type |
| | | * @{
|
| | | */
|
| | |
|
| | | #define SDIO_TransferMode_Block ((uint32_t)0x00000000)
|
| | | #define SDIO_TransferMode_Stream ((uint32_t)0x00000004)
|
| | | #define IS_SDIO_TRANSFER_MODE(MODE) (((MODE) == SDIO_TransferMode_Stream) || \
|
| | | ((MODE) == SDIO_TransferMode_Block))
|
| | | /**
|
| | | * @}
|
| | | */
|
| | |
|
| | | /** @defgroup SDIO_DPSM_State |
| | | * @{
|
| | | */
|
| | |
|
| | | #define SDIO_DPSM_Disable ((uint32_t)0x00000000)
|
| | | #define SDIO_DPSM_Enable ((uint32_t)0x00000001)
|
| | | #define IS_SDIO_DPSM(DPSM) (((DPSM) == SDIO_DPSM_Enable) || ((DPSM) == SDIO_DPSM_Disable))
|
| | | /**
|
| | | * @}
|
| | | */
|
| | |
|
| | | /** @defgroup SDIO_Flags |
| | | * @{
|
| | | */
|
| | |
|
| | | #define SDIO_FLAG_CCRCFAIL ((uint32_t)0x00000001)
|
| | | #define SDIO_FLAG_DCRCFAIL ((uint32_t)0x00000002)
|
| | | #define SDIO_FLAG_CTIMEOUT ((uint32_t)0x00000004)
|
| | | #define SDIO_FLAG_DTIMEOUT ((uint32_t)0x00000008)
|
| | | #define SDIO_FLAG_TXUNDERR ((uint32_t)0x00000010)
|
| | | #define SDIO_FLAG_RXOVERR ((uint32_t)0x00000020)
|
| | | #define SDIO_FLAG_CMDREND ((uint32_t)0x00000040)
|
| | | #define SDIO_FLAG_CMDSENT ((uint32_t)0x00000080)
|
| | | #define SDIO_FLAG_DATAEND ((uint32_t)0x00000100)
|
| | | #define SDIO_FLAG_STBITERR ((uint32_t)0x00000200)
|
| | | #define SDIO_FLAG_DBCKEND ((uint32_t)0x00000400)
|
| | | #define SDIO_FLAG_CMDACT ((uint32_t)0x00000800)
|
| | | #define SDIO_FLAG_TXACT ((uint32_t)0x00001000)
|
| | | #define SDIO_FLAG_RXACT ((uint32_t)0x00002000)
|
| | | #define SDIO_FLAG_TXFIFOHE ((uint32_t)0x00004000)
|
| | | #define SDIO_FLAG_RXFIFOHF ((uint32_t)0x00008000)
|
| | | #define SDIO_FLAG_TXFIFOF ((uint32_t)0x00010000)
|
| | | #define SDIO_FLAG_RXFIFOF ((uint32_t)0x00020000)
|
| | | #define SDIO_FLAG_TXFIFOE ((uint32_t)0x00040000)
|
| | | #define SDIO_FLAG_RXFIFOE ((uint32_t)0x00080000)
|
| | | #define SDIO_FLAG_TXDAVL ((uint32_t)0x00100000)
|
| | | #define SDIO_FLAG_RXDAVL ((uint32_t)0x00200000)
|
| | | #define SDIO_FLAG_SDIOIT ((uint32_t)0x00400000)
|
| | | #define SDIO_FLAG_CEATAEND ((uint32_t)0x00800000)
|
| | | #define IS_SDIO_FLAG(FLAG) (((FLAG) == SDIO_FLAG_CCRCFAIL) || \
|
| | | ((FLAG) == SDIO_FLAG_DCRCFAIL) || \
|
| | | ((FLAG) == SDIO_FLAG_CTIMEOUT) || \
|
| | | ((FLAG) == SDIO_FLAG_DTIMEOUT) || \
|
| | | ((FLAG) == SDIO_FLAG_TXUNDERR) || \
|
| | | ((FLAG) == SDIO_FLAG_RXOVERR) || \
|
| | | ((FLAG) == SDIO_FLAG_CMDREND) || \
|
| | | ((FLAG) == SDIO_FLAG_CMDSENT) || \
|
| | | ((FLAG) == SDIO_FLAG_DATAEND) || \
|
| | | ((FLAG) == SDIO_FLAG_STBITERR) || \
|
| | | ((FLAG) == SDIO_FLAG_DBCKEND) || \
|
| | | ((FLAG) == SDIO_FLAG_CMDACT) || \
|
| | | ((FLAG) == SDIO_FLAG_TXACT) || \
|
| | | ((FLAG) == SDIO_FLAG_RXACT) || \
|
| | | ((FLAG) == SDIO_FLAG_TXFIFOHE) || \
|
| | | ((FLAG) == SDIO_FLAG_RXFIFOHF) || \
|
| | | ((FLAG) == SDIO_FLAG_TXFIFOF) || \
|
| | | ((FLAG) == SDIO_FLAG_RXFIFOF) || \
|
| | | ((FLAG) == SDIO_FLAG_TXFIFOE) || \
|
| | | ((FLAG) == SDIO_FLAG_RXFIFOE) || \
|
| | | ((FLAG) == SDIO_FLAG_TXDAVL) || \
|
| | | ((FLAG) == SDIO_FLAG_RXDAVL) || \
|
| | | ((FLAG) == SDIO_FLAG_SDIOIT) || \
|
| | | ((FLAG) == SDIO_FLAG_CEATAEND))
|
| | |
|
| | | #define IS_SDIO_CLEAR_FLAG(FLAG) ((((FLAG) & (uint32_t)0xFF3FF800) == 0x00) && ((FLAG) != (uint32_t)0x00))
|
| | |
|
| | | #define IS_SDIO_GET_IT(IT) (((IT) == SDIO_IT_CCRCFAIL) || \
|
| | | ((IT) == SDIO_IT_DCRCFAIL) || \
|
| | | ((IT) == SDIO_IT_CTIMEOUT) || \
|
| | | ((IT) == SDIO_IT_DTIMEOUT) || \
|
| | | ((IT) == SDIO_IT_TXUNDERR) || \
|
| | | ((IT) == SDIO_IT_RXOVERR) || \
|
| | | ((IT) == SDIO_IT_CMDREND) || \
|
| | | ((IT) == SDIO_IT_CMDSENT) || \
|
| | | ((IT) == SDIO_IT_DATAEND) || \
|
| | | ((IT) == SDIO_IT_STBITERR) || \
|
| | | ((IT) == SDIO_IT_DBCKEND) || \
|
| | | ((IT) == SDIO_IT_CMDACT) || \
|
| | | ((IT) == SDIO_IT_TXACT) || \
|
| | | ((IT) == SDIO_IT_RXACT) || \
|
| | | ((IT) == SDIO_IT_TXFIFOHE) || \
|
| | | ((IT) == SDIO_IT_RXFIFOHF) || \
|
| | | ((IT) == SDIO_IT_TXFIFOF) || \
|
| | | ((IT) == SDIO_IT_RXFIFOF) || \
|
| | | ((IT) == SDIO_IT_TXFIFOE) || \
|
| | | ((IT) == SDIO_IT_RXFIFOE) || \
|
| | | ((IT) == SDIO_IT_TXDAVL) || \
|
| | | ((IT) == SDIO_IT_RXDAVL) || \
|
| | | ((IT) == SDIO_IT_SDIOIT) || \
|
| | | ((IT) == SDIO_IT_CEATAEND))
|
| | |
|
| | | #define IS_SDIO_CLEAR_IT(IT) ((((IT) & (uint32_t)0xFF3FF800) == 0x00) && ((IT) != (uint32_t)0x00))
|
| | |
|
| | | /**
|
| | | * @}
|
| | | */
|
| | |
|
| | | /** @defgroup SDIO_Read_Wait_Mode |
| | | * @{
|
| | | */
|
| | |
|
| | | #define SDIO_ReadWaitMode_CLK ((uint32_t)0x00000001)
|
| | | #define SDIO_ReadWaitMode_DATA2 ((uint32_t)0x00000000)
|
| | | #define IS_SDIO_READWAIT_MODE(MODE) (((MODE) == SDIO_ReadWaitMode_CLK) || \
|
| | | ((MODE) == SDIO_ReadWaitMode_DATA2))
|
| | | /**
|
| | | * @}
|
| | | */
|
| | |
|
| | | /**
|
| | | * @}
|
| | | */
|
| | |
|
| | | /** @defgroup SDIO_Exported_Macros
|
| | | * @{
|
| | | */
|
| | |
|
| | | /**
|
| | | * @}
|
| | | */
|
| | |
|
| | | /** @defgroup SDIO_Exported_Functions
|
| | | * @{
|
| | | */
|
| | |
|
| | | void SDIO_DeInit(void);
|
| | | void SDIO_Init(SDIO_InitTypeDef* SDIO_InitStruct);
|
| | | void SDIO_StructInit(SDIO_InitTypeDef* SDIO_InitStruct);
|
| | | void SDIO_ClockCmd(FunctionalState NewState);
|
| | | void SDIO_SetPowerState(uint32_t SDIO_PowerState);
|
| | | uint32_t SDIO_GetPowerState(void);
|
| | | void SDIO_ITConfig(uint32_t SDIO_IT, FunctionalState NewState);
|
| | | void SDIO_DMACmd(FunctionalState NewState);
|
| | | void SDIO_SendCommand(SDIO_CmdInitTypeDef *SDIO_CmdInitStruct);
|
| | | void SDIO_CmdStructInit(SDIO_CmdInitTypeDef* SDIO_CmdInitStruct);
|
| | | uint8_t SDIO_GetCommandResponse(void);
|
| | | uint32_t SDIO_GetResponse(uint32_t SDIO_RESP);
|
| | | void SDIO_DataConfig(SDIO_DataInitTypeDef* SDIO_DataInitStruct);
|
| | | void SDIO_DataStructInit(SDIO_DataInitTypeDef* SDIO_DataInitStruct);
|
| | | uint32_t SDIO_GetDataCounter(void);
|
| | | uint32_t SDIO_ReadData(void);
|
| | | void SDIO_WriteData(uint32_t Data);
|
| | | uint32_t SDIO_GetFIFOCount(void);
|
| | | void SDIO_StartSDIOReadWait(FunctionalState NewState);
|
| | | void SDIO_StopSDIOReadWait(FunctionalState NewState);
|
| | | void SDIO_SetSDIOReadWaitMode(uint32_t SDIO_ReadWaitMode);
|
| | | void SDIO_SetSDIOOperation(FunctionalState NewState);
|
| | | void SDIO_SendSDIOSuspendCmd(FunctionalState NewState);
|
| | | void SDIO_CommandCompletionCmd(FunctionalState NewState);
|
| | | void SDIO_CEATAITCmd(FunctionalState NewState);
|
| | | void SDIO_SendCEATACmd(FunctionalState NewState);
|
| | | FlagStatus SDIO_GetFlagStatus(uint32_t SDIO_FLAG);
|
| | | void SDIO_ClearFlag(uint32_t SDIO_FLAG);
|
| | | ITStatus SDIO_GetITStatus(uint32_t SDIO_IT);
|
| | | void SDIO_ClearITPendingBit(uint32_t SDIO_IT);
|
| | |
|
| | | #ifdef __cplusplus
|
| | | }
|
| | | #endif
|
| | |
|
| | | #endif /* __STM32F10x_SDIO_H */
|
| | | /**
|
| | | * @}
|
| | | */
|
| | |
|
| | | /**
|
| | | * @}
|
| | | */
|
| | |
|
| | | /**
|
| | | * @}
|
| | | */
|
| | |
|
| | | /******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/
|
New file |
| | |
| | | /**
|
| | | ******************************************************************************
|
| | | * @file stm32f10x_spi.h
|
| | | * @author MCD Application Team
|
| | | * @version V3.5.0
|
| | | * @date 11-March-2011
|
| | | * @brief This file contains all the functions prototypes for the SPI firmware |
| | | * library.
|
| | | ******************************************************************************
|
| | | * @attention
|
| | | *
|
| | | * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
|
| | | * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE
|
| | | * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY
|
| | | * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING
|
| | | * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE
|
| | | * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
|
| | | *
|
| | | * <h2><center>© COPYRIGHT 2011 STMicroelectronics</center></h2>
|
| | | ******************************************************************************
|
| | | */
|
| | |
|
| | | /* Define to prevent recursive inclusion -------------------------------------*/
|
| | | #ifndef __STM32F10x_SPI_H
|
| | | #define __STM32F10x_SPI_H
|
| | |
|
| | | #ifdef __cplusplus
|
| | | extern "C" {
|
| | | #endif
|
| | |
|
| | | /* Includes ------------------------------------------------------------------*/
|
| | | #include "stm32f10x.h"
|
| | |
|
| | | /** @addtogroup STM32F10x_StdPeriph_Driver
|
| | | * @{
|
| | | */
|
| | |
|
| | | /** @addtogroup SPI
|
| | | * @{
|
| | | */ |
| | |
|
| | | /** @defgroup SPI_Exported_Types
|
| | | * @{
|
| | | */
|
| | |
|
| | | /** |
| | | * @brief SPI Init structure definition |
| | | */
|
| | |
|
| | | typedef struct
|
| | | {
|
| | | uint16_t SPI_Direction; /*!< Specifies the SPI unidirectional or bidirectional data mode.
|
| | | This parameter can be a value of @ref SPI_data_direction */
|
| | |
|
| | | uint16_t SPI_Mode; /*!< Specifies the SPI operating mode.
|
| | | This parameter can be a value of @ref SPI_mode */
|
| | |
|
| | | uint16_t SPI_DataSize; /*!< Specifies the SPI data size.
|
| | | This parameter can be a value of @ref SPI_data_size */
|
| | |
|
| | | uint16_t SPI_CPOL; /*!< Specifies the serial clock steady state.
|
| | | This parameter can be a value of @ref SPI_Clock_Polarity */
|
| | |
|
| | | uint16_t SPI_CPHA; /*!< Specifies the clock active edge for the bit capture.
|
| | | This parameter can be a value of @ref SPI_Clock_Phase */
|
| | |
|
| | | uint16_t SPI_NSS; /*!< Specifies whether the NSS signal is managed by
|
| | | hardware (NSS pin) or by software using the SSI bit.
|
| | | This parameter can be a value of @ref SPI_Slave_Select_management */
|
| | | |
| | | uint16_t SPI_BaudRatePrescaler; /*!< Specifies the Baud Rate prescaler value which will be
|
| | | used to configure the transmit and receive SCK clock.
|
| | | This parameter can be a value of @ref SPI_BaudRate_Prescaler.
|
| | | @note The communication clock is derived from the master
|
| | | clock. The slave clock does not need to be set. */
|
| | |
|
| | | uint16_t SPI_FirstBit; /*!< Specifies whether data transfers start from MSB or LSB bit.
|
| | | This parameter can be a value of @ref SPI_MSB_LSB_transmission */
|
| | |
|
| | | uint16_t SPI_CRCPolynomial; /*!< Specifies the polynomial used for the CRC calculation. */
|
| | | }SPI_InitTypeDef;
|
| | |
|
| | | /** |
| | | * @brief I2S Init structure definition |
| | | */
|
| | |
|
| | | typedef struct
|
| | | {
|
| | |
|
| | | uint16_t I2S_Mode; /*!< Specifies the I2S operating mode.
|
| | | This parameter can be a value of @ref I2S_Mode */
|
| | |
|
| | | uint16_t I2S_Standard; /*!< Specifies the standard used for the I2S communication.
|
| | | This parameter can be a value of @ref I2S_Standard */
|
| | |
|
| | | uint16_t I2S_DataFormat; /*!< Specifies the data format for the I2S communication.
|
| | | This parameter can be a value of @ref I2S_Data_Format */
|
| | |
|
| | | uint16_t I2S_MCLKOutput; /*!< Specifies whether the I2S MCLK output is enabled or not.
|
| | | This parameter can be a value of @ref I2S_MCLK_Output */
|
| | |
|
| | | uint32_t I2S_AudioFreq; /*!< Specifies the frequency selected for the I2S communication.
|
| | | This parameter can be a value of @ref I2S_Audio_Frequency */
|
| | |
|
| | | uint16_t I2S_CPOL; /*!< Specifies the idle state of the I2S clock.
|
| | | This parameter can be a value of @ref I2S_Clock_Polarity */
|
| | | }I2S_InitTypeDef;
|
| | |
|
| | | /**
|
| | | * @}
|
| | | */
|
| | |
|
| | | /** @defgroup SPI_Exported_Constants
|
| | | * @{
|
| | | */
|
| | |
|
| | | #define IS_SPI_ALL_PERIPH(PERIPH) (((PERIPH) == SPI1) || \
|
| | | ((PERIPH) == SPI2) || \
|
| | | ((PERIPH) == SPI3))
|
| | |
|
| | | #define IS_SPI_23_PERIPH(PERIPH) (((PERIPH) == SPI2) || \
|
| | | ((PERIPH) == SPI3))
|
| | |
|
| | | /** @defgroup SPI_data_direction |
| | | * @{
|
| | | */
|
| | | |
| | | #define SPI_Direction_2Lines_FullDuplex ((uint16_t)0x0000)
|
| | | #define SPI_Direction_2Lines_RxOnly ((uint16_t)0x0400)
|
| | | #define SPI_Direction_1Line_Rx ((uint16_t)0x8000)
|
| | | #define SPI_Direction_1Line_Tx ((uint16_t)0xC000)
|
| | | #define IS_SPI_DIRECTION_MODE(MODE) (((MODE) == SPI_Direction_2Lines_FullDuplex) || \
|
| | | ((MODE) == SPI_Direction_2Lines_RxOnly) || \
|
| | | ((MODE) == SPI_Direction_1Line_Rx) || \
|
| | | ((MODE) == SPI_Direction_1Line_Tx))
|
| | | /**
|
| | | * @}
|
| | | */
|
| | |
|
| | | /** @defgroup SPI_mode |
| | | * @{
|
| | | */
|
| | |
|
| | | #define SPI_Mode_Master ((uint16_t)0x0104)
|
| | | #define SPI_Mode_Slave ((uint16_t)0x0000)
|
| | | #define IS_SPI_MODE(MODE) (((MODE) == SPI_Mode_Master) || \
|
| | | ((MODE) == SPI_Mode_Slave))
|
| | | /**
|
| | | * @}
|
| | | */
|
| | |
|
| | | /** @defgroup SPI_data_size |
| | | * @{
|
| | | */
|
| | |
|
| | | #define SPI_DataSize_16b ((uint16_t)0x0800)
|
| | | #define SPI_DataSize_8b ((uint16_t)0x0000)
|
| | | #define IS_SPI_DATASIZE(DATASIZE) (((DATASIZE) == SPI_DataSize_16b) || \
|
| | | ((DATASIZE) == SPI_DataSize_8b))
|
| | | /**
|
| | | * @}
|
| | | */ |
| | |
|
| | | /** @defgroup SPI_Clock_Polarity |
| | | * @{
|
| | | */
|
| | |
|
| | | #define SPI_CPOL_Low ((uint16_t)0x0000)
|
| | | #define SPI_CPOL_High ((uint16_t)0x0002)
|
| | | #define IS_SPI_CPOL(CPOL) (((CPOL) == SPI_CPOL_Low) || \
|
| | | ((CPOL) == SPI_CPOL_High))
|
| | | /**
|
| | | * @}
|
| | | */
|
| | |
|
| | | /** @defgroup SPI_Clock_Phase |
| | | * @{
|
| | | */
|
| | |
|
| | | #define SPI_CPHA_1Edge ((uint16_t)0x0000)
|
| | | #define SPI_CPHA_2Edge ((uint16_t)0x0001)
|
| | | #define IS_SPI_CPHA(CPHA) (((CPHA) == SPI_CPHA_1Edge) || \
|
| | | ((CPHA) == SPI_CPHA_2Edge))
|
| | | /**
|
| | | * @}
|
| | | */
|
| | |
|
| | | /** @defgroup SPI_Slave_Select_management |
| | | * @{
|
| | | */
|
| | |
|
| | | #define SPI_NSS_Soft ((uint16_t)0x0200)
|
| | | #define SPI_NSS_Hard ((uint16_t)0x0000)
|
| | | #define IS_SPI_NSS(NSS) (((NSS) == SPI_NSS_Soft) || \
|
| | | ((NSS) == SPI_NSS_Hard))
|
| | | /**
|
| | | * @}
|
| | | */ |
| | |
|
| | | /** @defgroup SPI_BaudRate_Prescaler |
| | | * @{
|
| | | */
|
| | |
|
| | | #define SPI_BaudRatePrescaler_2 ((uint16_t)0x0000)
|
| | | #define SPI_BaudRatePrescaler_4 ((uint16_t)0x0008)
|
| | | #define SPI_BaudRatePrescaler_8 ((uint16_t)0x0010)
|
| | | #define SPI_BaudRatePrescaler_16 ((uint16_t)0x0018)
|
| | | #define SPI_BaudRatePrescaler_32 ((uint16_t)0x0020)
|
| | | #define SPI_BaudRatePrescaler_64 ((uint16_t)0x0028)
|
| | | #define SPI_BaudRatePrescaler_128 ((uint16_t)0x0030)
|
| | | #define SPI_BaudRatePrescaler_256 ((uint16_t)0x0038)
|
| | | #define IS_SPI_BAUDRATE_PRESCALER(PRESCALER) (((PRESCALER) == SPI_BaudRatePrescaler_2) || \
|
| | | ((PRESCALER) == SPI_BaudRatePrescaler_4) || \
|
| | | ((PRESCALER) == SPI_BaudRatePrescaler_8) || \
|
| | | ((PRESCALER) == SPI_BaudRatePrescaler_16) || \
|
| | | ((PRESCALER) == SPI_BaudRatePrescaler_32) || \
|
| | | ((PRESCALER) == SPI_BaudRatePrescaler_64) || \
|
| | | ((PRESCALER) == SPI_BaudRatePrescaler_128) || \
|
| | | ((PRESCALER) == SPI_BaudRatePrescaler_256))
|
| | | /**
|
| | | * @}
|
| | | */ |
| | |
|
| | | /** @defgroup SPI_MSB_LSB_transmission |
| | | * @{
|
| | | */
|
| | |
|
| | | #define SPI_FirstBit_MSB ((uint16_t)0x0000)
|
| | | #define SPI_FirstBit_LSB ((uint16_t)0x0080)
|
| | | #define IS_SPI_FIRST_BIT(BIT) (((BIT) == SPI_FirstBit_MSB) || \
|
| | | ((BIT) == SPI_FirstBit_LSB))
|
| | | /**
|
| | | * @}
|
| | | */
|
| | |
|
| | | /** @defgroup I2S_Mode |
| | | * @{
|
| | | */
|
| | |
|
| | | #define I2S_Mode_SlaveTx ((uint16_t)0x0000)
|
| | | #define I2S_Mode_SlaveRx ((uint16_t)0x0100)
|
| | | #define I2S_Mode_MasterTx ((uint16_t)0x0200)
|
| | | #define I2S_Mode_MasterRx ((uint16_t)0x0300)
|
| | | #define IS_I2S_MODE(MODE) (((MODE) == I2S_Mode_SlaveTx) || \
|
| | | ((MODE) == I2S_Mode_SlaveRx) || \
|
| | | ((MODE) == I2S_Mode_MasterTx) || \
|
| | | ((MODE) == I2S_Mode_MasterRx) )
|
| | | /**
|
| | | * @}
|
| | | */
|
| | |
|
| | | /** @defgroup I2S_Standard |
| | | * @{
|
| | | */
|
| | |
|
| | | #define I2S_Standard_Phillips ((uint16_t)0x0000)
|
| | | #define I2S_Standard_MSB ((uint16_t)0x0010)
|
| | | #define I2S_Standard_LSB ((uint16_t)0x0020)
|
| | | #define I2S_Standard_PCMShort ((uint16_t)0x0030)
|
| | | #define I2S_Standard_PCMLong ((uint16_t)0x00B0)
|
| | | #define IS_I2S_STANDARD(STANDARD) (((STANDARD) == I2S_Standard_Phillips) || \
|
| | | ((STANDARD) == I2S_Standard_MSB) || \
|
| | | ((STANDARD) == I2S_Standard_LSB) || \
|
| | | ((STANDARD) == I2S_Standard_PCMShort) || \
|
| | | ((STANDARD) == I2S_Standard_PCMLong))
|
| | | /**
|
| | | * @}
|
| | | */
|
| | |
|
| | | /** @defgroup I2S_Data_Format |
| | | * @{
|
| | | */
|
| | |
|
| | | #define I2S_DataFormat_16b ((uint16_t)0x0000)
|
| | | #define I2S_DataFormat_16bextended ((uint16_t)0x0001)
|
| | | #define I2S_DataFormat_24b ((uint16_t)0x0003)
|
| | | #define I2S_DataFormat_32b ((uint16_t)0x0005)
|
| | | #define IS_I2S_DATA_FORMAT(FORMAT) (((FORMAT) == I2S_DataFormat_16b) || \
|
| | | ((FORMAT) == I2S_DataFormat_16bextended) || \
|
| | | ((FORMAT) == I2S_DataFormat_24b) || \
|
| | | ((FORMAT) == I2S_DataFormat_32b))
|
| | | /**
|
| | | * @}
|
| | | */ |
| | |
|
| | | /** @defgroup I2S_MCLK_Output |
| | | * @{
|
| | | */
|
| | |
|
| | | #define I2S_MCLKOutput_Enable ((uint16_t)0x0200)
|
| | | #define I2S_MCLKOutput_Disable ((uint16_t)0x0000)
|
| | | #define IS_I2S_MCLK_OUTPUT(OUTPUT) (((OUTPUT) == I2S_MCLKOutput_Enable) || \
|
| | | ((OUTPUT) == I2S_MCLKOutput_Disable))
|
| | | /**
|
| | | * @}
|
| | | */
|
| | |
|
| | | /** @defgroup I2S_Audio_Frequency |
| | | * @{
|
| | | */
|
| | |
|
| | | #define I2S_AudioFreq_192k ((uint32_t)192000)
|
| | | #define I2S_AudioFreq_96k ((uint32_t)96000)
|
| | | #define I2S_AudioFreq_48k ((uint32_t)48000)
|
| | | #define I2S_AudioFreq_44k ((uint32_t)44100)
|
| | | #define I2S_AudioFreq_32k ((uint32_t)32000)
|
| | | #define I2S_AudioFreq_22k ((uint32_t)22050)
|
| | | #define I2S_AudioFreq_16k ((uint32_t)16000)
|
| | | #define I2S_AudioFreq_11k ((uint32_t)11025)
|
| | | #define I2S_AudioFreq_8k ((uint32_t)8000)
|
| | | #define I2S_AudioFreq_Default ((uint32_t)2)
|
| | |
|
| | | #define IS_I2S_AUDIO_FREQ(FREQ) ((((FREQ) >= I2S_AudioFreq_8k) && \
|
| | | ((FREQ) <= I2S_AudioFreq_192k)) || \
|
| | | ((FREQ) == I2S_AudioFreq_Default))
|
| | | /**
|
| | | * @}
|
| | | */ |
| | |
|
| | | /** @defgroup I2S_Clock_Polarity |
| | | * @{
|
| | | */
|
| | |
|
| | | #define I2S_CPOL_Low ((uint16_t)0x0000)
|
| | | #define I2S_CPOL_High ((uint16_t)0x0008)
|
| | | #define IS_I2S_CPOL(CPOL) (((CPOL) == I2S_CPOL_Low) || \
|
| | | ((CPOL) == I2S_CPOL_High))
|
| | | /**
|
| | | * @}
|
| | | */
|
| | |
|
| | | /** @defgroup SPI_I2S_DMA_transfer_requests |
| | | * @{
|
| | | */
|
| | |
|
| | | #define SPI_I2S_DMAReq_Tx ((uint16_t)0x0002)
|
| | | #define SPI_I2S_DMAReq_Rx ((uint16_t)0x0001)
|
| | | #define IS_SPI_I2S_DMAREQ(DMAREQ) ((((DMAREQ) & (uint16_t)0xFFFC) == 0x00) && ((DMAREQ) != 0x00))
|
| | | /**
|
| | | * @}
|
| | | */
|
| | |
|
| | | /** @defgroup SPI_NSS_internal_software_management |
| | | * @{
|
| | | */
|
| | |
|
| | | #define SPI_NSSInternalSoft_Set ((uint16_t)0x0100)
|
| | | #define SPI_NSSInternalSoft_Reset ((uint16_t)0xFEFF)
|
| | | #define IS_SPI_NSS_INTERNAL(INTERNAL) (((INTERNAL) == SPI_NSSInternalSoft_Set) || \
|
| | | ((INTERNAL) == SPI_NSSInternalSoft_Reset))
|
| | | /**
|
| | | * @}
|
| | | */
|
| | |
|
| | | /** @defgroup SPI_CRC_Transmit_Receive |
| | | * @{
|
| | | */
|
| | |
|
| | | #define SPI_CRC_Tx ((uint8_t)0x00)
|
| | | #define SPI_CRC_Rx ((uint8_t)0x01)
|
| | | #define IS_SPI_CRC(CRC) (((CRC) == SPI_CRC_Tx) || ((CRC) == SPI_CRC_Rx))
|
| | | /**
|
| | | * @}
|
| | | */
|
| | |
|
| | | /** @defgroup SPI_direction_transmit_receive |
| | | * @{
|
| | | */
|
| | |
|
| | | #define SPI_Direction_Rx ((uint16_t)0xBFFF)
|
| | | #define SPI_Direction_Tx ((uint16_t)0x4000)
|
| | | #define IS_SPI_DIRECTION(DIRECTION) (((DIRECTION) == SPI_Direction_Rx) || \
|
| | | ((DIRECTION) == SPI_Direction_Tx))
|
| | | /**
|
| | | * @}
|
| | | */
|
| | |
|
| | | /** @defgroup SPI_I2S_interrupts_definition |
| | | * @{
|
| | | */
|
| | |
|
| | | #define SPI_I2S_IT_TXE ((uint8_t)0x71)
|
| | | #define SPI_I2S_IT_RXNE ((uint8_t)0x60)
|
| | | #define SPI_I2S_IT_ERR ((uint8_t)0x50)
|
| | | #define IS_SPI_I2S_CONFIG_IT(IT) (((IT) == SPI_I2S_IT_TXE) || \
|
| | | ((IT) == SPI_I2S_IT_RXNE) || \
|
| | | ((IT) == SPI_I2S_IT_ERR))
|
| | | #define SPI_I2S_IT_OVR ((uint8_t)0x56)
|
| | | #define SPI_IT_MODF ((uint8_t)0x55)
|
| | | #define SPI_IT_CRCERR ((uint8_t)0x54)
|
| | | #define I2S_IT_UDR ((uint8_t)0x53)
|
| | | #define IS_SPI_I2S_CLEAR_IT(IT) (((IT) == SPI_IT_CRCERR))
|
| | | #define IS_SPI_I2S_GET_IT(IT) (((IT) == SPI_I2S_IT_RXNE) || ((IT) == SPI_I2S_IT_TXE) || \
|
| | | ((IT) == I2S_IT_UDR) || ((IT) == SPI_IT_CRCERR) || \
|
| | | ((IT) == SPI_IT_MODF) || ((IT) == SPI_I2S_IT_OVR))
|
| | | /**
|
| | | * @}
|
| | | */
|
| | |
|
| | | /** @defgroup SPI_I2S_flags_definition |
| | | * @{
|
| | | */
|
| | |
|
| | | #define SPI_I2S_FLAG_RXNE ((uint16_t)0x0001)
|
| | | #define SPI_I2S_FLAG_TXE ((uint16_t)0x0002)
|
| | | #define I2S_FLAG_CHSIDE ((uint16_t)0x0004)
|
| | | #define I2S_FLAG_UDR ((uint16_t)0x0008)
|
| | | #define SPI_FLAG_CRCERR ((uint16_t)0x0010)
|
| | | #define SPI_FLAG_MODF ((uint16_t)0x0020)
|
| | | #define SPI_I2S_FLAG_OVR ((uint16_t)0x0040)
|
| | | #define SPI_I2S_FLAG_BSY ((uint16_t)0x0080)
|
| | | #define IS_SPI_I2S_CLEAR_FLAG(FLAG) (((FLAG) == SPI_FLAG_CRCERR))
|
| | | #define IS_SPI_I2S_GET_FLAG(FLAG) (((FLAG) == SPI_I2S_FLAG_BSY) || ((FLAG) == SPI_I2S_FLAG_OVR) || \
|
| | | ((FLAG) == SPI_FLAG_MODF) || ((FLAG) == SPI_FLAG_CRCERR) || \
|
| | | ((FLAG) == I2S_FLAG_UDR) || ((FLAG) == I2S_FLAG_CHSIDE) || \
|
| | | ((FLAG) == SPI_I2S_FLAG_TXE) || ((FLAG) == SPI_I2S_FLAG_RXNE))
|
| | | /**
|
| | | * @}
|
| | | */
|
| | |
|
| | | /** @defgroup SPI_CRC_polynomial |
| | | * @{
|
| | | */
|
| | |
|
| | | #define IS_SPI_CRC_POLYNOMIAL(POLYNOMIAL) ((POLYNOMIAL) >= 0x1)
|
| | | /**
|
| | | * @}
|
| | | */
|
| | |
|
| | | /**
|
| | | * @}
|
| | | */
|
| | |
|
| | | /** @defgroup SPI_Exported_Macros
|
| | | * @{
|
| | | */
|
| | |
|
| | | /**
|
| | | * @}
|
| | | */
|
| | |
|
| | | /** @defgroup SPI_Exported_Functions
|
| | | * @{
|
| | | */
|
| | |
|
| | | void SPI_I2S_DeInit(SPI_TypeDef* SPIx);
|
| | | void SPI_Init(SPI_TypeDef* SPIx, SPI_InitTypeDef* SPI_InitStruct);
|
| | | void I2S_Init(SPI_TypeDef* SPIx, I2S_InitTypeDef* I2S_InitStruct);
|
| | | void SPI_StructInit(SPI_InitTypeDef* SPI_InitStruct);
|
| | | void I2S_StructInit(I2S_InitTypeDef* I2S_InitStruct);
|
| | | void SPI_Cmd(SPI_TypeDef* SPIx, FunctionalState NewState);
|
| | | void I2S_Cmd(SPI_TypeDef* SPIx, FunctionalState NewState);
|
| | | void SPI_I2S_ITConfig(SPI_TypeDef* SPIx, uint8_t SPI_I2S_IT, FunctionalState NewState);
|
| | | void SPI_I2S_DMACmd(SPI_TypeDef* SPIx, uint16_t SPI_I2S_DMAReq, FunctionalState NewState);
|
| | | void SPI_I2S_SendData(SPI_TypeDef* SPIx, uint16_t Data);
|
| | | uint16_t SPI_I2S_ReceiveData(SPI_TypeDef* SPIx);
|
| | | void SPI_NSSInternalSoftwareConfig(SPI_TypeDef* SPIx, uint16_t SPI_NSSInternalSoft);
|
| | | void SPI_SSOutputCmd(SPI_TypeDef* SPIx, FunctionalState NewState);
|
| | | void SPI_DataSizeConfig(SPI_TypeDef* SPIx, uint16_t SPI_DataSize);
|
| | | void SPI_TransmitCRC(SPI_TypeDef* SPIx);
|
| | | void SPI_CalculateCRC(SPI_TypeDef* SPIx, FunctionalState NewState);
|
| | | uint16_t SPI_GetCRC(SPI_TypeDef* SPIx, uint8_t SPI_CRC);
|
| | | uint16_t SPI_GetCRCPolynomial(SPI_TypeDef* SPIx);
|
| | | void SPI_BiDirectionalLineConfig(SPI_TypeDef* SPIx, uint16_t SPI_Direction);
|
| | | FlagStatus SPI_I2S_GetFlagStatus(SPI_TypeDef* SPIx, uint16_t SPI_I2S_FLAG);
|
| | | void SPI_I2S_ClearFlag(SPI_TypeDef* SPIx, uint16_t SPI_I2S_FLAG);
|
| | | ITStatus SPI_I2S_GetITStatus(SPI_TypeDef* SPIx, uint8_t SPI_I2S_IT);
|
| | | void SPI_I2S_ClearITPendingBit(SPI_TypeDef* SPIx, uint8_t SPI_I2S_IT);
|
| | |
|
| | | #ifdef __cplusplus
|
| | | }
|
| | | #endif
|
| | |
|
| | | #endif /*__STM32F10x_SPI_H */
|
| | | /**
|
| | | * @}
|
| | | */
|
| | |
|
| | | /**
|
| | | * @}
|
| | | */
|
| | |
|
| | | /**
|
| | | * @}
|
| | | */
|
| | |
|
| | | /******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/
|
New file |
| | |
| | | /**
|
| | | ******************************************************************************
|
| | | * @file stm32f10x_tim.h
|
| | | * @author MCD Application Team
|
| | | * @version V3.5.0
|
| | | * @date 11-March-2011
|
| | | * @brief This file contains all the functions prototypes for the TIM firmware |
| | | * library.
|
| | | ******************************************************************************
|
| | | * @attention
|
| | | *
|
| | | * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
|
| | | * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE
|
| | | * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY
|
| | | * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING
|
| | | * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE
|
| | | * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
|
| | | *
|
| | | * <h2><center>© COPYRIGHT 2011 STMicroelectronics</center></h2>
|
| | | ******************************************************************************
|
| | | */
|
| | |
|
| | | /* Define to prevent recursive inclusion -------------------------------------*/
|
| | | #ifndef __STM32F10x_TIM_H
|
| | | #define __STM32F10x_TIM_H
|
| | |
|
| | | #ifdef __cplusplus
|
| | | extern "C" {
|
| | | #endif
|
| | |
|
| | | /* Includes ------------------------------------------------------------------*/
|
| | | #include "stm32f10x.h"
|
| | |
|
| | | /** @addtogroup STM32F10x_StdPeriph_Driver
|
| | | * @{
|
| | | */
|
| | |
|
| | | /** @addtogroup TIM
|
| | | * @{
|
| | | */ |
| | |
|
| | | /** @defgroup TIM_Exported_Types
|
| | | * @{
|
| | | */ |
| | |
|
| | | /** |
| | | * @brief TIM Time Base Init structure definition
|
| | | * @note This structure is used with all TIMx except for TIM6 and TIM7. |
| | | */
|
| | |
|
| | | typedef struct
|
| | | {
|
| | | uint16_t TIM_Prescaler; /*!< Specifies the prescaler value used to divide the TIM clock.
|
| | | This parameter can be a number between 0x0000 and 0xFFFF */
|
| | |
|
| | | uint16_t TIM_CounterMode; /*!< Specifies the counter mode.
|
| | | This parameter can be a value of @ref TIM_Counter_Mode */
|
| | |
|
| | | uint16_t TIM_Period; /*!< Specifies the period value to be loaded into the active
|
| | | Auto-Reload Register at the next update event.
|
| | | This parameter must be a number between 0x0000 and 0xFFFF. */ |
| | |
|
| | | uint16_t TIM_ClockDivision; /*!< Specifies the clock division.
|
| | | This parameter can be a value of @ref TIM_Clock_Division_CKD */
|
| | |
|
| | | uint8_t TIM_RepetitionCounter; /*!< Specifies the repetition counter value. Each time the RCR downcounter
|
| | | reaches zero, an update event is generated and counting restarts
|
| | | from the RCR value (N).
|
| | | This means in PWM mode that (N+1) corresponds to:
|
| | | - the number of PWM periods in edge-aligned mode
|
| | | - the number of half PWM period in center-aligned mode
|
| | | This parameter must be a number between 0x00 and 0xFF. |
| | | @note This parameter is valid only for TIM1 and TIM8. */
|
| | | } TIM_TimeBaseInitTypeDef; |
| | |
|
| | | /** |
| | | * @brief TIM Output Compare Init structure definition |
| | | */
|
| | |
|
| | | typedef struct
|
| | | {
|
| | | uint16_t TIM_OCMode; /*!< Specifies the TIM mode.
|
| | | This parameter can be a value of @ref TIM_Output_Compare_and_PWM_modes */
|
| | |
|
| | | uint16_t TIM_OutputState; /*!< Specifies the TIM Output Compare state.
|
| | | This parameter can be a value of @ref TIM_Output_Compare_state */
|
| | |
|
| | | uint16_t TIM_OutputNState; /*!< Specifies the TIM complementary Output Compare state.
|
| | | This parameter can be a value of @ref TIM_Output_Compare_N_state
|
| | | @note This parameter is valid only for TIM1 and TIM8. */
|
| | |
|
| | | uint16_t TIM_Pulse; /*!< Specifies the pulse value to be loaded into the Capture Compare Register. |
| | | This parameter can be a number between 0x0000 and 0xFFFF */
|
| | |
|
| | | uint16_t TIM_OCPolarity; /*!< Specifies the output polarity.
|
| | | This parameter can be a value of @ref TIM_Output_Compare_Polarity */
|
| | |
|
| | | uint16_t TIM_OCNPolarity; /*!< Specifies the complementary output polarity.
|
| | | This parameter can be a value of @ref TIM_Output_Compare_N_Polarity
|
| | | @note This parameter is valid only for TIM1 and TIM8. */
|
| | |
|
| | | uint16_t TIM_OCIdleState; /*!< Specifies the TIM Output Compare pin state during Idle state.
|
| | | This parameter can be a value of @ref TIM_Output_Compare_Idle_State
|
| | | @note This parameter is valid only for TIM1 and TIM8. */
|
| | |
|
| | | uint16_t TIM_OCNIdleState; /*!< Specifies the TIM Output Compare pin state during Idle state.
|
| | | This parameter can be a value of @ref TIM_Output_Compare_N_Idle_State
|
| | | @note This parameter is valid only for TIM1 and TIM8. */
|
| | | } TIM_OCInitTypeDef;
|
| | |
|
| | | /** |
| | | * @brief TIM Input Capture Init structure definition |
| | | */
|
| | |
|
| | | typedef struct
|
| | | {
|
| | |
|
| | | uint16_t TIM_Channel; /*!< Specifies the TIM channel.
|
| | | This parameter can be a value of @ref TIM_Channel */
|
| | |
|
| | | uint16_t TIM_ICPolarity; /*!< Specifies the active edge of the input signal.
|
| | | This parameter can be a value of @ref TIM_Input_Capture_Polarity */
|
| | |
|
| | | uint16_t TIM_ICSelection; /*!< Specifies the input.
|
| | | This parameter can be a value of @ref TIM_Input_Capture_Selection */
|
| | |
|
| | | uint16_t TIM_ICPrescaler; /*!< Specifies the Input Capture Prescaler.
|
| | | This parameter can be a value of @ref TIM_Input_Capture_Prescaler */
|
| | |
|
| | | uint16_t TIM_ICFilter; /*!< Specifies the input capture filter.
|
| | | This parameter can be a number between 0x0 and 0xF */
|
| | | } TIM_ICInitTypeDef;
|
| | |
|
| | | /** |
| | | * @brief BDTR structure definition |
| | | * @note This structure is used only with TIM1 and TIM8. |
| | | */
|
| | |
|
| | | typedef struct
|
| | | {
|
| | |
|
| | | uint16_t TIM_OSSRState; /*!< Specifies the Off-State selection used in Run mode.
|
| | | This parameter can be a value of @ref OSSR_Off_State_Selection_for_Run_mode_state */
|
| | |
|
| | | uint16_t TIM_OSSIState; /*!< Specifies the Off-State used in Idle state.
|
| | | This parameter can be a value of @ref OSSI_Off_State_Selection_for_Idle_mode_state */
|
| | |
|
| | | uint16_t TIM_LOCKLevel; /*!< Specifies the LOCK level parameters.
|
| | | This parameter can be a value of @ref Lock_level */ |
| | |
|
| | | uint16_t TIM_DeadTime; /*!< Specifies the delay time between the switching-off and the
|
| | | switching-on of the outputs.
|
| | | This parameter can be a number between 0x00 and 0xFF */
|
| | |
|
| | | uint16_t TIM_Break; /*!< Specifies whether the TIM Break input is enabled or not. |
| | | This parameter can be a value of @ref Break_Input_enable_disable */
|
| | |
|
| | | uint16_t TIM_BreakPolarity; /*!< Specifies the TIM Break Input pin polarity.
|
| | | This parameter can be a value of @ref Break_Polarity */
|
| | |
|
| | | uint16_t TIM_AutomaticOutput; /*!< Specifies whether the TIM Automatic Output feature is enabled or not. |
| | | This parameter can be a value of @ref TIM_AOE_Bit_Set_Reset */
|
| | | } TIM_BDTRInitTypeDef;
|
| | |
|
| | | /** @defgroup TIM_Exported_constants |
| | | * @{
|
| | | */
|
| | |
|
| | | #define IS_TIM_ALL_PERIPH(PERIPH) (((PERIPH) == TIM1) || \
|
| | | ((PERIPH) == TIM2) || \
|
| | | ((PERIPH) == TIM3) || \
|
| | | ((PERIPH) == TIM4) || \
|
| | | ((PERIPH) == TIM5) || \
|
| | | ((PERIPH) == TIM6) || \
|
| | | ((PERIPH) == TIM7) || \
|
| | | ((PERIPH) == TIM8) || \
|
| | | ((PERIPH) == TIM9) || \
|
| | | ((PERIPH) == TIM10)|| \
|
| | | ((PERIPH) == TIM11)|| \
|
| | | ((PERIPH) == TIM12)|| \
|
| | | ((PERIPH) == TIM13)|| \
|
| | | ((PERIPH) == TIM14)|| \
|
| | | ((PERIPH) == TIM15)|| \
|
| | | ((PERIPH) == TIM16)|| \
|
| | | ((PERIPH) == TIM17))
|
| | |
|
| | | /* LIST1: TIM 1 and 8 */
|
| | | #define IS_TIM_LIST1_PERIPH(PERIPH) (((PERIPH) == TIM1) || \
|
| | | ((PERIPH) == TIM8))
|
| | |
|
| | | /* LIST2: TIM 1, 8, 15 16 and 17 */
|
| | | #define IS_TIM_LIST2_PERIPH(PERIPH) (((PERIPH) == TIM1) || \
|
| | | ((PERIPH) == TIM8) || \
|
| | | ((PERIPH) == TIM15)|| \
|
| | | ((PERIPH) == TIM16)|| \
|
| | | ((PERIPH) == TIM17)) |
| | |
|
| | | /* LIST3: TIM 1, 2, 3, 4, 5 and 8 */
|
| | | #define IS_TIM_LIST3_PERIPH(PERIPH) (((PERIPH) == TIM1) || \
|
| | | ((PERIPH) == TIM2) || \
|
| | | ((PERIPH) == TIM3) || \
|
| | | ((PERIPH) == TIM4) || \
|
| | | ((PERIPH) == TIM5) || \
|
| | | ((PERIPH) == TIM8)) |
| | | |
| | | /* LIST4: TIM 1, 2, 3, 4, 5, 8, 15, 16 and 17 */
|
| | | #define IS_TIM_LIST4_PERIPH(PERIPH) (((PERIPH) == TIM1) || \
|
| | | ((PERIPH) == TIM2) || \
|
| | | ((PERIPH) == TIM3) || \
|
| | | ((PERIPH) == TIM4) || \
|
| | | ((PERIPH) == TIM5) || \
|
| | | ((PERIPH) == TIM8) || \
|
| | | ((PERIPH) == TIM15)|| \
|
| | | ((PERIPH) == TIM16)|| \
|
| | | ((PERIPH) == TIM17))
|
| | |
|
| | | /* LIST5: TIM 1, 2, 3, 4, 5, 8 and 15 */ |
| | | #define IS_TIM_LIST5_PERIPH(PERIPH) (((PERIPH) == TIM1) || \
|
| | | ((PERIPH) == TIM2) || \
|
| | | ((PERIPH) == TIM3) || \
|
| | | ((PERIPH) == TIM4) || \
|
| | | ((PERIPH) == TIM5) || \
|
| | | ((PERIPH) == TIM8) || \
|
| | | ((PERIPH) == TIM15)) |
| | |
|
| | | /* LIST6: TIM 1, 2, 3, 4, 5, 8, 9, 12 and 15 */
|
| | | #define IS_TIM_LIST6_PERIPH(PERIPH) (((PERIPH) == TIM1) || \
|
| | | ((PERIPH) == TIM2) || \
|
| | | ((PERIPH) == TIM3) || \
|
| | | ((PERIPH) == TIM4) || \
|
| | | ((PERIPH) == TIM5) || \
|
| | | ((PERIPH) == TIM8) || \
|
| | | ((PERIPH) == TIM9) || \
|
| | | ((PERIPH) == TIM12)|| \
|
| | | ((PERIPH) == TIM15))
|
| | |
|
| | | /* LIST7: TIM 1, 2, 3, 4, 5, 6, 7, 8, 9, 12 and 15 */
|
| | | #define IS_TIM_LIST7_PERIPH(PERIPH) (((PERIPH) == TIM1) || \
|
| | | ((PERIPH) == TIM2) || \
|
| | | ((PERIPH) == TIM3) || \
|
| | | ((PERIPH) == TIM4) || \
|
| | | ((PERIPH) == TIM5) || \
|
| | | ((PERIPH) == TIM6) || \
|
| | | ((PERIPH) == TIM7) || \
|
| | | ((PERIPH) == TIM8) || \
|
| | | ((PERIPH) == TIM9) || \
|
| | | ((PERIPH) == TIM12)|| \
|
| | | ((PERIPH) == TIM15)) |
| | |
|
| | | /* LIST8: TIM 1, 2, 3, 4, 5, 8, 9, 10, 11, 12, 13, 14, 15, 16 and 17 */ |
| | | #define IS_TIM_LIST8_PERIPH(PERIPH) (((PERIPH) == TIM1) || \
|
| | | ((PERIPH) == TIM2) || \
|
| | | ((PERIPH) == TIM3) || \
|
| | | ((PERIPH) == TIM4) || \
|
| | | ((PERIPH) == TIM5) || \
|
| | | ((PERIPH) == TIM8) || \
|
| | | ((PERIPH) == TIM9) || \
|
| | | ((PERIPH) == TIM10)|| \
|
| | | ((PERIPH) == TIM11)|| \
|
| | | ((PERIPH) == TIM12)|| \
|
| | | ((PERIPH) == TIM13)|| \
|
| | | ((PERIPH) == TIM14)|| \
|
| | | ((PERIPH) == TIM15)|| \
|
| | | ((PERIPH) == TIM16)|| \
|
| | | ((PERIPH) == TIM17))
|
| | |
|
| | | /* LIST9: TIM 1, 2, 3, 4, 5, 6, 7, 8, 15, 16, and 17 */
|
| | | #define IS_TIM_LIST9_PERIPH(PERIPH) (((PERIPH) == TIM1) || \
|
| | | ((PERIPH) == TIM2) || \
|
| | | ((PERIPH) == TIM3) || \
|
| | | ((PERIPH) == TIM4) || \
|
| | | ((PERIPH) == TIM5) || \
|
| | | ((PERIPH) == TIM6) || \
|
| | | ((PERIPH) == TIM7) || \
|
| | | ((PERIPH) == TIM8) || \
|
| | | ((PERIPH) == TIM15)|| \
|
| | | ((PERIPH) == TIM16)|| \
|
| | | ((PERIPH) == TIM17)) |
| | | |
| | | /**
|
| | | * @}
|
| | | */ |
| | |
|
| | | /** @defgroup TIM_Output_Compare_and_PWM_modes |
| | | * @{
|
| | | */
|
| | |
|
| | | #define TIM_OCMode_Timing ((uint16_t)0x0000)
|
| | | #define TIM_OCMode_Active ((uint16_t)0x0010)
|
| | | #define TIM_OCMode_Inactive ((uint16_t)0x0020)
|
| | | #define TIM_OCMode_Toggle ((uint16_t)0x0030)
|
| | | #define TIM_OCMode_PWM1 ((uint16_t)0x0060)
|
| | | #define TIM_OCMode_PWM2 ((uint16_t)0x0070)
|
| | | #define IS_TIM_OC_MODE(MODE) (((MODE) == TIM_OCMode_Timing) || \
|
| | | ((MODE) == TIM_OCMode_Active) || \
|
| | | ((MODE) == TIM_OCMode_Inactive) || \
|
| | | ((MODE) == TIM_OCMode_Toggle)|| \
|
| | | ((MODE) == TIM_OCMode_PWM1) || \
|
| | | ((MODE) == TIM_OCMode_PWM2))
|
| | | #define IS_TIM_OCM(MODE) (((MODE) == TIM_OCMode_Timing) || \
|
| | | ((MODE) == TIM_OCMode_Active) || \
|
| | | ((MODE) == TIM_OCMode_Inactive) || \
|
| | | ((MODE) == TIM_OCMode_Toggle)|| \
|
| | | ((MODE) == TIM_OCMode_PWM1) || \
|
| | | ((MODE) == TIM_OCMode_PWM2) || \
|
| | | ((MODE) == TIM_ForcedAction_Active) || \
|
| | | ((MODE) == TIM_ForcedAction_InActive))
|
| | | /**
|
| | | * @}
|
| | | */
|
| | |
|
| | | /** @defgroup TIM_One_Pulse_Mode |
| | | * @{
|
| | | */
|
| | |
|
| | | #define TIM_OPMode_Single ((uint16_t)0x0008)
|
| | | #define TIM_OPMode_Repetitive ((uint16_t)0x0000)
|
| | | #define IS_TIM_OPM_MODE(MODE) (((MODE) == TIM_OPMode_Single) || \
|
| | | ((MODE) == TIM_OPMode_Repetitive))
|
| | | /**
|
| | | * @}
|
| | | */ |
| | |
|
| | | /** @defgroup TIM_Channel |
| | | * @{
|
| | | */
|
| | |
|
| | | #define TIM_Channel_1 ((uint16_t)0x0000)
|
| | | #define TIM_Channel_2 ((uint16_t)0x0004)
|
| | | #define TIM_Channel_3 ((uint16_t)0x0008)
|
| | | #define TIM_Channel_4 ((uint16_t)0x000C)
|
| | | #define IS_TIM_CHANNEL(CHANNEL) (((CHANNEL) == TIM_Channel_1) || \
|
| | | ((CHANNEL) == TIM_Channel_2) || \
|
| | | ((CHANNEL) == TIM_Channel_3) || \
|
| | | ((CHANNEL) == TIM_Channel_4))
|
| | | #define IS_TIM_PWMI_CHANNEL(CHANNEL) (((CHANNEL) == TIM_Channel_1) || \
|
| | | ((CHANNEL) == TIM_Channel_2))
|
| | | #define IS_TIM_COMPLEMENTARY_CHANNEL(CHANNEL) (((CHANNEL) == TIM_Channel_1) || \
|
| | | ((CHANNEL) == TIM_Channel_2) || \
|
| | | ((CHANNEL) == TIM_Channel_3))
|
| | | /**
|
| | | * @}
|
| | | */ |
| | |
|
| | | /** @defgroup TIM_Clock_Division_CKD |
| | | * @{
|
| | | */
|
| | |
|
| | | #define TIM_CKD_DIV1 ((uint16_t)0x0000)
|
| | | #define TIM_CKD_DIV2 ((uint16_t)0x0100)
|
| | | #define TIM_CKD_DIV4 ((uint16_t)0x0200)
|
| | | #define IS_TIM_CKD_DIV(DIV) (((DIV) == TIM_CKD_DIV1) || \
|
| | | ((DIV) == TIM_CKD_DIV2) || \
|
| | | ((DIV) == TIM_CKD_DIV4))
|
| | | /**
|
| | | * @}
|
| | | */
|
| | |
|
| | | /** @defgroup TIM_Counter_Mode |
| | | * @{
|
| | | */
|
| | |
|
| | | #define TIM_CounterMode_Up ((uint16_t)0x0000)
|
| | | #define TIM_CounterMode_Down ((uint16_t)0x0010)
|
| | | #define TIM_CounterMode_CenterAligned1 ((uint16_t)0x0020)
|
| | | #define TIM_CounterMode_CenterAligned2 ((uint16_t)0x0040)
|
| | | #define TIM_CounterMode_CenterAligned3 ((uint16_t)0x0060)
|
| | | #define IS_TIM_COUNTER_MODE(MODE) (((MODE) == TIM_CounterMode_Up) || \
|
| | | ((MODE) == TIM_CounterMode_Down) || \
|
| | | ((MODE) == TIM_CounterMode_CenterAligned1) || \
|
| | | ((MODE) == TIM_CounterMode_CenterAligned2) || \
|
| | | ((MODE) == TIM_CounterMode_CenterAligned3))
|
| | | /**
|
| | | * @}
|
| | | */ |
| | |
|
| | | /** @defgroup TIM_Output_Compare_Polarity |
| | | * @{
|
| | | */
|
| | |
|
| | | #define TIM_OCPolarity_High ((uint16_t)0x0000)
|
| | | #define TIM_OCPolarity_Low ((uint16_t)0x0002)
|
| | | #define IS_TIM_OC_POLARITY(POLARITY) (((POLARITY) == TIM_OCPolarity_High) || \
|
| | | ((POLARITY) == TIM_OCPolarity_Low))
|
| | | /**
|
| | | * @}
|
| | | */
|
| | |
|
| | | /** @defgroup TIM_Output_Compare_N_Polarity |
| | | * @{
|
| | | */
|
| | | |
| | | #define TIM_OCNPolarity_High ((uint16_t)0x0000)
|
| | | #define TIM_OCNPolarity_Low ((uint16_t)0x0008)
|
| | | #define IS_TIM_OCN_POLARITY(POLARITY) (((POLARITY) == TIM_OCNPolarity_High) || \
|
| | | ((POLARITY) == TIM_OCNPolarity_Low))
|
| | | /**
|
| | | * @}
|
| | | */
|
| | |
|
| | | /** @defgroup TIM_Output_Compare_state |
| | | * @{
|
| | | */
|
| | |
|
| | | #define TIM_OutputState_Disable ((uint16_t)0x0000)
|
| | | #define TIM_OutputState_Enable ((uint16_t)0x0001)
|
| | | #define IS_TIM_OUTPUT_STATE(STATE) (((STATE) == TIM_OutputState_Disable) || \
|
| | | ((STATE) == TIM_OutputState_Enable))
|
| | | /**
|
| | | * @}
|
| | | */ |
| | |
|
| | | /** @defgroup TIM_Output_Compare_N_state |
| | | * @{
|
| | | */
|
| | |
|
| | | #define TIM_OutputNState_Disable ((uint16_t)0x0000)
|
| | | #define TIM_OutputNState_Enable ((uint16_t)0x0004)
|
| | | #define IS_TIM_OUTPUTN_STATE(STATE) (((STATE) == TIM_OutputNState_Disable) || \
|
| | | ((STATE) == TIM_OutputNState_Enable))
|
| | | /**
|
| | | * @}
|
| | | */ |
| | |
|
| | | /** @defgroup TIM_Capture_Compare_state |
| | | * @{
|
| | | */
|
| | |
|
| | | #define TIM_CCx_Enable ((uint16_t)0x0001)
|
| | | #define TIM_CCx_Disable ((uint16_t)0x0000)
|
| | | #define IS_TIM_CCX(CCX) (((CCX) == TIM_CCx_Enable) || \
|
| | | ((CCX) == TIM_CCx_Disable))
|
| | | /**
|
| | | * @}
|
| | | */ |
| | |
|
| | | /** @defgroup TIM_Capture_Compare_N_state |
| | | * @{
|
| | | */
|
| | |
|
| | | #define TIM_CCxN_Enable ((uint16_t)0x0004)
|
| | | #define TIM_CCxN_Disable ((uint16_t)0x0000)
|
| | | #define IS_TIM_CCXN(CCXN) (((CCXN) == TIM_CCxN_Enable) || \
|
| | | ((CCXN) == TIM_CCxN_Disable))
|
| | | /**
|
| | | * @}
|
| | | */ |
| | |
|
| | | /** @defgroup Break_Input_enable_disable |
| | | * @{
|
| | | */
|
| | |
|
| | | #define TIM_Break_Enable ((uint16_t)0x1000)
|
| | | #define TIM_Break_Disable ((uint16_t)0x0000)
|
| | | #define IS_TIM_BREAK_STATE(STATE) (((STATE) == TIM_Break_Enable) || \
|
| | | ((STATE) == TIM_Break_Disable))
|
| | | /**
|
| | | * @}
|
| | | */ |
| | |
|
| | | /** @defgroup Break_Polarity |
| | | * @{
|
| | | */
|
| | |
|
| | | #define TIM_BreakPolarity_Low ((uint16_t)0x0000)
|
| | | #define TIM_BreakPolarity_High ((uint16_t)0x2000)
|
| | | #define IS_TIM_BREAK_POLARITY(POLARITY) (((POLARITY) == TIM_BreakPolarity_Low) || \
|
| | | ((POLARITY) == TIM_BreakPolarity_High))
|
| | | /**
|
| | | * @}
|
| | | */ |
| | |
|
| | | /** @defgroup TIM_AOE_Bit_Set_Reset |
| | | * @{
|
| | | */
|
| | |
|
| | | #define TIM_AutomaticOutput_Enable ((uint16_t)0x4000)
|
| | | #define TIM_AutomaticOutput_Disable ((uint16_t)0x0000)
|
| | | #define IS_TIM_AUTOMATIC_OUTPUT_STATE(STATE) (((STATE) == TIM_AutomaticOutput_Enable) || \
|
| | | ((STATE) == TIM_AutomaticOutput_Disable))
|
| | | /**
|
| | | * @}
|
| | | */ |
| | |
|
| | | /** @defgroup Lock_level |
| | | * @{
|
| | | */
|
| | |
|
| | | #define TIM_LOCKLevel_OFF ((uint16_t)0x0000)
|
| | | #define TIM_LOCKLevel_1 ((uint16_t)0x0100)
|
| | | #define TIM_LOCKLevel_2 ((uint16_t)0x0200)
|
| | | #define TIM_LOCKLevel_3 ((uint16_t)0x0300)
|
| | | #define IS_TIM_LOCK_LEVEL(LEVEL) (((LEVEL) == TIM_LOCKLevel_OFF) || \
|
| | | ((LEVEL) == TIM_LOCKLevel_1) || \
|
| | | ((LEVEL) == TIM_LOCKLevel_2) || \
|
| | | ((LEVEL) == TIM_LOCKLevel_3))
|
| | | /**
|
| | | * @}
|
| | | */ |
| | |
|
| | | /** @defgroup OSSI_Off_State_Selection_for_Idle_mode_state |
| | | * @{
|
| | | */
|
| | |
|
| | | #define TIM_OSSIState_Enable ((uint16_t)0x0400)
|
| | | #define TIM_OSSIState_Disable ((uint16_t)0x0000)
|
| | | #define IS_TIM_OSSI_STATE(STATE) (((STATE) == TIM_OSSIState_Enable) || \
|
| | | ((STATE) == TIM_OSSIState_Disable))
|
| | | /**
|
| | | * @}
|
| | | */
|
| | |
|
| | | /** @defgroup OSSR_Off_State_Selection_for_Run_mode_state |
| | | * @{
|
| | | */
|
| | |
|
| | | #define TIM_OSSRState_Enable ((uint16_t)0x0800)
|
| | | #define TIM_OSSRState_Disable ((uint16_t)0x0000)
|
| | | #define IS_TIM_OSSR_STATE(STATE) (((STATE) == TIM_OSSRState_Enable) || \
|
| | | ((STATE) == TIM_OSSRState_Disable))
|
| | | /**
|
| | | * @}
|
| | | */ |
| | |
|
| | | /** @defgroup TIM_Output_Compare_Idle_State |
| | | * @{
|
| | | */
|
| | |
|
| | | #define TIM_OCIdleState_Set ((uint16_t)0x0100)
|
| | | #define TIM_OCIdleState_Reset ((uint16_t)0x0000)
|
| | | #define IS_TIM_OCIDLE_STATE(STATE) (((STATE) == TIM_OCIdleState_Set) || \
|
| | | ((STATE) == TIM_OCIdleState_Reset))
|
| | | /**
|
| | | * @}
|
| | | */ |
| | |
|
| | | /** @defgroup TIM_Output_Compare_N_Idle_State |
| | | * @{
|
| | | */
|
| | |
|
| | | #define TIM_OCNIdleState_Set ((uint16_t)0x0200)
|
| | | #define TIM_OCNIdleState_Reset ((uint16_t)0x0000)
|
| | | #define IS_TIM_OCNIDLE_STATE(STATE) (((STATE) == TIM_OCNIdleState_Set) || \
|
| | | ((STATE) == TIM_OCNIdleState_Reset))
|
| | | /**
|
| | | * @}
|
| | | */ |
| | |
|
| | | /** @defgroup TIM_Input_Capture_Polarity |
| | | * @{
|
| | | */
|
| | |
|
| | | #define TIM_ICPolarity_Rising ((uint16_t)0x0000)
|
| | | #define TIM_ICPolarity_Falling ((uint16_t)0x0002)
|
| | | #define TIM_ICPolarity_BothEdge ((uint16_t)0x000A)
|
| | | #define IS_TIM_IC_POLARITY(POLARITY) (((POLARITY) == TIM_ICPolarity_Rising) || \
|
| | | ((POLARITY) == TIM_ICPolarity_Falling))
|
| | | #define IS_TIM_IC_POLARITY_LITE(POLARITY) (((POLARITY) == TIM_ICPolarity_Rising) || \
|
| | | ((POLARITY) == TIM_ICPolarity_Falling)|| \
|
| | | ((POLARITY) == TIM_ICPolarity_BothEdge)) |
| | | /**
|
| | | * @}
|
| | | */ |
| | |
|
| | | /** @defgroup TIM_Input_Capture_Selection |
| | | * @{
|
| | | */
|
| | |
|
| | | #define TIM_ICSelection_DirectTI ((uint16_t)0x0001) /*!< TIM Input 1, 2, 3 or 4 is selected to be |
| | | connected to IC1, IC2, IC3 or IC4, respectively */
|
| | | #define TIM_ICSelection_IndirectTI ((uint16_t)0x0002) /*!< TIM Input 1, 2, 3 or 4 is selected to be
|
| | | connected to IC2, IC1, IC4 or IC3, respectively. */
|
| | | #define TIM_ICSelection_TRC ((uint16_t)0x0003) /*!< TIM Input 1, 2, 3 or 4 is selected to be connected to TRC. */
|
| | | #define IS_TIM_IC_SELECTION(SELECTION) (((SELECTION) == TIM_ICSelection_DirectTI) || \
|
| | | ((SELECTION) == TIM_ICSelection_IndirectTI) || \
|
| | | ((SELECTION) == TIM_ICSelection_TRC))
|
| | | /**
|
| | | * @}
|
| | | */ |
| | |
|
| | | /** @defgroup TIM_Input_Capture_Prescaler |
| | | * @{
|
| | | */
|
| | |
|
| | | #define TIM_ICPSC_DIV1 ((uint16_t)0x0000) /*!< Capture performed each time an edge is detected on the capture input. */
|
| | | #define TIM_ICPSC_DIV2 ((uint16_t)0x0004) /*!< Capture performed once every 2 events. */
|
| | | #define TIM_ICPSC_DIV4 ((uint16_t)0x0008) /*!< Capture performed once every 4 events. */
|
| | | #define TIM_ICPSC_DIV8 ((uint16_t)0x000C) /*!< Capture performed once every 8 events. */
|
| | | #define IS_TIM_IC_PRESCALER(PRESCALER) (((PRESCALER) == TIM_ICPSC_DIV1) || \
|
| | | ((PRESCALER) == TIM_ICPSC_DIV2) || \
|
| | | ((PRESCALER) == TIM_ICPSC_DIV4) || \
|
| | | ((PRESCALER) == TIM_ICPSC_DIV8))
|
| | | /**
|
| | | * @}
|
| | | */ |
| | |
|
| | | /** @defgroup TIM_interrupt_sources |
| | | * @{
|
| | | */
|
| | |
|
| | | #define TIM_IT_Update ((uint16_t)0x0001)
|
| | | #define TIM_IT_CC1 ((uint16_t)0x0002)
|
| | | #define TIM_IT_CC2 ((uint16_t)0x0004)
|
| | | #define TIM_IT_CC3 ((uint16_t)0x0008)
|
| | | #define TIM_IT_CC4 ((uint16_t)0x0010)
|
| | | #define TIM_IT_COM ((uint16_t)0x0020)
|
| | | #define TIM_IT_Trigger ((uint16_t)0x0040)
|
| | | #define TIM_IT_Break ((uint16_t)0x0080)
|
| | | #define IS_TIM_IT(IT) ((((IT) & (uint16_t)0xFF00) == 0x0000) && ((IT) != 0x0000))
|
| | |
|
| | | #define IS_TIM_GET_IT(IT) (((IT) == TIM_IT_Update) || \
|
| | | ((IT) == TIM_IT_CC1) || \
|
| | | ((IT) == TIM_IT_CC2) || \
|
| | | ((IT) == TIM_IT_CC3) || \
|
| | | ((IT) == TIM_IT_CC4) || \
|
| | | ((IT) == TIM_IT_COM) || \
|
| | | ((IT) == TIM_IT_Trigger) || \
|
| | | ((IT) == TIM_IT_Break))
|
| | | /**
|
| | | * @}
|
| | | */ |
| | |
|
| | | /** @defgroup TIM_DMA_Base_address |
| | | * @{
|
| | | */
|
| | |
|
| | | #define TIM_DMABase_CR1 ((uint16_t)0x0000)
|
| | | #define TIM_DMABase_CR2 ((uint16_t)0x0001)
|
| | | #define TIM_DMABase_SMCR ((uint16_t)0x0002)
|
| | | #define TIM_DMABase_DIER ((uint16_t)0x0003)
|
| | | #define TIM_DMABase_SR ((uint16_t)0x0004)
|
| | | #define TIM_DMABase_EGR ((uint16_t)0x0005)
|
| | | #define TIM_DMABase_CCMR1 ((uint16_t)0x0006)
|
| | | #define TIM_DMABase_CCMR2 ((uint16_t)0x0007)
|
| | | #define TIM_DMABase_CCER ((uint16_t)0x0008)
|
| | | #define TIM_DMABase_CNT ((uint16_t)0x0009)
|
| | | #define TIM_DMABase_PSC ((uint16_t)0x000A)
|
| | | #define TIM_DMABase_ARR ((uint16_t)0x000B)
|
| | | #define TIM_DMABase_RCR ((uint16_t)0x000C)
|
| | | #define TIM_DMABase_CCR1 ((uint16_t)0x000D)
|
| | | #define TIM_DMABase_CCR2 ((uint16_t)0x000E)
|
| | | #define TIM_DMABase_CCR3 ((uint16_t)0x000F)
|
| | | #define TIM_DMABase_CCR4 ((uint16_t)0x0010)
|
| | | #define TIM_DMABase_BDTR ((uint16_t)0x0011)
|
| | | #define TIM_DMABase_DCR ((uint16_t)0x0012)
|
| | | #define IS_TIM_DMA_BASE(BASE) (((BASE) == TIM_DMABase_CR1) || \
|
| | | ((BASE) == TIM_DMABase_CR2) || \
|
| | | ((BASE) == TIM_DMABase_SMCR) || \
|
| | | ((BASE) == TIM_DMABase_DIER) || \
|
| | | ((BASE) == TIM_DMABase_SR) || \
|
| | | ((BASE) == TIM_DMABase_EGR) || \
|
| | | ((BASE) == TIM_DMABase_CCMR1) || \
|
| | | ((BASE) == TIM_DMABase_CCMR2) || \
|
| | | ((BASE) == TIM_DMABase_CCER) || \
|
| | | ((BASE) == TIM_DMABase_CNT) || \
|
| | | ((BASE) == TIM_DMABase_PSC) || \
|
| | | ((BASE) == TIM_DMABase_ARR) || \
|
| | | ((BASE) == TIM_DMABase_RCR) || \
|
| | | ((BASE) == TIM_DMABase_CCR1) || \
|
| | | ((BASE) == TIM_DMABase_CCR2) || \
|
| | | ((BASE) == TIM_DMABase_CCR3) || \
|
| | | ((BASE) == TIM_DMABase_CCR4) || \
|
| | | ((BASE) == TIM_DMABase_BDTR) || \
|
| | | ((BASE) == TIM_DMABase_DCR))
|
| | | /**
|
| | | * @}
|
| | | */ |
| | |
|
| | | /** @defgroup TIM_DMA_Burst_Length |
| | | * @{
|
| | | */
|
| | |
|
| | | #define TIM_DMABurstLength_1Transfer ((uint16_t)0x0000)
|
| | | #define TIM_DMABurstLength_2Transfers ((uint16_t)0x0100)
|
| | | #define TIM_DMABurstLength_3Transfers ((uint16_t)0x0200)
|
| | | #define TIM_DMABurstLength_4Transfers ((uint16_t)0x0300)
|
| | | #define TIM_DMABurstLength_5Transfers ((uint16_t)0x0400)
|
| | | #define TIM_DMABurstLength_6Transfers ((uint16_t)0x0500)
|
| | | #define TIM_DMABurstLength_7Transfers ((uint16_t)0x0600)
|
| | | #define TIM_DMABurstLength_8Transfers ((uint16_t)0x0700)
|
| | | #define TIM_DMABurstLength_9Transfers ((uint16_t)0x0800)
|
| | | #define TIM_DMABurstLength_10Transfers ((uint16_t)0x0900)
|
| | | #define TIM_DMABurstLength_11Transfers ((uint16_t)0x0A00)
|
| | | #define TIM_DMABurstLength_12Transfers ((uint16_t)0x0B00)
|
| | | #define TIM_DMABurstLength_13Transfers ((uint16_t)0x0C00)
|
| | | #define TIM_DMABurstLength_14Transfers ((uint16_t)0x0D00)
|
| | | #define TIM_DMABurstLength_15Transfers ((uint16_t)0x0E00)
|
| | | #define TIM_DMABurstLength_16Transfers ((uint16_t)0x0F00)
|
| | | #define TIM_DMABurstLength_17Transfers ((uint16_t)0x1000)
|
| | | #define TIM_DMABurstLength_18Transfers ((uint16_t)0x1100)
|
| | | #define IS_TIM_DMA_LENGTH(LENGTH) (((LENGTH) == TIM_DMABurstLength_1Transfer) || \
|
| | | ((LENGTH) == TIM_DMABurstLength_2Transfers) || \
|
| | | ((LENGTH) == TIM_DMABurstLength_3Transfers) || \
|
| | | ((LENGTH) == TIM_DMABurstLength_4Transfers) || \
|
| | | ((LENGTH) == TIM_DMABurstLength_5Transfers) || \
|
| | | ((LENGTH) == TIM_DMABurstLength_6Transfers) || \
|
| | | ((LENGTH) == TIM_DMABurstLength_7Transfers) || \
|
| | | ((LENGTH) == TIM_DMABurstLength_8Transfers) || \
|
| | | ((LENGTH) == TIM_DMABurstLength_9Transfers) || \
|
| | | ((LENGTH) == TIM_DMABurstLength_10Transfers) || \
|
| | | ((LENGTH) == TIM_DMABurstLength_11Transfers) || \
|
| | | ((LENGTH) == TIM_DMABurstLength_12Transfers) || \
|
| | | ((LENGTH) == TIM_DMABurstLength_13Transfers) || \
|
| | | ((LENGTH) == TIM_DMABurstLength_14Transfers) || \
|
| | | ((LENGTH) == TIM_DMABurstLength_15Transfers) || \
|
| | | ((LENGTH) == TIM_DMABurstLength_16Transfers) || \
|
| | | ((LENGTH) == TIM_DMABurstLength_17Transfers) || \
|
| | | ((LENGTH) == TIM_DMABurstLength_18Transfers))
|
| | | /**
|
| | | * @}
|
| | | */ |
| | |
|
| | | /** @defgroup TIM_DMA_sources |
| | | * @{
|
| | | */
|
| | |
|
| | | #define TIM_DMA_Update ((uint16_t)0x0100)
|
| | | #define TIM_DMA_CC1 ((uint16_t)0x0200)
|
| | | #define TIM_DMA_CC2 ((uint16_t)0x0400)
|
| | | #define TIM_DMA_CC3 ((uint16_t)0x0800)
|
| | | #define TIM_DMA_CC4 ((uint16_t)0x1000)
|
| | | #define TIM_DMA_COM ((uint16_t)0x2000)
|
| | | #define TIM_DMA_Trigger ((uint16_t)0x4000)
|
| | | #define IS_TIM_DMA_SOURCE(SOURCE) ((((SOURCE) & (uint16_t)0x80FF) == 0x0000) && ((SOURCE) != 0x0000))
|
| | |
|
| | | /**
|
| | | * @}
|
| | | */ |
| | |
|
| | | /** @defgroup TIM_External_Trigger_Prescaler |
| | | * @{
|
| | | */
|
| | |
|
| | | #define TIM_ExtTRGPSC_OFF ((uint16_t)0x0000)
|
| | | #define TIM_ExtTRGPSC_DIV2 ((uint16_t)0x1000)
|
| | | #define TIM_ExtTRGPSC_DIV4 ((uint16_t)0x2000)
|
| | | #define TIM_ExtTRGPSC_DIV8 ((uint16_t)0x3000)
|
| | | #define IS_TIM_EXT_PRESCALER(PRESCALER) (((PRESCALER) == TIM_ExtTRGPSC_OFF) || \
|
| | | ((PRESCALER) == TIM_ExtTRGPSC_DIV2) || \
|
| | | ((PRESCALER) == TIM_ExtTRGPSC_DIV4) || \
|
| | | ((PRESCALER) == TIM_ExtTRGPSC_DIV8))
|
| | | /**
|
| | | * @}
|
| | | */ |
| | |
|
| | | /** @defgroup TIM_Internal_Trigger_Selection |
| | | * @{
|
| | | */
|
| | |
|
| | | #define TIM_TS_ITR0 ((uint16_t)0x0000)
|
| | | #define TIM_TS_ITR1 ((uint16_t)0x0010)
|
| | | #define TIM_TS_ITR2 ((uint16_t)0x0020)
|
| | | #define TIM_TS_ITR3 ((uint16_t)0x0030)
|
| | | #define TIM_TS_TI1F_ED ((uint16_t)0x0040)
|
| | | #define TIM_TS_TI1FP1 ((uint16_t)0x0050)
|
| | | #define TIM_TS_TI2FP2 ((uint16_t)0x0060)
|
| | | #define TIM_TS_ETRF ((uint16_t)0x0070)
|
| | | #define IS_TIM_TRIGGER_SELECTION(SELECTION) (((SELECTION) == TIM_TS_ITR0) || \
|
| | | ((SELECTION) == TIM_TS_ITR1) || \
|
| | | ((SELECTION) == TIM_TS_ITR2) || \
|
| | | ((SELECTION) == TIM_TS_ITR3) || \
|
| | | ((SELECTION) == TIM_TS_TI1F_ED) || \
|
| | | ((SELECTION) == TIM_TS_TI1FP1) || \
|
| | | ((SELECTION) == TIM_TS_TI2FP2) || \
|
| | | ((SELECTION) == TIM_TS_ETRF))
|
| | | #define IS_TIM_INTERNAL_TRIGGER_SELECTION(SELECTION) (((SELECTION) == TIM_TS_ITR0) || \
|
| | | ((SELECTION) == TIM_TS_ITR1) || \
|
| | | ((SELECTION) == TIM_TS_ITR2) || \
|
| | | ((SELECTION) == TIM_TS_ITR3))
|
| | | /**
|
| | | * @}
|
| | | */ |
| | |
|
| | | /** @defgroup TIM_TIx_External_Clock_Source |
| | | * @{
|
| | | */
|
| | |
|
| | | #define TIM_TIxExternalCLK1Source_TI1 ((uint16_t)0x0050)
|
| | | #define TIM_TIxExternalCLK1Source_TI2 ((uint16_t)0x0060)
|
| | | #define TIM_TIxExternalCLK1Source_TI1ED ((uint16_t)0x0040)
|
| | | #define IS_TIM_TIXCLK_SOURCE(SOURCE) (((SOURCE) == TIM_TIxExternalCLK1Source_TI1) || \
|
| | | ((SOURCE) == TIM_TIxExternalCLK1Source_TI2) || \
|
| | | ((SOURCE) == TIM_TIxExternalCLK1Source_TI1ED))
|
| | | /**
|
| | | * @}
|
| | | */ |
| | |
|
| | | /** @defgroup TIM_External_Trigger_Polarity |
| | | * @{
|
| | | */ |
| | | #define TIM_ExtTRGPolarity_Inverted ((uint16_t)0x8000)
|
| | | #define TIM_ExtTRGPolarity_NonInverted ((uint16_t)0x0000)
|
| | | #define IS_TIM_EXT_POLARITY(POLARITY) (((POLARITY) == TIM_ExtTRGPolarity_Inverted) || \
|
| | | ((POLARITY) == TIM_ExtTRGPolarity_NonInverted))
|
| | | /**
|
| | | * @}
|
| | | */
|
| | |
|
| | | /** @defgroup TIM_Prescaler_Reload_Mode |
| | | * @{
|
| | | */
|
| | |
|
| | | #define TIM_PSCReloadMode_Update ((uint16_t)0x0000)
|
| | | #define TIM_PSCReloadMode_Immediate ((uint16_t)0x0001)
|
| | | #define IS_TIM_PRESCALER_RELOAD(RELOAD) (((RELOAD) == TIM_PSCReloadMode_Update) || \
|
| | | ((RELOAD) == TIM_PSCReloadMode_Immediate))
|
| | | /**
|
| | | * @}
|
| | | */ |
| | |
|
| | | /** @defgroup TIM_Forced_Action |
| | | * @{
|
| | | */
|
| | |
|
| | | #define TIM_ForcedAction_Active ((uint16_t)0x0050)
|
| | | #define TIM_ForcedAction_InActive ((uint16_t)0x0040)
|
| | | #define IS_TIM_FORCED_ACTION(ACTION) (((ACTION) == TIM_ForcedAction_Active) || \
|
| | | ((ACTION) == TIM_ForcedAction_InActive))
|
| | | /**
|
| | | * @}
|
| | | */ |
| | |
|
| | | /** @defgroup TIM_Encoder_Mode |
| | | * @{
|
| | | */
|
| | |
|
| | | #define TIM_EncoderMode_TI1 ((uint16_t)0x0001)
|
| | | #define TIM_EncoderMode_TI2 ((uint16_t)0x0002)
|
| | | #define TIM_EncoderMode_TI12 ((uint16_t)0x0003)
|
| | | #define IS_TIM_ENCODER_MODE(MODE) (((MODE) == TIM_EncoderMode_TI1) || \
|
| | | ((MODE) == TIM_EncoderMode_TI2) || \
|
| | | ((MODE) == TIM_EncoderMode_TI12))
|
| | | /**
|
| | | * @}
|
| | | */ |
| | |
|
| | |
|
| | | /** @defgroup TIM_Event_Source |
| | | * @{
|
| | | */
|
| | |
|
| | | #define TIM_EventSource_Update ((uint16_t)0x0001)
|
| | | #define TIM_EventSource_CC1 ((uint16_t)0x0002)
|
| | | #define TIM_EventSource_CC2 ((uint16_t)0x0004)
|
| | | #define TIM_EventSource_CC3 ((uint16_t)0x0008)
|
| | | #define TIM_EventSource_CC4 ((uint16_t)0x0010)
|
| | | #define TIM_EventSource_COM ((uint16_t)0x0020)
|
| | | #define TIM_EventSource_Trigger ((uint16_t)0x0040)
|
| | | #define TIM_EventSource_Break ((uint16_t)0x0080)
|
| | | #define IS_TIM_EVENT_SOURCE(SOURCE) ((((SOURCE) & (uint16_t)0xFF00) == 0x0000) && ((SOURCE) != 0x0000))
|
| | |
|
| | | /**
|
| | | * @}
|
| | | */ |
| | |
|
| | | /** @defgroup TIM_Update_Source |
| | | * @{
|
| | | */
|
| | |
|
| | | #define TIM_UpdateSource_Global ((uint16_t)0x0000) /*!< Source of update is the counter overflow/underflow
|
| | | or the setting of UG bit, or an update generation
|
| | | through the slave mode controller. */
|
| | | #define TIM_UpdateSource_Regular ((uint16_t)0x0001) /*!< Source of update is counter overflow/underflow. */
|
| | | #define IS_TIM_UPDATE_SOURCE(SOURCE) (((SOURCE) == TIM_UpdateSource_Global) || \
|
| | | ((SOURCE) == TIM_UpdateSource_Regular))
|
| | | /**
|
| | | * @}
|
| | | */ |
| | |
|
| | | /** @defgroup TIM_Output_Compare_Preload_State |
| | | * @{
|
| | | */
|
| | |
|
| | | #define TIM_OCPreload_Enable ((uint16_t)0x0008)
|
| | | #define TIM_OCPreload_Disable ((uint16_t)0x0000)
|
| | | #define IS_TIM_OCPRELOAD_STATE(STATE) (((STATE) == TIM_OCPreload_Enable) || \
|
| | | ((STATE) == TIM_OCPreload_Disable))
|
| | | /**
|
| | | * @}
|
| | | */ |
| | |
|
| | | /** @defgroup TIM_Output_Compare_Fast_State |
| | | * @{
|
| | | */
|
| | |
|
| | | #define TIM_OCFast_Enable ((uint16_t)0x0004)
|
| | | #define TIM_OCFast_Disable ((uint16_t)0x0000)
|
| | | #define IS_TIM_OCFAST_STATE(STATE) (((STATE) == TIM_OCFast_Enable) || \
|
| | | ((STATE) == TIM_OCFast_Disable))
|
| | | |
| | | /**
|
| | | * @}
|
| | | */ |
| | |
|
| | | /** @defgroup TIM_Output_Compare_Clear_State |
| | | * @{
|
| | | */
|
| | |
|
| | | #define TIM_OCClear_Enable ((uint16_t)0x0080)
|
| | | #define TIM_OCClear_Disable ((uint16_t)0x0000)
|
| | | #define IS_TIM_OCCLEAR_STATE(STATE) (((STATE) == TIM_OCClear_Enable) || \
|
| | | ((STATE) == TIM_OCClear_Disable))
|
| | | /**
|
| | | * @}
|
| | | */ |
| | |
|
| | | /** @defgroup TIM_Trigger_Output_Source |
| | | * @{
|
| | | */
|
| | |
|
| | | #define TIM_TRGOSource_Reset ((uint16_t)0x0000)
|
| | | #define TIM_TRGOSource_Enable ((uint16_t)0x0010)
|
| | | #define TIM_TRGOSource_Update ((uint16_t)0x0020)
|
| | | #define TIM_TRGOSource_OC1 ((uint16_t)0x0030)
|
| | | #define TIM_TRGOSource_OC1Ref ((uint16_t)0x0040)
|
| | | #define TIM_TRGOSource_OC2Ref ((uint16_t)0x0050)
|
| | | #define TIM_TRGOSource_OC3Ref ((uint16_t)0x0060)
|
| | | #define TIM_TRGOSource_OC4Ref ((uint16_t)0x0070)
|
| | | #define IS_TIM_TRGO_SOURCE(SOURCE) (((SOURCE) == TIM_TRGOSource_Reset) || \
|
| | | ((SOURCE) == TIM_TRGOSource_Enable) || \
|
| | | ((SOURCE) == TIM_TRGOSource_Update) || \
|
| | | ((SOURCE) == TIM_TRGOSource_OC1) || \
|
| | | ((SOURCE) == TIM_TRGOSource_OC1Ref) || \
|
| | | ((SOURCE) == TIM_TRGOSource_OC2Ref) || \
|
| | | ((SOURCE) == TIM_TRGOSource_OC3Ref) || \
|
| | | ((SOURCE) == TIM_TRGOSource_OC4Ref))
|
| | | /**
|
| | | * @}
|
| | | */ |
| | |
|
| | | /** @defgroup TIM_Slave_Mode |
| | | * @{
|
| | | */
|
| | |
|
| | | #define TIM_SlaveMode_Reset ((uint16_t)0x0004)
|
| | | #define TIM_SlaveMode_Gated ((uint16_t)0x0005)
|
| | | #define TIM_SlaveMode_Trigger ((uint16_t)0x0006)
|
| | | #define TIM_SlaveMode_External1 ((uint16_t)0x0007)
|
| | | #define IS_TIM_SLAVE_MODE(MODE) (((MODE) == TIM_SlaveMode_Reset) || \
|
| | | ((MODE) == TIM_SlaveMode_Gated) || \
|
| | | ((MODE) == TIM_SlaveMode_Trigger) || \
|
| | | ((MODE) == TIM_SlaveMode_External1))
|
| | | /**
|
| | | * @}
|
| | | */ |
| | |
|
| | | /** @defgroup TIM_Master_Slave_Mode |
| | | * @{
|
| | | */
|
| | |
|
| | | #define TIM_MasterSlaveMode_Enable ((uint16_t)0x0080)
|
| | | #define TIM_MasterSlaveMode_Disable ((uint16_t)0x0000)
|
| | | #define IS_TIM_MSM_STATE(STATE) (((STATE) == TIM_MasterSlaveMode_Enable) || \
|
| | | ((STATE) == TIM_MasterSlaveMode_Disable))
|
| | | /**
|
| | | * @}
|
| | | */ |
| | |
|
| | | /** @defgroup TIM_Flags |
| | | * @{
|
| | | */
|
| | |
|
| | | #define TIM_FLAG_Update ((uint16_t)0x0001)
|
| | | #define TIM_FLAG_CC1 ((uint16_t)0x0002)
|
| | | #define TIM_FLAG_CC2 ((uint16_t)0x0004)
|
| | | #define TIM_FLAG_CC3 ((uint16_t)0x0008)
|
| | | #define TIM_FLAG_CC4 ((uint16_t)0x0010)
|
| | | #define TIM_FLAG_COM ((uint16_t)0x0020)
|
| | | #define TIM_FLAG_Trigger ((uint16_t)0x0040)
|
| | | #define TIM_FLAG_Break ((uint16_t)0x0080)
|
| | | #define TIM_FLAG_CC1OF ((uint16_t)0x0200)
|
| | | #define TIM_FLAG_CC2OF ((uint16_t)0x0400)
|
| | | #define TIM_FLAG_CC3OF ((uint16_t)0x0800)
|
| | | #define TIM_FLAG_CC4OF ((uint16_t)0x1000)
|
| | | #define IS_TIM_GET_FLAG(FLAG) (((FLAG) == TIM_FLAG_Update) || \
|
| | | ((FLAG) == TIM_FLAG_CC1) || \
|
| | | ((FLAG) == TIM_FLAG_CC2) || \
|
| | | ((FLAG) == TIM_FLAG_CC3) || \
|
| | | ((FLAG) == TIM_FLAG_CC4) || \
|
| | | ((FLAG) == TIM_FLAG_COM) || \
|
| | | ((FLAG) == TIM_FLAG_Trigger) || \
|
| | | ((FLAG) == TIM_FLAG_Break) || \
|
| | | ((FLAG) == TIM_FLAG_CC1OF) || \
|
| | | ((FLAG) == TIM_FLAG_CC2OF) || \
|
| | | ((FLAG) == TIM_FLAG_CC3OF) || \
|
| | | ((FLAG) == TIM_FLAG_CC4OF))
|
| | | |
| | | |
| | | #define IS_TIM_CLEAR_FLAG(TIM_FLAG) ((((TIM_FLAG) & (uint16_t)0xE100) == 0x0000) && ((TIM_FLAG) != 0x0000))
|
| | | /**
|
| | | * @}
|
| | | */ |
| | |
|
| | | /** @defgroup TIM_Input_Capture_Filer_Value |
| | | * @{
|
| | | */
|
| | |
|
| | | #define IS_TIM_IC_FILTER(ICFILTER) ((ICFILTER) <= 0xF) |
| | | /**
|
| | | * @}
|
| | | */ |
| | |
|
| | | /** @defgroup TIM_External_Trigger_Filter |
| | | * @{
|
| | | */
|
| | |
|
| | | #define IS_TIM_EXT_FILTER(EXTFILTER) ((EXTFILTER) <= 0xF)
|
| | | /**
|
| | | * @}
|
| | | */ |
| | |
|
| | | /** @defgroup TIM_Legacy |
| | | * @{
|
| | | */
|
| | |
|
| | | #define TIM_DMABurstLength_1Byte TIM_DMABurstLength_1Transfer
|
| | | #define TIM_DMABurstLength_2Bytes TIM_DMABurstLength_2Transfers
|
| | | #define TIM_DMABurstLength_3Bytes TIM_DMABurstLength_3Transfers
|
| | | #define TIM_DMABurstLength_4Bytes TIM_DMABurstLength_4Transfers
|
| | | #define TIM_DMABurstLength_5Bytes TIM_DMABurstLength_5Transfers
|
| | | #define TIM_DMABurstLength_6Bytes TIM_DMABurstLength_6Transfers
|
| | | #define TIM_DMABurstLength_7Bytes TIM_DMABurstLength_7Transfers
|
| | | #define TIM_DMABurstLength_8Bytes TIM_DMABurstLength_8Transfers
|
| | | #define TIM_DMABurstLength_9Bytes TIM_DMABurstLength_9Transfers
|
| | | #define TIM_DMABurstLength_10Bytes TIM_DMABurstLength_10Transfers
|
| | | #define TIM_DMABurstLength_11Bytes TIM_DMABurstLength_11Transfers
|
| | | #define TIM_DMABurstLength_12Bytes TIM_DMABurstLength_12Transfers
|
| | | #define TIM_DMABurstLength_13Bytes TIM_DMABurstLength_13Transfers
|
| | | #define TIM_DMABurstLength_14Bytes TIM_DMABurstLength_14Transfers
|
| | | #define TIM_DMABurstLength_15Bytes TIM_DMABurstLength_15Transfers
|
| | | #define TIM_DMABurstLength_16Bytes TIM_DMABurstLength_16Transfers
|
| | | #define TIM_DMABurstLength_17Bytes TIM_DMABurstLength_17Transfers
|
| | | #define TIM_DMABurstLength_18Bytes TIM_DMABurstLength_18Transfers
|
| | | /**
|
| | | * @}
|
| | | */
|
| | |
|
| | | /**
|
| | | * @}
|
| | | */
|
| | |
|
| | | /** @defgroup TIM_Exported_Macros
|
| | | * @{
|
| | | */
|
| | |
|
| | | /**
|
| | | * @}
|
| | | */ |
| | |
|
| | | /** @defgroup TIM_Exported_Functions
|
| | | * @{
|
| | | */
|
| | |
|
| | | void TIM_DeInit(TIM_TypeDef* TIMx);
|
| | | void TIM_TimeBaseInit(TIM_TypeDef* TIMx, TIM_TimeBaseInitTypeDef* TIM_TimeBaseInitStruct);
|
| | | void TIM_OC1Init(TIM_TypeDef* TIMx, TIM_OCInitTypeDef* TIM_OCInitStruct);
|
| | | void TIM_OC2Init(TIM_TypeDef* TIMx, TIM_OCInitTypeDef* TIM_OCInitStruct);
|
| | | void TIM_OC3Init(TIM_TypeDef* TIMx, TIM_OCInitTypeDef* TIM_OCInitStruct);
|
| | | void TIM_OC4Init(TIM_TypeDef* TIMx, TIM_OCInitTypeDef* TIM_OCInitStruct);
|
| | | void TIM_ICInit(TIM_TypeDef* TIMx, TIM_ICInitTypeDef* TIM_ICInitStruct);
|
| | | void TIM_PWMIConfig(TIM_TypeDef* TIMx, TIM_ICInitTypeDef* TIM_ICInitStruct);
|
| | | void TIM_BDTRConfig(TIM_TypeDef* TIMx, TIM_BDTRInitTypeDef *TIM_BDTRInitStruct);
|
| | | void TIM_TimeBaseStructInit(TIM_TimeBaseInitTypeDef* TIM_TimeBaseInitStruct);
|
| | | void TIM_OCStructInit(TIM_OCInitTypeDef* TIM_OCInitStruct);
|
| | | void TIM_ICStructInit(TIM_ICInitTypeDef* TIM_ICInitStruct);
|
| | | void TIM_BDTRStructInit(TIM_BDTRInitTypeDef* TIM_BDTRInitStruct);
|
| | | void TIM_Cmd(TIM_TypeDef* TIMx, FunctionalState NewState);
|
| | | void TIM_CtrlPWMOutputs(TIM_TypeDef* TIMx, FunctionalState NewState);
|
| | | void TIM_ITConfig(TIM_TypeDef* TIMx, uint16_t TIM_IT, FunctionalState NewState);
|
| | | void TIM_GenerateEvent(TIM_TypeDef* TIMx, uint16_t TIM_EventSource);
|
| | | void TIM_DMAConfig(TIM_TypeDef* TIMx, uint16_t TIM_DMABase, uint16_t TIM_DMABurstLength);
|
| | | void TIM_DMACmd(TIM_TypeDef* TIMx, uint16_t TIM_DMASource, FunctionalState NewState);
|
| | | void TIM_InternalClockConfig(TIM_TypeDef* TIMx);
|
| | | void TIM_ITRxExternalClockConfig(TIM_TypeDef* TIMx, uint16_t TIM_InputTriggerSource);
|
| | | void TIM_TIxExternalClockConfig(TIM_TypeDef* TIMx, uint16_t TIM_TIxExternalCLKSource,
|
| | | uint16_t TIM_ICPolarity, uint16_t ICFilter);
|
| | | void TIM_ETRClockMode1Config(TIM_TypeDef* TIMx, uint16_t TIM_ExtTRGPrescaler, uint16_t TIM_ExtTRGPolarity,
|
| | | uint16_t ExtTRGFilter);
|
| | | void TIM_ETRClockMode2Config(TIM_TypeDef* TIMx, uint16_t TIM_ExtTRGPrescaler, |
| | | uint16_t TIM_ExtTRGPolarity, uint16_t ExtTRGFilter);
|
| | | void TIM_ETRConfig(TIM_TypeDef* TIMx, uint16_t TIM_ExtTRGPrescaler, uint16_t TIM_ExtTRGPolarity,
|
| | | uint16_t ExtTRGFilter);
|
| | | void TIM_PrescalerConfig(TIM_TypeDef* TIMx, uint16_t Prescaler, uint16_t TIM_PSCReloadMode);
|
| | | void TIM_CounterModeConfig(TIM_TypeDef* TIMx, uint16_t TIM_CounterMode);
|
| | | void TIM_SelectInputTrigger(TIM_TypeDef* TIMx, uint16_t TIM_InputTriggerSource);
|
| | | void TIM_EncoderInterfaceConfig(TIM_TypeDef* TIMx, uint16_t TIM_EncoderMode,
|
| | | uint16_t TIM_IC1Polarity, uint16_t TIM_IC2Polarity);
|
| | | void TIM_ForcedOC1Config(TIM_TypeDef* TIMx, uint16_t TIM_ForcedAction);
|
| | | void TIM_ForcedOC2Config(TIM_TypeDef* TIMx, uint16_t TIM_ForcedAction);
|
| | | void TIM_ForcedOC3Config(TIM_TypeDef* TIMx, uint16_t TIM_ForcedAction);
|
| | | void TIM_ForcedOC4Config(TIM_TypeDef* TIMx, uint16_t TIM_ForcedAction);
|
| | | void TIM_ARRPreloadConfig(TIM_TypeDef* TIMx, FunctionalState NewState);
|
| | | void TIM_SelectCOM(TIM_TypeDef* TIMx, FunctionalState NewState);
|
| | | void TIM_SelectCCDMA(TIM_TypeDef* TIMx, FunctionalState NewState);
|
| | | void TIM_CCPreloadControl(TIM_TypeDef* TIMx, FunctionalState NewState);
|
| | | void TIM_OC1PreloadConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCPreload);
|
| | | void TIM_OC2PreloadConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCPreload);
|
| | | void TIM_OC3PreloadConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCPreload);
|
| | | void TIM_OC4PreloadConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCPreload);
|
| | | void TIM_OC1FastConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCFast);
|
| | | void TIM_OC2FastConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCFast);
|
| | | void TIM_OC3FastConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCFast);
|
| | | void TIM_OC4FastConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCFast);
|
| | | void TIM_ClearOC1Ref(TIM_TypeDef* TIMx, uint16_t TIM_OCClear);
|
| | | void TIM_ClearOC2Ref(TIM_TypeDef* TIMx, uint16_t TIM_OCClear);
|
| | | void TIM_ClearOC3Ref(TIM_TypeDef* TIMx, uint16_t TIM_OCClear);
|
| | | void TIM_ClearOC4Ref(TIM_TypeDef* TIMx, uint16_t TIM_OCClear);
|
| | | void TIM_OC1PolarityConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCPolarity);
|
| | | void TIM_OC1NPolarityConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCNPolarity);
|
| | | void TIM_OC2PolarityConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCPolarity);
|
| | | void TIM_OC2NPolarityConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCNPolarity);
|
| | | void TIM_OC3PolarityConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCPolarity);
|
| | | void TIM_OC3NPolarityConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCNPolarity);
|
| | | void TIM_OC4PolarityConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCPolarity);
|
| | | void TIM_CCxCmd(TIM_TypeDef* TIMx, uint16_t TIM_Channel, uint16_t TIM_CCx);
|
| | | void TIM_CCxNCmd(TIM_TypeDef* TIMx, uint16_t TIM_Channel, uint16_t TIM_CCxN);
|
| | | void TIM_SelectOCxM(TIM_TypeDef* TIMx, uint16_t TIM_Channel, uint16_t TIM_OCMode);
|
| | | void TIM_UpdateDisableConfig(TIM_TypeDef* TIMx, FunctionalState NewState);
|
| | | void TIM_UpdateRequestConfig(TIM_TypeDef* TIMx, uint16_t TIM_UpdateSource);
|
| | | void TIM_SelectHallSensor(TIM_TypeDef* TIMx, FunctionalState NewState);
|
| | | void TIM_SelectOnePulseMode(TIM_TypeDef* TIMx, uint16_t TIM_OPMode);
|
| | | void TIM_SelectOutputTrigger(TIM_TypeDef* TIMx, uint16_t TIM_TRGOSource);
|
| | | void TIM_SelectSlaveMode(TIM_TypeDef* TIMx, uint16_t TIM_SlaveMode);
|
| | | void TIM_SelectMasterSlaveMode(TIM_TypeDef* TIMx, uint16_t TIM_MasterSlaveMode);
|
| | | void TIM_SetCounter(TIM_TypeDef* TIMx, uint16_t Counter);
|
| | | void TIM_SetAutoreload(TIM_TypeDef* TIMx, uint16_t Autoreload);
|
| | | void TIM_SetCompare1(TIM_TypeDef* TIMx, uint16_t Compare1);
|
| | | void TIM_SetCompare2(TIM_TypeDef* TIMx, uint16_t Compare2);
|
| | | void TIM_SetCompare3(TIM_TypeDef* TIMx, uint16_t Compare3);
|
| | | void TIM_SetCompare4(TIM_TypeDef* TIMx, uint16_t Compare4);
|
| | | void TIM_SetIC1Prescaler(TIM_TypeDef* TIMx, uint16_t TIM_ICPSC);
|
| | | void TIM_SetIC2Prescaler(TIM_TypeDef* TIMx, uint16_t TIM_ICPSC);
|
| | | void TIM_SetIC3Prescaler(TIM_TypeDef* TIMx, uint16_t TIM_ICPSC);
|
| | | void TIM_SetIC4Prescaler(TIM_TypeDef* TIMx, uint16_t TIM_ICPSC);
|
| | | void TIM_SetClockDivision(TIM_TypeDef* TIMx, uint16_t TIM_CKD);
|
| | | uint16_t TIM_GetCapture1(TIM_TypeDef* TIMx);
|
| | | uint16_t TIM_GetCapture2(TIM_TypeDef* TIMx);
|
| | | uint16_t TIM_GetCapture3(TIM_TypeDef* TIMx);
|
| | | uint16_t TIM_GetCapture4(TIM_TypeDef* TIMx);
|
| | | uint16_t TIM_GetCounter(TIM_TypeDef* TIMx);
|
| | | uint16_t TIM_GetPrescaler(TIM_TypeDef* TIMx);
|
| | | FlagStatus TIM_GetFlagStatus(TIM_TypeDef* TIMx, uint16_t TIM_FLAG);
|
| | | void TIM_ClearFlag(TIM_TypeDef* TIMx, uint16_t TIM_FLAG);
|
| | | ITStatus TIM_GetITStatus(TIM_TypeDef* TIMx, uint16_t TIM_IT);
|
| | | void TIM_ClearITPendingBit(TIM_TypeDef* TIMx, uint16_t TIM_IT);
|
| | |
|
| | | #ifdef __cplusplus
|
| | | }
|
| | | #endif
|
| | |
|
| | | #endif /*__STM32F10x_TIM_H */
|
| | | /**
|
| | | * @}
|
| | | */ |
| | |
|
| | | /**
|
| | | * @}
|
| | | */ |
| | |
|
| | | /**
|
| | | * @}
|
| | | */
|
| | |
|
| | | /******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/
|
New file |
| | |
| | | /**
|
| | | ******************************************************************************
|
| | | * @file stm32f10x_usart.h
|
| | | * @author MCD Application Team
|
| | | * @version V3.5.0
|
| | | * @date 11-March-2011
|
| | | * @brief This file contains all the functions prototypes for the USART |
| | | * firmware library.
|
| | | ******************************************************************************
|
| | | * @attention
|
| | | *
|
| | | * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
|
| | | * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE
|
| | | * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY
|
| | | * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING
|
| | | * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE
|
| | | * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
|
| | | *
|
| | | * <h2><center>© COPYRIGHT 2011 STMicroelectronics</center></h2>
|
| | | ******************************************************************************
|
| | | */
|
| | |
|
| | | /* Define to prevent recursive inclusion -------------------------------------*/
|
| | | #ifndef __STM32F10x_USART_H
|
| | | #define __STM32F10x_USART_H
|
| | |
|
| | | #ifdef __cplusplus
|
| | | extern "C" {
|
| | | #endif
|
| | |
|
| | | /* Includes ------------------------------------------------------------------*/
|
| | | #include "stm32f10x.h"
|
| | |
|
| | | /** @addtogroup STM32F10x_StdPeriph_Driver
|
| | | * @{
|
| | | */
|
| | |
|
| | | /** @addtogroup USART
|
| | | * @{
|
| | | */ |
| | |
|
| | | /** @defgroup USART_Exported_Types
|
| | | * @{
|
| | | */ |
| | |
|
| | | /** |
| | | * @brief USART Init Structure definition |
| | | */ |
| | | |
| | | typedef struct
|
| | | {
|
| | | uint32_t USART_BaudRate; /*!< This member configures the USART communication baud rate.
|
| | | The baud rate is computed using the following formula:
|
| | | - IntegerDivider = ((PCLKx) / (16 * (USART_InitStruct->USART_BaudRate)))
|
| | | - FractionalDivider = ((IntegerDivider - ((u32) IntegerDivider)) * 16) + 0.5 */
|
| | |
|
| | | uint16_t USART_WordLength; /*!< Specifies the number of data bits transmitted or received in a frame.
|
| | | This parameter can be a value of @ref USART_Word_Length */
|
| | |
|
| | | uint16_t USART_StopBits; /*!< Specifies the number of stop bits transmitted.
|
| | | This parameter can be a value of @ref USART_Stop_Bits */
|
| | |
|
| | | uint16_t USART_Parity; /*!< Specifies the parity mode.
|
| | | This parameter can be a value of @ref USART_Parity
|
| | | @note When parity is enabled, the computed parity is inserted
|
| | | at the MSB position of the transmitted data (9th bit when
|
| | | the word length is set to 9 data bits; 8th bit when the
|
| | | word length is set to 8 data bits). */
|
| | | |
| | | uint16_t USART_Mode; /*!< Specifies wether the Receive or Transmit mode is enabled or disabled.
|
| | | This parameter can be a value of @ref USART_Mode */
|
| | |
|
| | | uint16_t USART_HardwareFlowControl; /*!< Specifies wether the hardware flow control mode is enabled
|
| | | or disabled.
|
| | | This parameter can be a value of @ref USART_Hardware_Flow_Control */
|
| | | } USART_InitTypeDef;
|
| | |
|
| | | /** |
| | | * @brief USART Clock Init Structure definition |
| | | */ |
| | | |
| | | typedef struct
|
| | | {
|
| | |
|
| | | uint16_t USART_Clock; /*!< Specifies whether the USART clock is enabled or disabled.
|
| | | This parameter can be a value of @ref USART_Clock */
|
| | |
|
| | | uint16_t USART_CPOL; /*!< Specifies the steady state value of the serial clock.
|
| | | This parameter can be a value of @ref USART_Clock_Polarity */
|
| | |
|
| | | uint16_t USART_CPHA; /*!< Specifies the clock transition on which the bit capture is made.
|
| | | This parameter can be a value of @ref USART_Clock_Phase */
|
| | |
|
| | | uint16_t USART_LastBit; /*!< Specifies whether the clock pulse corresponding to the last transmitted
|
| | | data bit (MSB) has to be output on the SCLK pin in synchronous mode.
|
| | | This parameter can be a value of @ref USART_Last_Bit */
|
| | | } USART_ClockInitTypeDef;
|
| | |
|
| | | /**
|
| | | * @}
|
| | | */ |
| | |
|
| | | /** @defgroup USART_Exported_Constants
|
| | | * @{
|
| | | */ |
| | | |
| | | #define IS_USART_ALL_PERIPH(PERIPH) (((PERIPH) == USART1) || \
|
| | | ((PERIPH) == USART2) || \
|
| | | ((PERIPH) == USART3) || \
|
| | | ((PERIPH) == UART4) || \
|
| | | ((PERIPH) == UART5))
|
| | |
|
| | | #define IS_USART_123_PERIPH(PERIPH) (((PERIPH) == USART1) || \
|
| | | ((PERIPH) == USART2) || \
|
| | | ((PERIPH) == USART3))
|
| | |
|
| | | #define IS_USART_1234_PERIPH(PERIPH) (((PERIPH) == USART1) || \
|
| | | ((PERIPH) == USART2) || \
|
| | | ((PERIPH) == USART3) || \
|
| | | ((PERIPH) == UART4))
|
| | | /** @defgroup USART_Word_Length |
| | | * @{
|
| | | */ |
| | | |
| | | #define USART_WordLength_8b ((uint16_t)0x0000)
|
| | | #define USART_WordLength_9b ((uint16_t)0x1000)
|
| | | |
| | | #define IS_USART_WORD_LENGTH(LENGTH) (((LENGTH) == USART_WordLength_8b) || \
|
| | | ((LENGTH) == USART_WordLength_9b))
|
| | | /**
|
| | | * @}
|
| | | */ |
| | |
|
| | | /** @defgroup USART_Stop_Bits |
| | | * @{
|
| | | */ |
| | | |
| | | #define USART_StopBits_1 ((uint16_t)0x0000)
|
| | | #define USART_StopBits_0_5 ((uint16_t)0x1000)
|
| | | #define USART_StopBits_2 ((uint16_t)0x2000)
|
| | | #define USART_StopBits_1_5 ((uint16_t)0x3000)
|
| | | #define IS_USART_STOPBITS(STOPBITS) (((STOPBITS) == USART_StopBits_1) || \
|
| | | ((STOPBITS) == USART_StopBits_0_5) || \
|
| | | ((STOPBITS) == USART_StopBits_2) || \
|
| | | ((STOPBITS) == USART_StopBits_1_5))
|
| | | /**
|
| | | * @}
|
| | | */ |
| | |
|
| | | /** @defgroup USART_Parity |
| | | * @{
|
| | | */ |
| | | |
| | | #define USART_Parity_No ((uint16_t)0x0000)
|
| | | #define USART_Parity_Even ((uint16_t)0x0400)
|
| | | #define USART_Parity_Odd ((uint16_t)0x0600) |
| | | #define IS_USART_PARITY(PARITY) (((PARITY) == USART_Parity_No) || \
|
| | | ((PARITY) == USART_Parity_Even) || \
|
| | | ((PARITY) == USART_Parity_Odd))
|
| | | /**
|
| | | * @}
|
| | | */ |
| | |
|
| | | /** @defgroup USART_Mode |
| | | * @{
|
| | | */ |
| | | |
| | | #define USART_Mode_Rx ((uint16_t)0x0004)
|
| | | #define USART_Mode_Tx ((uint16_t)0x0008)
|
| | | #define IS_USART_MODE(MODE) ((((MODE) & (uint16_t)0xFFF3) == 0x00) && ((MODE) != (uint16_t)0x00))
|
| | | /**
|
| | | * @}
|
| | | */ |
| | |
|
| | | /** @defgroup USART_Hardware_Flow_Control |
| | | * @{
|
| | | */ |
| | | #define USART_HardwareFlowControl_None ((uint16_t)0x0000)
|
| | | #define USART_HardwareFlowControl_RTS ((uint16_t)0x0100)
|
| | | #define USART_HardwareFlowControl_CTS ((uint16_t)0x0200)
|
| | | #define USART_HardwareFlowControl_RTS_CTS ((uint16_t)0x0300)
|
| | | #define IS_USART_HARDWARE_FLOW_CONTROL(CONTROL)\
|
| | | (((CONTROL) == USART_HardwareFlowControl_None) || \
|
| | | ((CONTROL) == USART_HardwareFlowControl_RTS) || \
|
| | | ((CONTROL) == USART_HardwareFlowControl_CTS) || \
|
| | | ((CONTROL) == USART_HardwareFlowControl_RTS_CTS))
|
| | | /**
|
| | | * @}
|
| | | */ |
| | |
|
| | | /** @defgroup USART_Clock |
| | | * @{
|
| | | */ |
| | | #define USART_Clock_Disable ((uint16_t)0x0000)
|
| | | #define USART_Clock_Enable ((uint16_t)0x0800)
|
| | | #define IS_USART_CLOCK(CLOCK) (((CLOCK) == USART_Clock_Disable) || \
|
| | | ((CLOCK) == USART_Clock_Enable))
|
| | | /**
|
| | | * @}
|
| | | */ |
| | |
|
| | | /** @defgroup USART_Clock_Polarity |
| | | * @{
|
| | | */
|
| | | |
| | | #define USART_CPOL_Low ((uint16_t)0x0000)
|
| | | #define USART_CPOL_High ((uint16_t)0x0400)
|
| | | #define IS_USART_CPOL(CPOL) (((CPOL) == USART_CPOL_Low) || ((CPOL) == USART_CPOL_High))
|
| | |
|
| | | /**
|
| | | * @}
|
| | | */ |
| | |
|
| | | /** @defgroup USART_Clock_Phase
|
| | | * @{
|
| | | */
|
| | |
|
| | | #define USART_CPHA_1Edge ((uint16_t)0x0000)
|
| | | #define USART_CPHA_2Edge ((uint16_t)0x0200)
|
| | | #define IS_USART_CPHA(CPHA) (((CPHA) == USART_CPHA_1Edge) || ((CPHA) == USART_CPHA_2Edge))
|
| | |
|
| | | /**
|
| | | * @}
|
| | | */
|
| | |
|
| | | /** @defgroup USART_Last_Bit
|
| | | * @{
|
| | | */
|
| | |
|
| | | #define USART_LastBit_Disable ((uint16_t)0x0000)
|
| | | #define USART_LastBit_Enable ((uint16_t)0x0100)
|
| | | #define IS_USART_LASTBIT(LASTBIT) (((LASTBIT) == USART_LastBit_Disable) || \
|
| | | ((LASTBIT) == USART_LastBit_Enable))
|
| | | /**
|
| | | * @}
|
| | | */ |
| | |
|
| | | /** @defgroup USART_Interrupt_definition |
| | | * @{
|
| | | */
|
| | | |
| | | #define USART_IT_PE ((uint16_t)0x0028)
|
| | | #define USART_IT_TXE ((uint16_t)0x0727)
|
| | | #define USART_IT_TC ((uint16_t)0x0626)
|
| | | #define USART_IT_RXNE ((uint16_t)0x0525)
|
| | | #define USART_IT_IDLE ((uint16_t)0x0424)
|
| | | #define USART_IT_LBD ((uint16_t)0x0846)
|
| | | #define USART_IT_CTS ((uint16_t)0x096A)
|
| | | #define USART_IT_ERR ((uint16_t)0x0060)
|
| | | #define USART_IT_ORE ((uint16_t)0x0360)
|
| | | #define USART_IT_NE ((uint16_t)0x0260)
|
| | | #define USART_IT_FE ((uint16_t)0x0160)
|
| | | #define IS_USART_CONFIG_IT(IT) (((IT) == USART_IT_PE) || ((IT) == USART_IT_TXE) || \
|
| | | ((IT) == USART_IT_TC) || ((IT) == USART_IT_RXNE) || \
|
| | | ((IT) == USART_IT_IDLE) || ((IT) == USART_IT_LBD) || \
|
| | | ((IT) == USART_IT_CTS) || ((IT) == USART_IT_ERR))
|
| | | #define IS_USART_GET_IT(IT) (((IT) == USART_IT_PE) || ((IT) == USART_IT_TXE) || \
|
| | | ((IT) == USART_IT_TC) || ((IT) == USART_IT_RXNE) || \
|
| | | ((IT) == USART_IT_IDLE) || ((IT) == USART_IT_LBD) || \
|
| | | ((IT) == USART_IT_CTS) || ((IT) == USART_IT_ORE) || \
|
| | | ((IT) == USART_IT_NE) || ((IT) == USART_IT_FE))
|
| | | #define IS_USART_CLEAR_IT(IT) (((IT) == USART_IT_TC) || ((IT) == USART_IT_RXNE) || \
|
| | | ((IT) == USART_IT_LBD) || ((IT) == USART_IT_CTS))
|
| | | /**
|
| | | * @}
|
| | | */
|
| | |
|
| | | /** @defgroup USART_DMA_Requests |
| | | * @{
|
| | | */
|
| | |
|
| | | #define USART_DMAReq_Tx ((uint16_t)0x0080)
|
| | | #define USART_DMAReq_Rx ((uint16_t)0x0040)
|
| | | #define IS_USART_DMAREQ(DMAREQ) ((((DMAREQ) & (uint16_t)0xFF3F) == 0x00) && ((DMAREQ) != (uint16_t)0x00))
|
| | |
|
| | | /**
|
| | | * @}
|
| | | */ |
| | |
|
| | | /** @defgroup USART_WakeUp_methods
|
| | | * @{
|
| | | */
|
| | |
|
| | | #define USART_WakeUp_IdleLine ((uint16_t)0x0000)
|
| | | #define USART_WakeUp_AddressMark ((uint16_t)0x0800)
|
| | | #define IS_USART_WAKEUP(WAKEUP) (((WAKEUP) == USART_WakeUp_IdleLine) || \
|
| | | ((WAKEUP) == USART_WakeUp_AddressMark))
|
| | | /**
|
| | | * @}
|
| | | */
|
| | |
|
| | | /** @defgroup USART_LIN_Break_Detection_Length |
| | | * @{
|
| | | */
|
| | | |
| | | #define USART_LINBreakDetectLength_10b ((uint16_t)0x0000)
|
| | | #define USART_LINBreakDetectLength_11b ((uint16_t)0x0020)
|
| | | #define IS_USART_LIN_BREAK_DETECT_LENGTH(LENGTH) \
|
| | | (((LENGTH) == USART_LINBreakDetectLength_10b) || \
|
| | | ((LENGTH) == USART_LINBreakDetectLength_11b))
|
| | | /**
|
| | | * @}
|
| | | */
|
| | |
|
| | | /** @defgroup USART_IrDA_Low_Power |
| | | * @{
|
| | | */
|
| | |
|
| | | #define USART_IrDAMode_LowPower ((uint16_t)0x0004)
|
| | | #define USART_IrDAMode_Normal ((uint16_t)0x0000)
|
| | | #define IS_USART_IRDA_MODE(MODE) (((MODE) == USART_IrDAMode_LowPower) || \
|
| | | ((MODE) == USART_IrDAMode_Normal))
|
| | | /**
|
| | | * @}
|
| | | */ |
| | |
|
| | | /** @defgroup USART_Flags |
| | | * @{
|
| | | */
|
| | |
|
| | | #define USART_FLAG_CTS ((uint16_t)0x0200)
|
| | | #define USART_FLAG_LBD ((uint16_t)0x0100)
|
| | | #define USART_FLAG_TXE ((uint16_t)0x0080)
|
| | | #define USART_FLAG_TC ((uint16_t)0x0040)
|
| | | #define USART_FLAG_RXNE ((uint16_t)0x0020)
|
| | | #define USART_FLAG_IDLE ((uint16_t)0x0010)
|
| | | #define USART_FLAG_ORE ((uint16_t)0x0008)
|
| | | #define USART_FLAG_NE ((uint16_t)0x0004)
|
| | | #define USART_FLAG_FE ((uint16_t)0x0002)
|
| | | #define USART_FLAG_PE ((uint16_t)0x0001)
|
| | | #define IS_USART_FLAG(FLAG) (((FLAG) == USART_FLAG_PE) || ((FLAG) == USART_FLAG_TXE) || \
|
| | | ((FLAG) == USART_FLAG_TC) || ((FLAG) == USART_FLAG_RXNE) || \
|
| | | ((FLAG) == USART_FLAG_IDLE) || ((FLAG) == USART_FLAG_LBD) || \
|
| | | ((FLAG) == USART_FLAG_CTS) || ((FLAG) == USART_FLAG_ORE) || \
|
| | | ((FLAG) == USART_FLAG_NE) || ((FLAG) == USART_FLAG_FE))
|
| | | |
| | | #define IS_USART_CLEAR_FLAG(FLAG) ((((FLAG) & (uint16_t)0xFC9F) == 0x00) && ((FLAG) != (uint16_t)0x00))
|
| | | #define IS_USART_PERIPH_FLAG(PERIPH, USART_FLAG) ((((*(uint32_t*)&(PERIPH)) != UART4_BASE) &&\
|
| | | ((*(uint32_t*)&(PERIPH)) != UART5_BASE)) \
|
| | | || ((USART_FLAG) != USART_FLAG_CTS)) |
| | | #define IS_USART_BAUDRATE(BAUDRATE) (((BAUDRATE) > 0) && ((BAUDRATE) < 0x0044AA21))
|
| | | #define IS_USART_ADDRESS(ADDRESS) ((ADDRESS) <= 0xF)
|
| | | #define IS_USART_DATA(DATA) ((DATA) <= 0x1FF)
|
| | |
|
| | | /**
|
| | | * @}
|
| | | */ |
| | |
|
| | | /**
|
| | | * @}
|
| | | */ |
| | |
|
| | | /** @defgroup USART_Exported_Macros
|
| | | * @{
|
| | | */ |
| | |
|
| | | /**
|
| | | * @}
|
| | | */ |
| | |
|
| | | /** @defgroup USART_Exported_Functions
|
| | | * @{
|
| | | */
|
| | |
|
| | | void USART_DeInit(USART_TypeDef* USARTx);
|
| | | void USART_Init(USART_TypeDef* USARTx, USART_InitTypeDef* USART_InitStruct);
|
| | | void USART_StructInit(USART_InitTypeDef* USART_InitStruct);
|
| | | void USART_ClockInit(USART_TypeDef* USARTx, USART_ClockInitTypeDef* USART_ClockInitStruct);
|
| | | void USART_ClockStructInit(USART_ClockInitTypeDef* USART_ClockInitStruct);
|
| | | void USART_Cmd(USART_TypeDef* USARTx, FunctionalState NewState);
|
| | | void USART_ITConfig(USART_TypeDef* USARTx, uint16_t USART_IT, FunctionalState NewState);
|
| | | void USART_DMACmd(USART_TypeDef* USARTx, uint16_t USART_DMAReq, FunctionalState NewState);
|
| | | void USART_SetAddress(USART_TypeDef* USARTx, uint8_t USART_Address);
|
| | | void USART_WakeUpConfig(USART_TypeDef* USARTx, uint16_t USART_WakeUp);
|
| | | void USART_ReceiverWakeUpCmd(USART_TypeDef* USARTx, FunctionalState NewState);
|
| | | void USART_LINBreakDetectLengthConfig(USART_TypeDef* USARTx, uint16_t USART_LINBreakDetectLength);
|
| | | void USART_LINCmd(USART_TypeDef* USARTx, FunctionalState NewState);
|
| | | void USART_SendData(USART_TypeDef* USARTx, uint16_t Data);
|
| | | uint16_t USART_ReceiveData(USART_TypeDef* USARTx);
|
| | | void USART_SendBreak(USART_TypeDef* USARTx);
|
| | | void USART_SetGuardTime(USART_TypeDef* USARTx, uint8_t USART_GuardTime);
|
| | | void USART_SetPrescaler(USART_TypeDef* USARTx, uint8_t USART_Prescaler);
|
| | | void USART_SmartCardCmd(USART_TypeDef* USARTx, FunctionalState NewState);
|
| | | void USART_SmartCardNACKCmd(USART_TypeDef* USARTx, FunctionalState NewState);
|
| | | void USART_HalfDuplexCmd(USART_TypeDef* USARTx, FunctionalState NewState);
|
| | | void USART_OverSampling8Cmd(USART_TypeDef* USARTx, FunctionalState NewState);
|
| | | void USART_OneBitMethodCmd(USART_TypeDef* USARTx, FunctionalState NewState);
|
| | | void USART_IrDAConfig(USART_TypeDef* USARTx, uint16_t USART_IrDAMode);
|
| | | void USART_IrDACmd(USART_TypeDef* USARTx, FunctionalState NewState);
|
| | | FlagStatus USART_GetFlagStatus(USART_TypeDef* USARTx, uint16_t USART_FLAG);
|
| | | void USART_ClearFlag(USART_TypeDef* USARTx, uint16_t USART_FLAG);
|
| | | ITStatus USART_GetITStatus(USART_TypeDef* USARTx, uint16_t USART_IT);
|
| | | void USART_ClearITPendingBit(USART_TypeDef* USARTx, uint16_t USART_IT);
|
| | |
|
| | | #ifdef __cplusplus
|
| | | }
|
| | | #endif
|
| | |
|
| | | #endif /* __STM32F10x_USART_H */
|
| | | /**
|
| | | * @}
|
| | | */ |
| | |
|
| | | /**
|
| | | * @}
|
| | | */ |
| | |
|
| | | /**
|
| | | * @}
|
| | | */ |
| | |
|
| | | /******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/
|
New file |
| | |
| | | /**
|
| | | ******************************************************************************
|
| | | * @file stm32f10x_wwdg.h
|
| | | * @author MCD Application Team
|
| | | * @version V3.5.0
|
| | | * @date 11-March-2011
|
| | | * @brief This file contains all the functions prototypes for the WWDG firmware
|
| | | * library.
|
| | | ******************************************************************************
|
| | | * @attention
|
| | | *
|
| | | * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
|
| | | * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE
|
| | | * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY
|
| | | * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING
|
| | | * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE
|
| | | * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
|
| | | *
|
| | | * <h2><center>© COPYRIGHT 2011 STMicroelectronics</center></h2>
|
| | | ******************************************************************************
|
| | | */
|
| | |
|
| | | /* Define to prevent recursive inclusion -------------------------------------*/
|
| | | #ifndef __STM32F10x_WWDG_H
|
| | | #define __STM32F10x_WWDG_H
|
| | |
|
| | | #ifdef __cplusplus
|
| | | extern "C" {
|
| | | #endif
|
| | |
|
| | | /* Includes ------------------------------------------------------------------*/
|
| | | #include "stm32f10x.h"
|
| | |
|
| | | /** @addtogroup STM32F10x_StdPeriph_Driver
|
| | | * @{
|
| | | */
|
| | |
|
| | | /** @addtogroup WWDG
|
| | | * @{
|
| | | */ |
| | |
|
| | | /** @defgroup WWDG_Exported_Types
|
| | | * @{
|
| | | */ |
| | | |
| | | /**
|
| | | * @}
|
| | | */ |
| | |
|
| | | /** @defgroup WWDG_Exported_Constants
|
| | | * @{
|
| | | */ |
| | | |
| | | /** @defgroup WWDG_Prescaler |
| | | * @{
|
| | | */ |
| | | |
| | | #define WWDG_Prescaler_1 ((uint32_t)0x00000000)
|
| | | #define WWDG_Prescaler_2 ((uint32_t)0x00000080)
|
| | | #define WWDG_Prescaler_4 ((uint32_t)0x00000100)
|
| | | #define WWDG_Prescaler_8 ((uint32_t)0x00000180)
|
| | | #define IS_WWDG_PRESCALER(PRESCALER) (((PRESCALER) == WWDG_Prescaler_1) || \
|
| | | ((PRESCALER) == WWDG_Prescaler_2) || \
|
| | | ((PRESCALER) == WWDG_Prescaler_4) || \
|
| | | ((PRESCALER) == WWDG_Prescaler_8))
|
| | | #define IS_WWDG_WINDOW_VALUE(VALUE) ((VALUE) <= 0x7F)
|
| | | #define IS_WWDG_COUNTER(COUNTER) (((COUNTER) >= 0x40) && ((COUNTER) <= 0x7F))
|
| | |
|
| | | /**
|
| | | * @}
|
| | | */ |
| | |
|
| | | /**
|
| | | * @}
|
| | | */ |
| | |
|
| | | /** @defgroup WWDG_Exported_Macros
|
| | | * @{
|
| | | */ |
| | | /**
|
| | | * @}
|
| | | */ |
| | |
|
| | | /** @defgroup WWDG_Exported_Functions
|
| | | * @{
|
| | | */ |
| | | |
| | | void WWDG_DeInit(void);
|
| | | void WWDG_SetPrescaler(uint32_t WWDG_Prescaler);
|
| | | void WWDG_SetWindowValue(uint8_t WindowValue);
|
| | | void WWDG_EnableIT(void);
|
| | | void WWDG_SetCounter(uint8_t Counter);
|
| | | void WWDG_Enable(uint8_t Counter);
|
| | | FlagStatus WWDG_GetFlagStatus(void);
|
| | | void WWDG_ClearFlag(void);
|
| | |
|
| | | #ifdef __cplusplus
|
| | | }
|
| | | #endif
|
| | |
|
| | | #endif /* __STM32F10x_WWDG_H */
|
| | |
|
| | | /**
|
| | | * @}
|
| | | */ |
| | |
|
| | | /**
|
| | | * @}
|
| | | */ |
| | |
|
| | | /**
|
| | | * @}
|
| | | */ |
| | |
|
| | | /******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/
|
New file |
| | |
| | | /**
|
| | | ******************************************************************************
|
| | | * @file system_stm32f10x.h
|
| | | * @author MCD Application Team
|
| | | * @version V3.5.0
|
| | | * @date 11-March-2011
|
| | | * @brief CMSIS Cortex-M3 Device Peripheral Access Layer System Header File.
|
| | | ******************************************************************************
|
| | | * @attention
|
| | | *
|
| | | * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
|
| | | * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE
|
| | | * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY
|
| | | * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING
|
| | | * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE
|
| | | * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
|
| | | *
|
| | | * <h2><center>© COPYRIGHT 2011 STMicroelectronics</center></h2>
|
| | | ******************************************************************************
|
| | | */
|
| | |
|
| | | /** @addtogroup CMSIS
|
| | | * @{
|
| | | */
|
| | |
|
| | | /** @addtogroup stm32f10x_system
|
| | | * @{
|
| | | */ |
| | | |
| | | /**
|
| | | * @brief Define to prevent recursive inclusion
|
| | | */
|
| | | #ifndef __SYSTEM_STM32F10X_H
|
| | | #define __SYSTEM_STM32F10X_H
|
| | |
|
| | | #ifdef __cplusplus
|
| | | extern "C" {
|
| | | #endif |
| | |
|
| | | /** @addtogroup STM32F10x_System_Includes
|
| | | * @{
|
| | | */
|
| | |
|
| | | /**
|
| | | * @}
|
| | | */
|
| | |
|
| | |
|
| | | /** @addtogroup STM32F10x_System_Exported_types
|
| | | * @{
|
| | | */
|
| | |
|
| | | extern uint32_t SystemCoreClock; /*!< System Clock Frequency (Core Clock) */
|
| | |
|
| | | /**
|
| | | * @}
|
| | | */
|
| | |
|
| | | /** @addtogroup STM32F10x_System_Exported_Constants
|
| | | * @{
|
| | | */
|
| | |
|
| | | /**
|
| | | * @}
|
| | | */
|
| | |
|
| | | /** @addtogroup STM32F10x_System_Exported_Macros
|
| | | * @{
|
| | | */
|
| | |
|
| | | /**
|
| | | * @}
|
| | | */
|
| | |
|
| | | /** @addtogroup STM32F10x_System_Exported_Functions
|
| | | * @{
|
| | | */
|
| | | |
| | | extern void SystemInit(void);
|
| | | extern void SystemCoreClockUpdate(void);
|
| | | /**
|
| | | * @}
|
| | | */
|
| | |
|
| | | #ifdef __cplusplus
|
| | | }
|
| | | #endif
|
| | |
|
| | | #endif /*__SYSTEM_STM32F10X_H */
|
| | |
|
| | | /**
|
| | | * @}
|
| | | */
|
| | | |
| | | /**
|
| | | * @}
|
| | | */ |
| | | /******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/
|
New file |
| | |
| | | /**
|
| | | ******************************************************************************
|
| | | * @file misc.c
|
| | | * @author MCD Application Team
|
| | | * @version V3.5.0
|
| | | * @date 11-March-2011
|
| | | * @brief This file provides all the miscellaneous firmware functions (add-on
|
| | | * to CMSIS functions).
|
| | | ******************************************************************************
|
| | | * @attention
|
| | | *
|
| | | * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
|
| | | * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE
|
| | | * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY
|
| | | * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING
|
| | | * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE
|
| | | * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
|
| | | *
|
| | | * <h2><center>© COPYRIGHT 2011 STMicroelectronics</center></h2>
|
| | | ******************************************************************************
|
| | | */
|
| | |
|
| | | /* Includes ------------------------------------------------------------------*/
|
| | | #include "misc.h"
|
| | |
|
| | | /** @addtogroup STM32F10x_StdPeriph_Driver
|
| | | * @{
|
| | | */
|
| | |
|
| | | /** @defgroup MISC |
| | | * @brief MISC driver modules
|
| | | * @{
|
| | | */
|
| | |
|
| | | /** @defgroup MISC_Private_TypesDefinitions
|
| | | * @{
|
| | | */
|
| | |
|
| | | /**
|
| | | * @}
|
| | | */ |
| | |
|
| | | /** @defgroup MISC_Private_Defines
|
| | | * @{
|
| | | */
|
| | |
|
| | | #define AIRCR_VECTKEY_MASK ((uint32_t)0x05FA0000)
|
| | | /**
|
| | | * @}
|
| | | */
|
| | |
|
| | | /** @defgroup MISC_Private_Macros
|
| | | * @{
|
| | | */
|
| | |
|
| | | /**
|
| | | * @}
|
| | | */
|
| | |
|
| | | /** @defgroup MISC_Private_Variables
|
| | | * @{
|
| | | */
|
| | |
|
| | | /**
|
| | | * @}
|
| | | */
|
| | |
|
| | | /** @defgroup MISC_Private_FunctionPrototypes
|
| | | * @{
|
| | | */
|
| | |
|
| | | /**
|
| | | * @}
|
| | | */
|
| | |
|
| | | /** @defgroup MISC_Private_Functions
|
| | | * @{
|
| | | */
|
| | |
|
| | | /**
|
| | | * @brief Configures the priority grouping: pre-emption priority and subpriority.
|
| | | * @param NVIC_PriorityGroup: specifies the priority grouping bits length. |
| | | * This parameter can be one of the following values:
|
| | | * @arg NVIC_PriorityGroup_0: 0 bits for pre-emption priority
|
| | | * 4 bits for subpriority
|
| | | * @arg NVIC_PriorityGroup_1: 1 bits for pre-emption priority
|
| | | * 3 bits for subpriority
|
| | | * @arg NVIC_PriorityGroup_2: 2 bits for pre-emption priority
|
| | | * 2 bits for subpriority
|
| | | * @arg NVIC_PriorityGroup_3: 3 bits for pre-emption priority
|
| | | * 1 bits for subpriority
|
| | | * @arg NVIC_PriorityGroup_4: 4 bits for pre-emption priority
|
| | | * 0 bits for subpriority
|
| | | * @retval None
|
| | | */
|
| | | void NVIC_PriorityGroupConfig(uint32_t NVIC_PriorityGroup)
|
| | | {
|
| | | /* Check the parameters */
|
| | | assert_param(IS_NVIC_PRIORITY_GROUP(NVIC_PriorityGroup));
|
| | | |
| | | /* Set the PRIGROUP[10:8] bits according to NVIC_PriorityGroup value */
|
| | | SCB->AIRCR = AIRCR_VECTKEY_MASK | NVIC_PriorityGroup;
|
| | | }
|
| | |
|
| | | /**
|
| | | * @brief Initializes the NVIC peripheral according to the specified
|
| | | * parameters in the NVIC_InitStruct.
|
| | | * @param NVIC_InitStruct: pointer to a NVIC_InitTypeDef structure that contains
|
| | | * the configuration information for the specified NVIC peripheral.
|
| | | * @retval None
|
| | | */
|
| | | void NVIC_Init(NVIC_InitTypeDef* NVIC_InitStruct)
|
| | | {
|
| | | uint32_t tmppriority = 0x00, tmppre = 0x00, tmpsub = 0x0F;
|
| | | |
| | | /* Check the parameters */
|
| | | assert_param(IS_FUNCTIONAL_STATE(NVIC_InitStruct->NVIC_IRQChannelCmd));
|
| | | assert_param(IS_NVIC_PREEMPTION_PRIORITY(NVIC_InitStruct->NVIC_IRQChannelPreemptionPriority)); |
| | | assert_param(IS_NVIC_SUB_PRIORITY(NVIC_InitStruct->NVIC_IRQChannelSubPriority));
|
| | | |
| | | if (NVIC_InitStruct->NVIC_IRQChannelCmd != DISABLE)
|
| | | {
|
| | | /* Compute the Corresponding IRQ Priority --------------------------------*/ |
| | | tmppriority = (0x700 - ((SCB->AIRCR) & (uint32_t)0x700))>> 0x08;
|
| | | tmppre = (0x4 - tmppriority);
|
| | | tmpsub = tmpsub >> tmppriority;
|
| | |
|
| | | tmppriority = (uint32_t)NVIC_InitStruct->NVIC_IRQChannelPreemptionPriority << tmppre;
|
| | | tmppriority |= NVIC_InitStruct->NVIC_IRQChannelSubPriority & tmpsub;
|
| | | tmppriority = tmppriority << 0x04;
|
| | | |
| | | NVIC->IP[NVIC_InitStruct->NVIC_IRQChannel] = tmppriority;
|
| | | |
| | | /* Enable the Selected IRQ Channels --------------------------------------*/
|
| | | NVIC->ISER[NVIC_InitStruct->NVIC_IRQChannel >> 0x05] =
|
| | | (uint32_t)0x01 << (NVIC_InitStruct->NVIC_IRQChannel & (uint8_t)0x1F);
|
| | | }
|
| | | else
|
| | | {
|
| | | /* Disable the Selected IRQ Channels -------------------------------------*/
|
| | | NVIC->ICER[NVIC_InitStruct->NVIC_IRQChannel >> 0x05] =
|
| | | (uint32_t)0x01 << (NVIC_InitStruct->NVIC_IRQChannel & (uint8_t)0x1F);
|
| | | }
|
| | | }
|
| | |
|
| | | /**
|
| | | * @brief Sets the vector table location and Offset.
|
| | | * @param NVIC_VectTab: specifies if the vector table is in RAM or FLASH memory.
|
| | | * This parameter can be one of the following values:
|
| | | * @arg NVIC_VectTab_RAM
|
| | | * @arg NVIC_VectTab_FLASH
|
| | | * @param Offset: Vector Table base offset field. This value must be a multiple |
| | | * of 0x200.
|
| | | * @retval None
|
| | | */
|
| | | void NVIC_SetVectorTable(uint32_t NVIC_VectTab, uint32_t Offset)
|
| | | { |
| | | /* Check the parameters */
|
| | | assert_param(IS_NVIC_VECTTAB(NVIC_VectTab));
|
| | | assert_param(IS_NVIC_OFFSET(Offset)); |
| | | |
| | | SCB->VTOR = NVIC_VectTab | (Offset & (uint32_t)0x1FFFFF80);
|
| | | }
|
| | |
|
| | | /**
|
| | | * @brief Selects the condition for the system to enter low power mode.
|
| | | * @param LowPowerMode: Specifies the new mode for the system to enter low power mode.
|
| | | * This parameter can be one of the following values:
|
| | | * @arg NVIC_LP_SEVONPEND
|
| | | * @arg NVIC_LP_SLEEPDEEP
|
| | | * @arg NVIC_LP_SLEEPONEXIT
|
| | | * @param NewState: new state of LP condition. This parameter can be: ENABLE or DISABLE.
|
| | | * @retval None
|
| | | */
|
| | | void NVIC_SystemLPConfig(uint8_t LowPowerMode, FunctionalState NewState)
|
| | | {
|
| | | /* Check the parameters */
|
| | | assert_param(IS_NVIC_LP(LowPowerMode));
|
| | | assert_param(IS_FUNCTIONAL_STATE(NewState)); |
| | | |
| | | if (NewState != DISABLE)
|
| | | {
|
| | | SCB->SCR |= LowPowerMode;
|
| | | }
|
| | | else
|
| | | {
|
| | | SCB->SCR &= (uint32_t)(~(uint32_t)LowPowerMode);
|
| | | }
|
| | | }
|
| | |
|
| | | /**
|
| | | * @brief Configures the SysTick clock source.
|
| | | * @param SysTick_CLKSource: specifies the SysTick clock source.
|
| | | * This parameter can be one of the following values:
|
| | | * @arg SysTick_CLKSource_HCLK_Div8: AHB clock divided by 8 selected as SysTick clock source.
|
| | | * @arg SysTick_CLKSource_HCLK: AHB clock selected as SysTick clock source.
|
| | | * @retval None
|
| | | */
|
| | | void SysTick_CLKSourceConfig(uint32_t SysTick_CLKSource)
|
| | | {
|
| | | /* Check the parameters */
|
| | | assert_param(IS_SYSTICK_CLK_SOURCE(SysTick_CLKSource));
|
| | | if (SysTick_CLKSource == SysTick_CLKSource_HCLK)
|
| | | {
|
| | | SysTick->CTRL |= SysTick_CLKSource_HCLK;
|
| | | }
|
| | | else
|
| | | {
|
| | | SysTick->CTRL &= SysTick_CLKSource_HCLK_Div8;
|
| | | }
|
| | | }
|
| | |
|
| | | /**
|
| | | * @}
|
| | | */
|
| | |
|
| | | /**
|
| | | * @}
|
| | | */
|
| | |
|
| | | /**
|
| | | * @}
|
| | | */
|
| | |
|
| | | /******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/
|
New file |
| | |
| | | /**
|
| | | ******************************************************************************
|
| | | * @file stm32f10x_adc.c
|
| | | * @author MCD Application Team
|
| | | * @version V3.5.0
|
| | | * @date 11-March-2011
|
| | | * @brief This file provides all the ADC firmware functions.
|
| | | ******************************************************************************
|
| | | * @attention
|
| | | *
|
| | | * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
|
| | | * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE
|
| | | * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY
|
| | | * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING
|
| | | * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE
|
| | | * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
|
| | | *
|
| | | * <h2><center>© COPYRIGHT 2011 STMicroelectronics</center></h2>
|
| | | ******************************************************************************
|
| | | */
|
| | |
|
| | | /* Includes ------------------------------------------------------------------*/
|
| | | #include "stm32f10x_adc.h"
|
| | | #include "stm32f10x_rcc.h"
|
| | |
|
| | | /** @addtogroup STM32F10x_StdPeriph_Driver
|
| | | * @{
|
| | | */
|
| | |
|
| | | /** @defgroup ADC |
| | | * @brief ADC driver modules
|
| | | * @{
|
| | | */
|
| | |
|
| | | /** @defgroup ADC_Private_TypesDefinitions
|
| | | * @{
|
| | | */
|
| | |
|
| | | /**
|
| | | * @}
|
| | | */
|
| | |
|
| | | /** @defgroup ADC_Private_Defines
|
| | | * @{
|
| | | */
|
| | |
|
| | | /* ADC DISCNUM mask */
|
| | | #define CR1_DISCNUM_Reset ((uint32_t)0xFFFF1FFF)
|
| | |
|
| | | /* ADC DISCEN mask */
|
| | | #define CR1_DISCEN_Set ((uint32_t)0x00000800)
|
| | | #define CR1_DISCEN_Reset ((uint32_t)0xFFFFF7FF)
|
| | |
|
| | | /* ADC JAUTO mask */
|
| | | #define CR1_JAUTO_Set ((uint32_t)0x00000400)
|
| | | #define CR1_JAUTO_Reset ((uint32_t)0xFFFFFBFF)
|
| | |
|
| | | /* ADC JDISCEN mask */
|
| | | #define CR1_JDISCEN_Set ((uint32_t)0x00001000)
|
| | | #define CR1_JDISCEN_Reset ((uint32_t)0xFFFFEFFF)
|
| | |
|
| | | /* ADC AWDCH mask */
|
| | | #define CR1_AWDCH_Reset ((uint32_t)0xFFFFFFE0)
|
| | |
|
| | | /* ADC Analog watchdog enable mode mask */
|
| | | #define CR1_AWDMode_Reset ((uint32_t)0xFF3FFDFF)
|
| | |
|
| | | /* CR1 register Mask */
|
| | | #define CR1_CLEAR_Mask ((uint32_t)0xFFF0FEFF)
|
| | |
|
| | | /* ADC ADON mask */
|
| | | #define CR2_ADON_Set ((uint32_t)0x00000001)
|
| | | #define CR2_ADON_Reset ((uint32_t)0xFFFFFFFE)
|
| | |
|
| | | /* ADC DMA mask */
|
| | | #define CR2_DMA_Set ((uint32_t)0x00000100)
|
| | | #define CR2_DMA_Reset ((uint32_t)0xFFFFFEFF)
|
| | |
|
| | | /* ADC RSTCAL mask */
|
| | | #define CR2_RSTCAL_Set ((uint32_t)0x00000008)
|
| | |
|
| | | /* ADC CAL mask */
|
| | | #define CR2_CAL_Set ((uint32_t)0x00000004)
|
| | |
|
| | | /* ADC SWSTART mask */
|
| | | #define CR2_SWSTART_Set ((uint32_t)0x00400000)
|
| | |
|
| | | /* ADC EXTTRIG mask */
|
| | | #define CR2_EXTTRIG_Set ((uint32_t)0x00100000)
|
| | | #define CR2_EXTTRIG_Reset ((uint32_t)0xFFEFFFFF)
|
| | |
|
| | | /* ADC Software start mask */
|
| | | #define CR2_EXTTRIG_SWSTART_Set ((uint32_t)0x00500000)
|
| | | #define CR2_EXTTRIG_SWSTART_Reset ((uint32_t)0xFFAFFFFF)
|
| | |
|
| | | /* ADC JEXTSEL mask */
|
| | | #define CR2_JEXTSEL_Reset ((uint32_t)0xFFFF8FFF)
|
| | |
|
| | | /* ADC JEXTTRIG mask */
|
| | | #define CR2_JEXTTRIG_Set ((uint32_t)0x00008000)
|
| | | #define CR2_JEXTTRIG_Reset ((uint32_t)0xFFFF7FFF)
|
| | |
|
| | | /* ADC JSWSTART mask */
|
| | | #define CR2_JSWSTART_Set ((uint32_t)0x00200000)
|
| | |
|
| | | /* ADC injected software start mask */
|
| | | #define CR2_JEXTTRIG_JSWSTART_Set ((uint32_t)0x00208000)
|
| | | #define CR2_JEXTTRIG_JSWSTART_Reset ((uint32_t)0xFFDF7FFF)
|
| | |
|
| | | /* ADC TSPD mask */
|
| | | #define CR2_TSVREFE_Set ((uint32_t)0x00800000)
|
| | | #define CR2_TSVREFE_Reset ((uint32_t)0xFF7FFFFF)
|
| | |
|
| | | /* CR2 register Mask */
|
| | | #define CR2_CLEAR_Mask ((uint32_t)0xFFF1F7FD)
|
| | |
|
| | | /* ADC SQx mask */
|
| | | #define SQR3_SQ_Set ((uint32_t)0x0000001F)
|
| | | #define SQR2_SQ_Set ((uint32_t)0x0000001F)
|
| | | #define SQR1_SQ_Set ((uint32_t)0x0000001F)
|
| | |
|
| | | /* SQR1 register Mask */
|
| | | #define SQR1_CLEAR_Mask ((uint32_t)0xFF0FFFFF)
|
| | |
|
| | | /* ADC JSQx mask */
|
| | | #define JSQR_JSQ_Set ((uint32_t)0x0000001F)
|
| | |
|
| | | /* ADC JL mask */
|
| | | #define JSQR_JL_Set ((uint32_t)0x00300000)
|
| | | #define JSQR_JL_Reset ((uint32_t)0xFFCFFFFF)
|
| | |
|
| | | /* ADC SMPx mask */
|
| | | #define SMPR1_SMP_Set ((uint32_t)0x00000007)
|
| | | #define SMPR2_SMP_Set ((uint32_t)0x00000007)
|
| | |
|
| | | /* ADC JDRx registers offset */
|
| | | #define JDR_Offset ((uint8_t)0x28)
|
| | |
|
| | | /* ADC1 DR register base address */
|
| | | #define DR_ADDRESS ((uint32_t)0x4001244C)
|
| | |
|
| | | /**
|
| | | * @}
|
| | | */
|
| | |
|
| | | /** @defgroup ADC_Private_Macros
|
| | | * @{
|
| | | */
|
| | |
|
| | | /**
|
| | | * @}
|
| | | */
|
| | |
|
| | | /** @defgroup ADC_Private_Variables
|
| | | * @{
|
| | | */
|
| | |
|
| | | /**
|
| | | * @}
|
| | | */
|
| | |
|
| | | /** @defgroup ADC_Private_FunctionPrototypes
|
| | | * @{
|
| | | */
|
| | |
|
| | | /**
|
| | | * @}
|
| | | */
|
| | |
|
| | | /** @defgroup ADC_Private_Functions
|
| | | * @{
|
| | | */
|
| | |
|
| | | /**
|
| | | * @brief Deinitializes the ADCx peripheral registers to their default reset values.
|
| | | * @param ADCx: where x can be 1, 2 or 3 to select the ADC peripheral.
|
| | | * @retval None
|
| | | */
|
| | | void ADC_DeInit(ADC_TypeDef* ADCx)
|
| | | {
|
| | | /* Check the parameters */
|
| | | assert_param(IS_ADC_ALL_PERIPH(ADCx));
|
| | | |
| | | if (ADCx == ADC1)
|
| | | {
|
| | | /* Enable ADC1 reset state */
|
| | | RCC_APB2PeriphResetCmd(RCC_APB2Periph_ADC1, ENABLE);
|
| | | /* Release ADC1 from reset state */
|
| | | RCC_APB2PeriphResetCmd(RCC_APB2Periph_ADC1, DISABLE);
|
| | | }
|
| | | else if (ADCx == ADC2)
|
| | | {
|
| | | /* Enable ADC2 reset state */
|
| | | RCC_APB2PeriphResetCmd(RCC_APB2Periph_ADC2, ENABLE);
|
| | | /* Release ADC2 from reset state */
|
| | | RCC_APB2PeriphResetCmd(RCC_APB2Periph_ADC2, DISABLE);
|
| | | }
|
| | | else
|
| | | {
|
| | | if (ADCx == ADC3)
|
| | | {
|
| | | /* Enable ADC3 reset state */
|
| | | RCC_APB2PeriphResetCmd(RCC_APB2Periph_ADC3, ENABLE);
|
| | | /* Release ADC3 from reset state */
|
| | | RCC_APB2PeriphResetCmd(RCC_APB2Periph_ADC3, DISABLE);
|
| | | }
|
| | | }
|
| | | }
|
| | |
|
| | | /**
|
| | | * @brief Initializes the ADCx peripheral according to the specified parameters
|
| | | * in the ADC_InitStruct.
|
| | | * @param ADCx: where x can be 1, 2 or 3 to select the ADC peripheral.
|
| | | * @param ADC_InitStruct: pointer to an ADC_InitTypeDef structure that contains
|
| | | * the configuration information for the specified ADC peripheral.
|
| | | * @retval None
|
| | | */
|
| | | void ADC_Init(ADC_TypeDef* ADCx, ADC_InitTypeDef* ADC_InitStruct)
|
| | | {
|
| | | uint32_t tmpreg1 = 0;
|
| | | uint8_t tmpreg2 = 0;
|
| | | /* Check the parameters */
|
| | | assert_param(IS_ADC_ALL_PERIPH(ADCx));
|
| | | assert_param(IS_ADC_MODE(ADC_InitStruct->ADC_Mode));
|
| | | assert_param(IS_FUNCTIONAL_STATE(ADC_InitStruct->ADC_ScanConvMode));
|
| | | assert_param(IS_FUNCTIONAL_STATE(ADC_InitStruct->ADC_ContinuousConvMode));
|
| | | assert_param(IS_ADC_EXT_TRIG(ADC_InitStruct->ADC_ExternalTrigConv)); |
| | | assert_param(IS_ADC_DATA_ALIGN(ADC_InitStruct->ADC_DataAlign)); |
| | | assert_param(IS_ADC_REGULAR_LENGTH(ADC_InitStruct->ADC_NbrOfChannel));
|
| | |
|
| | | /*---------------------------- ADCx CR1 Configuration -----------------*/
|
| | | /* Get the ADCx CR1 value */
|
| | | tmpreg1 = ADCx->CR1;
|
| | | /* Clear DUALMOD and SCAN bits */
|
| | | tmpreg1 &= CR1_CLEAR_Mask;
|
| | | /* Configure ADCx: Dual mode and scan conversion mode */
|
| | | /* Set DUALMOD bits according to ADC_Mode value */
|
| | | /* Set SCAN bit according to ADC_ScanConvMode value */
|
| | | tmpreg1 |= (uint32_t)(ADC_InitStruct->ADC_Mode | ((uint32_t)ADC_InitStruct->ADC_ScanConvMode << 8));
|
| | | /* Write to ADCx CR1 */
|
| | | ADCx->CR1 = tmpreg1;
|
| | |
|
| | | /*---------------------------- ADCx CR2 Configuration -----------------*/
|
| | | /* Get the ADCx CR2 value */
|
| | | tmpreg1 = ADCx->CR2;
|
| | | /* Clear CONT, ALIGN and EXTSEL bits */
|
| | | tmpreg1 &= CR2_CLEAR_Mask;
|
| | | /* Configure ADCx: external trigger event and continuous conversion mode */
|
| | | /* Set ALIGN bit according to ADC_DataAlign value */
|
| | | /* Set EXTSEL bits according to ADC_ExternalTrigConv value */
|
| | | /* Set CONT bit according to ADC_ContinuousConvMode value */
|
| | | tmpreg1 |= (uint32_t)(ADC_InitStruct->ADC_DataAlign | ADC_InitStruct->ADC_ExternalTrigConv |
|
| | | ((uint32_t)ADC_InitStruct->ADC_ContinuousConvMode << 1));
|
| | | /* Write to ADCx CR2 */
|
| | | ADCx->CR2 = tmpreg1;
|
| | |
|
| | | /*---------------------------- ADCx SQR1 Configuration -----------------*/
|
| | | /* Get the ADCx SQR1 value */
|
| | | tmpreg1 = ADCx->SQR1;
|
| | | /* Clear L bits */
|
| | | tmpreg1 &= SQR1_CLEAR_Mask;
|
| | | /* Configure ADCx: regular channel sequence length */
|
| | | /* Set L bits according to ADC_NbrOfChannel value */
|
| | | tmpreg2 |= (uint8_t) (ADC_InitStruct->ADC_NbrOfChannel - (uint8_t)1);
|
| | | tmpreg1 |= (uint32_t)tmpreg2 << 20;
|
| | | /* Write to ADCx SQR1 */
|
| | | ADCx->SQR1 = tmpreg1;
|
| | | }
|
| | |
|
| | | /**
|
| | | * @brief Fills each ADC_InitStruct member with its default value.
|
| | | * @param ADC_InitStruct : pointer to an ADC_InitTypeDef structure which will be initialized.
|
| | | * @retval None
|
| | | */
|
| | | void ADC_StructInit(ADC_InitTypeDef* ADC_InitStruct)
|
| | | {
|
| | | /* Reset ADC init structure parameters values */
|
| | | /* Initialize the ADC_Mode member */
|
| | | ADC_InitStruct->ADC_Mode = ADC_Mode_Independent;
|
| | | /* initialize the ADC_ScanConvMode member */
|
| | | ADC_InitStruct->ADC_ScanConvMode = DISABLE;
|
| | | /* Initialize the ADC_ContinuousConvMode member */
|
| | | ADC_InitStruct->ADC_ContinuousConvMode = DISABLE;
|
| | | /* Initialize the ADC_ExternalTrigConv member */
|
| | | ADC_InitStruct->ADC_ExternalTrigConv = ADC_ExternalTrigConv_T1_CC1;
|
| | | /* Initialize the ADC_DataAlign member */
|
| | | ADC_InitStruct->ADC_DataAlign = ADC_DataAlign_Right;
|
| | | /* Initialize the ADC_NbrOfChannel member */
|
| | | ADC_InitStruct->ADC_NbrOfChannel = 1;
|
| | | }
|
| | |
|
| | | /**
|
| | | * @brief Enables or disables the specified ADC peripheral.
|
| | | * @param ADCx: where x can be 1, 2 or 3 to select the ADC peripheral.
|
| | | * @param NewState: new state of the ADCx peripheral.
|
| | | * This parameter can be: ENABLE or DISABLE.
|
| | | * @retval None
|
| | | */
|
| | | void ADC_Cmd(ADC_TypeDef* ADCx, FunctionalState NewState)
|
| | | {
|
| | | /* Check the parameters */
|
| | | assert_param(IS_ADC_ALL_PERIPH(ADCx));
|
| | | assert_param(IS_FUNCTIONAL_STATE(NewState));
|
| | | if (NewState != DISABLE)
|
| | | {
|
| | | /* Set the ADON bit to wake up the ADC from power down mode */
|
| | | ADCx->CR2 |= CR2_ADON_Set;
|
| | | }
|
| | | else
|
| | | {
|
| | | /* Disable the selected ADC peripheral */
|
| | | ADCx->CR2 &= CR2_ADON_Reset;
|
| | | }
|
| | | }
|
| | |
|
| | | /**
|
| | | * @brief Enables or disables the specified ADC DMA request.
|
| | | * @param ADCx: where x can be 1 or 3 to select the ADC peripheral.
|
| | | * Note: ADC2 hasn't a DMA capability.
|
| | | * @param NewState: new state of the selected ADC DMA transfer.
|
| | | * This parameter can be: ENABLE or DISABLE.
|
| | | * @retval None
|
| | | */
|
| | | void ADC_DMACmd(ADC_TypeDef* ADCx, FunctionalState NewState)
|
| | | {
|
| | | /* Check the parameters */
|
| | | assert_param(IS_ADC_DMA_PERIPH(ADCx));
|
| | | assert_param(IS_FUNCTIONAL_STATE(NewState));
|
| | | if (NewState != DISABLE)
|
| | | {
|
| | | /* Enable the selected ADC DMA request */
|
| | | ADCx->CR2 |= CR2_DMA_Set;
|
| | | }
|
| | | else
|
| | | {
|
| | | /* Disable the selected ADC DMA request */
|
| | | ADCx->CR2 &= CR2_DMA_Reset;
|
| | | }
|
| | | }
|
| | |
|
| | | /**
|
| | | * @brief Enables or disables the specified ADC interrupts.
|
| | | * @param ADCx: where x can be 1, 2 or 3 to select the ADC peripheral.
|
| | | * @param ADC_IT: specifies the ADC interrupt sources to be enabled or disabled. |
| | | * This parameter can be any combination of the following values:
|
| | | * @arg ADC_IT_EOC: End of conversion interrupt mask
|
| | | * @arg ADC_IT_AWD: Analog watchdog interrupt mask
|
| | | * @arg ADC_IT_JEOC: End of injected conversion interrupt mask
|
| | | * @param NewState: new state of the specified ADC interrupts.
|
| | | * This parameter can be: ENABLE or DISABLE.
|
| | | * @retval None
|
| | | */
|
| | | void ADC_ITConfig(ADC_TypeDef* ADCx, uint16_t ADC_IT, FunctionalState NewState)
|
| | | {
|
| | | uint8_t itmask = 0;
|
| | | /* Check the parameters */
|
| | | assert_param(IS_ADC_ALL_PERIPH(ADCx));
|
| | | assert_param(IS_FUNCTIONAL_STATE(NewState));
|
| | | assert_param(IS_ADC_IT(ADC_IT));
|
| | | /* Get the ADC IT index */
|
| | | itmask = (uint8_t)ADC_IT;
|
| | | if (NewState != DISABLE)
|
| | | {
|
| | | /* Enable the selected ADC interrupts */
|
| | | ADCx->CR1 |= itmask;
|
| | | }
|
| | | else
|
| | | {
|
| | | /* Disable the selected ADC interrupts */
|
| | | ADCx->CR1 &= (~(uint32_t)itmask);
|
| | | }
|
| | | }
|
| | |
|
| | | /**
|
| | | * @brief Resets the selected ADC calibration registers.
|
| | | * @param ADCx: where x can be 1, 2 or 3 to select the ADC peripheral.
|
| | | * @retval None
|
| | | */
|
| | | void ADC_ResetCalibration(ADC_TypeDef* ADCx)
|
| | | {
|
| | | /* Check the parameters */
|
| | | assert_param(IS_ADC_ALL_PERIPH(ADCx));
|
| | | /* Resets the selected ADC calibration registers */ |
| | | ADCx->CR2 |= CR2_RSTCAL_Set;
|
| | | }
|
| | |
|
| | | /**
|
| | | * @brief Gets the selected ADC reset calibration registers status.
|
| | | * @param ADCx: where x can be 1, 2 or 3 to select the ADC peripheral.
|
| | | * @retval The new state of ADC reset calibration registers (SET or RESET).
|
| | | */
|
| | | FlagStatus ADC_GetResetCalibrationStatus(ADC_TypeDef* ADCx)
|
| | | {
|
| | | FlagStatus bitstatus = RESET;
|
| | | /* Check the parameters */
|
| | | assert_param(IS_ADC_ALL_PERIPH(ADCx));
|
| | | /* Check the status of RSTCAL bit */
|
| | | if ((ADCx->CR2 & CR2_RSTCAL_Set) != (uint32_t)RESET)
|
| | | {
|
| | | /* RSTCAL bit is set */
|
| | | bitstatus = SET;
|
| | | }
|
| | | else
|
| | | {
|
| | | /* RSTCAL bit is reset */
|
| | | bitstatus = RESET;
|
| | | }
|
| | | /* Return the RSTCAL bit status */
|
| | | return bitstatus;
|
| | | }
|
| | |
|
| | | /**
|
| | | * @brief Starts the selected ADC calibration process.
|
| | | * @param ADCx: where x can be 1, 2 or 3 to select the ADC peripheral.
|
| | | * @retval None
|
| | | */
|
| | | void ADC_StartCalibration(ADC_TypeDef* ADCx)
|
| | | {
|
| | | /* Check the parameters */
|
| | | assert_param(IS_ADC_ALL_PERIPH(ADCx));
|
| | | /* Enable the selected ADC calibration process */ |
| | | ADCx->CR2 |= CR2_CAL_Set;
|
| | | }
|
| | |
|
| | | /**
|
| | | * @brief Gets the selected ADC calibration status.
|
| | | * @param ADCx: where x can be 1, 2 or 3 to select the ADC peripheral.
|
| | | * @retval The new state of ADC calibration (SET or RESET).
|
| | | */
|
| | | FlagStatus ADC_GetCalibrationStatus(ADC_TypeDef* ADCx)
|
| | | {
|
| | | FlagStatus bitstatus = RESET;
|
| | | /* Check the parameters */
|
| | | assert_param(IS_ADC_ALL_PERIPH(ADCx));
|
| | | /* Check the status of CAL bit */
|
| | | if ((ADCx->CR2 & CR2_CAL_Set) != (uint32_t)RESET)
|
| | | {
|
| | | /* CAL bit is set: calibration on going */
|
| | | bitstatus = SET;
|
| | | }
|
| | | else
|
| | | {
|
| | | /* CAL bit is reset: end of calibration */
|
| | | bitstatus = RESET;
|
| | | }
|
| | | /* Return the CAL bit status */
|
| | | return bitstatus;
|
| | | }
|
| | |
|
| | | /**
|
| | | * @brief Enables or disables the selected ADC software start conversion .
|
| | | * @param ADCx: where x can be 1, 2 or 3 to select the ADC peripheral.
|
| | | * @param NewState: new state of the selected ADC software start conversion.
|
| | | * This parameter can be: ENABLE or DISABLE.
|
| | | * @retval None
|
| | | */
|
| | | void ADC_SoftwareStartConvCmd(ADC_TypeDef* ADCx, FunctionalState NewState)
|
| | | {
|
| | | /* Check the parameters */
|
| | | assert_param(IS_ADC_ALL_PERIPH(ADCx));
|
| | | assert_param(IS_FUNCTIONAL_STATE(NewState));
|
| | | if (NewState != DISABLE)
|
| | | {
|
| | | /* Enable the selected ADC conversion on external event and start the selected
|
| | | ADC conversion */
|
| | | ADCx->CR2 |= CR2_EXTTRIG_SWSTART_Set;
|
| | | }
|
| | | else
|
| | | {
|
| | | /* Disable the selected ADC conversion on external event and stop the selected
|
| | | ADC conversion */
|
| | | ADCx->CR2 &= CR2_EXTTRIG_SWSTART_Reset;
|
| | | }
|
| | | }
|
| | |
|
| | | /**
|
| | | * @brief Gets the selected ADC Software start conversion Status.
|
| | | * @param ADCx: where x can be 1, 2 or 3 to select the ADC peripheral.
|
| | | * @retval The new state of ADC software start conversion (SET or RESET).
|
| | | */
|
| | | FlagStatus ADC_GetSoftwareStartConvStatus(ADC_TypeDef* ADCx)
|
| | | {
|
| | | FlagStatus bitstatus = RESET;
|
| | | /* Check the parameters */
|
| | | assert_param(IS_ADC_ALL_PERIPH(ADCx));
|
| | | /* Check the status of SWSTART bit */
|
| | | if ((ADCx->CR2 & CR2_SWSTART_Set) != (uint32_t)RESET)
|
| | | {
|
| | | /* SWSTART bit is set */
|
| | | bitstatus = SET;
|
| | | }
|
| | | else
|
| | | {
|
| | | /* SWSTART bit is reset */
|
| | | bitstatus = RESET;
|
| | | }
|
| | | /* Return the SWSTART bit status */
|
| | | return bitstatus;
|
| | | }
|
| | |
|
| | | /**
|
| | | * @brief Configures the discontinuous mode for the selected ADC regular
|
| | | * group channel.
|
| | | * @param ADCx: where x can be 1, 2 or 3 to select the ADC peripheral.
|
| | | * @param Number: specifies the discontinuous mode regular channel
|
| | | * count value. This number must be between 1 and 8.
|
| | | * @retval None
|
| | | */
|
| | | void ADC_DiscModeChannelCountConfig(ADC_TypeDef* ADCx, uint8_t Number)
|
| | | {
|
| | | uint32_t tmpreg1 = 0;
|
| | | uint32_t tmpreg2 = 0;
|
| | | /* Check the parameters */
|
| | | assert_param(IS_ADC_ALL_PERIPH(ADCx));
|
| | | assert_param(IS_ADC_REGULAR_DISC_NUMBER(Number));
|
| | | /* Get the old register value */
|
| | | tmpreg1 = ADCx->CR1;
|
| | | /* Clear the old discontinuous mode channel count */
|
| | | tmpreg1 &= CR1_DISCNUM_Reset;
|
| | | /* Set the discontinuous mode channel count */
|
| | | tmpreg2 = Number - 1;
|
| | | tmpreg1 |= tmpreg2 << 13;
|
| | | /* Store the new register value */
|
| | | ADCx->CR1 = tmpreg1;
|
| | | }
|
| | |
|
| | | /**
|
| | | * @brief Enables or disables the discontinuous mode on regular group
|
| | | * channel for the specified ADC
|
| | | * @param ADCx: where x can be 1, 2 or 3 to select the ADC peripheral.
|
| | | * @param NewState: new state of the selected ADC discontinuous mode
|
| | | * on regular group channel.
|
| | | * This parameter can be: ENABLE or DISABLE.
|
| | | * @retval None
|
| | | */
|
| | | void ADC_DiscModeCmd(ADC_TypeDef* ADCx, FunctionalState NewState)
|
| | | {
|
| | | /* Check the parameters */
|
| | | assert_param(IS_ADC_ALL_PERIPH(ADCx));
|
| | | assert_param(IS_FUNCTIONAL_STATE(NewState));
|
| | | if (NewState != DISABLE)
|
| | | {
|
| | | /* Enable the selected ADC regular discontinuous mode */
|
| | | ADCx->CR1 |= CR1_DISCEN_Set;
|
| | | }
|
| | | else
|
| | | {
|
| | | /* Disable the selected ADC regular discontinuous mode */
|
| | | ADCx->CR1 &= CR1_DISCEN_Reset;
|
| | | }
|
| | | }
|
| | |
|
| | | /**
|
| | | * @brief Configures for the selected ADC regular channel its corresponding
|
| | | * rank in the sequencer and its sample time.
|
| | | * @param ADCx: where x can be 1, 2 or 3 to select the ADC peripheral.
|
| | | * @param ADC_Channel: the ADC channel to configure. |
| | | * This parameter can be one of the following values:
|
| | | * @arg ADC_Channel_0: ADC Channel0 selected
|
| | | * @arg ADC_Channel_1: ADC Channel1 selected
|
| | | * @arg ADC_Channel_2: ADC Channel2 selected
|
| | | * @arg ADC_Channel_3: ADC Channel3 selected
|
| | | * @arg ADC_Channel_4: ADC Channel4 selected
|
| | | * @arg ADC_Channel_5: ADC Channel5 selected
|
| | | * @arg ADC_Channel_6: ADC Channel6 selected
|
| | | * @arg ADC_Channel_7: ADC Channel7 selected
|
| | | * @arg ADC_Channel_8: ADC Channel8 selected
|
| | | * @arg ADC_Channel_9: ADC Channel9 selected
|
| | | * @arg ADC_Channel_10: ADC Channel10 selected
|
| | | * @arg ADC_Channel_11: ADC Channel11 selected
|
| | | * @arg ADC_Channel_12: ADC Channel12 selected
|
| | | * @arg ADC_Channel_13: ADC Channel13 selected
|
| | | * @arg ADC_Channel_14: ADC Channel14 selected
|
| | | * @arg ADC_Channel_15: ADC Channel15 selected
|
| | | * @arg ADC_Channel_16: ADC Channel16 selected
|
| | | * @arg ADC_Channel_17: ADC Channel17 selected
|
| | | * @param Rank: The rank in the regular group sequencer. This parameter must be between 1 to 16.
|
| | | * @param ADC_SampleTime: The sample time value to be set for the selected channel. |
| | | * This parameter can be one of the following values:
|
| | | * @arg ADC_SampleTime_1Cycles5: Sample time equal to 1.5 cycles
|
| | | * @arg ADC_SampleTime_7Cycles5: Sample time equal to 7.5 cycles
|
| | | * @arg ADC_SampleTime_13Cycles5: Sample time equal to 13.5 cycles
|
| | | * @arg ADC_SampleTime_28Cycles5: Sample time equal to 28.5 cycles |
| | | * @arg ADC_SampleTime_41Cycles5: Sample time equal to 41.5 cycles |
| | | * @arg ADC_SampleTime_55Cycles5: Sample time equal to 55.5 cycles |
| | | * @arg ADC_SampleTime_71Cycles5: Sample time equal to 71.5 cycles |
| | | * @arg ADC_SampleTime_239Cycles5: Sample time equal to 239.5 cycles |
| | | * @retval None
|
| | | */
|
| | | void ADC_RegularChannelConfig(ADC_TypeDef* ADCx, uint8_t ADC_Channel, uint8_t Rank, uint8_t ADC_SampleTime)
|
| | | {
|
| | | uint32_t tmpreg1 = 0, tmpreg2 = 0;
|
| | | /* Check the parameters */
|
| | | assert_param(IS_ADC_ALL_PERIPH(ADCx));
|
| | | assert_param(IS_ADC_CHANNEL(ADC_Channel));
|
| | | assert_param(IS_ADC_REGULAR_RANK(Rank));
|
| | | assert_param(IS_ADC_SAMPLE_TIME(ADC_SampleTime));
|
| | | /* if ADC_Channel_10 ... ADC_Channel_17 is selected */
|
| | | if (ADC_Channel > ADC_Channel_9)
|
| | | {
|
| | | /* Get the old register value */
|
| | | tmpreg1 = ADCx->SMPR1;
|
| | | /* Calculate the mask to clear */
|
| | | tmpreg2 = SMPR1_SMP_Set << (3 * (ADC_Channel - 10));
|
| | | /* Clear the old channel sample time */
|
| | | tmpreg1 &= ~tmpreg2;
|
| | | /* Calculate the mask to set */
|
| | | tmpreg2 = (uint32_t)ADC_SampleTime << (3 * (ADC_Channel - 10));
|
| | | /* Set the new channel sample time */
|
| | | tmpreg1 |= tmpreg2;
|
| | | /* Store the new register value */
|
| | | ADCx->SMPR1 = tmpreg1;
|
| | | }
|
| | | else /* ADC_Channel include in ADC_Channel_[0..9] */
|
| | | {
|
| | | /* Get the old register value */
|
| | | tmpreg1 = ADCx->SMPR2;
|
| | | /* Calculate the mask to clear */
|
| | | tmpreg2 = SMPR2_SMP_Set << (3 * ADC_Channel);
|
| | | /* Clear the old channel sample time */
|
| | | tmpreg1 &= ~tmpreg2;
|
| | | /* Calculate the mask to set */
|
| | | tmpreg2 = (uint32_t)ADC_SampleTime << (3 * ADC_Channel);
|
| | | /* Set the new channel sample time */
|
| | | tmpreg1 |= tmpreg2;
|
| | | /* Store the new register value */
|
| | | ADCx->SMPR2 = tmpreg1;
|
| | | }
|
| | | /* For Rank 1 to 6 */
|
| | | if (Rank < 7)
|
| | | {
|
| | | /* Get the old register value */
|
| | | tmpreg1 = ADCx->SQR3;
|
| | | /* Calculate the mask to clear */
|
| | | tmpreg2 = SQR3_SQ_Set << (5 * (Rank - 1));
|
| | | /* Clear the old SQx bits for the selected rank */
|
| | | tmpreg1 &= ~tmpreg2;
|
| | | /* Calculate the mask to set */
|
| | | tmpreg2 = (uint32_t)ADC_Channel << (5 * (Rank - 1));
|
| | | /* Set the SQx bits for the selected rank */
|
| | | tmpreg1 |= tmpreg2;
|
| | | /* Store the new register value */
|
| | | ADCx->SQR3 = tmpreg1;
|
| | | }
|
| | | /* For Rank 7 to 12 */
|
| | | else if (Rank < 13)
|
| | | {
|
| | | /* Get the old register value */
|
| | | tmpreg1 = ADCx->SQR2;
|
| | | /* Calculate the mask to clear */
|
| | | tmpreg2 = SQR2_SQ_Set << (5 * (Rank - 7));
|
| | | /* Clear the old SQx bits for the selected rank */
|
| | | tmpreg1 &= ~tmpreg2;
|
| | | /* Calculate the mask to set */
|
| | | tmpreg2 = (uint32_t)ADC_Channel << (5 * (Rank - 7));
|
| | | /* Set the SQx bits for the selected rank */
|
| | | tmpreg1 |= tmpreg2;
|
| | | /* Store the new register value */
|
| | | ADCx->SQR2 = tmpreg1;
|
| | | }
|
| | | /* For Rank 13 to 16 */
|
| | | else
|
| | | {
|
| | | /* Get the old register value */
|
| | | tmpreg1 = ADCx->SQR1;
|
| | | /* Calculate the mask to clear */
|
| | | tmpreg2 = SQR1_SQ_Set << (5 * (Rank - 13));
|
| | | /* Clear the old SQx bits for the selected rank */
|
| | | tmpreg1 &= ~tmpreg2;
|
| | | /* Calculate the mask to set */
|
| | | tmpreg2 = (uint32_t)ADC_Channel << (5 * (Rank - 13));
|
| | | /* Set the SQx bits for the selected rank */
|
| | | tmpreg1 |= tmpreg2;
|
| | | /* Store the new register value */
|
| | | ADCx->SQR1 = tmpreg1;
|
| | | }
|
| | | }
|
| | |
|
| | | /**
|
| | | * @brief Enables or disables the ADCx conversion through external trigger.
|
| | | * @param ADCx: where x can be 1, 2 or 3 to select the ADC peripheral.
|
| | | * @param NewState: new state of the selected ADC external trigger start of conversion.
|
| | | * This parameter can be: ENABLE or DISABLE.
|
| | | * @retval None
|
| | | */
|
| | | void ADC_ExternalTrigConvCmd(ADC_TypeDef* ADCx, FunctionalState NewState)
|
| | | {
|
| | | /* Check the parameters */
|
| | | assert_param(IS_ADC_ALL_PERIPH(ADCx));
|
| | | assert_param(IS_FUNCTIONAL_STATE(NewState));
|
| | | if (NewState != DISABLE)
|
| | | {
|
| | | /* Enable the selected ADC conversion on external event */
|
| | | ADCx->CR2 |= CR2_EXTTRIG_Set;
|
| | | }
|
| | | else
|
| | | {
|
| | | /* Disable the selected ADC conversion on external event */
|
| | | ADCx->CR2 &= CR2_EXTTRIG_Reset;
|
| | | }
|
| | | }
|
| | |
|
| | | /**
|
| | | * @brief Returns the last ADCx conversion result data for regular channel.
|
| | | * @param ADCx: where x can be 1, 2 or 3 to select the ADC peripheral.
|
| | | * @retval The Data conversion value.
|
| | | */
|
| | | uint16_t ADC_GetConversionValue(ADC_TypeDef* ADCx)
|
| | | {
|
| | | /* Check the parameters */
|
| | | assert_param(IS_ADC_ALL_PERIPH(ADCx));
|
| | | /* Return the selected ADC conversion value */
|
| | | return (uint16_t) ADCx->DR;
|
| | | }
|
| | |
|
| | | /**
|
| | | * @brief Returns the last ADC1 and ADC2 conversion result data in dual mode.
|
| | | * @retval The Data conversion value.
|
| | | */
|
| | | uint32_t ADC_GetDualModeConversionValue(void)
|
| | | {
|
| | | /* Return the dual mode conversion value */
|
| | | return (*(__IO uint32_t *) DR_ADDRESS);
|
| | | }
|
| | |
|
| | | /**
|
| | | * @brief Enables or disables the selected ADC automatic injected group
|
| | | * conversion after regular one.
|
| | | * @param ADCx: where x can be 1, 2 or 3 to select the ADC peripheral.
|
| | | * @param NewState: new state of the selected ADC auto injected conversion
|
| | | * This parameter can be: ENABLE or DISABLE.
|
| | | * @retval None
|
| | | */
|
| | | void ADC_AutoInjectedConvCmd(ADC_TypeDef* ADCx, FunctionalState NewState)
|
| | | {
|
| | | /* Check the parameters */
|
| | | assert_param(IS_ADC_ALL_PERIPH(ADCx));
|
| | | assert_param(IS_FUNCTIONAL_STATE(NewState));
|
| | | if (NewState != DISABLE)
|
| | | {
|
| | | /* Enable the selected ADC automatic injected group conversion */
|
| | | ADCx->CR1 |= CR1_JAUTO_Set;
|
| | | }
|
| | | else
|
| | | {
|
| | | /* Disable the selected ADC automatic injected group conversion */
|
| | | ADCx->CR1 &= CR1_JAUTO_Reset;
|
| | | }
|
| | | }
|
| | |
|
| | | /**
|
| | | * @brief Enables or disables the discontinuous mode for injected group
|
| | | * channel for the specified ADC
|
| | | * @param ADCx: where x can be 1, 2 or 3 to select the ADC peripheral.
|
| | | * @param NewState: new state of the selected ADC discontinuous mode
|
| | | * on injected group channel.
|
| | | * This parameter can be: ENABLE or DISABLE.
|
| | | * @retval None
|
| | | */
|
| | | void ADC_InjectedDiscModeCmd(ADC_TypeDef* ADCx, FunctionalState NewState)
|
| | | {
|
| | | /* Check the parameters */
|
| | | assert_param(IS_ADC_ALL_PERIPH(ADCx));
|
| | | assert_param(IS_FUNCTIONAL_STATE(NewState));
|
| | | if (NewState != DISABLE)
|
| | | {
|
| | | /* Enable the selected ADC injected discontinuous mode */
|
| | | ADCx->CR1 |= CR1_JDISCEN_Set;
|
| | | }
|
| | | else
|
| | | {
|
| | | /* Disable the selected ADC injected discontinuous mode */
|
| | | ADCx->CR1 &= CR1_JDISCEN_Reset;
|
| | | }
|
| | | }
|
| | |
|
| | | /**
|
| | | * @brief Configures the ADCx external trigger for injected channels conversion.
|
| | | * @param ADCx: where x can be 1, 2 or 3 to select the ADC peripheral.
|
| | | * @param ADC_ExternalTrigInjecConv: specifies the ADC trigger to start injected conversion. |
| | | * This parameter can be one of the following values:
|
| | | * @arg ADC_ExternalTrigInjecConv_T1_TRGO: Timer1 TRGO event selected (for ADC1, ADC2 and ADC3)
|
| | | * @arg ADC_ExternalTrigInjecConv_T1_CC4: Timer1 capture compare4 selected (for ADC1, ADC2 and ADC3)
|
| | | * @arg ADC_ExternalTrigInjecConv_T2_TRGO: Timer2 TRGO event selected (for ADC1 and ADC2)
|
| | | * @arg ADC_ExternalTrigInjecConv_T2_CC1: Timer2 capture compare1 selected (for ADC1 and ADC2)
|
| | | * @arg ADC_ExternalTrigInjecConv_T3_CC4: Timer3 capture compare4 selected (for ADC1 and ADC2)
|
| | | * @arg ADC_ExternalTrigInjecConv_T4_TRGO: Timer4 TRGO event selected (for ADC1 and ADC2)
|
| | | * @arg ADC_ExternalTrigInjecConv_Ext_IT15_TIM8_CC4: External interrupt line 15 or Timer8
|
| | | * capture compare4 event selected (for ADC1 and ADC2) |
| | | * @arg ADC_ExternalTrigInjecConv_T4_CC3: Timer4 capture compare3 selected (for ADC3 only)
|
| | | * @arg ADC_ExternalTrigInjecConv_T8_CC2: Timer8 capture compare2 selected (for ADC3 only) |
| | | * @arg ADC_ExternalTrigInjecConv_T8_CC4: Timer8 capture compare4 selected (for ADC3 only)
|
| | | * @arg ADC_ExternalTrigInjecConv_T5_TRGO: Timer5 TRGO event selected (for ADC3 only) |
| | | * @arg ADC_ExternalTrigInjecConv_T5_CC4: Timer5 capture compare4 selected (for ADC3 only) |
| | | * @arg ADC_ExternalTrigInjecConv_None: Injected conversion started by software and not
|
| | | * by external trigger (for ADC1, ADC2 and ADC3)
|
| | | * @retval None
|
| | | */
|
| | | void ADC_ExternalTrigInjectedConvConfig(ADC_TypeDef* ADCx, uint32_t ADC_ExternalTrigInjecConv)
|
| | | {
|
| | | uint32_t tmpreg = 0;
|
| | | /* Check the parameters */
|
| | | assert_param(IS_ADC_ALL_PERIPH(ADCx));
|
| | | assert_param(IS_ADC_EXT_INJEC_TRIG(ADC_ExternalTrigInjecConv));
|
| | | /* Get the old register value */
|
| | | tmpreg = ADCx->CR2;
|
| | | /* Clear the old external event selection for injected group */
|
| | | tmpreg &= CR2_JEXTSEL_Reset;
|
| | | /* Set the external event selection for injected group */
|
| | | tmpreg |= ADC_ExternalTrigInjecConv;
|
| | | /* Store the new register value */
|
| | | ADCx->CR2 = tmpreg;
|
| | | }
|
| | |
|
| | | /**
|
| | | * @brief Enables or disables the ADCx injected channels conversion through
|
| | | * external trigger
|
| | | * @param ADCx: where x can be 1, 2 or 3 to select the ADC peripheral.
|
| | | * @param NewState: new state of the selected ADC external trigger start of
|
| | | * injected conversion.
|
| | | * This parameter can be: ENABLE or DISABLE.
|
| | | * @retval None
|
| | | */
|
| | | void ADC_ExternalTrigInjectedConvCmd(ADC_TypeDef* ADCx, FunctionalState NewState)
|
| | | {
|
| | | /* Check the parameters */
|
| | | assert_param(IS_ADC_ALL_PERIPH(ADCx));
|
| | | assert_param(IS_FUNCTIONAL_STATE(NewState));
|
| | | if (NewState != DISABLE)
|
| | | {
|
| | | /* Enable the selected ADC external event selection for injected group */
|
| | | ADCx->CR2 |= CR2_JEXTTRIG_Set;
|
| | | }
|
| | | else
|
| | | {
|
| | | /* Disable the selected ADC external event selection for injected group */
|
| | | ADCx->CR2 &= CR2_JEXTTRIG_Reset;
|
| | | }
|
| | | }
|
| | |
|
| | | /**
|
| | | * @brief Enables or disables the selected ADC start of the injected |
| | | * channels conversion.
|
| | | * @param ADCx: where x can be 1, 2 or 3 to select the ADC peripheral.
|
| | | * @param NewState: new state of the selected ADC software start injected conversion.
|
| | | * This parameter can be: ENABLE or DISABLE.
|
| | | * @retval None
|
| | | */
|
| | | void ADC_SoftwareStartInjectedConvCmd(ADC_TypeDef* ADCx, FunctionalState NewState)
|
| | | {
|
| | | /* Check the parameters */
|
| | | assert_param(IS_ADC_ALL_PERIPH(ADCx));
|
| | | assert_param(IS_FUNCTIONAL_STATE(NewState));
|
| | | if (NewState != DISABLE)
|
| | | {
|
| | | /* Enable the selected ADC conversion for injected group on external event and start the selected
|
| | | ADC injected conversion */
|
| | | ADCx->CR2 |= CR2_JEXTTRIG_JSWSTART_Set;
|
| | | }
|
| | | else
|
| | | {
|
| | | /* Disable the selected ADC conversion on external event for injected group and stop the selected
|
| | | ADC injected conversion */
|
| | | ADCx->CR2 &= CR2_JEXTTRIG_JSWSTART_Reset;
|
| | | }
|
| | | }
|
| | |
|
| | | /**
|
| | | * @brief Gets the selected ADC Software start injected conversion Status.
|
| | | * @param ADCx: where x can be 1, 2 or 3 to select the ADC peripheral.
|
| | | * @retval The new state of ADC software start injected conversion (SET or RESET).
|
| | | */
|
| | | FlagStatus ADC_GetSoftwareStartInjectedConvCmdStatus(ADC_TypeDef* ADCx)
|
| | | {
|
| | | FlagStatus bitstatus = RESET;
|
| | | /* Check the parameters */
|
| | | assert_param(IS_ADC_ALL_PERIPH(ADCx));
|
| | | /* Check the status of JSWSTART bit */
|
| | | if ((ADCx->CR2 & CR2_JSWSTART_Set) != (uint32_t)RESET)
|
| | | {
|
| | | /* JSWSTART bit is set */
|
| | | bitstatus = SET;
|
| | | }
|
| | | else
|
| | | {
|
| | | /* JSWSTART bit is reset */
|
| | | bitstatus = RESET;
|
| | | }
|
| | | /* Return the JSWSTART bit status */
|
| | | return bitstatus;
|
| | | }
|
| | |
|
| | | /**
|
| | | * @brief Configures for the selected ADC injected channel its corresponding
|
| | | * rank in the sequencer and its sample time.
|
| | | * @param ADCx: where x can be 1, 2 or 3 to select the ADC peripheral.
|
| | | * @param ADC_Channel: the ADC channel to configure. |
| | | * This parameter can be one of the following values:
|
| | | * @arg ADC_Channel_0: ADC Channel0 selected
|
| | | * @arg ADC_Channel_1: ADC Channel1 selected
|
| | | * @arg ADC_Channel_2: ADC Channel2 selected
|
| | | * @arg ADC_Channel_3: ADC Channel3 selected
|
| | | * @arg ADC_Channel_4: ADC Channel4 selected
|
| | | * @arg ADC_Channel_5: ADC Channel5 selected
|
| | | * @arg ADC_Channel_6: ADC Channel6 selected
|
| | | * @arg ADC_Channel_7: ADC Channel7 selected
|
| | | * @arg ADC_Channel_8: ADC Channel8 selected
|
| | | * @arg ADC_Channel_9: ADC Channel9 selected
|
| | | * @arg ADC_Channel_10: ADC Channel10 selected
|
| | | * @arg ADC_Channel_11: ADC Channel11 selected
|
| | | * @arg ADC_Channel_12: ADC Channel12 selected
|
| | | * @arg ADC_Channel_13: ADC Channel13 selected
|
| | | * @arg ADC_Channel_14: ADC Channel14 selected
|
| | | * @arg ADC_Channel_15: ADC Channel15 selected
|
| | | * @arg ADC_Channel_16: ADC Channel16 selected
|
| | | * @arg ADC_Channel_17: ADC Channel17 selected
|
| | | * @param Rank: The rank in the injected group sequencer. This parameter must be between 1 and 4.
|
| | | * @param ADC_SampleTime: The sample time value to be set for the selected channel. |
| | | * This parameter can be one of the following values:
|
| | | * @arg ADC_SampleTime_1Cycles5: Sample time equal to 1.5 cycles
|
| | | * @arg ADC_SampleTime_7Cycles5: Sample time equal to 7.5 cycles
|
| | | * @arg ADC_SampleTime_13Cycles5: Sample time equal to 13.5 cycles
|
| | | * @arg ADC_SampleTime_28Cycles5: Sample time equal to 28.5 cycles |
| | | * @arg ADC_SampleTime_41Cycles5: Sample time equal to 41.5 cycles |
| | | * @arg ADC_SampleTime_55Cycles5: Sample time equal to 55.5 cycles |
| | | * @arg ADC_SampleTime_71Cycles5: Sample time equal to 71.5 cycles |
| | | * @arg ADC_SampleTime_239Cycles5: Sample time equal to 239.5 cycles |
| | | * @retval None
|
| | | */
|
| | | void ADC_InjectedChannelConfig(ADC_TypeDef* ADCx, uint8_t ADC_Channel, uint8_t Rank, uint8_t ADC_SampleTime)
|
| | | {
|
| | | uint32_t tmpreg1 = 0, tmpreg2 = 0, tmpreg3 = 0;
|
| | | /* Check the parameters */
|
| | | assert_param(IS_ADC_ALL_PERIPH(ADCx));
|
| | | assert_param(IS_ADC_CHANNEL(ADC_Channel));
|
| | | assert_param(IS_ADC_INJECTED_RANK(Rank));
|
| | | assert_param(IS_ADC_SAMPLE_TIME(ADC_SampleTime));
|
| | | /* if ADC_Channel_10 ... ADC_Channel_17 is selected */
|
| | | if (ADC_Channel > ADC_Channel_9)
|
| | | {
|
| | | /* Get the old register value */
|
| | | tmpreg1 = ADCx->SMPR1;
|
| | | /* Calculate the mask to clear */
|
| | | tmpreg2 = SMPR1_SMP_Set << (3*(ADC_Channel - 10));
|
| | | /* Clear the old channel sample time */
|
| | | tmpreg1 &= ~tmpreg2;
|
| | | /* Calculate the mask to set */
|
| | | tmpreg2 = (uint32_t)ADC_SampleTime << (3*(ADC_Channel - 10));
|
| | | /* Set the new channel sample time */
|
| | | tmpreg1 |= tmpreg2;
|
| | | /* Store the new register value */
|
| | | ADCx->SMPR1 = tmpreg1;
|
| | | }
|
| | | else /* ADC_Channel include in ADC_Channel_[0..9] */
|
| | | {
|
| | | /* Get the old register value */
|
| | | tmpreg1 = ADCx->SMPR2;
|
| | | /* Calculate the mask to clear */
|
| | | tmpreg2 = SMPR2_SMP_Set << (3 * ADC_Channel);
|
| | | /* Clear the old channel sample time */
|
| | | tmpreg1 &= ~tmpreg2;
|
| | | /* Calculate the mask to set */
|
| | | tmpreg2 = (uint32_t)ADC_SampleTime << (3 * ADC_Channel);
|
| | | /* Set the new channel sample time */
|
| | | tmpreg1 |= tmpreg2;
|
| | | /* Store the new register value */
|
| | | ADCx->SMPR2 = tmpreg1;
|
| | | }
|
| | | /* Rank configuration */
|
| | | /* Get the old register value */
|
| | | tmpreg1 = ADCx->JSQR;
|
| | | /* Get JL value: Number = JL+1 */
|
| | | tmpreg3 = (tmpreg1 & JSQR_JL_Set)>> 20;
|
| | | /* Calculate the mask to clear: ((Rank-1)+(4-JL-1)) */
|
| | | tmpreg2 = JSQR_JSQ_Set << (5 * (uint8_t)((Rank + 3) - (tmpreg3 + 1)));
|
| | | /* Clear the old JSQx bits for the selected rank */
|
| | | tmpreg1 &= ~tmpreg2;
|
| | | /* Calculate the mask to set: ((Rank-1)+(4-JL-1)) */
|
| | | tmpreg2 = (uint32_t)ADC_Channel << (5 * (uint8_t)((Rank + 3) - (tmpreg3 + 1)));
|
| | | /* Set the JSQx bits for the selected rank */
|
| | | tmpreg1 |= tmpreg2;
|
| | | /* Store the new register value */
|
| | | ADCx->JSQR = tmpreg1;
|
| | | }
|
| | |
|
| | | /**
|
| | | * @brief Configures the sequencer length for injected channels
|
| | | * @param ADCx: where x can be 1, 2 or 3 to select the ADC peripheral.
|
| | | * @param Length: The sequencer length. |
| | | * This parameter must be a number between 1 to 4.
|
| | | * @retval None
|
| | | */
|
| | | void ADC_InjectedSequencerLengthConfig(ADC_TypeDef* ADCx, uint8_t Length)
|
| | | {
|
| | | uint32_t tmpreg1 = 0;
|
| | | uint32_t tmpreg2 = 0;
|
| | | /* Check the parameters */
|
| | | assert_param(IS_ADC_ALL_PERIPH(ADCx));
|
| | | assert_param(IS_ADC_INJECTED_LENGTH(Length));
|
| | | |
| | | /* Get the old register value */
|
| | | tmpreg1 = ADCx->JSQR;
|
| | | /* Clear the old injected sequnence lenght JL bits */
|
| | | tmpreg1 &= JSQR_JL_Reset;
|
| | | /* Set the injected sequnence lenght JL bits */
|
| | | tmpreg2 = Length - 1; |
| | | tmpreg1 |= tmpreg2 << 20;
|
| | | /* Store the new register value */
|
| | | ADCx->JSQR = tmpreg1;
|
| | | }
|
| | |
|
| | | /**
|
| | | * @brief Set the injected channels conversion value offset
|
| | | * @param ADCx: where x can be 1, 2 or 3 to select the ADC peripheral.
|
| | | * @param ADC_InjectedChannel: the ADC injected channel to set its offset. |
| | | * This parameter can be one of the following values:
|
| | | * @arg ADC_InjectedChannel_1: Injected Channel1 selected
|
| | | * @arg ADC_InjectedChannel_2: Injected Channel2 selected
|
| | | * @arg ADC_InjectedChannel_3: Injected Channel3 selected
|
| | | * @arg ADC_InjectedChannel_4: Injected Channel4 selected
|
| | | * @param Offset: the offset value for the selected ADC injected channel
|
| | | * This parameter must be a 12bit value.
|
| | | * @retval None
|
| | | */
|
| | | void ADC_SetInjectedOffset(ADC_TypeDef* ADCx, uint8_t ADC_InjectedChannel, uint16_t Offset)
|
| | | {
|
| | | __IO uint32_t tmp = 0;
|
| | | |
| | | /* Check the parameters */
|
| | | assert_param(IS_ADC_ALL_PERIPH(ADCx));
|
| | | assert_param(IS_ADC_INJECTED_CHANNEL(ADC_InjectedChannel));
|
| | | assert_param(IS_ADC_OFFSET(Offset)); |
| | | |
| | | tmp = (uint32_t)ADCx;
|
| | | tmp += ADC_InjectedChannel;
|
| | | |
| | | /* Set the selected injected channel data offset */
|
| | | *(__IO uint32_t *) tmp = (uint32_t)Offset;
|
| | | }
|
| | |
|
| | | /**
|
| | | * @brief Returns the ADC injected channel conversion result
|
| | | * @param ADCx: where x can be 1, 2 or 3 to select the ADC peripheral.
|
| | | * @param ADC_InjectedChannel: the converted ADC injected channel.
|
| | | * This parameter can be one of the following values:
|
| | | * @arg ADC_InjectedChannel_1: Injected Channel1 selected
|
| | | * @arg ADC_InjectedChannel_2: Injected Channel2 selected
|
| | | * @arg ADC_InjectedChannel_3: Injected Channel3 selected
|
| | | * @arg ADC_InjectedChannel_4: Injected Channel4 selected
|
| | | * @retval The Data conversion value.
|
| | | */
|
| | | uint16_t ADC_GetInjectedConversionValue(ADC_TypeDef* ADCx, uint8_t ADC_InjectedChannel)
|
| | | {
|
| | | __IO uint32_t tmp = 0;
|
| | | |
| | | /* Check the parameters */
|
| | | assert_param(IS_ADC_ALL_PERIPH(ADCx));
|
| | | assert_param(IS_ADC_INJECTED_CHANNEL(ADC_InjectedChannel));
|
| | |
|
| | | tmp = (uint32_t)ADCx;
|
| | | tmp += ADC_InjectedChannel + JDR_Offset;
|
| | | |
| | | /* Returns the selected injected channel conversion data value */
|
| | | return (uint16_t) (*(__IO uint32_t*) tmp); |
| | | }
|
| | |
|
| | | /**
|
| | | * @brief Enables or disables the analog watchdog on single/all regular
|
| | | * or injected channels
|
| | | * @param ADCx: where x can be 1, 2 or 3 to select the ADC peripheral.
|
| | | * @param ADC_AnalogWatchdog: the ADC analog watchdog configuration.
|
| | | * This parameter can be one of the following values:
|
| | | * @arg ADC_AnalogWatchdog_SingleRegEnable: Analog watchdog on a single regular channel
|
| | | * @arg ADC_AnalogWatchdog_SingleInjecEnable: Analog watchdog on a single injected channel
|
| | | * @arg ADC_AnalogWatchdog_SingleRegOrInjecEnable: Analog watchdog on a single regular or injected channel
|
| | | * @arg ADC_AnalogWatchdog_AllRegEnable: Analog watchdog on all regular channel
|
| | | * @arg ADC_AnalogWatchdog_AllInjecEnable: Analog watchdog on all injected channel
|
| | | * @arg ADC_AnalogWatchdog_AllRegAllInjecEnable: Analog watchdog on all regular and injected channels
|
| | | * @arg ADC_AnalogWatchdog_None: No channel guarded by the analog watchdog
|
| | | * @retval None |
| | | */
|
| | | void ADC_AnalogWatchdogCmd(ADC_TypeDef* ADCx, uint32_t ADC_AnalogWatchdog)
|
| | | {
|
| | | uint32_t tmpreg = 0;
|
| | | /* Check the parameters */
|
| | | assert_param(IS_ADC_ALL_PERIPH(ADCx));
|
| | | assert_param(IS_ADC_ANALOG_WATCHDOG(ADC_AnalogWatchdog));
|
| | | /* Get the old register value */
|
| | | tmpreg = ADCx->CR1;
|
| | | /* Clear AWDEN, AWDENJ and AWDSGL bits */
|
| | | tmpreg &= CR1_AWDMode_Reset;
|
| | | /* Set the analog watchdog enable mode */
|
| | | tmpreg |= ADC_AnalogWatchdog;
|
| | | /* Store the new register value */
|
| | | ADCx->CR1 = tmpreg;
|
| | | }
|
| | |
|
| | | /**
|
| | | * @brief Configures the high and low thresholds of the analog watchdog.
|
| | | * @param ADCx: where x can be 1, 2 or 3 to select the ADC peripheral.
|
| | | * @param HighThreshold: the ADC analog watchdog High threshold value.
|
| | | * This parameter must be a 12bit value.
|
| | | * @param LowThreshold: the ADC analog watchdog Low threshold value.
|
| | | * This parameter must be a 12bit value.
|
| | | * @retval None
|
| | | */
|
| | | void ADC_AnalogWatchdogThresholdsConfig(ADC_TypeDef* ADCx, uint16_t HighThreshold,
|
| | | uint16_t LowThreshold)
|
| | | {
|
| | | /* Check the parameters */
|
| | | assert_param(IS_ADC_ALL_PERIPH(ADCx));
|
| | | assert_param(IS_ADC_THRESHOLD(HighThreshold));
|
| | | assert_param(IS_ADC_THRESHOLD(LowThreshold));
|
| | | /* Set the ADCx high threshold */
|
| | | ADCx->HTR = HighThreshold;
|
| | | /* Set the ADCx low threshold */
|
| | | ADCx->LTR = LowThreshold;
|
| | | }
|
| | |
|
| | | /**
|
| | | * @brief Configures the analog watchdog guarded single channel
|
| | | * @param ADCx: where x can be 1, 2 or 3 to select the ADC peripheral.
|
| | | * @param ADC_Channel: the ADC channel to configure for the analog watchdog. |
| | | * This parameter can be one of the following values:
|
| | | * @arg ADC_Channel_0: ADC Channel0 selected
|
| | | * @arg ADC_Channel_1: ADC Channel1 selected
|
| | | * @arg ADC_Channel_2: ADC Channel2 selected
|
| | | * @arg ADC_Channel_3: ADC Channel3 selected
|
| | | * @arg ADC_Channel_4: ADC Channel4 selected
|
| | | * @arg ADC_Channel_5: ADC Channel5 selected
|
| | | * @arg ADC_Channel_6: ADC Channel6 selected
|
| | | * @arg ADC_Channel_7: ADC Channel7 selected
|
| | | * @arg ADC_Channel_8: ADC Channel8 selected
|
| | | * @arg ADC_Channel_9: ADC Channel9 selected
|
| | | * @arg ADC_Channel_10: ADC Channel10 selected
|
| | | * @arg ADC_Channel_11: ADC Channel11 selected
|
| | | * @arg ADC_Channel_12: ADC Channel12 selected
|
| | | * @arg ADC_Channel_13: ADC Channel13 selected
|
| | | * @arg ADC_Channel_14: ADC Channel14 selected
|
| | | * @arg ADC_Channel_15: ADC Channel15 selected
|
| | | * @arg ADC_Channel_16: ADC Channel16 selected
|
| | | * @arg ADC_Channel_17: ADC Channel17 selected
|
| | | * @retval None
|
| | | */
|
| | | void ADC_AnalogWatchdogSingleChannelConfig(ADC_TypeDef* ADCx, uint8_t ADC_Channel)
|
| | | {
|
| | | uint32_t tmpreg = 0;
|
| | | /* Check the parameters */
|
| | | assert_param(IS_ADC_ALL_PERIPH(ADCx));
|
| | | assert_param(IS_ADC_CHANNEL(ADC_Channel));
|
| | | /* Get the old register value */
|
| | | tmpreg = ADCx->CR1;
|
| | | /* Clear the Analog watchdog channel select bits */
|
| | | tmpreg &= CR1_AWDCH_Reset;
|
| | | /* Set the Analog watchdog channel */
|
| | | tmpreg |= ADC_Channel;
|
| | | /* Store the new register value */
|
| | | ADCx->CR1 = tmpreg;
|
| | | }
|
| | |
|
| | | /**
|
| | | * @brief Enables or disables the temperature sensor and Vrefint channel.
|
| | | * @param NewState: new state of the temperature sensor.
|
| | | * This parameter can be: ENABLE or DISABLE.
|
| | | * @retval None
|
| | | */
|
| | | void ADC_TempSensorVrefintCmd(FunctionalState NewState)
|
| | | {
|
| | | /* Check the parameters */
|
| | | assert_param(IS_FUNCTIONAL_STATE(NewState));
|
| | | if (NewState != DISABLE)
|
| | | {
|
| | | /* Enable the temperature sensor and Vrefint channel*/
|
| | | ADC1->CR2 |= CR2_TSVREFE_Set;
|
| | | }
|
| | | else
|
| | | {
|
| | | /* Disable the temperature sensor and Vrefint channel*/
|
| | | ADC1->CR2 &= CR2_TSVREFE_Reset;
|
| | | }
|
| | | }
|
| | |
|
| | | /**
|
| | | * @brief Checks whether the specified ADC flag is set or not.
|
| | | * @param ADCx: where x can be 1, 2 or 3 to select the ADC peripheral.
|
| | | * @param ADC_FLAG: specifies the flag to check. |
| | | * This parameter can be one of the following values:
|
| | | * @arg ADC_FLAG_AWD: Analog watchdog flag
|
| | | * @arg ADC_FLAG_EOC: End of conversion flag
|
| | | * @arg ADC_FLAG_JEOC: End of injected group conversion flag
|
| | | * @arg ADC_FLAG_JSTRT: Start of injected group conversion flag
|
| | | * @arg ADC_FLAG_STRT: Start of regular group conversion flag
|
| | | * @retval The new state of ADC_FLAG (SET or RESET).
|
| | | */
|
| | | FlagStatus ADC_GetFlagStatus(ADC_TypeDef* ADCx, uint8_t ADC_FLAG)
|
| | | {
|
| | | FlagStatus bitstatus = RESET;
|
| | | /* Check the parameters */
|
| | | assert_param(IS_ADC_ALL_PERIPH(ADCx));
|
| | | assert_param(IS_ADC_GET_FLAG(ADC_FLAG));
|
| | | /* Check the status of the specified ADC flag */
|
| | | if ((ADCx->SR & ADC_FLAG) != (uint8_t)RESET)
|
| | | {
|
| | | /* ADC_FLAG is set */
|
| | | bitstatus = SET;
|
| | | }
|
| | | else
|
| | | {
|
| | | /* ADC_FLAG is reset */
|
| | | bitstatus = RESET;
|
| | | }
|
| | | /* Return the ADC_FLAG status */
|
| | | return bitstatus;
|
| | | }
|
| | |
|
| | | /**
|
| | | * @brief Clears the ADCx's pending flags.
|
| | | * @param ADCx: where x can be 1, 2 or 3 to select the ADC peripheral.
|
| | | * @param ADC_FLAG: specifies the flag to clear. |
| | | * This parameter can be any combination of the following values:
|
| | | * @arg ADC_FLAG_AWD: Analog watchdog flag
|
| | | * @arg ADC_FLAG_EOC: End of conversion flag
|
| | | * @arg ADC_FLAG_JEOC: End of injected group conversion flag
|
| | | * @arg ADC_FLAG_JSTRT: Start of injected group conversion flag
|
| | | * @arg ADC_FLAG_STRT: Start of regular group conversion flag
|
| | | * @retval None
|
| | | */
|
| | | void ADC_ClearFlag(ADC_TypeDef* ADCx, uint8_t ADC_FLAG)
|
| | | {
|
| | | /* Check the parameters */
|
| | | assert_param(IS_ADC_ALL_PERIPH(ADCx));
|
| | | assert_param(IS_ADC_CLEAR_FLAG(ADC_FLAG));
|
| | | /* Clear the selected ADC flags */
|
| | | ADCx->SR = ~(uint32_t)ADC_FLAG;
|
| | | }
|
| | |
|
| | | /**
|
| | | * @brief Checks whether the specified ADC interrupt has occurred or not.
|
| | | * @param ADCx: where x can be 1, 2 or 3 to select the ADC peripheral.
|
| | | * @param ADC_IT: specifies the ADC interrupt source to check. |
| | | * This parameter can be one of the following values:
|
| | | * @arg ADC_IT_EOC: End of conversion interrupt mask
|
| | | * @arg ADC_IT_AWD: Analog watchdog interrupt mask
|
| | | * @arg ADC_IT_JEOC: End of injected conversion interrupt mask
|
| | | * @retval The new state of ADC_IT (SET or RESET).
|
| | | */
|
| | | ITStatus ADC_GetITStatus(ADC_TypeDef* ADCx, uint16_t ADC_IT)
|
| | | {
|
| | | ITStatus bitstatus = RESET;
|
| | | uint32_t itmask = 0, enablestatus = 0;
|
| | | /* Check the parameters */
|
| | | assert_param(IS_ADC_ALL_PERIPH(ADCx));
|
| | | assert_param(IS_ADC_GET_IT(ADC_IT));
|
| | | /* Get the ADC IT index */
|
| | | itmask = ADC_IT >> 8;
|
| | | /* Get the ADC_IT enable bit status */
|
| | | enablestatus = (ADCx->CR1 & (uint8_t)ADC_IT) ;
|
| | | /* Check the status of the specified ADC interrupt */
|
| | | if (((ADCx->SR & itmask) != (uint32_t)RESET) && enablestatus)
|
| | | {
|
| | | /* ADC_IT is set */
|
| | | bitstatus = SET;
|
| | | }
|
| | | else
|
| | | {
|
| | | /* ADC_IT is reset */
|
| | | bitstatus = RESET;
|
| | | }
|
| | | /* Return the ADC_IT status */
|
| | | return bitstatus;
|
| | | }
|
| | |
|
| | | /**
|
| | | * @brief Clears the ADCx's interrupt pending bits.
|
| | | * @param ADCx: where x can be 1, 2 or 3 to select the ADC peripheral.
|
| | | * @param ADC_IT: specifies the ADC interrupt pending bit to clear.
|
| | | * This parameter can be any combination of the following values:
|
| | | * @arg ADC_IT_EOC: End of conversion interrupt mask
|
| | | * @arg ADC_IT_AWD: Analog watchdog interrupt mask
|
| | | * @arg ADC_IT_JEOC: End of injected conversion interrupt mask
|
| | | * @retval None
|
| | | */
|
| | | void ADC_ClearITPendingBit(ADC_TypeDef* ADCx, uint16_t ADC_IT)
|
| | | {
|
| | | uint8_t itmask = 0;
|
| | | /* Check the parameters */
|
| | | assert_param(IS_ADC_ALL_PERIPH(ADCx));
|
| | | assert_param(IS_ADC_IT(ADC_IT));
|
| | | /* Get the ADC IT index */
|
| | | itmask = (uint8_t)(ADC_IT >> 8);
|
| | | /* Clear the selected ADC interrupt pending bits */
|
| | | ADCx->SR = ~(uint32_t)itmask;
|
| | | }
|
| | |
|
| | | /**
|
| | | * @}
|
| | | */
|
| | |
|
| | | /**
|
| | | * @}
|
| | | */
|
| | |
|
| | | /**
|
| | | * @}
|
| | | */
|
| | |
|
| | | /******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/
|
New file |
| | |
| | | /**
|
| | | ******************************************************************************
|
| | | * @file stm32f10x_bkp.c
|
| | | * @author MCD Application Team
|
| | | * @version V3.5.0
|
| | | * @date 11-March-2011
|
| | | * @brief This file provides all the BKP firmware functions.
|
| | | ******************************************************************************
|
| | | * @attention
|
| | | *
|
| | | * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
|
| | | * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE
|
| | | * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY
|
| | | * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING
|
| | | * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE
|
| | | * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
|
| | | *
|
| | | * <h2><center>© COPYRIGHT 2011 STMicroelectronics</center></h2>
|
| | | ******************************************************************************
|
| | | */
|
| | |
|
| | | /* Includes ------------------------------------------------------------------*/
|
| | | #include "stm32f10x_bkp.h"
|
| | | #include "stm32f10x_rcc.h"
|
| | |
|
| | | /** @addtogroup STM32F10x_StdPeriph_Driver
|
| | | * @{
|
| | | */
|
| | |
|
| | | /** @defgroup BKP |
| | | * @brief BKP driver modules
|
| | | * @{
|
| | | */
|
| | |
|
| | | /** @defgroup BKP_Private_TypesDefinitions
|
| | | * @{
|
| | | */
|
| | |
|
| | | /**
|
| | | * @}
|
| | | */
|
| | |
|
| | | /** @defgroup BKP_Private_Defines
|
| | | * @{
|
| | | */
|
| | |
|
| | | /* ------------ BKP registers bit address in the alias region --------------- */
|
| | | #define BKP_OFFSET (BKP_BASE - PERIPH_BASE)
|
| | |
|
| | | /* --- CR Register ----*/
|
| | |
|
| | | /* Alias word address of TPAL bit */
|
| | | #define CR_OFFSET (BKP_OFFSET + 0x30)
|
| | | #define TPAL_BitNumber 0x01
|
| | | #define CR_TPAL_BB (PERIPH_BB_BASE + (CR_OFFSET * 32) + (TPAL_BitNumber * 4))
|
| | |
|
| | | /* Alias word address of TPE bit */
|
| | | #define TPE_BitNumber 0x00
|
| | | #define CR_TPE_BB (PERIPH_BB_BASE + (CR_OFFSET * 32) + (TPE_BitNumber * 4))
|
| | |
|
| | | /* --- CSR Register ---*/
|
| | |
|
| | | /* Alias word address of TPIE bit */
|
| | | #define CSR_OFFSET (BKP_OFFSET + 0x34)
|
| | | #define TPIE_BitNumber 0x02
|
| | | #define CSR_TPIE_BB (PERIPH_BB_BASE + (CSR_OFFSET * 32) + (TPIE_BitNumber * 4))
|
| | |
|
| | | /* Alias word address of TIF bit */
|
| | | #define TIF_BitNumber 0x09
|
| | | #define CSR_TIF_BB (PERIPH_BB_BASE + (CSR_OFFSET * 32) + (TIF_BitNumber * 4))
|
| | |
|
| | | /* Alias word address of TEF bit */
|
| | | #define TEF_BitNumber 0x08
|
| | | #define CSR_TEF_BB (PERIPH_BB_BASE + (CSR_OFFSET * 32) + (TEF_BitNumber * 4))
|
| | |
|
| | | /* ---------------------- BKP registers bit mask ------------------------ */
|
| | |
|
| | | /* RTCCR register bit mask */
|
| | | #define RTCCR_CAL_MASK ((uint16_t)0xFF80)
|
| | | #define RTCCR_MASK ((uint16_t)0xFC7F)
|
| | |
|
| | | /**
|
| | | * @}
|
| | | */ |
| | |
|
| | |
|
| | | /** @defgroup BKP_Private_Macros
|
| | | * @{
|
| | | */
|
| | |
|
| | | /**
|
| | | * @}
|
| | | */
|
| | |
|
| | | /** @defgroup BKP_Private_Variables
|
| | | * @{
|
| | | */
|
| | |
|
| | | /**
|
| | | * @}
|
| | | */
|
| | |
|
| | | /** @defgroup BKP_Private_FunctionPrototypes
|
| | | * @{
|
| | | */
|
| | |
|
| | | /**
|
| | | * @}
|
| | | */
|
| | |
|
| | | /** @defgroup BKP_Private_Functions
|
| | | * @{
|
| | | */
|
| | |
|
| | | /**
|
| | | * @brief Deinitializes the BKP peripheral registers to their default reset values.
|
| | | * @param None
|
| | | * @retval None
|
| | | */
|
| | | void BKP_DeInit(void)
|
| | | {
|
| | | RCC_BackupResetCmd(ENABLE);
|
| | | RCC_BackupResetCmd(DISABLE);
|
| | | }
|
| | |
|
| | | /**
|
| | | * @brief Configures the Tamper Pin active level.
|
| | | * @param BKP_TamperPinLevel: specifies the Tamper Pin active level.
|
| | | * This parameter can be one of the following values:
|
| | | * @arg BKP_TamperPinLevel_High: Tamper pin active on high level
|
| | | * @arg BKP_TamperPinLevel_Low: Tamper pin active on low level
|
| | | * @retval None
|
| | | */
|
| | | void BKP_TamperPinLevelConfig(uint16_t BKP_TamperPinLevel)
|
| | | {
|
| | | /* Check the parameters */
|
| | | assert_param(IS_BKP_TAMPER_PIN_LEVEL(BKP_TamperPinLevel));
|
| | | *(__IO uint32_t *) CR_TPAL_BB = BKP_TamperPinLevel;
|
| | | }
|
| | |
|
| | | /**
|
| | | * @brief Enables or disables the Tamper Pin activation.
|
| | | * @param NewState: new state of the Tamper Pin activation.
|
| | | * This parameter can be: ENABLE or DISABLE.
|
| | | * @retval None
|
| | | */
|
| | | void BKP_TamperPinCmd(FunctionalState NewState)
|
| | | {
|
| | | /* Check the parameters */
|
| | | assert_param(IS_FUNCTIONAL_STATE(NewState));
|
| | | *(__IO uint32_t *) CR_TPE_BB = (uint32_t)NewState;
|
| | | }
|
| | |
|
| | | /**
|
| | | * @brief Enables or disables the Tamper Pin Interrupt.
|
| | | * @param NewState: new state of the Tamper Pin Interrupt.
|
| | | * This parameter can be: ENABLE or DISABLE.
|
| | | * @retval None
|
| | | */
|
| | | void BKP_ITConfig(FunctionalState NewState)
|
| | | {
|
| | | /* Check the parameters */
|
| | | assert_param(IS_FUNCTIONAL_STATE(NewState));
|
| | | *(__IO uint32_t *) CSR_TPIE_BB = (uint32_t)NewState;
|
| | | }
|
| | |
|
| | | /**
|
| | | * @brief Select the RTC output source to output on the Tamper pin.
|
| | | * @param BKP_RTCOutputSource: specifies the RTC output source.
|
| | | * This parameter can be one of the following values:
|
| | | * @arg BKP_RTCOutputSource_None: no RTC output on the Tamper pin.
|
| | | * @arg BKP_RTCOutputSource_CalibClock: output the RTC clock with frequency
|
| | | * divided by 64 on the Tamper pin.
|
| | | * @arg BKP_RTCOutputSource_Alarm: output the RTC Alarm pulse signal on
|
| | | * the Tamper pin.
|
| | | * @arg BKP_RTCOutputSource_Second: output the RTC Second pulse signal on
|
| | | * the Tamper pin. |
| | | * @retval None
|
| | | */
|
| | | void BKP_RTCOutputConfig(uint16_t BKP_RTCOutputSource)
|
| | | {
|
| | | uint16_t tmpreg = 0;
|
| | | /* Check the parameters */
|
| | | assert_param(IS_BKP_RTC_OUTPUT_SOURCE(BKP_RTCOutputSource));
|
| | | tmpreg = BKP->RTCCR;
|
| | | /* Clear CCO, ASOE and ASOS bits */
|
| | | tmpreg &= RTCCR_MASK;
|
| | | |
| | | /* Set CCO, ASOE and ASOS bits according to BKP_RTCOutputSource value */
|
| | | tmpreg |= BKP_RTCOutputSource;
|
| | | /* Store the new value */
|
| | | BKP->RTCCR = tmpreg;
|
| | | }
|
| | |
|
| | | /**
|
| | | * @brief Sets RTC Clock Calibration value.
|
| | | * @param CalibrationValue: specifies the RTC Clock Calibration value.
|
| | | * This parameter must be a number between 0 and 0x7F.
|
| | | * @retval None
|
| | | */
|
| | | void BKP_SetRTCCalibrationValue(uint8_t CalibrationValue)
|
| | | {
|
| | | uint16_t tmpreg = 0;
|
| | | /* Check the parameters */
|
| | | assert_param(IS_BKP_CALIBRATION_VALUE(CalibrationValue));
|
| | | tmpreg = BKP->RTCCR;
|
| | | /* Clear CAL[6:0] bits */
|
| | | tmpreg &= RTCCR_CAL_MASK;
|
| | | /* Set CAL[6:0] bits according to CalibrationValue value */
|
| | | tmpreg |= CalibrationValue;
|
| | | /* Store the new value */
|
| | | BKP->RTCCR = tmpreg;
|
| | | }
|
| | |
|
| | | /**
|
| | | * @brief Writes user data to the specified Data Backup Register.
|
| | | * @param BKP_DR: specifies the Data Backup Register.
|
| | | * This parameter can be BKP_DRx where x:[1, 42]
|
| | | * @param Data: data to write
|
| | | * @retval None
|
| | | */
|
| | | void BKP_WriteBackupRegister(uint16_t BKP_DR, uint16_t Data)
|
| | | {
|
| | | __IO uint32_t tmp = 0;
|
| | |
|
| | | /* Check the parameters */
|
| | | assert_param(IS_BKP_DR(BKP_DR));
|
| | |
|
| | | tmp = (uint32_t)BKP_BASE; |
| | | tmp += BKP_DR;
|
| | |
|
| | | *(__IO uint32_t *) tmp = Data;
|
| | | }
|
| | |
|
| | | /**
|
| | | * @brief Reads data from the specified Data Backup Register.
|
| | | * @param BKP_DR: specifies the Data Backup Register.
|
| | | * This parameter can be BKP_DRx where x:[1, 42]
|
| | | * @retval The content of the specified Data Backup Register
|
| | | */
|
| | | uint16_t BKP_ReadBackupRegister(uint16_t BKP_DR)
|
| | | {
|
| | | __IO uint32_t tmp = 0;
|
| | |
|
| | | /* Check the parameters */
|
| | | assert_param(IS_BKP_DR(BKP_DR));
|
| | |
|
| | | tmp = (uint32_t)BKP_BASE; |
| | | tmp += BKP_DR;
|
| | |
|
| | | return (*(__IO uint16_t *) tmp);
|
| | | }
|
| | |
|
| | | /**
|
| | | * @brief Checks whether the Tamper Pin Event flag is set or not.
|
| | | * @param None
|
| | | * @retval The new state of the Tamper Pin Event flag (SET or RESET).
|
| | | */
|
| | | FlagStatus BKP_GetFlagStatus(void)
|
| | | {
|
| | | return (FlagStatus)(*(__IO uint32_t *) CSR_TEF_BB);
|
| | | }
|
| | |
|
| | | /**
|
| | | * @brief Clears Tamper Pin Event pending flag.
|
| | | * @param None
|
| | | * @retval None
|
| | | */
|
| | | void BKP_ClearFlag(void)
|
| | | {
|
| | | /* Set CTE bit to clear Tamper Pin Event flag */
|
| | | BKP->CSR |= BKP_CSR_CTE;
|
| | | }
|
| | |
|
| | | /**
|
| | | * @brief Checks whether the Tamper Pin Interrupt has occurred or not.
|
| | | * @param None
|
| | | * @retval The new state of the Tamper Pin Interrupt (SET or RESET).
|
| | | */
|
| | | ITStatus BKP_GetITStatus(void)
|
| | | {
|
| | | return (ITStatus)(*(__IO uint32_t *) CSR_TIF_BB);
|
| | | }
|
| | |
|
| | | /**
|
| | | * @brief Clears Tamper Pin Interrupt pending bit.
|
| | | * @param None
|
| | | * @retval None
|
| | | */
|
| | | void BKP_ClearITPendingBit(void)
|
| | | {
|
| | | /* Set CTI bit to clear Tamper Pin Interrupt pending bit */
|
| | | BKP->CSR |= BKP_CSR_CTI;
|
| | | }
|
| | |
|
| | | /**
|
| | | * @}
|
| | | */
|
| | |
|
| | | /**
|
| | | * @}
|
| | | */
|
| | |
|
| | | /**
|
| | | * @}
|
| | | */
|
| | |
|
| | | /******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/
|
New file |
| | |
| | | /**
|
| | | ******************************************************************************
|
| | | * @file stm32f10x_can.c
|
| | | * @author MCD Application Team
|
| | | * @version V3.5.0
|
| | | * @date 11-March-2011
|
| | | * @brief This file provides all the CAN firmware functions.
|
| | | ******************************************************************************
|
| | | * @attention
|
| | | *
|
| | | * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
|
| | | * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE
|
| | | * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY
|
| | | * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING
|
| | | * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE
|
| | | * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
|
| | | *
|
| | | * <h2><center>© COPYRIGHT 2011 STMicroelectronics</center></h2>
|
| | | ******************************************************************************
|
| | | */
|
| | |
|
| | | /* Includes ------------------------------------------------------------------*/
|
| | | #include "stm32f10x_can.h"
|
| | | #include "stm32f10x_rcc.h"
|
| | |
|
| | | /** @addtogroup STM32F10x_StdPeriph_Driver
|
| | | * @{
|
| | | */
|
| | |
|
| | | /** @defgroup CAN |
| | | * @brief CAN driver modules
|
| | | * @{
|
| | | */ |
| | |
|
| | | /** @defgroup CAN_Private_TypesDefinitions
|
| | | * @{
|
| | | */
|
| | |
|
| | | /**
|
| | | * @}
|
| | | */
|
| | |
|
| | | /** @defgroup CAN_Private_Defines
|
| | | * @{
|
| | | */
|
| | |
|
| | | /* CAN Master Control Register bits */
|
| | |
|
| | | #define MCR_DBF ((uint32_t)0x00010000) /* software master reset */
|
| | |
|
| | | /* CAN Mailbox Transmit Request */
|
| | | #define TMIDxR_TXRQ ((uint32_t)0x00000001) /* Transmit mailbox request */
|
| | |
|
| | | /* CAN Filter Master Register bits */
|
| | | #define FMR_FINIT ((uint32_t)0x00000001) /* Filter init mode */
|
| | |
|
| | | /* Time out for INAK bit */
|
| | | #define INAK_TIMEOUT ((uint32_t)0x0000FFFF)
|
| | | /* Time out for SLAK bit */
|
| | | #define SLAK_TIMEOUT ((uint32_t)0x0000FFFF)
|
| | |
|
| | |
|
| | |
|
| | | /* Flags in TSR register */
|
| | | #define CAN_FLAGS_TSR ((uint32_t)0x08000000) |
| | | /* Flags in RF1R register */
|
| | | #define CAN_FLAGS_RF1R ((uint32_t)0x04000000) |
| | | /* Flags in RF0R register */
|
| | | #define CAN_FLAGS_RF0R ((uint32_t)0x02000000) |
| | | /* Flags in MSR register */
|
| | | #define CAN_FLAGS_MSR ((uint32_t)0x01000000) |
| | | /* Flags in ESR register */
|
| | | #define CAN_FLAGS_ESR ((uint32_t)0x00F00000) |
| | |
|
| | | /* Mailboxes definition */
|
| | | #define CAN_TXMAILBOX_0 ((uint8_t)0x00)
|
| | | #define CAN_TXMAILBOX_1 ((uint8_t)0x01)
|
| | | #define CAN_TXMAILBOX_2 ((uint8_t)0x02) |
| | |
|
| | |
|
| | |
|
| | | #define CAN_MODE_MASK ((uint32_t) 0x00000003)
|
| | | /**
|
| | | * @}
|
| | | */
|
| | |
|
| | | /** @defgroup CAN_Private_Macros
|
| | | * @{
|
| | | */
|
| | |
|
| | | /**
|
| | | * @}
|
| | | */
|
| | |
|
| | | /** @defgroup CAN_Private_Variables
|
| | | * @{
|
| | | */
|
| | |
|
| | | /**
|
| | | * @}
|
| | | */
|
| | |
|
| | | /** @defgroup CAN_Private_FunctionPrototypes
|
| | | * @{
|
| | | */
|
| | |
|
| | | static ITStatus CheckITStatus(uint32_t CAN_Reg, uint32_t It_Bit);
|
| | |
|
| | | /**
|
| | | * @}
|
| | | */
|
| | |
|
| | | /** @defgroup CAN_Private_Functions
|
| | | * @{
|
| | | */
|
| | |
|
| | | /**
|
| | | * @brief Deinitializes the CAN peripheral registers to their default reset values.
|
| | | * @param CANx: where x can be 1 or 2 to select the CAN peripheral.
|
| | | * @retval None.
|
| | | */
|
| | | void CAN_DeInit(CAN_TypeDef* CANx)
|
| | | {
|
| | | /* Check the parameters */
|
| | | assert_param(IS_CAN_ALL_PERIPH(CANx));
|
| | | |
| | | if (CANx == CAN1)
|
| | | {
|
| | | /* Enable CAN1 reset state */
|
| | | RCC_APB1PeriphResetCmd(RCC_APB1Periph_CAN1, ENABLE);
|
| | | /* Release CAN1 from reset state */
|
| | | RCC_APB1PeriphResetCmd(RCC_APB1Periph_CAN1, DISABLE);
|
| | | }
|
| | | else
|
| | | { |
| | | /* Enable CAN2 reset state */
|
| | | RCC_APB1PeriphResetCmd(RCC_APB1Periph_CAN2, ENABLE);
|
| | | /* Release CAN2 from reset state */
|
| | | RCC_APB1PeriphResetCmd(RCC_APB1Periph_CAN2, DISABLE);
|
| | | }
|
| | | }
|
| | |
|
| | | /**
|
| | | * @brief Initializes the CAN peripheral according to the specified
|
| | | * parameters in the CAN_InitStruct.
|
| | | * @param CANx: where x can be 1 or 2 to to select the CAN |
| | | * peripheral.
|
| | | * @param CAN_InitStruct: pointer to a CAN_InitTypeDef structure that
|
| | | * contains the configuration information for the |
| | | * CAN peripheral.
|
| | | * @retval Constant indicates initialization succeed which will be |
| | | * CAN_InitStatus_Failed or CAN_InitStatus_Success.
|
| | | */
|
| | | uint8_t CAN_Init(CAN_TypeDef* CANx, CAN_InitTypeDef* CAN_InitStruct)
|
| | | {
|
| | | uint8_t InitStatus = CAN_InitStatus_Failed;
|
| | | uint32_t wait_ack = 0x00000000;
|
| | | /* Check the parameters */
|
| | | assert_param(IS_CAN_ALL_PERIPH(CANx));
|
| | | assert_param(IS_FUNCTIONAL_STATE(CAN_InitStruct->CAN_TTCM));
|
| | | assert_param(IS_FUNCTIONAL_STATE(CAN_InitStruct->CAN_ABOM));
|
| | | assert_param(IS_FUNCTIONAL_STATE(CAN_InitStruct->CAN_AWUM));
|
| | | assert_param(IS_FUNCTIONAL_STATE(CAN_InitStruct->CAN_NART));
|
| | | assert_param(IS_FUNCTIONAL_STATE(CAN_InitStruct->CAN_RFLM));
|
| | | assert_param(IS_FUNCTIONAL_STATE(CAN_InitStruct->CAN_TXFP));
|
| | | assert_param(IS_CAN_MODE(CAN_InitStruct->CAN_Mode));
|
| | | assert_param(IS_CAN_SJW(CAN_InitStruct->CAN_SJW));
|
| | | assert_param(IS_CAN_BS1(CAN_InitStruct->CAN_BS1));
|
| | | assert_param(IS_CAN_BS2(CAN_InitStruct->CAN_BS2));
|
| | | assert_param(IS_CAN_PRESCALER(CAN_InitStruct->CAN_Prescaler));
|
| | |
|
| | | /* Exit from sleep mode */
|
| | | CANx->MCR &= (~(uint32_t)CAN_MCR_SLEEP);
|
| | |
|
| | | /* Request initialisation */
|
| | | CANx->MCR |= CAN_MCR_INRQ ;
|
| | |
|
| | | /* Wait the acknowledge */
|
| | | while (((CANx->MSR & CAN_MSR_INAK) != CAN_MSR_INAK) && (wait_ack != INAK_TIMEOUT))
|
| | | {
|
| | | wait_ack++;
|
| | | }
|
| | |
|
| | | /* Check acknowledge */
|
| | | if ((CANx->MSR & CAN_MSR_INAK) != CAN_MSR_INAK)
|
| | | {
|
| | | InitStatus = CAN_InitStatus_Failed;
|
| | | }
|
| | | else |
| | | {
|
| | | /* Set the time triggered communication mode */
|
| | | if (CAN_InitStruct->CAN_TTCM == ENABLE)
|
| | | {
|
| | | CANx->MCR |= CAN_MCR_TTCM;
|
| | | }
|
| | | else
|
| | | {
|
| | | CANx->MCR &= ~(uint32_t)CAN_MCR_TTCM;
|
| | | }
|
| | |
|
| | | /* Set the automatic bus-off management */
|
| | | if (CAN_InitStruct->CAN_ABOM == ENABLE)
|
| | | {
|
| | | CANx->MCR |= CAN_MCR_ABOM;
|
| | | }
|
| | | else
|
| | | {
|
| | | CANx->MCR &= ~(uint32_t)CAN_MCR_ABOM;
|
| | | }
|
| | |
|
| | | /* Set the automatic wake-up mode */
|
| | | if (CAN_InitStruct->CAN_AWUM == ENABLE)
|
| | | {
|
| | | CANx->MCR |= CAN_MCR_AWUM;
|
| | | }
|
| | | else
|
| | | {
|
| | | CANx->MCR &= ~(uint32_t)CAN_MCR_AWUM;
|
| | | }
|
| | |
|
| | | /* Set the no automatic retransmission */
|
| | | if (CAN_InitStruct->CAN_NART == ENABLE)
|
| | | {
|
| | | CANx->MCR |= CAN_MCR_NART;
|
| | | }
|
| | | else
|
| | | {
|
| | | CANx->MCR &= ~(uint32_t)CAN_MCR_NART;
|
| | | }
|
| | |
|
| | | /* Set the receive FIFO locked mode */
|
| | | if (CAN_InitStruct->CAN_RFLM == ENABLE)
|
| | | {
|
| | | CANx->MCR |= CAN_MCR_RFLM;
|
| | | }
|
| | | else
|
| | | {
|
| | | CANx->MCR &= ~(uint32_t)CAN_MCR_RFLM;
|
| | | }
|
| | |
|
| | | /* Set the transmit FIFO priority */
|
| | | if (CAN_InitStruct->CAN_TXFP == ENABLE)
|
| | | {
|
| | | CANx->MCR |= CAN_MCR_TXFP;
|
| | | }
|
| | | else
|
| | | {
|
| | | CANx->MCR &= ~(uint32_t)CAN_MCR_TXFP;
|
| | | }
|
| | |
|
| | | /* Set the bit timing register */
|
| | | CANx->BTR = (uint32_t)((uint32_t)CAN_InitStruct->CAN_Mode << 30) | \
|
| | | ((uint32_t)CAN_InitStruct->CAN_SJW << 24) | \
|
| | | ((uint32_t)CAN_InitStruct->CAN_BS1 << 16) | \
|
| | | ((uint32_t)CAN_InitStruct->CAN_BS2 << 20) | \
|
| | | ((uint32_t)CAN_InitStruct->CAN_Prescaler - 1);
|
| | |
|
| | | /* Request leave initialisation */
|
| | | CANx->MCR &= ~(uint32_t)CAN_MCR_INRQ;
|
| | |
|
| | | /* Wait the acknowledge */
|
| | | wait_ack = 0;
|
| | |
|
| | | while (((CANx->MSR & CAN_MSR_INAK) == CAN_MSR_INAK) && (wait_ack != INAK_TIMEOUT))
|
| | | {
|
| | | wait_ack++;
|
| | | }
|
| | |
|
| | | /* ...and check acknowledged */
|
| | | if ((CANx->MSR & CAN_MSR_INAK) == CAN_MSR_INAK)
|
| | | {
|
| | | InitStatus = CAN_InitStatus_Failed;
|
| | | }
|
| | | else
|
| | | {
|
| | | InitStatus = CAN_InitStatus_Success ;
|
| | | }
|
| | | }
|
| | |
|
| | | /* At this step, return the status of initialization */
|
| | | return InitStatus;
|
| | | }
|
| | |
|
| | | /**
|
| | | * @brief Initializes the CAN peripheral according to the specified
|
| | | * parameters in the CAN_FilterInitStruct.
|
| | | * @param CAN_FilterInitStruct: pointer to a CAN_FilterInitTypeDef
|
| | | * structure that contains the configuration |
| | | * information.
|
| | | * @retval None.
|
| | | */
|
| | | void CAN_FilterInit(CAN_FilterInitTypeDef* CAN_FilterInitStruct)
|
| | | {
|
| | | uint32_t filter_number_bit_pos = 0;
|
| | | /* Check the parameters */
|
| | | assert_param(IS_CAN_FILTER_NUMBER(CAN_FilterInitStruct->CAN_FilterNumber));
|
| | | assert_param(IS_CAN_FILTER_MODE(CAN_FilterInitStruct->CAN_FilterMode));
|
| | | assert_param(IS_CAN_FILTER_SCALE(CAN_FilterInitStruct->CAN_FilterScale));
|
| | | assert_param(IS_CAN_FILTER_FIFO(CAN_FilterInitStruct->CAN_FilterFIFOAssignment));
|
| | | assert_param(IS_FUNCTIONAL_STATE(CAN_FilterInitStruct->CAN_FilterActivation));
|
| | |
|
| | | filter_number_bit_pos = ((uint32_t)1) << CAN_FilterInitStruct->CAN_FilterNumber;
|
| | |
|
| | | /* Initialisation mode for the filter */
|
| | | CAN1->FMR |= FMR_FINIT;
|
| | |
|
| | | /* Filter Deactivation */
|
| | | CAN1->FA1R &= ~(uint32_t)filter_number_bit_pos;
|
| | |
|
| | | /* Filter Scale */
|
| | | if (CAN_FilterInitStruct->CAN_FilterScale == CAN_FilterScale_16bit)
|
| | | {
|
| | | /* 16-bit scale for the filter */
|
| | | CAN1->FS1R &= ~(uint32_t)filter_number_bit_pos;
|
| | |
|
| | | /* First 16-bit identifier and First 16-bit mask */
|
| | | /* Or First 16-bit identifier and Second 16-bit identifier */
|
| | | CAN1->sFilterRegister[CAN_FilterInitStruct->CAN_FilterNumber].FR1 = |
| | | ((0x0000FFFF & (uint32_t)CAN_FilterInitStruct->CAN_FilterMaskIdLow) << 16) |
|
| | | (0x0000FFFF & (uint32_t)CAN_FilterInitStruct->CAN_FilterIdLow);
|
| | |
|
| | | /* Second 16-bit identifier and Second 16-bit mask */
|
| | | /* Or Third 16-bit identifier and Fourth 16-bit identifier */
|
| | | CAN1->sFilterRegister[CAN_FilterInitStruct->CAN_FilterNumber].FR2 = |
| | | ((0x0000FFFF & (uint32_t)CAN_FilterInitStruct->CAN_FilterMaskIdHigh) << 16) |
|
| | | (0x0000FFFF & (uint32_t)CAN_FilterInitStruct->CAN_FilterIdHigh);
|
| | | }
|
| | |
|
| | | if (CAN_FilterInitStruct->CAN_FilterScale == CAN_FilterScale_32bit)
|
| | | {
|
| | | /* 32-bit scale for the filter */
|
| | | CAN1->FS1R |= filter_number_bit_pos;
|
| | | /* 32-bit identifier or First 32-bit identifier */
|
| | | CAN1->sFilterRegister[CAN_FilterInitStruct->CAN_FilterNumber].FR1 = |
| | | ((0x0000FFFF & (uint32_t)CAN_FilterInitStruct->CAN_FilterIdHigh) << 16) |
|
| | | (0x0000FFFF & (uint32_t)CAN_FilterInitStruct->CAN_FilterIdLow);
|
| | | /* 32-bit mask or Second 32-bit identifier */
|
| | | CAN1->sFilterRegister[CAN_FilterInitStruct->CAN_FilterNumber].FR2 = |
| | | ((0x0000FFFF & (uint32_t)CAN_FilterInitStruct->CAN_FilterMaskIdHigh) << 16) |
|
| | | (0x0000FFFF & (uint32_t)CAN_FilterInitStruct->CAN_FilterMaskIdLow);
|
| | | }
|
| | |
|
| | | /* Filter Mode */
|
| | | if (CAN_FilterInitStruct->CAN_FilterMode == CAN_FilterMode_IdMask)
|
| | | {
|
| | | /*Id/Mask mode for the filter*/
|
| | | CAN1->FM1R &= ~(uint32_t)filter_number_bit_pos;
|
| | | }
|
| | | else /* CAN_FilterInitStruct->CAN_FilterMode == CAN_FilterMode_IdList */
|
| | | {
|
| | | /*Identifier list mode for the filter*/
|
| | | CAN1->FM1R |= (uint32_t)filter_number_bit_pos;
|
| | | }
|
| | |
|
| | | /* Filter FIFO assignment */
|
| | | if (CAN_FilterInitStruct->CAN_FilterFIFOAssignment == CAN_Filter_FIFO0)
|
| | | {
|
| | | /* FIFO 0 assignation for the filter */
|
| | | CAN1->FFA1R &= ~(uint32_t)filter_number_bit_pos;
|
| | | }
|
| | |
|
| | | if (CAN_FilterInitStruct->CAN_FilterFIFOAssignment == CAN_Filter_FIFO1)
|
| | | {
|
| | | /* FIFO 1 assignation for the filter */
|
| | | CAN1->FFA1R |= (uint32_t)filter_number_bit_pos;
|
| | | }
|
| | | |
| | | /* Filter activation */
|
| | | if (CAN_FilterInitStruct->CAN_FilterActivation == ENABLE)
|
| | | {
|
| | | CAN1->FA1R |= filter_number_bit_pos;
|
| | | }
|
| | |
|
| | | /* Leave the initialisation mode for the filter */
|
| | | CAN1->FMR &= ~FMR_FINIT;
|
| | | }
|
| | |
|
| | | /**
|
| | | * @brief Fills each CAN_InitStruct member with its default value.
|
| | | * @param CAN_InitStruct: pointer to a CAN_InitTypeDef structure which
|
| | | * will be initialized.
|
| | | * @retval None.
|
| | | */
|
| | | void CAN_StructInit(CAN_InitTypeDef* CAN_InitStruct)
|
| | | {
|
| | | /* Reset CAN init structure parameters values */
|
| | | |
| | | /* Initialize the time triggered communication mode */
|
| | | CAN_InitStruct->CAN_TTCM = DISABLE;
|
| | | |
| | | /* Initialize the automatic bus-off management */
|
| | | CAN_InitStruct->CAN_ABOM = DISABLE;
|
| | | |
| | | /* Initialize the automatic wake-up mode */
|
| | | CAN_InitStruct->CAN_AWUM = DISABLE;
|
| | | |
| | | /* Initialize the no automatic retransmission */
|
| | | CAN_InitStruct->CAN_NART = DISABLE;
|
| | | |
| | | /* Initialize the receive FIFO locked mode */
|
| | | CAN_InitStruct->CAN_RFLM = DISABLE;
|
| | | |
| | | /* Initialize the transmit FIFO priority */
|
| | | CAN_InitStruct->CAN_TXFP = DISABLE;
|
| | | |
| | | /* Initialize the CAN_Mode member */
|
| | | CAN_InitStruct->CAN_Mode = CAN_Mode_Normal;
|
| | | |
| | | /* Initialize the CAN_SJW member */
|
| | | CAN_InitStruct->CAN_SJW = CAN_SJW_1tq;
|
| | | |
| | | /* Initialize the CAN_BS1 member */
|
| | | CAN_InitStruct->CAN_BS1 = CAN_BS1_4tq;
|
| | | |
| | | /* Initialize the CAN_BS2 member */
|
| | | CAN_InitStruct->CAN_BS2 = CAN_BS2_3tq;
|
| | | |
| | | /* Initialize the CAN_Prescaler member */
|
| | | CAN_InitStruct->CAN_Prescaler = 1;
|
| | | }
|
| | |
|
| | | /**
|
| | | * @brief Select the start bank filter for slave CAN.
|
| | | * @note This function applies only to STM32 Connectivity line devices.
|
| | | * @param CAN_BankNumber: Select the start slave bank filter from 1..27.
|
| | | * @retval None.
|
| | | */
|
| | | void CAN_SlaveStartBank(uint8_t CAN_BankNumber) |
| | | {
|
| | | /* Check the parameters */
|
| | | assert_param(IS_CAN_BANKNUMBER(CAN_BankNumber));
|
| | | |
| | | /* Enter Initialisation mode for the filter */
|
| | | CAN1->FMR |= FMR_FINIT;
|
| | | |
| | | /* Select the start slave bank */
|
| | | CAN1->FMR &= (uint32_t)0xFFFFC0F1 ;
|
| | | CAN1->FMR |= (uint32_t)(CAN_BankNumber)<<8;
|
| | | |
| | | /* Leave Initialisation mode for the filter */
|
| | | CAN1->FMR &= ~FMR_FINIT;
|
| | | }
|
| | |
|
| | | /**
|
| | | * @brief Enables or disables the DBG Freeze for CAN.
|
| | | * @param CANx: where x can be 1 or 2 to to select the CAN peripheral.
|
| | | * @param NewState: new state of the CAN peripheral. This parameter can |
| | | * be: ENABLE or DISABLE.
|
| | | * @retval None.
|
| | | */
|
| | | void CAN_DBGFreeze(CAN_TypeDef* CANx, FunctionalState NewState)
|
| | | {
|
| | | /* Check the parameters */
|
| | | assert_param(IS_CAN_ALL_PERIPH(CANx));
|
| | | assert_param(IS_FUNCTIONAL_STATE(NewState));
|
| | | |
| | | if (NewState != DISABLE)
|
| | | {
|
| | | /* Enable Debug Freeze */
|
| | | CANx->MCR |= MCR_DBF;
|
| | | }
|
| | | else
|
| | | {
|
| | | /* Disable Debug Freeze */
|
| | | CANx->MCR &= ~MCR_DBF;
|
| | | }
|
| | | }
|
| | |
|
| | |
|
| | | /**
|
| | | * @brief Enables or disabes the CAN Time TriggerOperation communication mode.
|
| | | * @param CANx: where x can be 1 or 2 to to select the CAN peripheral.
|
| | | * @param NewState : Mode new state , can be one of @ref FunctionalState.
|
| | | * @note when enabled, Time stamp (TIME[15:0]) value is sent in the last |
| | | * two data bytes of the 8-byte message: TIME[7:0] in data byte 6 |
| | | * and TIME[15:8] in data byte 7 |
| | | * @note DLC must be programmed as 8 in order Time Stamp (2 bytes) to be |
| | | * sent over the CAN bus. |
| | | * @retval None
|
| | | */
|
| | | void CAN_TTComModeCmd(CAN_TypeDef* CANx, FunctionalState NewState)
|
| | | {
|
| | | /* Check the parameters */
|
| | | assert_param(IS_CAN_ALL_PERIPH(CANx));
|
| | | assert_param(IS_FUNCTIONAL_STATE(NewState));
|
| | | if (NewState != DISABLE)
|
| | | {
|
| | | /* Enable the TTCM mode */
|
| | | CANx->MCR |= CAN_MCR_TTCM;
|
| | |
|
| | | /* Set TGT bits */
|
| | | CANx->sTxMailBox[0].TDTR |= ((uint32_t)CAN_TDT0R_TGT);
|
| | | CANx->sTxMailBox[1].TDTR |= ((uint32_t)CAN_TDT1R_TGT);
|
| | | CANx->sTxMailBox[2].TDTR |= ((uint32_t)CAN_TDT2R_TGT);
|
| | | }
|
| | | else
|
| | | {
|
| | | /* Disable the TTCM mode */
|
| | | CANx->MCR &= (uint32_t)(~(uint32_t)CAN_MCR_TTCM);
|
| | |
|
| | | /* Reset TGT bits */
|
| | | CANx->sTxMailBox[0].TDTR &= ((uint32_t)~CAN_TDT0R_TGT);
|
| | | CANx->sTxMailBox[1].TDTR &= ((uint32_t)~CAN_TDT1R_TGT);
|
| | | CANx->sTxMailBox[2].TDTR &= ((uint32_t)~CAN_TDT2R_TGT);
|
| | | }
|
| | | }
|
| | | /**
|
| | | * @brief Initiates the transmission of a message.
|
| | | * @param CANx: where x can be 1 or 2 to to select the CAN peripheral.
|
| | | * @param TxMessage: pointer to a structure which contains CAN Id, CAN
|
| | | * DLC and CAN data.
|
| | | * @retval The number of the mailbox that is used for transmission
|
| | | * or CAN_TxStatus_NoMailBox if there is no empty mailbox.
|
| | | */
|
| | | uint8_t CAN_Transmit(CAN_TypeDef* CANx, CanTxMsg* TxMessage)
|
| | | {
|
| | | uint8_t transmit_mailbox = 0;
|
| | | /* Check the parameters */
|
| | | assert_param(IS_CAN_ALL_PERIPH(CANx));
|
| | | assert_param(IS_CAN_IDTYPE(TxMessage->IDE));
|
| | | assert_param(IS_CAN_RTR(TxMessage->RTR));
|
| | | assert_param(IS_CAN_DLC(TxMessage->DLC));
|
| | |
|
| | | /* Select one empty transmit mailbox */
|
| | | if ((CANx->TSR&CAN_TSR_TME0) == CAN_TSR_TME0)
|
| | | {
|
| | | transmit_mailbox = 0;
|
| | | }
|
| | | else if ((CANx->TSR&CAN_TSR_TME1) == CAN_TSR_TME1)
|
| | | {
|
| | | transmit_mailbox = 1;
|
| | | }
|
| | | else if ((CANx->TSR&CAN_TSR_TME2) == CAN_TSR_TME2)
|
| | | {
|
| | | transmit_mailbox = 2;
|
| | | }
|
| | | else
|
| | | {
|
| | | transmit_mailbox = CAN_TxStatus_NoMailBox;
|
| | | }
|
| | |
|
| | | if (transmit_mailbox != CAN_TxStatus_NoMailBox)
|
| | | {
|
| | | /* Set up the Id */
|
| | | CANx->sTxMailBox[transmit_mailbox].TIR &= TMIDxR_TXRQ;
|
| | | if (TxMessage->IDE == CAN_Id_Standard)
|
| | | {
|
| | | assert_param(IS_CAN_STDID(TxMessage->StdId)); |
| | | CANx->sTxMailBox[transmit_mailbox].TIR |= ((TxMessage->StdId << 21) | \
|
| | | TxMessage->RTR);
|
| | | }
|
| | | else
|
| | | {
|
| | | assert_param(IS_CAN_EXTID(TxMessage->ExtId));
|
| | | CANx->sTxMailBox[transmit_mailbox].TIR |= ((TxMessage->ExtId << 3) | \
|
| | | TxMessage->IDE | \
|
| | | TxMessage->RTR);
|
| | | }
|
| | | |
| | | /* Set up the DLC */
|
| | | TxMessage->DLC &= (uint8_t)0x0000000F;
|
| | | CANx->sTxMailBox[transmit_mailbox].TDTR &= (uint32_t)0xFFFFFFF0;
|
| | | CANx->sTxMailBox[transmit_mailbox].TDTR |= TxMessage->DLC;
|
| | |
|
| | | /* Set up the data field */
|
| | | CANx->sTxMailBox[transmit_mailbox].TDLR = (((uint32_t)TxMessage->Data[3] << 24) | |
| | | ((uint32_t)TxMessage->Data[2] << 16) |
|
| | | ((uint32_t)TxMessage->Data[1] << 8) | |
| | | ((uint32_t)TxMessage->Data[0]));
|
| | | CANx->sTxMailBox[transmit_mailbox].TDHR = (((uint32_t)TxMessage->Data[7] << 24) | |
| | | ((uint32_t)TxMessage->Data[6] << 16) |
|
| | | ((uint32_t)TxMessage->Data[5] << 8) |
|
| | | ((uint32_t)TxMessage->Data[4]));
|
| | | /* Request transmission */
|
| | | CANx->sTxMailBox[transmit_mailbox].TIR |= TMIDxR_TXRQ;
|
| | | }
|
| | | return transmit_mailbox;
|
| | | }
|
| | |
|
| | | /**
|
| | | * @brief Checks the transmission of a message.
|
| | | * @param CANx: where x can be 1 or 2 to to select the |
| | | * CAN peripheral.
|
| | | * @param TransmitMailbox: the number of the mailbox that is used for |
| | | * transmission.
|
| | | * @retval CAN_TxStatus_Ok if the CAN driver transmits the message, CAN_TxStatus_Failed |
| | | * in an other case.
|
| | | */
|
| | | uint8_t CAN_TransmitStatus(CAN_TypeDef* CANx, uint8_t TransmitMailbox)
|
| | | {
|
| | | uint32_t state = 0;
|
| | |
|
| | | /* Check the parameters */
|
| | | assert_param(IS_CAN_ALL_PERIPH(CANx));
|
| | | assert_param(IS_CAN_TRANSMITMAILBOX(TransmitMailbox));
|
| | | |
| | | switch (TransmitMailbox)
|
| | | {
|
| | | case (CAN_TXMAILBOX_0): |
| | | state = CANx->TSR & (CAN_TSR_RQCP0 | CAN_TSR_TXOK0 | CAN_TSR_TME0);
|
| | | break;
|
| | | case (CAN_TXMAILBOX_1): |
| | | state = CANx->TSR & (CAN_TSR_RQCP1 | CAN_TSR_TXOK1 | CAN_TSR_TME1);
|
| | | break;
|
| | | case (CAN_TXMAILBOX_2): |
| | | state = CANx->TSR & (CAN_TSR_RQCP2 | CAN_TSR_TXOK2 | CAN_TSR_TME2);
|
| | | break;
|
| | | default:
|
| | | state = CAN_TxStatus_Failed;
|
| | | break;
|
| | | }
|
| | | switch (state)
|
| | | {
|
| | | /* transmit pending */
|
| | | case (0x0): state = CAN_TxStatus_Pending;
|
| | | break;
|
| | | /* transmit failed */
|
| | | case (CAN_TSR_RQCP0 | CAN_TSR_TME0): state = CAN_TxStatus_Failed;
|
| | | break;
|
| | | case (CAN_TSR_RQCP1 | CAN_TSR_TME1): state = CAN_TxStatus_Failed;
|
| | | break;
|
| | | case (CAN_TSR_RQCP2 | CAN_TSR_TME2): state = CAN_TxStatus_Failed;
|
| | | break;
|
| | | /* transmit succeeded */
|
| | | case (CAN_TSR_RQCP0 | CAN_TSR_TXOK0 | CAN_TSR_TME0):state = CAN_TxStatus_Ok;
|
| | | break;
|
| | | case (CAN_TSR_RQCP1 | CAN_TSR_TXOK1 | CAN_TSR_TME1):state = CAN_TxStatus_Ok;
|
| | | break;
|
| | | case (CAN_TSR_RQCP2 | CAN_TSR_TXOK2 | CAN_TSR_TME2):state = CAN_TxStatus_Ok;
|
| | | break;
|
| | | default: state = CAN_TxStatus_Failed;
|
| | | break;
|
| | | }
|
| | | return (uint8_t) state;
|
| | | }
|
| | |
|
| | | /**
|
| | | * @brief Cancels a transmit request.
|
| | | * @param CANx: where x can be 1 or 2 to to select the CAN peripheral. |
| | | * @param Mailbox: Mailbox number.
|
| | | * @retval None.
|
| | | */
|
| | | void CAN_CancelTransmit(CAN_TypeDef* CANx, uint8_t Mailbox)
|
| | | {
|
| | | /* Check the parameters */
|
| | | assert_param(IS_CAN_ALL_PERIPH(CANx));
|
| | | assert_param(IS_CAN_TRANSMITMAILBOX(Mailbox));
|
| | | /* abort transmission */
|
| | | switch (Mailbox)
|
| | | {
|
| | | case (CAN_TXMAILBOX_0): CANx->TSR |= CAN_TSR_ABRQ0;
|
| | | break;
|
| | | case (CAN_TXMAILBOX_1): CANx->TSR |= CAN_TSR_ABRQ1;
|
| | | break;
|
| | | case (CAN_TXMAILBOX_2): CANx->TSR |= CAN_TSR_ABRQ2;
|
| | | break;
|
| | | default:
|
| | | break;
|
| | | }
|
| | | }
|
| | |
|
| | |
|
| | | /**
|
| | | * @brief Receives a message.
|
| | | * @param CANx: where x can be 1 or 2 to to select the CAN peripheral.
|
| | | * @param FIFONumber: Receive FIFO number, CAN_FIFO0 or CAN_FIFO1.
|
| | | * @param RxMessage: pointer to a structure receive message which contains |
| | | * CAN Id, CAN DLC, CAN datas and FMI number.
|
| | | * @retval None.
|
| | | */
|
| | | void CAN_Receive(CAN_TypeDef* CANx, uint8_t FIFONumber, CanRxMsg* RxMessage)
|
| | | {
|
| | | /* Check the parameters */
|
| | | assert_param(IS_CAN_ALL_PERIPH(CANx));
|
| | | assert_param(IS_CAN_FIFO(FIFONumber));
|
| | | /* Get the Id */
|
| | | RxMessage->IDE = (uint8_t)0x04 & CANx->sFIFOMailBox[FIFONumber].RIR;
|
| | | if (RxMessage->IDE == CAN_Id_Standard)
|
| | | {
|
| | | RxMessage->StdId = (uint32_t)0x000007FF & (CANx->sFIFOMailBox[FIFONumber].RIR >> 21);
|
| | | }
|
| | | else
|
| | | {
|
| | | RxMessage->ExtId = (uint32_t)0x1FFFFFFF & (CANx->sFIFOMailBox[FIFONumber].RIR >> 3);
|
| | | }
|
| | | |
| | | RxMessage->RTR = (uint8_t)0x02 & CANx->sFIFOMailBox[FIFONumber].RIR;
|
| | | /* Get the DLC */
|
| | | RxMessage->DLC = (uint8_t)0x0F & CANx->sFIFOMailBox[FIFONumber].RDTR;
|
| | | /* Get the FMI */
|
| | | RxMessage->FMI = (uint8_t)0xFF & (CANx->sFIFOMailBox[FIFONumber].RDTR >> 8);
|
| | | /* Get the data field */
|
| | | RxMessage->Data[0] = (uint8_t)0xFF & CANx->sFIFOMailBox[FIFONumber].RDLR;
|
| | | RxMessage->Data[1] = (uint8_t)0xFF & (CANx->sFIFOMailBox[FIFONumber].RDLR >> 8);
|
| | | RxMessage->Data[2] = (uint8_t)0xFF & (CANx->sFIFOMailBox[FIFONumber].RDLR >> 16);
|
| | | RxMessage->Data[3] = (uint8_t)0xFF & (CANx->sFIFOMailBox[FIFONumber].RDLR >> 24);
|
| | | RxMessage->Data[4] = (uint8_t)0xFF & CANx->sFIFOMailBox[FIFONumber].RDHR;
|
| | | RxMessage->Data[5] = (uint8_t)0xFF & (CANx->sFIFOMailBox[FIFONumber].RDHR >> 8);
|
| | | RxMessage->Data[6] = (uint8_t)0xFF & (CANx->sFIFOMailBox[FIFONumber].RDHR >> 16);
|
| | | RxMessage->Data[7] = (uint8_t)0xFF & (CANx->sFIFOMailBox[FIFONumber].RDHR >> 24);
|
| | | /* Release the FIFO */
|
| | | /* Release FIFO0 */
|
| | | if (FIFONumber == CAN_FIFO0)
|
| | | {
|
| | | CANx->RF0R |= CAN_RF0R_RFOM0;
|
| | | }
|
| | | /* Release FIFO1 */
|
| | | else /* FIFONumber == CAN_FIFO1 */
|
| | | {
|
| | | CANx->RF1R |= CAN_RF1R_RFOM1;
|
| | | }
|
| | | }
|
| | |
|
| | | /**
|
| | | * @brief Releases the specified FIFO.
|
| | | * @param CANx: where x can be 1 or 2 to to select the CAN peripheral. |
| | | * @param FIFONumber: FIFO to release, CAN_FIFO0 or CAN_FIFO1.
|
| | | * @retval None.
|
| | | */
|
| | | void CAN_FIFORelease(CAN_TypeDef* CANx, uint8_t FIFONumber)
|
| | | {
|
| | | /* Check the parameters */
|
| | | assert_param(IS_CAN_ALL_PERIPH(CANx));
|
| | | assert_param(IS_CAN_FIFO(FIFONumber));
|
| | | /* Release FIFO0 */
|
| | | if (FIFONumber == CAN_FIFO0)
|
| | | {
|
| | | CANx->RF0R |= CAN_RF0R_RFOM0;
|
| | | }
|
| | | /* Release FIFO1 */
|
| | | else /* FIFONumber == CAN_FIFO1 */
|
| | | {
|
| | | CANx->RF1R |= CAN_RF1R_RFOM1;
|
| | | }
|
| | | }
|
| | |
|
| | | /**
|
| | | * @brief Returns the number of pending messages.
|
| | | * @param CANx: where x can be 1 or 2 to to select the CAN peripheral.
|
| | | * @param FIFONumber: Receive FIFO number, CAN_FIFO0 or CAN_FIFO1.
|
| | | * @retval NbMessage : which is the number of pending message.
|
| | | */
|
| | | uint8_t CAN_MessagePending(CAN_TypeDef* CANx, uint8_t FIFONumber)
|
| | | {
|
| | | uint8_t message_pending=0;
|
| | | /* Check the parameters */
|
| | | assert_param(IS_CAN_ALL_PERIPH(CANx));
|
| | | assert_param(IS_CAN_FIFO(FIFONumber));
|
| | | if (FIFONumber == CAN_FIFO0)
|
| | | {
|
| | | message_pending = (uint8_t)(CANx->RF0R&(uint32_t)0x03);
|
| | | }
|
| | | else if (FIFONumber == CAN_FIFO1)
|
| | | {
|
| | | message_pending = (uint8_t)(CANx->RF1R&(uint32_t)0x03);
|
| | | }
|
| | | else
|
| | | {
|
| | | message_pending = 0;
|
| | | }
|
| | | return message_pending;
|
| | | }
|
| | |
|
| | |
|
| | | /**
|
| | | * @brief Select the CAN Operation mode.
|
| | | * @param CAN_OperatingMode : CAN Operating Mode. This parameter can be one |
| | | * of @ref CAN_OperatingMode_TypeDef enumeration.
|
| | | * @retval status of the requested mode which can be |
| | | * - CAN_ModeStatus_Failed CAN failed entering the specific mode |
| | | * - CAN_ModeStatus_Success CAN Succeed entering the specific mode |
| | |
|
| | | */
|
| | | uint8_t CAN_OperatingModeRequest(CAN_TypeDef* CANx, uint8_t CAN_OperatingMode)
|
| | | {
|
| | | uint8_t status = CAN_ModeStatus_Failed;
|
| | | |
| | | /* Timeout for INAK or also for SLAK bits*/
|
| | | uint32_t timeout = INAK_TIMEOUT; |
| | |
|
| | | /* Check the parameters */
|
| | | assert_param(IS_CAN_ALL_PERIPH(CANx));
|
| | | assert_param(IS_CAN_OPERATING_MODE(CAN_OperatingMode));
|
| | |
|
| | | if (CAN_OperatingMode == CAN_OperatingMode_Initialization)
|
| | | {
|
| | | /* Request initialisation */
|
| | | CANx->MCR = (uint32_t)((CANx->MCR & (uint32_t)(~(uint32_t)CAN_MCR_SLEEP)) | CAN_MCR_INRQ);
|
| | |
|
| | | /* Wait the acknowledge */
|
| | | while (((CANx->MSR & CAN_MODE_MASK) != CAN_MSR_INAK) && (timeout != 0))
|
| | | {
|
| | | timeout--;
|
| | | }
|
| | | if ((CANx->MSR & CAN_MODE_MASK) != CAN_MSR_INAK)
|
| | | {
|
| | | status = CAN_ModeStatus_Failed;
|
| | | }
|
| | | else
|
| | | {
|
| | | status = CAN_ModeStatus_Success;
|
| | | }
|
| | | }
|
| | | else if (CAN_OperatingMode == CAN_OperatingMode_Normal)
|
| | | {
|
| | | /* Request leave initialisation and sleep mode and enter Normal mode */
|
| | | CANx->MCR &= (uint32_t)(~(CAN_MCR_SLEEP|CAN_MCR_INRQ));
|
| | |
|
| | | /* Wait the acknowledge */
|
| | | while (((CANx->MSR & CAN_MODE_MASK) != 0) && (timeout!=0))
|
| | | {
|
| | | timeout--;
|
| | | }
|
| | | if ((CANx->MSR & CAN_MODE_MASK) != 0)
|
| | | {
|
| | | status = CAN_ModeStatus_Failed;
|
| | | }
|
| | | else
|
| | | {
|
| | | status = CAN_ModeStatus_Success;
|
| | | }
|
| | | }
|
| | | else if (CAN_OperatingMode == CAN_OperatingMode_Sleep)
|
| | | {
|
| | | /* Request Sleep mode */
|
| | | CANx->MCR = (uint32_t)((CANx->MCR & (uint32_t)(~(uint32_t)CAN_MCR_INRQ)) | CAN_MCR_SLEEP);
|
| | |
|
| | | /* Wait the acknowledge */
|
| | | while (((CANx->MSR & CAN_MODE_MASK) != CAN_MSR_SLAK) && (timeout!=0))
|
| | | {
|
| | | timeout--;
|
| | | }
|
| | | if ((CANx->MSR & CAN_MODE_MASK) != CAN_MSR_SLAK)
|
| | | {
|
| | | status = CAN_ModeStatus_Failed;
|
| | | }
|
| | | else
|
| | | {
|
| | | status = CAN_ModeStatus_Success;
|
| | | }
|
| | | }
|
| | | else
|
| | | {
|
| | | status = CAN_ModeStatus_Failed;
|
| | | }
|
| | |
|
| | | return (uint8_t) status;
|
| | | }
|
| | |
|
| | | /**
|
| | | * @brief Enters the low power mode.
|
| | | * @param CANx: where x can be 1 or 2 to to select the CAN peripheral.
|
| | | * @retval status: CAN_Sleep_Ok if sleep entered, CAN_Sleep_Failed in an |
| | | * other case.
|
| | | */
|
| | | uint8_t CAN_Sleep(CAN_TypeDef* CANx)
|
| | | {
|
| | | uint8_t sleepstatus = CAN_Sleep_Failed;
|
| | | |
| | | /* Check the parameters */
|
| | | assert_param(IS_CAN_ALL_PERIPH(CANx));
|
| | | |
| | | /* Request Sleep mode */
|
| | | CANx->MCR = (((CANx->MCR) & (uint32_t)(~(uint32_t)CAN_MCR_INRQ)) | CAN_MCR_SLEEP);
|
| | | |
| | | /* Sleep mode status */
|
| | | if ((CANx->MSR & (CAN_MSR_SLAK|CAN_MSR_INAK)) == CAN_MSR_SLAK)
|
| | | {
|
| | | /* Sleep mode not entered */
|
| | | sleepstatus = CAN_Sleep_Ok;
|
| | | }
|
| | | /* return sleep mode status */
|
| | | return (uint8_t)sleepstatus;
|
| | | }
|
| | |
|
| | | /**
|
| | | * @brief Wakes the CAN up.
|
| | | * @param CANx: where x can be 1 or 2 to to select the CAN peripheral.
|
| | | * @retval status: CAN_WakeUp_Ok if sleep mode left, CAN_WakeUp_Failed in an |
| | | * other case.
|
| | | */
|
| | | uint8_t CAN_WakeUp(CAN_TypeDef* CANx)
|
| | | {
|
| | | uint32_t wait_slak = SLAK_TIMEOUT;
|
| | | uint8_t wakeupstatus = CAN_WakeUp_Failed;
|
| | | |
| | | /* Check the parameters */
|
| | | assert_param(IS_CAN_ALL_PERIPH(CANx));
|
| | | |
| | | /* Wake up request */
|
| | | CANx->MCR &= ~(uint32_t)CAN_MCR_SLEEP;
|
| | | |
| | | /* Sleep mode status */
|
| | | while(((CANx->MSR & CAN_MSR_SLAK) == CAN_MSR_SLAK)&&(wait_slak!=0x00))
|
| | | {
|
| | | wait_slak--;
|
| | | }
|
| | | if((CANx->MSR & CAN_MSR_SLAK) != CAN_MSR_SLAK)
|
| | | {
|
| | | /* wake up done : Sleep mode exited */
|
| | | wakeupstatus = CAN_WakeUp_Ok;
|
| | | }
|
| | | /* return wakeup status */
|
| | | return (uint8_t)wakeupstatus;
|
| | | }
|
| | |
|
| | |
|
| | | /**
|
| | | * @brief Returns the CANx's last error code (LEC).
|
| | | * @param CANx: where x can be 1 or 2 to to select the CAN peripheral. |
| | | * @retval CAN_ErrorCode: specifies the Error code : |
| | | * - CAN_ERRORCODE_NoErr No Error |
| | | * - CAN_ERRORCODE_StuffErr Stuff Error
|
| | | * - CAN_ERRORCODE_FormErr Form Error
|
| | | * - CAN_ERRORCODE_ACKErr Acknowledgment Error
|
| | | * - CAN_ERRORCODE_BitRecessiveErr Bit Recessive Error
|
| | | * - CAN_ERRORCODE_BitDominantErr Bit Dominant Error
|
| | | * - CAN_ERRORCODE_CRCErr CRC Error
|
| | | * - CAN_ERRORCODE_SoftwareSetErr Software Set Error |
| | | */
|
| | | |
| | | uint8_t CAN_GetLastErrorCode(CAN_TypeDef* CANx)
|
| | | {
|
| | | uint8_t errorcode=0;
|
| | | |
| | | /* Check the parameters */
|
| | | assert_param(IS_CAN_ALL_PERIPH(CANx));
|
| | | |
| | | /* Get the error code*/
|
| | | errorcode = (((uint8_t)CANx->ESR) & (uint8_t)CAN_ESR_LEC);
|
| | | |
| | | /* Return the error code*/
|
| | | return errorcode;
|
| | | }
|
| | | /**
|
| | | * @brief Returns the CANx Receive Error Counter (REC).
|
| | | * @note In case of an error during reception, this counter is incremented |
| | | * by 1 or by 8 depending on the error condition as defined by the CAN |
| | | * standard. After every successful reception, the counter is |
| | | * decremented by 1 or reset to 120 if its value was higher than 128. |
| | | * When the counter value exceeds 127, the CAN controller enters the |
| | | * error passive state. |
| | | * @param CANx: where x can be 1 or 2 to to select the CAN peripheral. |
| | | * @retval CAN Receive Error Counter. |
| | | */
|
| | | uint8_t CAN_GetReceiveErrorCounter(CAN_TypeDef* CANx)
|
| | | {
|
| | | uint8_t counter=0;
|
| | | |
| | | /* Check the parameters */
|
| | | assert_param(IS_CAN_ALL_PERIPH(CANx));
|
| | | |
| | | /* Get the Receive Error Counter*/
|
| | | counter = (uint8_t)((CANx->ESR & CAN_ESR_REC)>> 24);
|
| | | |
| | | /* Return the Receive Error Counter*/
|
| | | return counter;
|
| | | }
|
| | |
|
| | |
|
| | | /**
|
| | | * @brief Returns the LSB of the 9-bit CANx Transmit Error Counter(TEC).
|
| | | * @param CANx: where x can be 1 or 2 to to select the CAN peripheral. |
| | | * @retval LSB of the 9-bit CAN Transmit Error Counter. |
| | | */
|
| | | uint8_t CAN_GetLSBTransmitErrorCounter(CAN_TypeDef* CANx)
|
| | | {
|
| | | uint8_t counter=0;
|
| | | |
| | | /* Check the parameters */
|
| | | assert_param(IS_CAN_ALL_PERIPH(CANx));
|
| | | |
| | | /* Get the LSB of the 9-bit CANx Transmit Error Counter(TEC) */
|
| | | counter = (uint8_t)((CANx->ESR & CAN_ESR_TEC)>> 16);
|
| | | |
| | | /* Return the LSB of the 9-bit CANx Transmit Error Counter(TEC) */
|
| | | return counter;
|
| | | }
|
| | |
|
| | |
|
| | | /**
|
| | | * @brief Enables or disables the specified CANx interrupts.
|
| | | * @param CANx: where x can be 1 or 2 to to select the CAN peripheral.
|
| | | * @param CAN_IT: specifies the CAN interrupt sources to be enabled or disabled.
|
| | | * This parameter can be: |
| | | * - CAN_IT_TME, |
| | | * - CAN_IT_FMP0, |
| | | * - CAN_IT_FF0,
|
| | | * - CAN_IT_FOV0, |
| | | * - CAN_IT_FMP1, |
| | | * - CAN_IT_FF1,
|
| | | * - CAN_IT_FOV1, |
| | | * - CAN_IT_EWG, |
| | | * - CAN_IT_EPV,
|
| | | * - CAN_IT_LEC, |
| | | * - CAN_IT_ERR, |
| | | * - CAN_IT_WKU or |
| | | * - CAN_IT_SLK.
|
| | | * @param NewState: new state of the CAN interrupts.
|
| | | * This parameter can be: ENABLE or DISABLE.
|
| | | * @retval None.
|
| | | */
|
| | | void CAN_ITConfig(CAN_TypeDef* CANx, uint32_t CAN_IT, FunctionalState NewState)
|
| | | {
|
| | | /* Check the parameters */
|
| | | assert_param(IS_CAN_ALL_PERIPH(CANx));
|
| | | assert_param(IS_CAN_IT(CAN_IT));
|
| | | assert_param(IS_FUNCTIONAL_STATE(NewState));
|
| | |
|
| | | if (NewState != DISABLE)
|
| | | {
|
| | | /* Enable the selected CANx interrupt */
|
| | | CANx->IER |= CAN_IT;
|
| | | }
|
| | | else
|
| | | {
|
| | | /* Disable the selected CANx interrupt */
|
| | | CANx->IER &= ~CAN_IT;
|
| | | }
|
| | | }
|
| | | /**
|
| | | * @brief Checks whether the specified CAN flag is set or not.
|
| | | * @param CANx: where x can be 1 or 2 to to select the CAN peripheral.
|
| | | * @param CAN_FLAG: specifies the flag to check.
|
| | | * This parameter can be one of the following flags: |
| | | * - CAN_FLAG_EWG
|
| | | * - CAN_FLAG_EPV |
| | | * - CAN_FLAG_BOF
|
| | | * - CAN_FLAG_RQCP0
|
| | | * - CAN_FLAG_RQCP1
|
| | | * - CAN_FLAG_RQCP2
|
| | | * - CAN_FLAG_FMP1 |
| | | * - CAN_FLAG_FF1 |
| | | * - CAN_FLAG_FOV1 |
| | | * - CAN_FLAG_FMP0 |
| | | * - CAN_FLAG_FF0 |
| | | * - CAN_FLAG_FOV0 |
| | | * - CAN_FLAG_WKU |
| | | * - CAN_FLAG_SLAK |
| | | * - CAN_FLAG_LEC |
| | | * @retval The new state of CAN_FLAG (SET or RESET).
|
| | | */
|
| | | FlagStatus CAN_GetFlagStatus(CAN_TypeDef* CANx, uint32_t CAN_FLAG)
|
| | | {
|
| | | FlagStatus bitstatus = RESET;
|
| | | |
| | | /* Check the parameters */
|
| | | assert_param(IS_CAN_ALL_PERIPH(CANx));
|
| | | assert_param(IS_CAN_GET_FLAG(CAN_FLAG));
|
| | | |
| | |
|
| | | if((CAN_FLAG & CAN_FLAGS_ESR) != (uint32_t)RESET)
|
| | | { |
| | | /* Check the status of the specified CAN flag */
|
| | | if ((CANx->ESR & (CAN_FLAG & 0x000FFFFF)) != (uint32_t)RESET)
|
| | | { |
| | | /* CAN_FLAG is set */
|
| | | bitstatus = SET;
|
| | | }
|
| | | else
|
| | | { |
| | | /* CAN_FLAG is reset */
|
| | | bitstatus = RESET;
|
| | | }
|
| | | }
|
| | | else if((CAN_FLAG & CAN_FLAGS_MSR) != (uint32_t)RESET)
|
| | | { |
| | | /* Check the status of the specified CAN flag */
|
| | | if ((CANx->MSR & (CAN_FLAG & 0x000FFFFF)) != (uint32_t)RESET)
|
| | | { |
| | | /* CAN_FLAG is set */
|
| | | bitstatus = SET;
|
| | | }
|
| | | else
|
| | | { |
| | | /* CAN_FLAG is reset */
|
| | | bitstatus = RESET;
|
| | | }
|
| | | }
|
| | | else if((CAN_FLAG & CAN_FLAGS_TSR) != (uint32_t)RESET)
|
| | | { |
| | | /* Check the status of the specified CAN flag */
|
| | | if ((CANx->TSR & (CAN_FLAG & 0x000FFFFF)) != (uint32_t)RESET)
|
| | | { |
| | | /* CAN_FLAG is set */
|
| | | bitstatus = SET;
|
| | | }
|
| | | else
|
| | | { |
| | | /* CAN_FLAG is reset */
|
| | | bitstatus = RESET;
|
| | | }
|
| | | }
|
| | | else if((CAN_FLAG & CAN_FLAGS_RF0R) != (uint32_t)RESET)
|
| | | { |
| | | /* Check the status of the specified CAN flag */
|
| | | if ((CANx->RF0R & (CAN_FLAG & 0x000FFFFF)) != (uint32_t)RESET)
|
| | | { |
| | | /* CAN_FLAG is set */
|
| | | bitstatus = SET;
|
| | | }
|
| | | else
|
| | | { |
| | | /* CAN_FLAG is reset */
|
| | | bitstatus = RESET;
|
| | | }
|
| | | }
|
| | | else /* If(CAN_FLAG & CAN_FLAGS_RF1R != (uint32_t)RESET) */
|
| | | { |
| | | /* Check the status of the specified CAN flag */
|
| | | if ((uint32_t)(CANx->RF1R & (CAN_FLAG & 0x000FFFFF)) != (uint32_t)RESET)
|
| | | { |
| | | /* CAN_FLAG is set */
|
| | | bitstatus = SET;
|
| | | }
|
| | | else
|
| | | { |
| | | /* CAN_FLAG is reset */
|
| | | bitstatus = RESET;
|
| | | }
|
| | | }
|
| | | /* Return the CAN_FLAG status */
|
| | | return bitstatus;
|
| | | }
|
| | |
|
| | | /**
|
| | | * @brief Clears the CAN's pending flags.
|
| | | * @param CANx: where x can be 1 or 2 to to select the CAN peripheral.
|
| | | * @param CAN_FLAG: specifies the flag to clear.
|
| | | * This parameter can be one of the following flags: |
| | | * - CAN_FLAG_RQCP0
|
| | | * - CAN_FLAG_RQCP1
|
| | | * - CAN_FLAG_RQCP2
|
| | | * - CAN_FLAG_FF1 |
| | | * - CAN_FLAG_FOV1 |
| | | * - CAN_FLAG_FF0 |
| | | * - CAN_FLAG_FOV0 |
| | | * - CAN_FLAG_WKU |
| | | * - CAN_FLAG_SLAK |
| | | * - CAN_FLAG_LEC |
| | | * @retval None.
|
| | | */
|
| | | void CAN_ClearFlag(CAN_TypeDef* CANx, uint32_t CAN_FLAG)
|
| | | {
|
| | | uint32_t flagtmp=0;
|
| | | /* Check the parameters */
|
| | | assert_param(IS_CAN_ALL_PERIPH(CANx));
|
| | | assert_param(IS_CAN_CLEAR_FLAG(CAN_FLAG));
|
| | | |
| | | if (CAN_FLAG == CAN_FLAG_LEC) /* ESR register */
|
| | | {
|
| | | /* Clear the selected CAN flags */
|
| | | CANx->ESR = (uint32_t)RESET;
|
| | | }
|
| | | else /* MSR or TSR or RF0R or RF1R */
|
| | | {
|
| | | flagtmp = CAN_FLAG & 0x000FFFFF;
|
| | |
|
| | | if ((CAN_FLAG & CAN_FLAGS_RF0R)!=(uint32_t)RESET)
|
| | | {
|
| | | /* Receive Flags */
|
| | | CANx->RF0R = (uint32_t)(flagtmp);
|
| | | }
|
| | | else if ((CAN_FLAG & CAN_FLAGS_RF1R)!=(uint32_t)RESET)
|
| | | {
|
| | | /* Receive Flags */
|
| | | CANx->RF1R = (uint32_t)(flagtmp);
|
| | | }
|
| | | else if ((CAN_FLAG & CAN_FLAGS_TSR)!=(uint32_t)RESET)
|
| | | {
|
| | | /* Transmit Flags */
|
| | | CANx->TSR = (uint32_t)(flagtmp);
|
| | | }
|
| | | else /* If((CAN_FLAG & CAN_FLAGS_MSR)!=(uint32_t)RESET) */
|
| | | {
|
| | | /* Operating mode Flags */
|
| | | CANx->MSR = (uint32_t)(flagtmp);
|
| | | }
|
| | | }
|
| | | }
|
| | |
|
| | | /**
|
| | | * @brief Checks whether the specified CANx interrupt has occurred or not.
|
| | | * @param CANx: where x can be 1 or 2 to to select the CAN peripheral.
|
| | | * @param CAN_IT: specifies the CAN interrupt source to check.
|
| | | * This parameter can be one of the following flags: |
| | | * - CAN_IT_TME |
| | | * - CAN_IT_FMP0 |
| | | * - CAN_IT_FF0 |
| | | * - CAN_IT_FOV0 |
| | | * - CAN_IT_FMP1 |
| | | * - CAN_IT_FF1 |
| | | * - CAN_IT_FOV1 |
| | | * - CAN_IT_WKU |
| | | * - CAN_IT_SLK |
| | | * - CAN_IT_EWG |
| | | * - CAN_IT_EPV |
| | | * - CAN_IT_BOF |
| | | * - CAN_IT_LEC |
| | | * - CAN_IT_ERR |
| | | * @retval The current state of CAN_IT (SET or RESET).
|
| | | */
|
| | | ITStatus CAN_GetITStatus(CAN_TypeDef* CANx, uint32_t CAN_IT)
|
| | | {
|
| | | ITStatus itstatus = RESET;
|
| | | /* Check the parameters */
|
| | | assert_param(IS_CAN_ALL_PERIPH(CANx));
|
| | | assert_param(IS_CAN_IT(CAN_IT));
|
| | | |
| | | /* check the enable interrupt bit */
|
| | | if((CANx->IER & CAN_IT) != RESET)
|
| | | {
|
| | | /* in case the Interrupt is enabled, .... */
|
| | | switch (CAN_IT)
|
| | | {
|
| | | case CAN_IT_TME:
|
| | | /* Check CAN_TSR_RQCPx bits */
|
| | | itstatus = CheckITStatus(CANx->TSR, CAN_TSR_RQCP0|CAN_TSR_RQCP1|CAN_TSR_RQCP2); |
| | | break;
|
| | | case CAN_IT_FMP0:
|
| | | /* Check CAN_RF0R_FMP0 bit */
|
| | | itstatus = CheckITStatus(CANx->RF0R, CAN_RF0R_FMP0); |
| | | break;
|
| | | case CAN_IT_FF0:
|
| | | /* Check CAN_RF0R_FULL0 bit */
|
| | | itstatus = CheckITStatus(CANx->RF0R, CAN_RF0R_FULL0); |
| | | break;
|
| | | case CAN_IT_FOV0:
|
| | | /* Check CAN_RF0R_FOVR0 bit */
|
| | | itstatus = CheckITStatus(CANx->RF0R, CAN_RF0R_FOVR0); |
| | | break;
|
| | | case CAN_IT_FMP1:
|
| | | /* Check CAN_RF1R_FMP1 bit */
|
| | | itstatus = CheckITStatus(CANx->RF1R, CAN_RF1R_FMP1); |
| | | break;
|
| | | case CAN_IT_FF1:
|
| | | /* Check CAN_RF1R_FULL1 bit */
|
| | | itstatus = CheckITStatus(CANx->RF1R, CAN_RF1R_FULL1); |
| | | break;
|
| | | case CAN_IT_FOV1:
|
| | | /* Check CAN_RF1R_FOVR1 bit */
|
| | | itstatus = CheckITStatus(CANx->RF1R, CAN_RF1R_FOVR1); |
| | | break;
|
| | | case CAN_IT_WKU:
|
| | | /* Check CAN_MSR_WKUI bit */
|
| | | itstatus = CheckITStatus(CANx->MSR, CAN_MSR_WKUI); |
| | | break;
|
| | | case CAN_IT_SLK:
|
| | | /* Check CAN_MSR_SLAKI bit */
|
| | | itstatus = CheckITStatus(CANx->MSR, CAN_MSR_SLAKI); |
| | | break;
|
| | | case CAN_IT_EWG:
|
| | | /* Check CAN_ESR_EWGF bit */
|
| | | itstatus = CheckITStatus(CANx->ESR, CAN_ESR_EWGF); |
| | | break;
|
| | | case CAN_IT_EPV:
|
| | | /* Check CAN_ESR_EPVF bit */
|
| | | itstatus = CheckITStatus(CANx->ESR, CAN_ESR_EPVF); |
| | | break;
|
| | | case CAN_IT_BOF:
|
| | | /* Check CAN_ESR_BOFF bit */
|
| | | itstatus = CheckITStatus(CANx->ESR, CAN_ESR_BOFF); |
| | | break;
|
| | | case CAN_IT_LEC:
|
| | | /* Check CAN_ESR_LEC bit */
|
| | | itstatus = CheckITStatus(CANx->ESR, CAN_ESR_LEC); |
| | | break;
|
| | | case CAN_IT_ERR:
|
| | | /* Check CAN_MSR_ERRI bit */ |
| | | itstatus = CheckITStatus(CANx->MSR, CAN_MSR_ERRI); |
| | | break;
|
| | | default :
|
| | | /* in case of error, return RESET */
|
| | | itstatus = RESET;
|
| | | break;
|
| | | }
|
| | | }
|
| | | else
|
| | | {
|
| | | /* in case the Interrupt is not enabled, return RESET */
|
| | | itstatus = RESET;
|
| | | }
|
| | | |
| | | /* Return the CAN_IT status */
|
| | | return itstatus;
|
| | | }
|
| | |
|
| | | /**
|
| | | * @brief Clears the CANx's interrupt pending bits.
|
| | | * @param CANx: where x can be 1 or 2 to to select the CAN peripheral.
|
| | | * @param CAN_IT: specifies the interrupt pending bit to clear.
|
| | | * - CAN_IT_TME |
| | | * - CAN_IT_FF0 |
| | | * - CAN_IT_FOV0 |
| | | * - CAN_IT_FF1 |
| | | * - CAN_IT_FOV1 |
| | | * - CAN_IT_WKU |
| | | * - CAN_IT_SLK |
| | | * - CAN_IT_EWG |
| | | * - CAN_IT_EPV |
| | | * - CAN_IT_BOF |
| | | * - CAN_IT_LEC |
| | | * - CAN_IT_ERR |
| | | * @retval None.
|
| | | */
|
| | | void CAN_ClearITPendingBit(CAN_TypeDef* CANx, uint32_t CAN_IT)
|
| | | {
|
| | | /* Check the parameters */
|
| | | assert_param(IS_CAN_ALL_PERIPH(CANx));
|
| | | assert_param(IS_CAN_CLEAR_IT(CAN_IT));
|
| | |
|
| | | switch (CAN_IT)
|
| | | {
|
| | | case CAN_IT_TME:
|
| | | /* Clear CAN_TSR_RQCPx (rc_w1)*/
|
| | | CANx->TSR = CAN_TSR_RQCP0|CAN_TSR_RQCP1|CAN_TSR_RQCP2; |
| | | break;
|
| | | case CAN_IT_FF0:
|
| | | /* Clear CAN_RF0R_FULL0 (rc_w1)*/
|
| | | CANx->RF0R = CAN_RF0R_FULL0; |
| | | break;
|
| | | case CAN_IT_FOV0:
|
| | | /* Clear CAN_RF0R_FOVR0 (rc_w1)*/
|
| | | CANx->RF0R = CAN_RF0R_FOVR0; |
| | | break;
|
| | | case CAN_IT_FF1:
|
| | | /* Clear CAN_RF1R_FULL1 (rc_w1)*/
|
| | | CANx->RF1R = CAN_RF1R_FULL1; |
| | | break;
|
| | | case CAN_IT_FOV1:
|
| | | /* Clear CAN_RF1R_FOVR1 (rc_w1)*/
|
| | | CANx->RF1R = CAN_RF1R_FOVR1; |
| | | break;
|
| | | case CAN_IT_WKU:
|
| | | /* Clear CAN_MSR_WKUI (rc_w1)*/
|
| | | CANx->MSR = CAN_MSR_WKUI; |
| | | break;
|
| | | case CAN_IT_SLK:
|
| | | /* Clear CAN_MSR_SLAKI (rc_w1)*/ |
| | | CANx->MSR = CAN_MSR_SLAKI; |
| | | break;
|
| | | case CAN_IT_EWG:
|
| | | /* Clear CAN_MSR_ERRI (rc_w1) */
|
| | | CANx->MSR = CAN_MSR_ERRI;
|
| | | /* Note : the corresponding Flag is cleared by hardware depending |
| | | of the CAN Bus status*/ |
| | | break;
|
| | | case CAN_IT_EPV:
|
| | | /* Clear CAN_MSR_ERRI (rc_w1) */
|
| | | CANx->MSR = CAN_MSR_ERRI; |
| | | /* Note : the corresponding Flag is cleared by hardware depending |
| | | of the CAN Bus status*/
|
| | | break;
|
| | | case CAN_IT_BOF:
|
| | | /* Clear CAN_MSR_ERRI (rc_w1) */ |
| | | CANx->MSR = CAN_MSR_ERRI; |
| | | /* Note : the corresponding Flag is cleared by hardware depending |
| | | of the CAN Bus status*/
|
| | | break;
|
| | | case CAN_IT_LEC:
|
| | | /* Clear LEC bits */
|
| | | CANx->ESR = RESET; |
| | | /* Clear CAN_MSR_ERRI (rc_w1) */
|
| | | CANx->MSR = CAN_MSR_ERRI; |
| | | break;
|
| | | case CAN_IT_ERR:
|
| | | /*Clear LEC bits */
|
| | | CANx->ESR = RESET; |
| | | /* Clear CAN_MSR_ERRI (rc_w1) */
|
| | | CANx->MSR = CAN_MSR_ERRI; |
| | | /* Note : BOFF, EPVF and EWGF Flags are cleared by hardware depending |
| | | of the CAN Bus status*/
|
| | | break;
|
| | | default :
|
| | | break;
|
| | | }
|
| | | }
|
| | |
|
| | | /**
|
| | | * @brief Checks whether the CAN interrupt has occurred or not.
|
| | | * @param CAN_Reg: specifies the CAN interrupt register to check.
|
| | | * @param It_Bit: specifies the interrupt source bit to check.
|
| | | * @retval The new state of the CAN Interrupt (SET or RESET).
|
| | | */
|
| | | static ITStatus CheckITStatus(uint32_t CAN_Reg, uint32_t It_Bit)
|
| | | {
|
| | | ITStatus pendingbitstatus = RESET;
|
| | | |
| | | if ((CAN_Reg & It_Bit) != (uint32_t)RESET)
|
| | | {
|
| | | /* CAN_IT is set */
|
| | | pendingbitstatus = SET;
|
| | | }
|
| | | else
|
| | | {
|
| | | /* CAN_IT is reset */
|
| | | pendingbitstatus = RESET;
|
| | | }
|
| | | return pendingbitstatus;
|
| | | }
|
| | |
|
| | |
|
| | | /**
|
| | | * @}
|
| | | */
|
| | |
|
| | | /**
|
| | | * @}
|
| | | */
|
| | |
|
| | | /**
|
| | | * @}
|
| | | */
|
| | |
|
| | | /******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/
|
src/IAR_project/stm32_ov7670/fwlib/src/stm32f10x_cec.c
src/IAR_project/stm32_ov7670/fwlib/src/stm32f10x_crc.c
src/IAR_project/stm32_ov7670/fwlib/src/stm32f10x_dac.c
src/IAR_project/stm32_ov7670/fwlib/src/stm32f10x_dbgmcu.c
src/IAR_project/stm32_ov7670/fwlib/src/stm32f10x_dma.c
src/IAR_project/stm32_ov7670/fwlib/src/stm32f10x_exti.c
src/IAR_project/stm32_ov7670/fwlib/src/stm32f10x_flash.c
src/IAR_project/stm32_ov7670/fwlib/src/stm32f10x_fsmc.c
src/IAR_project/stm32_ov7670/fwlib/src/stm32f10x_gpio.c
src/IAR_project/stm32_ov7670/fwlib/src/stm32f10x_i2c.c
src/IAR_project/stm32_ov7670/fwlib/src/stm32f10x_it.c
src/IAR_project/stm32_ov7670/fwlib/src/stm32f10x_iwdg.c
src/IAR_project/stm32_ov7670/fwlib/src/stm32f10x_pwr.c
src/IAR_project/stm32_ov7670/fwlib/src/stm32f10x_rcc.c
src/IAR_project/stm32_ov7670/fwlib/src/stm32f10x_rtc.c
src/IAR_project/stm32_ov7670/fwlib/src/stm32f10x_sdio.c
src/IAR_project/stm32_ov7670/fwlib/src/stm32f10x_spi.c
src/IAR_project/stm32_ov7670/fwlib/src/stm32f10x_tim.c
src/IAR_project/stm32_ov7670/fwlib/src/stm32f10x_usart.c
src/IAR_project/stm32_ov7670/fwlib/src/stm32f10x_wwdg.c
src/IAR_project/stm32_ov7670/fwlib/src/system_stm32f10x.c
src/IAR_project/stm32_ov7670/iar_clean.bat
src/IAR_project/stm32_ov7670/main/main.c
src/IAR_project/stm32_ov7670/stm32_ov7670.ewd
src/IAR_project/stm32_ov7670/stm32_ov7670.ewp
src/IAR_project/stm32_ov7670/stm32_ov7670.eww
src/bare_test/stm32_key/JLinkSettings.ini
src/bare_test/stm32_key/board/startup_stm32f10x_hd.s
src/bare_test/stm32_key/board/stm32v5_key.c
src/bare_test/stm32_key/board/stm32v5_key.h
src/bare_test/stm32_key/board/stm32v5_led.c
src/bare_test/stm32_key/board/stm32v5_led.h
src/bare_test/stm32_key/cmsis/core_cm3.c
src/bare_test/stm32_key/cmsis/core_cm3.h
src/bare_test/stm32_key/cmsis/stm32f10x.h
src/bare_test/stm32_key/cmsis/system_stm32f10x.c
src/bare_test/stm32_key/cmsis/system_stm32f10x.h
src/bare_test/stm32_key/fwlib/inc/misc.h
src/bare_test/stm32_key/fwlib/inc/stm32f10x_adc.h
src/bare_test/stm32_key/fwlib/inc/stm32f10x_bkp.h
src/bare_test/stm32_key/fwlib/inc/stm32f10x_can.h
src/bare_test/stm32_key/fwlib/inc/stm32f10x_cec.h
src/bare_test/stm32_key/fwlib/inc/stm32f10x_conf.h
src/bare_test/stm32_key/fwlib/inc/stm32f10x_crc.h
src/bare_test/stm32_key/fwlib/inc/stm32f10x_dac.h
src/bare_test/stm32_key/fwlib/inc/stm32f10x_dbgmcu.h
src/bare_test/stm32_key/fwlib/inc/stm32f10x_dma.h
src/bare_test/stm32_key/fwlib/inc/stm32f10x_exti.h
src/bare_test/stm32_key/fwlib/inc/stm32f10x_flash.h
src/bare_test/stm32_key/fwlib/inc/stm32f10x_fsmc.h
src/bare_test/stm32_key/fwlib/inc/stm32f10x_gpio.h
src/bare_test/stm32_key/fwlib/inc/stm32f10x_i2c.h
src/bare_test/stm32_key/fwlib/inc/stm32f10x_iwdg.h
src/bare_test/stm32_key/fwlib/inc/stm32f10x_pwr.h
src/bare_test/stm32_key/fwlib/inc/stm32f10x_rcc.h
src/bare_test/stm32_key/fwlib/inc/stm32f10x_rtc.h
src/bare_test/stm32_key/fwlib/inc/stm32f10x_sdio.h
src/bare_test/stm32_key/fwlib/inc/stm32f10x_spi.h
src/bare_test/stm32_key/fwlib/inc/stm32f10x_tim.h
src/bare_test/stm32_key/fwlib/inc/stm32f10x_usart.h
src/bare_test/stm32_key/fwlib/inc/stm32f10x_wwdg.h
src/bare_test/stm32_key/fwlib/src/misc.c
src/bare_test/stm32_key/fwlib/src/stm32f10x_adc.c
src/bare_test/stm32_key/fwlib/src/stm32f10x_bkp.c
src/bare_test/stm32_key/fwlib/src/stm32f10x_can.c
src/bare_test/stm32_key/fwlib/src/stm32f10x_cec.c
src/bare_test/stm32_key/fwlib/src/stm32f10x_crc.c
src/bare_test/stm32_key/fwlib/src/stm32f10x_dac.c
src/bare_test/stm32_key/fwlib/src/stm32f10x_dbgmcu.c
src/bare_test/stm32_key/fwlib/src/stm32f10x_dma.c
src/bare_test/stm32_key/fwlib/src/stm32f10x_exti.c
src/bare_test/stm32_key/fwlib/src/stm32f10x_flash.c
src/bare_test/stm32_key/fwlib/src/stm32f10x_fsmc.c
src/bare_test/stm32_key/fwlib/src/stm32f10x_gpio.c
src/bare_test/stm32_key/fwlib/src/stm32f10x_i2c.c
src/bare_test/stm32_key/fwlib/src/stm32f10x_iwdg.c
src/bare_test/stm32_key/fwlib/src/stm32f10x_pwr.c
src/bare_test/stm32_key/fwlib/src/stm32f10x_rcc.c
src/bare_test/stm32_key/fwlib/src/stm32f10x_rtc.c
src/bare_test/stm32_key/fwlib/src/stm32f10x_sdio.c
src/bare_test/stm32_key/fwlib/src/stm32f10x_spi.c
src/bare_test/stm32_key/fwlib/src/stm32f10x_tim.c
src/bare_test/stm32_key/fwlib/src/stm32f10x_usart.c
src/bare_test/stm32_key/fwlib/src/stm32f10x_wwdg.c
src/bare_test/stm32_key/fwlib/src/system_stm32f10x.c
src/bare_test/stm32_key/keil_clean.bat
src/bare_test/stm32_key/main/main.c
src/bare_test/stm32_key/stm32_interrupt.uvgui.USER
src/bare_test/stm32_key/stm32_interrupt.uvopt
src/bare_test/stm32_key/stm32_interrupt.uvproj
src/bare_test/stm32_lcd/JLinkSettings.ini
src/bare_test/stm32_lcd/board/lcd_draw.c
src/bare_test/stm32_lcd/board/lcd_draw.h
src/bare_test/stm32_lcd/board/lcd_font.c
src/bare_test/stm32_lcd/board/lcd_font.h
src/bare_test/stm32_lcd/board/lcd_font10x14.c
src/bare_test/stm32_lcd/board/lcd_font10x14.h
src/bare_test/stm32_lcd/board/lcd_gimp_image.h
src/bare_test/stm32_lcd/board/lcd_r61509v.c
src/bare_test/stm32_lcd/board/lcd_r61509v.h
src/bare_test/stm32_lcd/board/startup_stm32f10x_hd.s
src/bare_test/stm32_lcd/board/stm32f10x_conf.h
src/bare_test/stm32_lcd/board/stm32f10x_it.c
src/bare_test/stm32_lcd/board/stm32f10x_it.h
src/bare_test/stm32_lcd/board/stm32v5_led.c
src/bare_test/stm32_lcd/board/stm32v5_led.h
src/bare_test/stm32_lcd/board/stm32v5_systick.c
src/bare_test/stm32_lcd/board/stm32v5_systick.h
src/bare_test/stm32_lcd/board/stm32v5_uart.c
src/bare_test/stm32_lcd/board/stm32v5_uart.h
src/bare_test/stm32_lcd/cmsis/core_cm3.c
src/bare_test/stm32_lcd/cmsis/core_cm3.h
src/bare_test/stm32_lcd/cmsis/stm32f10x.h
src/bare_test/stm32_lcd/cmsis/system_stm32f10x.c
src/bare_test/stm32_lcd/cmsis/system_stm32f10x.h
src/bare_test/stm32_lcd/fwlib/inc/misc.h
src/bare_test/stm32_lcd/fwlib/inc/stm32f10x_adc.h
src/bare_test/stm32_lcd/fwlib/inc/stm32f10x_bkp.h
src/bare_test/stm32_lcd/fwlib/inc/stm32f10x_can.h
src/bare_test/stm32_lcd/fwlib/inc/stm32f10x_cec.h
src/bare_test/stm32_lcd/fwlib/inc/stm32f10x_conf.h
src/bare_test/stm32_lcd/fwlib/inc/stm32f10x_crc.h
src/bare_test/stm32_lcd/fwlib/inc/stm32f10x_dac.h
src/bare_test/stm32_lcd/fwlib/inc/stm32f10x_dbgmcu.h
src/bare_test/stm32_lcd/fwlib/inc/stm32f10x_dma.h
src/bare_test/stm32_lcd/fwlib/inc/stm32f10x_exti.h
src/bare_test/stm32_lcd/fwlib/inc/stm32f10x_flash.h
src/bare_test/stm32_lcd/fwlib/inc/stm32f10x_fsmc.h
src/bare_test/stm32_lcd/fwlib/inc/stm32f10x_gpio.h
src/bare_test/stm32_lcd/fwlib/inc/stm32f10x_i2c.h
src/bare_test/stm32_lcd/fwlib/inc/stm32f10x_iwdg.h
src/bare_test/stm32_lcd/fwlib/inc/stm32f10x_pwr.h
src/bare_test/stm32_lcd/fwlib/inc/stm32f10x_rcc.h
src/bare_test/stm32_lcd/fwlib/inc/stm32f10x_rtc.h
src/bare_test/stm32_lcd/fwlib/inc/stm32f10x_sdio.h
src/bare_test/stm32_lcd/fwlib/inc/stm32f10x_spi.h
src/bare_test/stm32_lcd/fwlib/inc/stm32f10x_tim.h
src/bare_test/stm32_lcd/fwlib/inc/stm32f10x_usart.h
src/bare_test/stm32_lcd/fwlib/inc/stm32f10x_wwdg.h
src/bare_test/stm32_lcd/fwlib/src/misc.c
src/bare_test/stm32_lcd/fwlib/src/stm32f10x_adc.c
src/bare_test/stm32_lcd/fwlib/src/stm32f10x_bkp.c
src/bare_test/stm32_lcd/fwlib/src/stm32f10x_can.c
src/bare_test/stm32_lcd/fwlib/src/stm32f10x_cec.c
src/bare_test/stm32_lcd/fwlib/src/stm32f10x_crc.c
src/bare_test/stm32_lcd/fwlib/src/stm32f10x_dac.c
src/bare_test/stm32_lcd/fwlib/src/stm32f10x_dbgmcu.c
src/bare_test/stm32_lcd/fwlib/src/stm32f10x_dma.c
src/bare_test/stm32_lcd/fwlib/src/stm32f10x_exti.c
src/bare_test/stm32_lcd/fwlib/src/stm32f10x_flash.c
src/bare_test/stm32_lcd/fwlib/src/stm32f10x_fsmc.c
src/bare_test/stm32_lcd/fwlib/src/stm32f10x_gpio.c
src/bare_test/stm32_lcd/fwlib/src/stm32f10x_i2c.c
src/bare_test/stm32_lcd/fwlib/src/stm32f10x_iwdg.c
src/bare_test/stm32_lcd/fwlib/src/stm32f10x_pwr.c
src/bare_test/stm32_lcd/fwlib/src/stm32f10x_rcc.c
src/bare_test/stm32_lcd/fwlib/src/stm32f10x_rtc.c
src/bare_test/stm32_lcd/fwlib/src/stm32f10x_sdio.c
src/bare_test/stm32_lcd/fwlib/src/stm32f10x_spi.c
src/bare_test/stm32_lcd/fwlib/src/stm32f10x_tim.c
src/bare_test/stm32_lcd/fwlib/src/stm32f10x_usart.c
src/bare_test/stm32_lcd/fwlib/src/stm32f10x_wwdg.c
src/bare_test/stm32_lcd/fwlib/src/system_stm32f10x.c
src/bare_test/stm32_lcd/keil_clean.bat
src/bare_test/stm32_lcd/main/main.c
src/bare_test/stm32_lcd/st32_lcd.uvgui.USER
src/bare_test/stm32_lcd/st32_lcd.uvopt
src/bare_test/stm32_lcd/st32_lcd.uvproj
src/bare_test/stm32_led/JLinkSettings.ini
src/bare_test/stm32_led/asm/startup_stm32f10x_hd.s
src/bare_test/stm32_led/cmsis/core_cm3.c
src/bare_test/stm32_led/cmsis/core_cm3.h
src/bare_test/stm32_led/cmsis/stm32f10x.h
src/bare_test/stm32_led/cmsis/system_stm32f10x.c
src/bare_test/stm32_led/cmsis/system_stm32f10x.h
src/bare_test/stm32_led/fwlib/inc/misc.h
src/bare_test/stm32_led/fwlib/inc/stm32f10x_adc.h
src/bare_test/stm32_led/fwlib/inc/stm32f10x_bkp.h
src/bare_test/stm32_led/fwlib/inc/stm32f10x_can.h
src/bare_test/stm32_led/fwlib/inc/stm32f10x_cec.h
src/bare_test/stm32_led/fwlib/inc/stm32f10x_conf.h
src/bare_test/stm32_led/fwlib/inc/stm32f10x_crc.h
src/bare_test/stm32_led/fwlib/inc/stm32f10x_dac.h
src/bare_test/stm32_led/fwlib/inc/stm32f10x_dbgmcu.h
src/bare_test/stm32_led/fwlib/inc/stm32f10x_dma.h
src/bare_test/stm32_led/fwlib/inc/stm32f10x_exti.h
src/bare_test/stm32_led/fwlib/inc/stm32f10x_flash.h
src/bare_test/stm32_led/fwlib/inc/stm32f10x_fsmc.h
src/bare_test/stm32_led/fwlib/inc/stm32f10x_gpio.h
src/bare_test/stm32_led/fwlib/inc/stm32f10x_i2c.h
src/bare_test/stm32_led/fwlib/inc/stm32f10x_iwdg.h
src/bare_test/stm32_led/fwlib/inc/stm32f10x_pwr.h
src/bare_test/stm32_led/fwlib/inc/stm32f10x_rcc.h
src/bare_test/stm32_led/fwlib/inc/stm32f10x_rtc.h
src/bare_test/stm32_led/fwlib/inc/stm32f10x_sdio.h
src/bare_test/stm32_led/fwlib/inc/stm32f10x_spi.h
src/bare_test/stm32_led/fwlib/inc/stm32f10x_tim.h
src/bare_test/stm32_led/fwlib/inc/stm32f10x_usart.h
src/bare_test/stm32_led/fwlib/inc/stm32f10x_wwdg.h
src/bare_test/stm32_led/fwlib/src/misc.c
src/bare_test/stm32_led/fwlib/src/stm32f10x_adc.c
src/bare_test/stm32_led/fwlib/src/stm32f10x_bkp.c
src/bare_test/stm32_led/fwlib/src/stm32f10x_can.c
src/bare_test/stm32_led/fwlib/src/stm32f10x_cec.c
src/bare_test/stm32_led/fwlib/src/stm32f10x_crc.c
src/bare_test/stm32_led/fwlib/src/stm32f10x_dac.c
src/bare_test/stm32_led/fwlib/src/stm32f10x_dbgmcu.c
src/bare_test/stm32_led/fwlib/src/stm32f10x_dma.c
src/bare_test/stm32_led/fwlib/src/stm32f10x_exti.c
src/bare_test/stm32_led/fwlib/src/stm32f10x_flash.c
src/bare_test/stm32_led/fwlib/src/stm32f10x_fsmc.c
src/bare_test/stm32_led/fwlib/src/stm32f10x_gpio.c
src/bare_test/stm32_led/fwlib/src/stm32f10x_i2c.c
src/bare_test/stm32_led/fwlib/src/stm32f10x_iwdg.c
src/bare_test/stm32_led/fwlib/src/stm32f10x_pwr.c
src/bare_test/stm32_led/fwlib/src/stm32f10x_rcc.c
src/bare_test/stm32_led/fwlib/src/stm32f10x_rtc.c
src/bare_test/stm32_led/fwlib/src/stm32f10x_sdio.c
src/bare_test/stm32_led/fwlib/src/stm32f10x_spi.c
src/bare_test/stm32_led/fwlib/src/stm32f10x_tim.c
src/bare_test/stm32_led/fwlib/src/stm32f10x_usart.c
src/bare_test/stm32_led/fwlib/src/stm32f10x_wwdg.c
src/bare_test/stm32_led/fwlib/src/system_stm32f10x.c
src/bare_test/stm32_led/keil_clean.bat
src/bare_test/stm32_led/stm32_led.uvgui.USER
src/bare_test/stm32_led/stm32_led.uvopt
src/bare_test/stm32_led/stm32_led.uvproj
src/bare_test/stm32_led/user/main.c
src/bare_test/stm32_led/user/main.c.dump
src/bare_test/stm32_led/user/stm32f10x_conf.h
src/bare_test/stm32_led/user/stm32f10x_it.c
src/bare_test/stm32_led/user/stm32f10x_it.h
src/bare_test/stm32_ov7670/JLinkSettings.ini
src/bare_test/stm32_ov7670/board/lcd_draw.c
src/bare_test/stm32_ov7670/board/lcd_draw.h
src/bare_test/stm32_ov7670/board/lcd_font.c
src/bare_test/stm32_ov7670/board/lcd_font.h
src/bare_test/stm32_ov7670/board/lcd_font10x14.c
src/bare_test/stm32_ov7670/board/lcd_font10x14.h
src/bare_test/stm32_ov7670/board/lcd_gimp_image.h
src/bare_test/stm32_ov7670/board/lcd_r61509v.c
src/bare_test/stm32_ov7670/board/lcd_r61509v.h
src/bare_test/stm32_ov7670/board/ov7670_reg.h
src/bare_test/stm32_ov7670/board/startup_stm32f10x_hd.s
src/bare_test/stm32_ov7670/board/stm32f10x_conf.h
src/bare_test/stm32_ov7670/board/stm32f10x_it.c
src/bare_test/stm32_ov7670/board/stm32f10x_it.h
src/bare_test/stm32_ov7670/board/stm32v5_led.c
src/bare_test/stm32_ov7670/board/stm32v5_led.h
src/bare_test/stm32_ov7670/board/stm32v5_ov7670.c
src/bare_test/stm32_ov7670/board/stm32v5_ov7670.h
src/bare_test/stm32_ov7670/board/stm32v5_sccb.c
src/bare_test/stm32_ov7670/board/stm32v5_sccb.h
src/bare_test/stm32_ov7670/board/stm32v5_systick.c
src/bare_test/stm32_ov7670/board/stm32v5_systick.h
src/bare_test/stm32_ov7670/board/stm32v5_uart.c
src/bare_test/stm32_ov7670/board/stm32v5_uart.h
src/bare_test/stm32_ov7670/cmsis/core_cm3.c
src/bare_test/stm32_ov7670/cmsis/core_cm3.h
src/bare_test/stm32_ov7670/cmsis/stm32f10x.h
src/bare_test/stm32_ov7670/cmsis/system_stm32f10x.c
src/bare_test/stm32_ov7670/cmsis/system_stm32f10x.h
src/bare_test/stm32_ov7670/fwlib/inc/misc.h
src/bare_test/stm32_ov7670/fwlib/inc/stm32f10x_adc.h
src/bare_test/stm32_ov7670/fwlib/inc/stm32f10x_bkp.h
src/bare_test/stm32_ov7670/fwlib/inc/stm32f10x_can.h
src/bare_test/stm32_ov7670/fwlib/inc/stm32f10x_cec.h
src/bare_test/stm32_ov7670/fwlib/inc/stm32f10x_conf.h
src/bare_test/stm32_ov7670/fwlib/inc/stm32f10x_crc.h
src/bare_test/stm32_ov7670/fwlib/inc/stm32f10x_dac.h
src/bare_test/stm32_ov7670/fwlib/inc/stm32f10x_dbgmcu.h
src/bare_test/stm32_ov7670/fwlib/inc/stm32f10x_dma.h
src/bare_test/stm32_ov7670/fwlib/inc/stm32f10x_exti.h
src/bare_test/stm32_ov7670/fwlib/inc/stm32f10x_flash.h
src/bare_test/stm32_ov7670/fwlib/inc/stm32f10x_fsmc.h
src/bare_test/stm32_ov7670/fwlib/inc/stm32f10x_gpio.h
src/bare_test/stm32_ov7670/fwlib/inc/stm32f10x_i2c.h
src/bare_test/stm32_ov7670/fwlib/inc/stm32f10x_iwdg.h
src/bare_test/stm32_ov7670/fwlib/inc/stm32f10x_pwr.h
src/bare_test/stm32_ov7670/fwlib/inc/stm32f10x_rcc.h
src/bare_test/stm32_ov7670/fwlib/inc/stm32f10x_rtc.h
src/bare_test/stm32_ov7670/fwlib/inc/stm32f10x_sdio.h
src/bare_test/stm32_ov7670/fwlib/inc/stm32f10x_spi.h
src/bare_test/stm32_ov7670/fwlib/inc/stm32f10x_tim.h
src/bare_test/stm32_ov7670/fwlib/inc/stm32f10x_usart.h
src/bare_test/stm32_ov7670/fwlib/inc/stm32f10x_wwdg.h
src/bare_test/stm32_ov7670/fwlib/src/misc.c
src/bare_test/stm32_ov7670/fwlib/src/stm32f10x_adc.c
src/bare_test/stm32_ov7670/fwlib/src/stm32f10x_bkp.c
src/bare_test/stm32_ov7670/fwlib/src/stm32f10x_can.c
src/bare_test/stm32_ov7670/fwlib/src/stm32f10x_cec.c
src/bare_test/stm32_ov7670/fwlib/src/stm32f10x_crc.c
src/bare_test/stm32_ov7670/fwlib/src/stm32f10x_dac.c
src/bare_test/stm32_ov7670/fwlib/src/stm32f10x_dbgmcu.c
src/bare_test/stm32_ov7670/fwlib/src/stm32f10x_dma.c
src/bare_test/stm32_ov7670/fwlib/src/stm32f10x_exti.c
src/bare_test/stm32_ov7670/fwlib/src/stm32f10x_flash.c
src/bare_test/stm32_ov7670/fwlib/src/stm32f10x_fsmc.c
src/bare_test/stm32_ov7670/fwlib/src/stm32f10x_gpio.c
src/bare_test/stm32_ov7670/fwlib/src/stm32f10x_i2c.c
src/bare_test/stm32_ov7670/fwlib/src/stm32f10x_iwdg.c
src/bare_test/stm32_ov7670/fwlib/src/stm32f10x_pwr.c
src/bare_test/stm32_ov7670/fwlib/src/stm32f10x_rcc.c
src/bare_test/stm32_ov7670/fwlib/src/stm32f10x_rtc.c
src/bare_test/stm32_ov7670/fwlib/src/stm32f10x_sdio.c
src/bare_test/stm32_ov7670/fwlib/src/stm32f10x_spi.c
src/bare_test/stm32_ov7670/fwlib/src/stm32f10x_tim.c
src/bare_test/stm32_ov7670/fwlib/src/stm32f10x_usart.c
src/bare_test/stm32_ov7670/fwlib/src/stm32f10x_wwdg.c
src/bare_test/stm32_ov7670/fwlib/src/system_stm32f10x.c
src/bare_test/stm32_ov7670/keil_clean.bat
src/bare_test/stm32_ov7670/main/main.c
src/bare_test/stm32_ov7670/stm32_ov7670.uvgui.USER
src/bare_test/stm32_ov7670/stm32_ov7670.uvopt
src/bare_test/stm32_ov7670/stm32_ov7670.uvproj
src/bare_test/stm32_systick/JLinkSettings.ini
src/bare_test/stm32_systick/board/startup_stm32f10x_hd.s
src/bare_test/stm32_systick/board/stm32f10x_conf.h
src/bare_test/stm32_systick/board/stm32f10x_it.c
src/bare_test/stm32_systick/board/stm32f10x_it.h
src/bare_test/stm32_systick/board/stm32v5_led.c
src/bare_test/stm32_systick/board/stm32v5_led.h
src/bare_test/stm32_systick/board/stm32v5_systick.c
src/bare_test/stm32_systick/board/stm32v5_systick.h
src/bare_test/stm32_systick/board/stm32v5_uart.c
src/bare_test/stm32_systick/board/stm32v5_uart.h
src/bare_test/stm32_systick/cmsis/core_cm3.c
src/bare_test/stm32_systick/cmsis/core_cm3.h
src/bare_test/stm32_systick/cmsis/stm32f10x.h
src/bare_test/stm32_systick/cmsis/system_stm32f10x.c
src/bare_test/stm32_systick/cmsis/system_stm32f10x.h
src/bare_test/stm32_systick/fwlib/inc/misc.h
src/bare_test/stm32_systick/fwlib/inc/stm32f10x_adc.h
src/bare_test/stm32_systick/fwlib/inc/stm32f10x_bkp.h
src/bare_test/stm32_systick/fwlib/inc/stm32f10x_can.h
src/bare_test/stm32_systick/fwlib/inc/stm32f10x_cec.h
src/bare_test/stm32_systick/fwlib/inc/stm32f10x_conf.h
src/bare_test/stm32_systick/fwlib/inc/stm32f10x_crc.h
src/bare_test/stm32_systick/fwlib/inc/stm32f10x_dac.h
src/bare_test/stm32_systick/fwlib/inc/stm32f10x_dbgmcu.h
src/bare_test/stm32_systick/fwlib/inc/stm32f10x_dma.h
src/bare_test/stm32_systick/fwlib/inc/stm32f10x_exti.h
src/bare_test/stm32_systick/fwlib/inc/stm32f10x_flash.h
src/bare_test/stm32_systick/fwlib/inc/stm32f10x_fsmc.h
src/bare_test/stm32_systick/fwlib/inc/stm32f10x_gpio.h
src/bare_test/stm32_systick/fwlib/inc/stm32f10x_i2c.h
src/bare_test/stm32_systick/fwlib/inc/stm32f10x_iwdg.h
src/bare_test/stm32_systick/fwlib/inc/stm32f10x_pwr.h
src/bare_test/stm32_systick/fwlib/inc/stm32f10x_rcc.h
src/bare_test/stm32_systick/fwlib/inc/stm32f10x_rtc.h
src/bare_test/stm32_systick/fwlib/inc/stm32f10x_sdio.h
src/bare_test/stm32_systick/fwlib/inc/stm32f10x_spi.h
src/bare_test/stm32_systick/fwlib/inc/stm32f10x_tim.h
src/bare_test/stm32_systick/fwlib/inc/stm32f10x_usart.h
src/bare_test/stm32_systick/fwlib/inc/stm32f10x_wwdg.h
src/bare_test/stm32_systick/fwlib/src/misc.c
src/bare_test/stm32_systick/fwlib/src/stm32f10x_adc.c
src/bare_test/stm32_systick/fwlib/src/stm32f10x_bkp.c
src/bare_test/stm32_systick/fwlib/src/stm32f10x_can.c
src/bare_test/stm32_systick/fwlib/src/stm32f10x_cec.c
src/bare_test/stm32_systick/fwlib/src/stm32f10x_crc.c
src/bare_test/stm32_systick/fwlib/src/stm32f10x_dac.c
src/bare_test/stm32_systick/fwlib/src/stm32f10x_dbgmcu.c
src/bare_test/stm32_systick/fwlib/src/stm32f10x_dma.c
src/bare_test/stm32_systick/fwlib/src/stm32f10x_exti.c
src/bare_test/stm32_systick/fwlib/src/stm32f10x_flash.c
src/bare_test/stm32_systick/fwlib/src/stm32f10x_fsmc.c
src/bare_test/stm32_systick/fwlib/src/stm32f10x_gpio.c
src/bare_test/stm32_systick/fwlib/src/stm32f10x_i2c.c
src/bare_test/stm32_systick/fwlib/src/stm32f10x_iwdg.c
src/bare_test/stm32_systick/fwlib/src/stm32f10x_pwr.c
src/bare_test/stm32_systick/fwlib/src/stm32f10x_rcc.c
src/bare_test/stm32_systick/fwlib/src/stm32f10x_rtc.c
src/bare_test/stm32_systick/fwlib/src/stm32f10x_sdio.c
src/bare_test/stm32_systick/fwlib/src/stm32f10x_spi.c
src/bare_test/stm32_systick/fwlib/src/stm32f10x_tim.c
src/bare_test/stm32_systick/fwlib/src/stm32f10x_usart.c
src/bare_test/stm32_systick/fwlib/src/stm32f10x_wwdg.c
src/bare_test/stm32_systick/keil_clean.bat
src/bare_test/stm32_systick/main/main.c
src/bare_test/stm32_systick/stm32_systick.uvgui.USER
src/bare_test/stm32_systick/stm32_systick.uvopt
src/bare_test/stm32_systick/stm32_systick.uvproj
src/library/STM32F10x_StdPeriph_Lib_V3.5.0.zip
src/os_contiki/JLinkSettings.ini
src/os_contiki/asm/startup_stm32f10x_hd.s
src/os_contiki/board/clock.c
src/os_contiki/board/contiki-conf.h
src/os_contiki/board/contiki_main.c
src/os_contiki/board/cortexm3_macro.h
src/os_contiki/board/debug-uart.c
src/os_contiki/board/debug-uart.h
src/os_contiki/board/rtimer-arch.h
src/os_contiki/board/stm32f10x_dma.h
src/os_contiki/board/stm32f10x_it.c
src/os_contiki/board/stm32f10x_it.h
src/os_contiki/board/stm32f10x_nvic.h
src/os_contiki/board/stm32f10x_type.h
src/os_contiki/board/stm32v5_led.c
src/os_contiki/board/stm32v5_led.h
src/os_contiki/board/structgen_opts.gen.h
src/os_contiki/cmsis/core_cm3.c
src/os_contiki/cmsis/core_cm3.h
src/os_contiki/cmsis/stm32f10x.h
src/os_contiki/cmsis/system_stm32f10x.c
src/os_contiki/cmsis/system_stm32f10x.h
src/os_contiki/contiki/contiki-default-conf.h
src/os_contiki/contiki/contiki-lib.h
src/os_contiki/contiki/contiki-net.h
src/os_contiki/contiki/contiki-version.h
src/os_contiki/contiki/contiki.h
src/os_contiki/contiki/core/cfs/cfs-coffee.c
src/os_contiki/contiki/core/cfs/cfs-coffee.h
src/os_contiki/contiki/core/cfs/cfs-eeprom.c
src/os_contiki/contiki/core/cfs/cfs-posix-dir.c
src/os_contiki/contiki/core/cfs/cfs-posix.c
src/os_contiki/contiki/core/cfs/cfs-ram.c
src/os_contiki/contiki/core/cfs/cfs-xmem.c
src/os_contiki/contiki/core/cfs/cfs.h
src/os_contiki/contiki/core/contiki-default-conf.h
src/os_contiki/contiki/core/contiki-lib.h
src/os_contiki/contiki/core/contiki-net.h
src/os_contiki/contiki/core/contiki-version.h
src/os_contiki/contiki/core/contiki.h
src/os_contiki/contiki/core/ctk/ctk-conio.c
src/os_contiki/contiki/core/ctk/ctk-conio.h
src/os_contiki/contiki/core/ctk/ctk-draw.h
src/os_contiki/contiki/core/ctk/ctk-mouse.h
src/os_contiki/contiki/core/ctk/ctk-vncarch.h
src/os_contiki/contiki/core/ctk/ctk-vncfont.c
src/os_contiki/contiki/core/ctk/ctk-vncfont.h
src/os_contiki/contiki/core/ctk/ctk-vncserver.c
src/os_contiki/contiki/core/ctk/ctk-vncserver.h
src/os_contiki/contiki/core/ctk/ctk.c
src/os_contiki/contiki/core/ctk/ctk.h
src/os_contiki/contiki/core/ctk/vnc-out.c
src/os_contiki/contiki/core/ctk/vnc-out.h
src/os_contiki/contiki/core/ctk/vnc-server.c
src/os_contiki/contiki/core/ctk/vnc-server.h
src/os_contiki/contiki/core/dev/battery-sensor.h
src/os_contiki/contiki/core/dev/button-sensor.h
src/os_contiki/contiki/core/dev/cc2420-aes.c
src/os_contiki/contiki/core/dev/cc2420-aes.h
src/os_contiki/contiki/core/dev/cc2420.c
src/os_contiki/contiki/core/dev/cc2420.h
src/os_contiki/contiki/core/dev/cc2420_const.h
src/os_contiki/contiki/core/dev/cc2520.c
src/os_contiki/contiki/core/dev/cc2520.h
src/os_contiki/contiki/core/dev/cc2520_const.h
src/os_contiki/contiki/core/dev/ds2411.c
src/os_contiki/contiki/core/dev/ds2411.h
src/os_contiki/contiki/core/dev/eeprom.h
src/os_contiki/contiki/core/dev/leds.c
src/os_contiki/contiki/core/dev/leds.h
src/os_contiki/contiki/core/dev/nullradio.c
src/os_contiki/contiki/core/dev/nullradio.h
src/os_contiki/contiki/core/dev/radio-sensor.h
src/os_contiki/contiki/core/dev/radio.h
src/os_contiki/contiki/core/dev/rom.h
src/os_contiki/contiki/core/dev/serial-line.c
src/os_contiki/contiki/core/dev/serial-line.h
src/os_contiki/contiki/core/dev/sht11-sensor.c
src/os_contiki/contiki/core/dev/sht11-sensor.h
src/os_contiki/contiki/core/dev/sht11.c
src/os_contiki/contiki/core/dev/sht11.h
src/os_contiki/contiki/core/dev/slip.c
src/os_contiki/contiki/core/dev/slip.h
src/os_contiki/contiki/core/dev/spi.h
src/os_contiki/contiki/core/dev/watchdog.h
src/os_contiki/contiki/core/dev/xmem.h
src/os_contiki/contiki/core/lib/assert.c
src/os_contiki/contiki/core/lib/assert.h
src/os_contiki/contiki/core/lib/checkpoint.c
src/os_contiki/contiki/core/lib/checkpoint.h
src/os_contiki/contiki/core/lib/crc16.c
src/os_contiki/contiki/core/lib/crc16.h
src/os_contiki/contiki/core/lib/ctk-filedialog.c
src/os_contiki/contiki/core/lib/ctk-filedialog.h
src/os_contiki/contiki/core/lib/ctk-textentry-checkbox.c
src/os_contiki/contiki/core/lib/ctk-textentry-checkbox.h
src/os_contiki/contiki/core/lib/ctk-textentry-cmdline.c
src/os_contiki/contiki/core/lib/ctk-textentry-cmdline.h
src/os_contiki/contiki/core/lib/ctk-textentry-multiline.c
src/os_contiki/contiki/core/lib/ctk-textentry-multiline.h
src/os_contiki/contiki/core/lib/gcr.c
src/os_contiki/contiki/core/lib/gcr.h
src/os_contiki/contiki/core/lib/ifft.c
src/os_contiki/contiki/core/lib/ifft.h
src/os_contiki/contiki/core/lib/libconio.c
src/os_contiki/contiki/core/lib/libconio.h
src/os_contiki/contiki/core/lib/list.c
src/os_contiki/contiki/core/lib/list.h
src/os_contiki/contiki/core/lib/me.c
src/os_contiki/contiki/core/lib/me.h
src/os_contiki/contiki/core/lib/me_tabs.c
src/os_contiki/contiki/core/lib/me_tabs.h
src/os_contiki/contiki/core/lib/memb.c
src/os_contiki/contiki/core/lib/memb.h
src/os_contiki/contiki/core/lib/mmem.c
src/os_contiki/contiki/core/lib/mmem.h
src/os_contiki/contiki/core/lib/petsciiconv.c
src/os_contiki/contiki/core/lib/petsciiconv.h
src/os_contiki/contiki/core/lib/print-stats.c
src/os_contiki/contiki/core/lib/print-stats.h
src/os_contiki/contiki/core/lib/random.c
src/os_contiki/contiki/core/lib/random.h
src/os_contiki/contiki/core/lib/ringbuf.c
src/os_contiki/contiki/core/lib/ringbuf.h
src/os_contiki/contiki/core/lib/sensors.c
src/os_contiki/contiki/core/lib/sensors.h
src/os_contiki/contiki/core/lib/settings.c
src/os_contiki/contiki/core/lib/settings.h
src/os_contiki/contiki/core/lib/strncasecmp.c
src/os_contiki/contiki/core/lib/trickle-timer.c
src/os_contiki/contiki/core/lib/trickle-timer.h
src/os_contiki/contiki/core/loader/cle.c
src/os_contiki/contiki/core/loader/cle.h
src/os_contiki/contiki/core/loader/cle_avr.c
src/os_contiki/contiki/core/loader/cle_msp430.c
src/os_contiki/contiki/core/loader/cmod.c
src/os_contiki/contiki/core/loader/cmod.h
src/os_contiki/contiki/core/loader/dlloader.c
src/os_contiki/contiki/core/loader/dlloader.h
src/os_contiki/contiki/core/loader/elf32.h
src/os_contiki/contiki/core/loader/elfloader-arch.h
src/os_contiki/contiki/core/loader/elfloader-avr.c
src/os_contiki/contiki/core/loader/elfloader-msp430.c
src/os_contiki/contiki/core/loader/elfloader-stub.c
src/os_contiki/contiki/core/loader/elfloader-x86.c
src/os_contiki/contiki/core/loader/elfloader.c
src/os_contiki/contiki/core/loader/elfloader.h
src/os_contiki/contiki/core/loader/elfloader_compat.c
src/os_contiki/contiki/core/loader/elfloader_compat.h
src/os_contiki/contiki/core/loader/sym.c
src/os_contiki/contiki/core/loader/sym.h
src/os_contiki/contiki/core/loader/symbols-def.h
src/os_contiki/contiki/core/loader/symbols.h
src/os_contiki/contiki/core/loader/symtab-avr.c
src/os_contiki/contiki/core/loader/symtab.c
src/os_contiki/contiki/core/loader/symtab.h
src/os_contiki/contiki/core/net/Makefile.uip
src/os_contiki/contiki/core/net/dhcpc.c
src/os_contiki/contiki/core/net/dhcpc.h
src/os_contiki/contiki/core/net/hc.c
src/os_contiki/contiki/core/net/hc.h
src/os_contiki/contiki/core/net/mac/Makefile.mac
src/os_contiki/contiki/core/net/mac/contikimac.c
src/os_contiki/contiki/core/net/mac/contikimac.h
src/os_contiki/contiki/core/net/mac/csma.c
src/os_contiki/contiki/core/net/mac/csma.h
src/os_contiki/contiki/core/net/mac/cxmac.c
src/os_contiki/contiki/core/net/mac/cxmac.h
src/os_contiki/contiki/core/net/mac/frame802154.c
src/os_contiki/contiki/core/net/mac/frame802154.h
src/os_contiki/contiki/core/net/mac/framer-802154.c
src/os_contiki/contiki/core/net/mac/framer-802154.h
src/os_contiki/contiki/core/net/mac/framer-nullmac.c
src/os_contiki/contiki/core/net/mac/framer-nullmac.h
src/os_contiki/contiki/core/net/mac/framer.h
src/os_contiki/contiki/core/net/mac/lpp.c
src/os_contiki/contiki/core/net/mac/lpp.h
src/os_contiki/contiki/core/net/mac/mac.c
src/os_contiki/contiki/core/net/mac/mac.h
src/os_contiki/contiki/core/net/mac/nullmac.c
src/os_contiki/contiki/core/net/mac/nullmac.h
src/os_contiki/contiki/core/net/mac/nullrdc-noframer.c
src/os_contiki/contiki/core/net/mac/nullrdc-noframer.h
src/os_contiki/contiki/core/net/mac/nullrdc.c
src/os_contiki/contiki/core/net/mac/nullrdc.h
src/os_contiki/contiki/core/net/mac/phase.c
src/os_contiki/contiki/core/net/mac/phase.h
src/os_contiki/contiki/core/net/mac/rdc.h
src/os_contiki/contiki/core/net/mac/sicslowmac.c
src/os_contiki/contiki/core/net/mac/sicslowmac.h
src/os_contiki/contiki/core/net/mac/xmac.c
src/os_contiki/contiki/core/net/mac/xmac.h
src/os_contiki/contiki/core/net/nbr-table.c
src/os_contiki/contiki/core/net/nbr-table.h
src/os_contiki/contiki/core/net/netstack.c
src/os_contiki/contiki/core/net/netstack.h
src/os_contiki/contiki/core/net/packetbuf.c
src/os_contiki/contiki/core/net/packetbuf.h
src/os_contiki/contiki/core/net/packetqueue.c
src/os_contiki/contiki/core/net/packetqueue.h
src/os_contiki/contiki/core/net/psock.c
src/os_contiki/contiki/core/net/psock.h
src/os_contiki/contiki/core/net/queuebuf.c
src/os_contiki/contiki/core/net/queuebuf.h
src/os_contiki/contiki/core/net/rawpacket-udp.c
src/os_contiki/contiki/core/net/rawpacket-udp.h
src/os_contiki/contiki/core/net/rawpacket.h
src/os_contiki/contiki/core/net/resolv.c
src/os_contiki/contiki/core/net/resolv.h
src/os_contiki/contiki/core/net/rime.h
src/os_contiki/contiki/core/net/rime/Makefile.rime
src/os_contiki/contiki/core/net/rime/abc.c
src/os_contiki/contiki/core/net/rime/abc.h
src/os_contiki/contiki/core/net/rime/announcement.c
src/os_contiki/contiki/core/net/rime/announcement.h
src/os_contiki/contiki/core/net/rime/broadcast-announcement.c
src/os_contiki/contiki/core/net/rime/broadcast-announcement.h
src/os_contiki/contiki/core/net/rime/broadcast.c
src/os_contiki/contiki/core/net/rime/broadcast.h
src/os_contiki/contiki/core/net/rime/chameleon-bitopt.c
src/os_contiki/contiki/core/net/rime/chameleon-bitopt.h
src/os_contiki/contiki/core/net/rime/chameleon-raw.c
src/os_contiki/contiki/core/net/rime/chameleon-raw.h
src/os_contiki/contiki/core/net/rime/chameleon.c
src/os_contiki/contiki/core/net/rime/chameleon.h
src/os_contiki/contiki/core/net/rime/channel.c
src/os_contiki/contiki/core/net/rime/channel.h
src/os_contiki/contiki/core/net/rime/collect-link-estimate.c
src/os_contiki/contiki/core/net/rime/collect-link-estimate.h
src/os_contiki/contiki/core/net/rime/collect-neighbor.c
src/os_contiki/contiki/core/net/rime/collect-neighbor.h
src/os_contiki/contiki/core/net/rime/collect.c
src/os_contiki/contiki/core/net/rime/collect.h
src/os_contiki/contiki/core/net/rime/ipolite.c
src/os_contiki/contiki/core/net/rime/ipolite.h
src/os_contiki/contiki/core/net/rime/mesh.c
src/os_contiki/contiki/core/net/rime/mesh.h
src/os_contiki/contiki/core/net/rime/multihop.c
src/os_contiki/contiki/core/net/rime/multihop.h
src/os_contiki/contiki/core/net/rime/neighbor-discovery.c
src/os_contiki/contiki/core/net/rime/neighbor-discovery.h
src/os_contiki/contiki/core/net/rime/netflood.c
src/os_contiki/contiki/core/net/rime/netflood.h
src/os_contiki/contiki/core/net/rime/polite-announcement.c
src/os_contiki/contiki/core/net/rime/polite-announcement.h
src/os_contiki/contiki/core/net/rime/polite.c
src/os_contiki/contiki/core/net/rime/polite.h
src/os_contiki/contiki/core/net/rime/rime-udp.c
src/os_contiki/contiki/core/net/rime/rime-udp.h
src/os_contiki/contiki/core/net/rime/rime.c
src/os_contiki/contiki/core/net/rime/rimeaddr.c
src/os_contiki/contiki/core/net/rime/rimeaddr.h
src/os_contiki/contiki/core/net/rime/rimestats.c
src/os_contiki/contiki/core/net/rime/rimestats.h
src/os_contiki/contiki/core/net/rime/rmh.c
src/os_contiki/contiki/core/net/rime/rmh.h
src/os_contiki/contiki/core/net/rime/route-discovery.c
src/os_contiki/contiki/core/net/rime/route-discovery.h
src/os_contiki/contiki/core/net/rime/route.c
src/os_contiki/contiki/core/net/rime/route.h
src/os_contiki/contiki/core/net/rime/rucb.c
src/os_contiki/contiki/core/net/rime/rucb.h
src/os_contiki/contiki/core/net/rime/rudolph0.c
src/os_contiki/contiki/core/net/rime/rudolph0.h
src/os_contiki/contiki/core/net/rime/rudolph1.c
src/os_contiki/contiki/core/net/rime/rudolph1.h
src/os_contiki/contiki/core/net/rime/rudolph2.c
src/os_contiki/contiki/core/net/rime/rudolph2.h
src/os_contiki/contiki/core/net/rime/runicast.c
src/os_contiki/contiki/core/net/rime/runicast.h
src/os_contiki/contiki/core/net/rime/stbroadcast.c
src/os_contiki/contiki/core/net/rime/stbroadcast.h
src/os_contiki/contiki/core/net/rime/stunicast.c
src/os_contiki/contiki/core/net/rime/stunicast.h
src/os_contiki/contiki/core/net/rime/timesynch.c
src/os_contiki/contiki/core/net/rime/timesynch.h
src/os_contiki/contiki/core/net/rime/trickle.c
src/os_contiki/contiki/core/net/rime/trickle.h
src/os_contiki/contiki/core/net/rime/unicast.c
src/os_contiki/contiki/core/net/rime/unicast.h
src/os_contiki/contiki/core/net/rpl/Makefile.rpl
src/os_contiki/contiki/core/net/rpl/rpl-conf.h
src/os_contiki/contiki/core/net/rpl/rpl-dag.c
src/os_contiki/contiki/core/net/rpl/rpl-ext-header.c
src/os_contiki/contiki/core/net/rpl/rpl-icmp6.c
src/os_contiki/contiki/core/net/rpl/rpl-mrhof.c
src/os_contiki/contiki/core/net/rpl/rpl-of0.c
src/os_contiki/contiki/core/net/rpl/rpl-private.h
src/os_contiki/contiki/core/net/rpl/rpl-timers.c
src/os_contiki/contiki/core/net/rpl/rpl.c
src/os_contiki/contiki/core/net/rpl/rpl.h
src/os_contiki/contiki/core/net/sicslowpan.c
src/os_contiki/contiki/core/net/sicslowpan.h
src/os_contiki/contiki/core/net/simple-udp.c
src/os_contiki/contiki/core/net/simple-udp.h
src/os_contiki/contiki/core/net/slipdev.c
src/os_contiki/contiki/core/net/slipdev.h
src/os_contiki/contiki/core/net/tcpdump.c
src/os_contiki/contiki/core/net/tcpdump.h
src/os_contiki/contiki/core/net/tcpip.c
src/os_contiki/contiki/core/net/tcpip.h
src/os_contiki/contiki/core/net/uaodv-def.h
src/os_contiki/contiki/core/net/uaodv-rt.c
src/os_contiki/contiki/core/net/uaodv-rt.h
src/os_contiki/contiki/core/net/uaodv.c
src/os_contiki/contiki/core/net/uaodv.h
src/os_contiki/contiki/core/net/uip-debug.c
src/os_contiki/contiki/core/net/uip-debug.h
src/os_contiki/contiki/core/net/uip-ds6-nbr.c
src/os_contiki/contiki/core/net/uip-ds6-nbr.h
src/os_contiki/contiki/core/net/uip-ds6-route.c
src/os_contiki/contiki/core/net/uip-ds6-route.h
src/os_contiki/contiki/core/net/uip-ds6.c
src/os_contiki/contiki/core/net/uip-ds6.h
src/os_contiki/contiki/core/net/uip-fw-drv.c
src/os_contiki/contiki/core/net/uip-fw-drv.h
src/os_contiki/contiki/core/net/uip-fw.c
src/os_contiki/contiki/core/net/uip-fw.h
src/os_contiki/contiki/core/net/uip-icmp6.c
src/os_contiki/contiki/core/net/uip-icmp6.h
src/os_contiki/contiki/core/net/uip-nd6.c
src/os_contiki/contiki/core/net/uip-nd6.h
src/os_contiki/contiki/core/net/uip-neighbor.c
src/os_contiki/contiki/core/net/uip-neighbor.h
src/os_contiki/contiki/core/net/uip-over-mesh.c
src/os_contiki/contiki/core/net/uip-over-mesh.h
src/os_contiki/contiki/core/net/uip-packetqueue.c
src/os_contiki/contiki/core/net/uip-packetqueue.h
src/os_contiki/contiki/core/net/uip-split.c
src/os_contiki/contiki/core/net/uip-split.h
src/os_contiki/contiki/core/net/uip-udp-packet.c
src/os_contiki/contiki/core/net/uip-udp-packet.h
src/os_contiki/contiki/core/net/uip.c
src/os_contiki/contiki/core/net/uip.h
src/os_contiki/contiki/core/net/uip6.c
src/os_contiki/contiki/core/net/uip_arch.h
src/os_contiki/contiki/core/net/uip_arp.c
src/os_contiki/contiki/core/net/uip_arp.h
src/os_contiki/contiki/core/net/uiplib.c
src/os_contiki/contiki/core/net/uiplib.h
src/os_contiki/contiki/core/net/uipopt.h
src/os_contiki/contiki/core/sys/arg.c
src/os_contiki/contiki/core/sys/arg.h
src/os_contiki/contiki/core/sys/autostart.c
src/os_contiki/contiki/core/sys/autostart.h
src/os_contiki/contiki/core/sys/cc.h
src/os_contiki/contiki/core/sys/clock.h
src/os_contiki/contiki/core/sys/compower.c
src/os_contiki/contiki/core/sys/compower.h
src/os_contiki/contiki/core/sys/ctimer.c
src/os_contiki/contiki/core/sys/ctimer.h
src/os_contiki/contiki/core/sys/dsc.h
src/os_contiki/contiki/core/sys/energest.c
src/os_contiki/contiki/core/sys/energest.h
src/os_contiki/contiki/core/sys/etimer.c
src/os_contiki/contiki/core/sys/etimer.h
src/os_contiki/contiki/core/sys/lc-addrlabels.h
src/os_contiki/contiki/core/sys/lc-switch.h
src/os_contiki/contiki/core/sys/lc.h
src/os_contiki/contiki/core/sys/loader.h
src/os_contiki/contiki/core/sys/log.h
src/os_contiki/contiki/core/sys/mt.c
src/os_contiki/contiki/core/sys/mt.h
src/os_contiki/contiki/core/sys/node-id.h
src/os_contiki/contiki/core/sys/process.c
src/os_contiki/contiki/core/sys/process.h
src/os_contiki/contiki/core/sys/procinit.c
src/os_contiki/contiki/core/sys/procinit.h
src/os_contiki/contiki/core/sys/profile-aggregates.c
src/os_contiki/contiki/core/sys/profile.c
src/os_contiki/contiki/core/sys/profile.h
src/os_contiki/contiki/core/sys/pt-sem.h
src/os_contiki/contiki/core/sys/pt.h
src/os_contiki/contiki/core/sys/rtimer.c
src/os_contiki/contiki/core/sys/rtimer.h
src/os_contiki/contiki/core/sys/stimer.c
src/os_contiki/contiki/core/sys/stimer.h
src/os_contiki/contiki/core/sys/subprocess.h
src/os_contiki/contiki/core/sys/timer.c
src/os_contiki/contiki/core/sys/timer.h
src/os_contiki/contiki/core/sys/timetable-aggregate.c
src/os_contiki/contiki/core/sys/timetable-aggregate.h
src/os_contiki/contiki/core/sys/timetable.c
src/os_contiki/contiki/core/sys/timetable.h
src/os_contiki/fwlib/inc/misc.h
src/os_contiki/fwlib/inc/stm32f10x_adc.h
src/os_contiki/fwlib/inc/stm32f10x_bkp.h
src/os_contiki/fwlib/inc/stm32f10x_can.h
src/os_contiki/fwlib/inc/stm32f10x_cec.h
src/os_contiki/fwlib/inc/stm32f10x_conf.h
src/os_contiki/fwlib/inc/stm32f10x_crc.h
src/os_contiki/fwlib/inc/stm32f10x_dac.h
src/os_contiki/fwlib/inc/stm32f10x_dbgmcu.h
src/os_contiki/fwlib/inc/stm32f10x_dma.h
src/os_contiki/fwlib/inc/stm32f10x_exti.h
src/os_contiki/fwlib/inc/stm32f10x_flash.h
src/os_contiki/fwlib/inc/stm32f10x_fsmc.h
src/os_contiki/fwlib/inc/stm32f10x_gpio.h
src/os_contiki/fwlib/inc/stm32f10x_i2c.h
src/os_contiki/fwlib/inc/stm32f10x_iwdg.h
src/os_contiki/fwlib/inc/stm32f10x_pwr.h
src/os_contiki/fwlib/inc/stm32f10x_rcc.h
src/os_contiki/fwlib/inc/stm32f10x_rtc.h
src/os_contiki/fwlib/inc/stm32f10x_sdio.h
src/os_contiki/fwlib/inc/stm32f10x_spi.h
src/os_contiki/fwlib/inc/stm32f10x_tim.h
src/os_contiki/fwlib/inc/stm32f10x_usart.h
src/os_contiki/fwlib/inc/stm32f10x_wwdg.h
src/os_contiki/fwlib/src/misc.c
src/os_contiki/fwlib/src/stm32f10x_adc.c
src/os_contiki/fwlib/src/stm32f10x_bkp.c
src/os_contiki/fwlib/src/stm32f10x_can.c
src/os_contiki/fwlib/src/stm32f10x_cec.c
src/os_contiki/fwlib/src/stm32f10x_crc.c
src/os_contiki/fwlib/src/stm32f10x_dac.c
src/os_contiki/fwlib/src/stm32f10x_dbgmcu.c
src/os_contiki/fwlib/src/stm32f10x_dma.c
src/os_contiki/fwlib/src/stm32f10x_exti.c
src/os_contiki/fwlib/src/stm32f10x_flash.c
src/os_contiki/fwlib/src/stm32f10x_fsmc.c
src/os_contiki/fwlib/src/stm32f10x_gpio.c
src/os_contiki/fwlib/src/stm32f10x_i2c.c
src/os_contiki/fwlib/src/stm32f10x_iwdg.c
src/os_contiki/fwlib/src/stm32f10x_pwr.c
src/os_contiki/fwlib/src/stm32f10x_rcc.c
src/os_contiki/fwlib/src/stm32f10x_rtc.c
src/os_contiki/fwlib/src/stm32f10x_sdio.c
src/os_contiki/fwlib/src/stm32f10x_spi.c
src/os_contiki/fwlib/src/stm32f10x_tim.c
src/os_contiki/fwlib/src/stm32f10x_usart.c
src/os_contiki/fwlib/src/stm32f10x_wwdg.c
src/os_contiki/fwlib/src/system_stm32f10x.c
src/os_contiki/keil_clean.bat
src/os_contiki/stm32_contiki.uvgui.USER
src/os_contiki/stm32_contiki.uvopt
src/os_contiki/stm32_contiki.uvproj |