From d54217c313b7cc14011109306212d36762b28ce1 Mon Sep 17 00:00:00 2001 From: Justin Moore Date: Sun, 12 Jun 2022 11:55:37 -0500 Subject: [PATCH 1/2] Add an example of using PWMs to generate an audio output --- boards/rp-pico/examples/pico_pwm_audio.raw | Bin 0 -> 76161 bytes boards/rp-pico/examples/pico_pwm_audio.rs | 244 +++++++++++++++++++++ 2 files changed, 244 insertions(+) create mode 100644 boards/rp-pico/examples/pico_pwm_audio.raw create mode 100644 boards/rp-pico/examples/pico_pwm_audio.rs diff --git a/boards/rp-pico/examples/pico_pwm_audio.raw b/boards/rp-pico/examples/pico_pwm_audio.raw new file mode 100644 index 0000000000000000000000000000000000000000..23662b2ac64e1b02047775fe8aabdcfc0a7c1a62 GIT binary patch literal 76161 zcmZ_02Y?;NaV@$z=bRTC04#Qq7db})Bp5)E1fxVTNt9&Sl1$n1v;UW$zwPHBS(2?t z1tu|wBtQ}%ku$K!X|dSF=A3iRyZGl+b&@>-)L5(2XKq62nj2u%7QzTmkVqcorB9>w%I^(D*}BA~mB zRP7Ej66YxG!EsM!<49nPON$0-FydQux=|wl)!15?y~w5R&L&4gDTMmr&N3UM>wuxq zV2IUVh*mM%{IG?s)D&i_Xb6-W0TDxyY+185hDY!MhCpl;EM{tJr1U67n6+*s5|%I- zkk!(y+MuE_F#xI4k4V{axG6Coks4M5ap6Ru^hQWp7Vb%*=a50 z<)FkwB%Few8!gtUu~Z}CNw1cy39Wc?)zp)^7Z+k;poWhWlvo0x5^`Zz6x%E+(z-OQ zM8ct-#RO$|WhZi@R*!Q=mct0emmYv%1ujRTKq0hxr(prcfrSc#fLRj|J(`+z%^0jm!?Fl5wHpUy zc(4-@P4QIq|p;{1HvqvQ=Q3zgK z6V0Mq>?k!F5j%S2wMHr?BWtoD$=#OJP-z^XV&P)qSSn6r^eH%{qOp>TrFEbIt22#K zTo7#FY`eK;93rq=A=Ln^+=OY60t5s0_Ro?Sl^a4abZxLoq77`NqB4g>nu0gh!e^0k zDAt40YKsavNZkmY1R@qDjlwF72gj|uGhrgF#Dbl0@-X;EOJl8dff0?L}su8P!meDDJ(#V50MI!H09hlH6a#}lJhvAq(n`mA62)UC&k=n{m8rX;nl^CEgCtPfG3kYdULm350 zg?=oRRgzm}G~E15qi_0C#lNep(YryWYw`@jcp6iDuu?2 zR=_VrMl5P|DjFrXwiL054fk$7R4PK18eVl^L_$C-GAMyEqAtZ4*`|aBgn-1WHY5(q zA$-=tafixX0Bs7taVcsmHUW~xF?6D&Q=-*5!!b>ljGPLiIpppwF%-GgNyAu(rO=C+ z!HILjDqJps_+g|XQaP;DCz{ITY$^X-LnJB_JgO3mq0k+Pq)_EpShp1Lqjq*HTHP>8 z{Btm%ViQHIq^1H35(6bAgf%U!(8_#VazjVC!6;IIbjGG^4Usg&N;ZO~-XMvhf_#*U zmFQG#@CM-q5HRgjCHAapMZ{FOs7!+h@ueG)-o2q-193rYnB)_w2rNp1W~4&Stu_c2 z3qvSs(Fua)ilr%ur zxpJu-4M(T;$}e)!IPMJ2fwO`?@bTlu;~)&7y9YO&Th$=kB~CD3Ao(*Wi*euI1=Ap* zmZMj904PSk2-~t8dQfZ;MGT5*$xe^kFsqJGe$+zgr2zvL%2}+Dn*=&VS`1+VR=m|3 zuV}ImVo=-}Ulh742sFi5NLw%zxT}d1YR80XMMy;rj21f$!(}3E@rD}7v@ToMhEx)z zQL~{`A{Q%>-92 ztIQYxMj$m(Xor8amOrBt1PxJ)N@|MZ)=&^21l*uzn1obxqF0@(ZA^^LkxMWxQ+gpK ziN9DJoa!yc4Q)h9AThhKNT3pj3JHd-VMWUrSY9_%0$nlbAvNt+X@WHkmsA{Ch>9JIWBg|%E)$~I zatEPlio4XUZVlXyPqc0j%W&5odd1m_G?fKgR?O+Vn^}y&M2I!DGV9>(_T4S#5QSZc z)Df%hP`Oq_rc#Ti697f%j%P@2<*tU2L-u*G)0T=2fb>RV0dg(c2Kk($Cz1-gGkdg^ zj&15iAiUC|L^Lj^LSy8jq+b14kZRq4t|=P-~5qNJ~aDF=ZTDS3|`xJX;eZw~gSG$W1C3?>8`LQ=7_&ER)v3yXDB1!ojiHcuz-ef$k;?(e99mnk-i;^q zU>V(&CT?MXF+Y}1VP@+{1!7^Ow}G+Fq5&JZTRiTbj1%QHVaZO8)A$mtctTA*vLZed zXAx98#o;l*7`(O&5x^?u)+yEpy)arHiTVSCCdSOfAa>*-o(^hZ+hD%RG-Z7&dOX~Ne~ zgj0=rQ1E0EpzPh$qM)&fRBJ{+rJ*)8?og~klo}Q|X-lP3 zv@RmGQjF?_M#Cn~ut?RZ3nSr5DqE3B1i}LYRceb^OD7=RSoh+F4Kd?Z4V1+gh)8@w ztr+V<4CN@q3B~fqAOuVUsk5a(Dg;Jj1#!=+77=q}3}i1r5h_r%){J{ow?>pmQTKu% zhVEr!oylH=8WkhKKgB4ki^|p%VjL(Xc+^HJ-0+A15iV^Au~StoA-2FkgknS-6+){L zu_wf8M9&713KTUOmWdFm3`kql8!0WNI1(%1UU|85aI^)M9|B}=wxXd*{i(gSr7k8= z!cwXbx)W2OrluxJil|U5_38$43b~Pw5z|IBG(b_kRdhFVq|EvErda0;z!6JLA#`drs8Xl`sp`gZp(RGL6JlDJupL{A7APBnbZ2rjYV432AUPc? zaUdCdr?5qc|OgG53m6~PEdPJ^RxStyNcX-Q*3)mqH8ZE=Q7cEqxxTY_2T zUhH*aTp1RZg@qHXMQFsDZ8Ax5Dnc&=Mx}LWa6@~Ehh}aKB>+OSqO&Z92pSqvWvWJD zWE4|NCE1Ktu_{7cP%a`xyP1laVN^fjP>7{wn21v^6c~Tp%Ri|YDRzoA8nGlyKV)W2 zQKqHTBBlg|6c$J{>QHklJlvs(oeJ4<)l7>PYDr@QSDg4TRqTY!`Vd;-Q;EwD=~%>2 zt4^C@%3Z}cg}^8%V9{93PDJWob(TcjLc!uPqjNM>W(c9z50x&R7`b~9lyO1>g_BTx zh#MskkdTRvK+($9xL3H{3WHim1QMX~(nxFcDL~m+oahWjVm1PePi(A}#$o8xHANbq z+WuwBa@v5?Hm!Cl=DD&cxFSHa&V`H zsv}agX2(bcBetRyQxXv(ETUtRX!}vDv|LAGKt`Y~T4)h-B{NkumjK*I=tPR46Fuw< zntY@LM7G?hz*P|paq@>PKm5nGHn3%(rKvbDX@7A8M+U1@cOgV0OosR_tx(gs8-tRl zf90j6wU#g?TGpVaCI2Y~dl9JAFdLNh44q226B4KCu3_C(#1(xwo?NaR*AfVA#1&b| zFGj*-#0Ftt7Nk&taHAZw6`V9lC#=>~a7HDkLbL{CIEZ!dCM0Q7Zrs_b;#^y!mz`j2 zO#)%VFdLRZW4woQ;DQm9*%Be&|6QsF4^-7)nT(XcTGU zv4%7?#!?YRp>(lI(*`8=+z6{wY{LaHHHDcV)eA*Z45@~0g~Dngg3LV*1A$2SBw9jD z#YN#}=wh%`B4NWNkd`(b;azNZH~y?YdyMW%=i4z3gk0+85Zt5CBZ0zLxq%5olOK^X z9Q7k;V;}&5Ku4V5QPaJl(5AyBybf4ct*v9A-c;=PB7?AC$BIP48WGYId(rAf5Y&j8 zNDEdT%2nkGSl9%nGBGh;gpbrhq#!p+LqfgL2|eLz$t_*d-V_zN@d;Qr2C7EJOz?Cd z9EOKNVP;!DMz3C6#~_pqdkIcB^Z)=fwA8y5RoGBvZ*6HH(P>4tB67^(lTx(; zlulg5iUp!jLRbLeR;yZ}gdf?HREl8}Yu2@5nF*(rqKpkutWqohTA{{`O4LC4xfO+| zwBZI9pF(UwhMqhAv*y;HVx^@b6N7E21w3dFLLro7GcxP}H-&^2YwE_@ff!3;Bw`{_ zF*LG+K%}Y?4rPEqJsY&kvnmV|?L=jng-&8MHI3BxA*Fb<6}E(f{)EcJV0PdpfJ*1k zi8EFzH2|Ryyc&xQZKbHWbzvAttaOH5cEXRExRj0K-BqFbt|*jCWyYCL?T_ zTB$080UL;Qp_VEYE>?lojblan=O3xta3tMM#(}QWZn0T+taU zW01nO2I8_bXoC=IF%vACYQVj1kxMBh8igZ90g%tB5UGVCRTzNK3MuSFtM)XPKj^5j zTZ(M~UfdZy4J?dRp@ZOaLb0Yyc%)Q66bgg^yBaDr5Y?DtvKTc|Tan2TqfH}q zLNNu>)I$}K01QweA|}#;9Ufs4jUXiy7ay6#q4h(R9tYqWiAZd;5{rN+p$dQ88y2-; zOGK&_rR6hWh^6tRP_?1@ivz=6Lg%Ddt;H&>atkNP$!?2NRfk4w{JOPlNE9g@12a?(r=w8^ z^k{14=x8epN<#))sByzX45XY4XQwi5l|~SP6B3>hVdzD-L5wIs$$3B`m~)Y1#FS{%G}ZE2|1VBB{=xfzSbp%M#Y zqP|>u0jYcOYmE$>M!_vj9Ah!K%cDR{U|J_$VyDy?QzONZ8G)e|Jjm}V+UAySiDXTj z7?puroiy1Ha`kPD3`FdyCq#hUXv0EOV_Z^a;JUYH*$Y%+w{$}4@ZCj13#S+y+N|AW zMI&SAoE8A|6v~b)>ecMU-jS$USS`6RRu&owMw`$nRx7HbUZk?K@u-XlNSxv{gipx@ zqYM%Q!D3}e(WJy4x>giKFVc2dT3>n=jGBHWcG)YLBM=LXOneYSYiwLK3iy#fmspz? zZS;!NhRXy{HXI7Ao2@l5Mm#7MV`8-8Mh&b-0U5NTHcE2n$5P4J5LT_}Ve)8bqTa+x z+m6g?Xa$^{8RE6DsbWf$P2&LjC6uif7Uax3<*YajP0vFk~iBU`}9C z5t-Eq%s4Xs>4k;v_)j;gG!2HxkJ59G;)tB4Rt(ZMtfANohgz~qZ|aC{(UyiAv#1#m zb;5|Pwnbu$RU|3_2@`Fl(3Bss45K{jg#V%Hl+VhN2tv71}`i$AOkt@Of#ssWjrG+CFz@RZ2m63ORLiX)Sy6TCL)NL8q4 z%^h!L){DE6WePwJ0C7V?RqwG{^tNdy`I ztAq;H7#S926ar<^tviUs%A*uQMv;0}A|i|n!PACRPE=AOL~y!Q5)p~LS};zh37|o# zQaPztDyvnTbz-o(GyJrGKz5eZX+R*3%$7L1)T5fiN>3{ei$5b#`xj!4momU#CN1WlmubE_mqP7aZo ziZnzdJeHDHVk@4+p_=JdLJ$K5ikS&l{83=ric<;0(nvH8r){Jr9I@7@3=R!-qEf|a zj4*{tBxXn7#;a99t@aX?2H|E$xEf0!tV&xTMj^2}8gU2^S@Dq|XktFrMqyvvI(nxf zG~`3E?llNn(}A{(6NMWiMHt^~h+L(#6VVqp;>m18tA~Lqg=%Hos(<4STIvZ9HR}YZ zSSwT!q4uJoM7YJ5qe8{7QENd0R7y1y6tRkDlL}`iw(3zK)Qg&X+Hq(0Y<;eXfEblK zP1({o`w{wkURQfi*i9aFbdQ{6hx@R#Ue5zHzdYLIbmox zu@k@KASw0Kv8^>DG#aB;op8`b(KOM9fLRp;`RqT(o+@LiJ7FMmBJ`8ItYYN-4R9&ga(NgtK3r%M{1PDI_i)Y7yVugZ4E-Ka-kDG{1YcFcm3Q$zSO)fDq0Z~Yi+fFqG zX0X^v${*XrnT?XU8H&oH#ZHhAv%!K2TPUB`sNP5o z)P)fOT8XJO7e2$uofZodu*66sw4l}+g=`vxY7N5iDN>@8*&z@SJ&8Z1urd{?C1lbR zH%bD98j2NLtVmF@H#I{pXi*D{thNXz8&1V)WG_61_%6j=4TDnIT@8rXX3*{|uBHiy zCqctETNhlg_RzH9DA{y7ay^xhNx93=P2yhFz?6ew!iFCfsabY7p&xEkZxjkMR%%E) zF_$K*P_r0DTURu-s+X;xtwfMCbSM<+A`)tAXn4evQd$D;T@pD44cy9A=?1YeyEE9j z3uYyE?M3a_e-SM1X`vVZh%q~@X;VZ-ry#N7#uO@zsa8SboIIKvfXkCTziv1^y^5Bt zo^CnkG&Fxs4HfaKSPhJI>rV8_AtGt3jWu+O(M@ZkHSE;jPq7+=Y)wGcgJqU@ZNr+f ztqS!60)CWNqEjE@$IV#m)$`p_(^58RxT>s4%i&k&kSWLkNc-~#-~uVy1g@k!as!}O zIS90!y~;%8z&>XqaL~v{ObORwJX%w6W@Q%hg}nmqg1H?z;0(a1??O3J)!I14m}csU zJ5jmqRpZ(MBQQc-Qr1k7$^vwcty6I`m#RT(-8A(4NkhZeBZok~Rz(>Ng)kNq zqaccW#;b|a2#tnDQU#PB3$}YzE05>}=4jpVR_IVdpxmy#(2+u2St!L4m#D-WnXR=& zyV@Fs9*S-SEv#fx9wikzatWmzrPiqsC~b}CE)!a)kpLZx;KkU&#V7To5&t%N;Z+iD z0gyjIiVi{+L#|4;4Nj`cDI$^xNSFjC0v?E3Y1GoTkuWG2Nz=ecqs0)BRXsQYi@;uu zovpUr^=@^iYUzxb304D;cr2~m%P~0SpQ}iCMn-E^-3*-AtT*BMkFBTGzNzCtvy*mM^91_xy=hMLOK z;-bRBn?)sMRW-E@Z37-bk}Q|lO7l5e`lnxqq(N6xTvV; z#^r)j$B&&TxL(%K(LZ{}H#jmbdB&`HOV_Mlw<dd(d7A;w^W<3H~lA941;ypDnG1^mi^WwR4=L*i8I(7Qom0MLUz2jbi z5pk)r<}X{jant(MYc_7%wsHB~%!E*{;f~spYv)fLJ9GeL|AB)?Po2L}*4R7Y6B?VE zjhHvxbKm_BKD6_}?duk0$A@^1bmJh4u3k8E;@Hun$Bvyid%3u_bIdHvJ>NCf_ks*`{2OETQ|-gIeh%Y(F30yxlr2NGc@6!vh0Cf_b<&z z&wuFouWZYUkBA7KYAd@{R@c_u+gW%0$os$h?;rj2tPXfAGS?+qSGK^ipp0#A}q>QZ0S&KIA zeDay69)I+K4fE5JGV_MYB^P13kyODlZ=1f9z86?Q19Zez1H0$#WMkUMcDDP03xjc;)tIzWuj<|Nltb z-}~BE9^ZM-s=TD2ss8rHx|;H9$KL<_tFOKD{_al>72LR8R$5-yJr$gkxAy)=9(`oj zlaJq*4|{~B&RLYdbnT9(pMP@8f~@S^ z+%*55x|+u3x?2T@K09>ke8J%l-`R8OR&_{bb+qONF;e8wPzNV&hY0E?To~=i^U3_4HR?{^qmy@#9@@MtcSd}u*HA}&`HeH5 zz5D7<|NY+)^lxAN^{;;S-qGTY3Gcwj)Ol;RJ@}=^pZ(f5zxL&wo0iX?JtH9^z+<$t z>gusiKl$v)i4(_NRpcUW{n*5XYMKl9?(UwrzJ`?sxMoEaO0FTSPX>hX`? z{PoX%^3(tM#n1oyCqMnohi6M0I);4WbCz$~@#t5+_4ha-fBW^PA9-;5`sIt}=OlTz z+&Fpo(2=8u_kX;5_eY<6cH(+n|CE1Z+T7LmJ@NcYFFgD7_fBWZu{plMAE|oX;PX{MtFIc_(iEsQJ?)Yzh`H}nYS-*UKc2c-!Z}rua zhxQ*leB|J#pM1RU;Hj&Xof82u>2sE>+wt_be((=J_|D7EJ-K7W%*5E};K`O-XFmPo zFMs@_|N7BC%L)IN|9Si1#oLX8J~5dKH$VATycfX!y>ET(t4}|=WBsD^prPiP+PaGC zC-#2u-n;L-x97mA%f&Sn`&-f zM?ZVw^o7F8=APk6@6g1Y<(qdr{P;7^Ji0YMJ0&SOIWBOd@z$lYCyyTd?2`}Pe(lv? z{Le36|M*OCZBu){M|fJ^itSH+K=Rj+Hb=l2}ClBrY;H}^N z`qejfA3k@zq^h}RB9P$6aF4zG;`7hF@Zt;4?z(UFycuz!es{(OI~&SxoIiQ==&6f0 zZr!e^?--o&i_ToMcI&;{H?LZfzjXPMy!0sFv95-SlETYp5AS*7=l}js|NH;@KmYMx zzj%Gmk%H@0U3a3gmv4Xkxvzcm+uwcVZ-4NEzxm7O9$LF#){KO3pRt~X+gHw>Ja+Wh z$#a))+$yVS8<-A^oiS&@;{3&n7A{=4AU7j6$a7+-tD*G9<%{P|A3L!3lYRS-oH%>_ z@{O|QA+O-5lsPN5KJ?fVPd)R@GfzMDI1V*0GdU(054FaM!V9Nx7WaO7J)w~(#ea8Em%PyZhy#JH;-+b-$w?Fv!(}Twfu2*(@#b)KsMYpzQ z-G)u~+>6KjyzG?dfa#&0*80kl>*tQ_-Sg3Bhfkb2f2HttO~-g}((FYmH{7%1OHaM{ zt#5x5_wf#l3o_zEJcc@(s*4H^?0)avci(;QgFT;odgNS5>xhS6P*`+)Qd)NIym@&! zGc!|TLw%>m275bO>&vbeoH%~s%(;tK3vZQ_*LO_>#$lMWe9fl&9)0Gy=bwM!#pj=T zVBG?KLt}ld6<3bzdHc2BzWUqO{`l_ud-k6$tRM1=oslzt$*PSz9{cih&pq?#{hLi-HPBvPdF#@#PyY1opFVj1-9Ntl!TvLab$uQo@iTH4uim`lv1h;jt#7>W^kWZg zU6GRz;*E1sasBlE5B~Tj%3JTe|M9_7cocg@BxTH;GjGwdH5<2V-MoI~;yLLtfp>;` zT58LS3$L8V7ms1jxl31XR+k*5H=cj$OZTo{IyWmZWU3eAsvGBy zeY*SIx88bh--#=w4PC>N9zH=)DYND;UA1=g(gpM8&&3GL&wH|`=H}%~moA<=a{~OI z>_2g-xW0EfFg!XjYyQg3J05-J#g|`x>A7ciJ+OJj{Op9F@s8TETQ{zpJGSpnul@R$ zzj<@_!Lx-`ZGFSz9)YnLdHE~Xu3x`q}q7tX;&Uvc|Z(TywTPagdE!#xKI zit4(@JpDtW({j;!Kl1eRFMsQsUw`hYNABOUdSONs2Qno^H!ht%xciM?{p_c|e0}$! zv)9WTJNibZ{UhSjX3ooBx+H(evSs=6W~N35O!l=mH#IiYR+d~Vz+>v-&8n9E3GblD zL|iBMDj$CA@m-JXeBi!qo7XOx72`eF)=*thT6Fd7;g8>Y>#cWo?>}{=q^7xZV8S~% zIwdP_(ehQRSFK#NW(@{Z@d4w#txb*f)g@O>ANg$WCwo6TT5zqju4CvF2-x&6mIW=+K`Km6=i!PQ$;F!2tF!AZ$qwSLp44d|=V)pwc@JA&Jpj(v^k4cZPM)ce#4(`LiWdD(q z1(&Xu)U*vw`G?1+W@OLCGhyv|T;L05Cxv>B4fb_5*OXj6cjCyQLx+!@EVz6V|>vNcyoSMTxfvT*+5)z3ZWE>zB{V!kgEf!IsLx zi>Hqsz$y87?`MaOow-z0)!ILH#~U|9GT3qXty;Ed?(B@D$N-P=;r_1Xn$n`{moHwp zbgihYmKUpERO&3gp{?3<|D#V~B(r_vs>QQYBK)R?yPGO-whw)_Z|~ku_a8oX3h!w( z9m5{}L19rzGZ)~=uzu~zCG%%<+;eB7x2>V_)|Iozj~qU7{B*&E%h!u*+K0Wu;?rl% zUA$ubwg(^Gg_n`7>sRLIWhR9CdyMtBRu^5qaN**`3+K+BJ%?|yy18p$bkZ{*GC6zh zqI|qtqW7MW6dmH{IW;!WQD0hk^%BbE%U7=9d^dHE-0=&Ej7!PNUCb+L(}s1cmf#kS z4G-|*w^MTC3JMNWkF&LRWMbMYFbdR*mo8nhWXaMci*hrQqQioGJ3saHTD^MJ^2K@CDKR0w)5Bf$rPnWTG(vtsewnW-_s9)oSTsIHs?{o#WL4jev#hdkrKt?UyV5tERbm6Mk@XXcEQgqVmR zpQ(}F_NMyUn(C^GvJyt!(K|RY=@lG1BR7B5hAsC#_@zf5{nF0+w{2XNKQ}X;1Bj+- ze(~o|pF|gN>DrB(w{GLA9rN%Fj=;NrR@RKvv3|?F_doE!j%`~upu?Y)8s#_9-_}r7dJEKN3ocy2ll694WqoTe zvI;@rF-hr}*(ft-W~C)W1$$2nb|Ga^TUB0yl*KKK9lCl4(9QdWL?>mUqhG&i%hoMh zwrt+81~+j^q~GLVXLD`&t?RfQPMkP(=Iq&m^SEqFtLmCN2d8|3Lc=1WqGRLY;$ox2 zgM99cj|>eB;X&Wh(9qn`H#9mi<>3<$8Wo?Kg=gRDb?eu!U$=Jk%4PZUXQyFoGBJc9 z0g@KQH*em&g;IneK~)_s$GieV!$LzsLc@?qiH*cd)Id*XXJP_4k^doERU&ec9gH+K#g^G&(kce2;HnXjDRK=FFTqd2{hp&CAW1 zos}AcfyqEmM=MTuQQ^(v+ht|t6_u4$)pd=nT?1p&-u{6hVG)thaX9IjY4PC!-kwMz zjSqIWw=}o3ws%U@Qy%CUcur>L&08>k-rPJ~wDWV)V}iUU5JXEIM&8%1T)up@u(-6m zyu7leQIkG?IN9Oh5m9l8$%(NM!Tvs8o_D4vM*6!uJG*-N21mvwr#*0Kqicx8#WXWJ zBP}H*Eo;{7ndu3U!M>i;<3l}djkT3!w@b<@>l&Myo10tOI=cG?MSB^+%*vfRH!m-5-lC<;m*>x$m64hhhYNOm zpbO+x6*wDJ)m4?)*5He5@9rPO^)NVu=bFEt*VH&p>=c;$d%C;2y1E(l_~i5*PzNxh zl{IVDEL^B_@Mz7SKPNjgV@7IxM1beSa9>wjb7Oe>XnR z*;0=it-7YRwg%DT>#VA8>F8p3J@`Joe0;pUeSG}`0s{m5ym3-SK{*Do+QI4ICRASgUK0jDD_HZ}p& zSs+eELNh8X(B}?Lbthh3%5ImIBa>NOal80-MO{mKM|&H3*ul{Wxxxa2L&JD;hJ*wM z;JTWeoc0O`2@4JK^F_ZJlaQ1c9~&EwOE5b-E0ZTD8BgErMJtfYLPK5 zx`}tQrq)*67`zMzhDLC4OxwIILLM6#?Ca^pkO;|OPfwqKu$Xupe@tuw1{$+w=geWr znVFG_zBmL=oWaf(UKnjHNXJ&-Ot*J1>h{haTnM9MINOLF*}dtB@$s?I!JhV(mX6+` zk&&T+!Qlx{|DfRDUf)7#fSFf=?ehB7)jGSrVtwTT!0z~F#f_kp44YoZW!Chi zUtA*i7JdD3<@x&h;o6IdPeMsfP0yUEr#ff$tn4h@kV&x|Y4mlrqaf%?+%jbqRlI*{ z>l&I`aK6!7OyJ5!-~ou6&jh&-M~4Ud`|+gV%|jRAQMkU-_*KrvZO?6XMoJu>*we_l z_jNS!O2K7VS%p$vQ{ULy(ZjKck6!?i@R6~+7NR1;(2+-khX(ok@;3GJ^Tn;?&D%97 zD43l*3OC_lApzb~qqv^BI@+4~@I%z)73I9&D=KSnvGfi}VE(*-lT(rtklqgu4+{$k z!g1yLRpB)ytPIUc7YW zdeQC5+J>eke5Jj^6SxHLOpKyq!i)lL$}#j$yjk&0k~ukjX70kJD_67NX|{gtip3Zq z#e@ZVqw~gCqYfjD^0HD4l<=^`oyjLdZ(m>k;3!@jLPODW-{F%C_e~eZJh&UsAGD(% z8y=hT^b3he&YYb$e_{So&I4>*w-O_&w1nue09@S|5!B;uFE1-Euc)Z3u5I9Ra*CY@ zAKuAnsmXDXp@F_$45OnNQ1tMCR@FAPw094Tc?3iz;0m0(5K|26HgFiYU=D^~=(@-H zJDTb^Ji2xBCgw-*yyU>4pWh>xc_+`z&csE9-WV?c6N5b+ZMbAHSgXf9(ALq}GdS+) z&vTQAk>KKGD^{*pn!g~A*+#$Vp)Mq;N;r@{&vN0?mBNxrJmLF>U=tpTjyV%gkhBz# zb7+FoJ~+_V+aovZAo_$!ys+Xr$D|8J$Ez`RShH$*{(?CfiIIGRYOSj*xq0pKh4Tex z&zwGW8t*y97(Z~Z?h}G{`Lv8o^qezN5@W*AZQ`_G9*9Fho|p0}4C*odmmyW|;uUK* zZQXwF_Ioz2SvqePvO|8;l2gF&>-yD8cnQFBzO1skuDNSy$}cQVMg?+NWv0Z12jZ$l zR=$-5&k~##^jdggd-{j+Q9O6ilI1H_EX!Yzi(z^ch9LSxfrFIcvE z!>2gID_Sz&T9ICxo0FZE z7=@8KIte^VFdcQHkP~Bd&F%a)gQAkN<}AoxzIy#ejJ&~(cabn;1o5)LOTs9I4_6Q;$k>?IRQYXu^B2zJC8y{%PIzN`-?&eBd|LLL1xwd# z-oE4h9rteCxO(ZlnJLks{@xxFLrCMWLn$jO#m!SvQQzJ_?%^947M+-ug-Iz4z1h+8 z3hZoauCKa%6JO1xt2c^DO3SMoJBFrlLE(HO^TagYy45Qd%PW*T(^~3~3%QB0D@$2b zLkE%%h&nYpZy}x{C`%UQWhI6C;VMD5R(-qhD#mu#Z^|IOu5Dn_Cj@W&ISZDqTDOs7 z?~QBn=cGjk;>EnZzWnB;vnP%oIf6Mf&Z6N}r>?DU%rg)M*|T#oDxH@*Gc7*MAM=ER zxG`%hd4%ZC&<}Sb=7_|MoP{ga-?L-qBaiJu+T_7|)-0Nt819QPePdrN`J{4_+=xZd^Wpj`!I0n)L3NKdYj5`T#)SK$&;tfUc7$02CpIrIw@l|u0OoQbB1$nRx;iz z@eYbNuEHyLNyKaDC5(CbUO9XxATn{r?0JjPQ*FZQ+3Kb9@jc@5?jbX0A^ASMZ~tMY zD{9(?Jc47=kpEh{1qb@2hjwgT&(}G;V0aFrizve@l)Qvqy?ML3xo6BfBo4`&C9BpW zx$)rr_ikCYY+iP9q~AnOL+Le4rhN4N+i$$~hu7YG`%im5JAUD2RqMc%UwC5H+@-7W z#jjbx-X}9TIuJbs-~Fm9%J`7NB{G1QGh~IB?BR>wV>lt3*DRS!>aot6q6^3feuT{A zn{T}N$M-(mcjWA~vc~RFuaLMIdCS&syZ^xl?z?Bx+7tC4UKVea*R}PIOnC=J zBxK~wU%UtrXQe0OtiNmrv$vSFbUd-qblT?%|Kj6X0v`Hn(OK-saG0#)o>3qp#SaEghz?~o@h;rvIT7m?`;`zDRsc~U`Q@9zba8qI`-~=YC zPhYq$cY=3V;>?AsHsANqBfFkJLj8$H9@x5e3FgAXyhpp6s!9;}i6e&(A4Ly)rLeT7 zrFX(N4DaySbCAYC-UR(I!}gvW?(1l&M~0H4g2LkR8onlud-C2v-_2Qrb?fjB&-{%a zlGt?>#WyaUJ&x;p{{eK~=dau>t!p3h430(DJwJa1(o|cvN@_Y6*B}#B-7U4HH!c;N zIeYFRrt^wQYg+pz{lXJwAUnBo?Z(YG-RqSeOAkiza40RjRB-A9GAGB8fw)qH86#XM zSWSSTSSp_KiLsG*9hRXCRvpxEaL3URhKm>@2Sg@i&RKv*{D#fR78WtBI_ZTMM!e?AGd?{fUbT zNt-nfiT!(Uc|ZK6hj%`3?`A$PXC%d7?qIkVZ#xZmi^7{4#}CM|1R`^siKIq0UW}4s z!+as3_*3 zs^H9NoI~7`n4O#Uk4(y%yJQU#*$+SRh$gib=cGpYPY$5}#x;xiwj)Q6pDMU`9g9>t z1}FIhOu=}Q6F|s2MRLm5j!jOT#;jE#&UN2}Z$$F!B^!1;_RMoHzVzbrUwPtTOmyVU zhz*?VslR>ooXlA6`S63?dk-8xFS%gPV04)1OYXV%-tAjAu0g^!4Nsgg&e33n4AwE= zHYhBvz*BOdJ27xp(-$XP@mqcm(Oao8=9iLwMXsrg6Dm z+S|5nTDNNH{2UqAPmkb@uB8zd9|vD;ok*CBOnUlZOp3Hue0)3>0wHC>)7vlOf94P{ z#wbRSN3o2Mxnw6aIx#(a&U~zDSiWNA%2nt$krKwG6^;4OQAs3XOamhhX4<;?hmioq z1reWwRV;WvkBgFrrMwnljCB3_jhn?7YqVjRjF$|)Fhnx_B?jI>7&anojO!}UT_UH3 z7o6c~KP&{w&ck?=9mAH5>sBvYh}R3G1Sf}(b;6Bs1Me-@(Th|!b@Yu+`vylPVC0oE zXLk0C6u!dqnr^HrzQ$!e==*q&oxfUCfnge#FY(1GHGRemTuOQ1IA_xqJPJ0g$72Th;uH)6cmm|rNssJSDPEayO?M&nG&nTKL3>ZHl%DR+ zjt+h6Mw$-quRi{GZI6nHjf>Scw$KnHgS?S*n;aj7?}2`l0g#N0;*AU01-u>lF)tE? z7ep=2J^*jO0eEdhaw8%#GAc4WB$z0sISeuoubE!FUy(%^K^73H225<>vb$hjKsY!; zlCh(Y-(CpbTKLkRhtwh7%V%e2q+$s{L`Wb~A$*e`#B1@WNi||&Sx9(P3|5vUCdBht zcun1z#0w%`TKfC&j)!9aetZfkK1moMDdG(T#(hXQ@XN!hFI*MKNtRaD@g)e!$N+S| zNvX(9W#UaJJr#F&bVL}w7;j{oCMPFYn0@n-1eY8*(>lx%`T8JJ0{0{K9Kyc@Ag}f~ zkFuZ-c|v4=q#&y@PBJL?)~IA*p~0Z?@|ePRfp>2tI(YYhf(5Jn?#L=Wtomc&`aix3 zBTI!fb_q%7#L%lEEie;#hxAn30b#*RRA5OQ@~?Or;M&H3`*s;p1l6^;H<`L+?#m0A z02Uu4NU?+uKGYLl<9VdaULj|VONO^EPj+-La#doHsCYgBZ@9pWvHP_SAjUsQ1 za{kB0<(x@=4NlO9GsDKKiC0Ka5R!zxNEqrx0?$Zd@hj$LWQ5-~cO%H&e7@i^;0e(a zi&O@48Mqoz{ zW@U9^3F!(v8ZdQ0PWChCBIL{Gw~Z;0VL1wTD>q5U8hf|r5n83VibR^SgJm>ONqZiUUKzm5^ zlt?4u2AV|j4jBc!8e#NUjvP^ST~k{ZMkl-wO~#U69&Q!6;jj=Dy%37^isx!PzCLz@ zvCO0g_;`R5X$qOfYiK~u8#5`$?_>Uly&)Fm;_hQF&3=n>BIw(sD?vXL5+058RR*78 znj6hZM?Nh8L)-zpzab+~QjEN4Df2IqVAR~XH!fr^&fCy0zGSXP5Wh%NVgdeGYS%X-FEPBVmt+`(Fx!V@j2sg4|HUoXKxN--RiM3S`=tYHODJbYvWJN1RQI zjEautea&-?Gb+6a>5$iy&P#3qNlgZ0M#5tXi4#yZ$~0t^OuBG*$BZ9V{)UE=E(RS1 z9%s^1U^0MRoSgG1$>wYK#q-C=*^%hY!f`H#xiTdt-3YUkh>rnABlW6yJSCWpX2G>@ zrl90zZLpV2v5lY_xhBtB{;;7LFX_4#E+$`ov zAwvt!1)$*j4dwTzHz;2#&}(z92$vb>LvVUPD-Q+sC47`fSn?#{q?YLsB_YjsHWR9BaC$D+Ke~01u27aWUbE#(RYEbGC&KVC@P0{cxdi3}k-DzySyBxivZB;f*2_5f}~diGpIsc{mtedpI09M2;A7mgH%H zrh4vNN-bhHI@>2Vx>iF zVrm8^aF*l86KnJ5WM*V#r$>ABHI`m2ICHV60&jN}jorgj$P;0PG!CiR-0Z}l@y@F2 z1t(9OJbB{y$$~4zNKlSU`vxI%H*02kwC`wl2bT2W7V-_mlPoEF;p$DB*RRN5yd-~K zdiZpA^|jMSj~86Nh9x3cafD^AaUh+GjPJ&^i?gF98?Iwr@Nq0!t8MS<9+(bEn2|Lb zYj5)BVI4!X?{FuELd{t2!mLL(rZqzG8kLYXGY@MM6EHXKHPPQ%RdnU@jf$2&%Kek;H|ZN3Fx}TuUt5KxKbT9p$W%B+ESQanPFb++si*E;n2gmvlY{8=TWU&*YkKea z2S+5%T(o-215bYKumAoZUU~7sB?%tgwS^}>eB;fJjuo6gf3>uwe{?!1Id9351-Y|k z#QKkRV`93lA$@#8B)(<5!IfRVbme9VekRc~<&9;y$byEV zvx$ibne1w6?ZMo0Zy(OGZ)idWCd_b|&0n(a-UshpH7k}&%COP^OL{8H%PTmK#5eu; z898&AJWWeVz$_~!WCA@WCy?^-xr61}_4v)j?ZS&k-~Y`|{^yOoSQ%P}wLC$Iv*$0! z%}!5_!>X0ZzS?W2PhGrK-Q4FHGYhMNwmPz)Sk0oFD$px4w#%+AFgIyNb^o{P=_S{ZPm2Rd^ZgnTp6ie67l7i8yP{Fs}QnHVzN(@=)BN=Q=oPlsi#-0}EVUikW7V5#+2 zo__MtZHwb4n+i|ud-wG}y#B}c_a41i);{LP-X?qA^0k;s$xV;;8%MgQv8t>bH_RRX z2+YRf%^AN@%1({;8EhyjIJoDX*MI-JKfL+=feRH~Sa22;nUI!=iP!jWpW)^*=6$Xe zmbFfV%~-Vg(HH*mmB0O8|M0^f{{8n}*tse*u&?66q1}J{{cnEx%U{2~=fsU_WJtXu z)AQJmWW@z}PLA}pRF`1}1oPWiHkyj%QaPOX!eaGskAap-%wQcqeDKh*vzLo1Tlyzu zo;nZ%j3BR(jykNIs%>b+viSJfE4DxW{5SsMufF#;fBVX}UwV4y#sx{fy_J^^?|JvF z*M9fv@80?B>`kVLeIgQ(&B#c@AfBCYYeQ`<*3@+MW0C=@L$FFTGb=qI+;^h4vFzH} zqx<)Mgx_l&T~{^N*goqwXOXVo_L@kR~8>1 z>5pV#M}5hq6P(ic=#%}pxNCaugv2GMWzSu*YR$^Uxmjt6v3Qms0W{%(pQB*n8EbyQWEF9IN;CXfsSUrJz$2pXUq%h zD}wQ;n4L2-Ee^kX>2EB#h^66wdiPzy~|`J4C&&x31bMNYNfKJ(EZe)@0!`X4|0&6|6UoG+?w9}7&#%3YAZZ26LT zS@FRhqrGkQRn?8119)POP6tF`Jwa~n?2H8Drbj!3Y$&Y{f zi{HQV(ZSQ#D%(fAf}&Gr&tEiuPG({Rj=H@b?>1ZqH;lAaa8%NaEWF5JTpH@pU5PLH z(+}T%e&}wdhyv^ zJ2ott73bN0>*U_|-g@JWH{N>pqr>RRTKXpZqB9mOU%3=3NRuPHhuiDB07zTbE8B#bVonD@A414ef)|n78C4Xa15!n8}O8DBRZMLJ)=E+CyTbmnmr=#rRk&oW~!>hk$`Te{5FO;>71t!i~uyomy1+zKpJ;`hg zhhTWQN0wb?0%zj8j`GJ6?i*bHegLyO$FXp~wzX%>Cld2$3pvF(3o~c|J{ST9VQmoR z^mFFruiCuhOS^VG_UOa+t(zO~)mwYB;Lu0!zV*iIn1Ox&)05Y#x~4*tXW@h`U5rJ` z@iEcSnEsGeBK^I6gOhmp$3!6w91%E$uDKA?IGEz#bl+wCBBpKFCnjq?FYftyvr?mj zeE7PL(IMZtBjVC>7Gntleh>S=))lkk{Kq@1uO8pG`~5%RM=~GmJAR?4x^pTl4L^Fp zPZO3coWr@%b2qBG zJR&pZuh@9cwk>P&^N`n1#Bd8MiyErR%dtoVO9mp7GP1KXl4JNI8Qkr+3ojR(l!ex3 zu9UTo$nOW{URPcBA3uLiOiqdm^BHF^gY_2| z&*JCN$4;ENP*~AA>>HDjw}=bUvDzvX>kDI$M@Jsp8|nYZ_%w88AYOx&ze!=3^XGK# zZNBgAR4P`ur4kg^C(!R?1z_$Y0M{ci6>@eI7=B56M-KQbu`u2;iqg@ zE);Ol&*_3Ir7ie97_WX=Xoyie(qYKgg$3iChl`Rj@|I%G9LKaQ55E@~?rN#8xOMq7 zX8L#ULGOS5R$b4ee*|*bI7vufha#^XheuoPJwpJPfpwo)1e%nLH~ZLFrYa(%uoh)De))0F_IoxgpPL?q>!iE6 z>eeOvfb9Ku-+AY~-TTiLHx1y|PZ@JCCpmZSJS>WzI}6KzF(ExNfR}Tu^6}+s%rIVK z8j(mZFE7Uo_4TV)uW|AW-E?pamQP^{8_6EHjKLBd&LL!Ck_n44)^EM<{`dh5p3%UmZ{)!04e7o9#^mgsU$5+f@i#@N7kCTvi%ia(IWr?A9?43{2p~(usX6qdqnMHm3&WD9vB569oM3@b z$;~V0&!YdldL8rTZG(5XKm}6`X(=qcv@wr`v_}NjZf4KJPvSRVzHw#}R<%vy4W*$P zbLnUBT^%`f{(5Nx)^Y?eg%*HUOJvC+IM0H0VZ(4d?GqS==_L4`#6mk})#Ug5TozS) z8bO$nAeIQ6 zz%OL#I|jy>t@h@6^?0O$7&aaN9_);eu?P$HoyO1fu)LJ>B(<17#&0Z&ipwxk^a_bi zOr61TU_vZXz4*3LQm~pkEEN4uLNYF~rOTHt%FRlN;qt}-EHJ7myNP2yc;LwCOZ+_% zmcrrAL2{9E&PZsdCSaBltLd>=98(S`{@%DUu^yJGw-(M_7vH>js}wJ}qh7)IT>>ny zI4>rK3H!L{Ff1@c0?#K9Q_Z>jwI-I8VC6biZy_hy-+{ZDi}{N&3>?NQGIIUQg7WLZ zQc%p#W7#?r7R(n02KY?N;IO7z7ItH>hDmBl}(*}NOLh$hU7CdtVp$K*#1~Ok1;3~ z!+Rh*fc4TythKhZv~Y$1>nR5&yzt{Y^l|u}aakekI40^O=Zf@$zsy$4GH>aX!q2*p z-!7Hk*7{=cC-3KkSSCCZ_?b0Wt-8T@(J{$b8EjJ>Lv) zODDvJ`Fl)YDfk^<{4gtH)@)gWjnIOTOZK`mKFD7I=4=~szBg}3-zvCA(D1J08eks!G{umS743%|j-S~~H& z!_GmM(^$^ynr8Qo?K?m1K96}RLXY_v<2->?s#O-(s2DLQ#WJeP7A9(%uWVb#47+pb zB?x6c(bd`NF8=21TW}e*6*w(aR!-0hlP8FCbU|@#rHhLv?2OF_3{BZLw z?BebWL8r@gA=(n;9d}rE?6}8$F13yCm@#t}D=1SAeT8mUhZDHr>@f_o_TaHay9h2{4#TNNSV`+gU6E}y_BZXerJT{d1JW=FDVeL!GQJ8aky})?P zCdCI>=&-C?ziI34gSIf$nj-FkKa%B^H2XO5$na*?-1!S+wZV>s89!;lxRHI=&*4kI z3v;2*x)CH?eM9l35|K1ThK2bqJJM73AW-xfR>{M3`X={rV?|0? z;Y+oI&I==XZo7wBT^gcXdo1qGn+c|J1>YxWU*y1cyMLH&qS-r5p8mjshn8_TTr_{K z)cc)sH<$*yHC;c~jmhQ?jLER8U=R4~ch;@9wGcOGP_`JNDdx8 z+Ks81tc9`H!%GS1{C8(hg8W36P$gK^Thrtj&fBTXV&{@oCAQw^sr?Pg9GpAndZRj-G z4~)gc+xnK)LpS>^EQ0d0mz{-tQf}f-)^p;-X^bU@hf~;Gj8LYrVV|ZADa(aS4rKth z1N-G&JK2(mL5`p0@)9!>ogvvov|!oOIg?A5siv5H6`0^{_>}2BoQHmJ1uu`Mi&&P) z6-Ir&B4q zy~YTeo#3bTq(EsZRXhD2D*wF6+Hp&4czw50EU7b@qj)d0YcUH&3OgMOpy6C$qQkIu z5mk{urPfEufl3uS(9hVxV57E)e&Ts~=qMruLv7q7!wE!sV(F|k)~q-)*o02Uq>7#Q zOwK$Uc`U+Y=KujT1JR)~$C|;RP9dY%XTUTgxa*q0Zbp_r5@=H}foH2P=M;PcWU7QE z_s3it9Kqcemorp6bV;^@_(V?alsG|^%^uc@F35(t1DD6PYS4%y@30O*J<9e7>jK0G zeQq8zVY;?$_!m668c&K<9M%@&@+|YVo4qFv?y?c~M&eCvr29}FOE=Wt7^)x)<%Gyo z;uI?lo*bq)F}4iQ@?v|4OIMK0|t+1{`T9*WC2+jRVG4>)U1?~o0ejL>xcfEPMD zbBRf@`- zHAM4@^^0?!1RD%50m8-`%Ntr}jVsz=s+YL~7DqH#CK4TN$mD+`uipnXrR5iZCFo~+ zwrO&$WomuAefI&mpu*tN=c0JcR%3Bck}ox9u4L2$HN#HEnrRSg?PBI*$Tm#6X6bg# zqC(9$%(9&nCeZi{^mNOE;eA3J=n7I^S@@@75KcfY@54By=qPN3HxriwA`h2j>~)99 z`b@TcYy~9sxI2ISZA~%CgYLb>5gGzjC6R|NI12u!)(MjdeeD(~~tRoO~P`75!or~{V>_fCn+`{^emciv3 zY-_+J>zeSaWjw{>{hhjL#m7!$K5NMXxYZAdRSHXIekj(*fvk5QuGdSE8|mac;PcIdYrU6CgQDd z>H*3 zSHlptzO~0p-)qDi%;KlB4H7@Ry zF<_1)pHgT7S>-6pmQjq%P1t2R$hFgvqsPwOZk@4UIk)7$_2P>!zVP>+UO9JC^Tk7- zY}ux@8K;6X7p@_yG4H~s8TLozzIn@zJqM2|&;bM;*D+_wLkkJ##nJX^&w*_lKiYZZ z!krQA)8;OF^11K-(;xllAARrH)yp3k-;7Pgjo$A4RJw03-p7ab?cRIj>{SM3MEm_q zpML&@=fCmP6NJfpbkXFdv->u_{fk%r;^qJKGC^zJ+r0a*^=|AxxkJEguUWH9H5AEB#XV0!3+jn)}Xj{1Y zH^2K2e)tDJ`WOG~_rLqq1#O?7-n-$ASAY7G|M~LI{`Q@XTX!BfeZ85ZJ<{37UIotD zCT;GCo(u92P*fhdAS#63=R{gLdIZD9i`UU;a?hZx;22$fAzv<>I(n?PuYKm?hoAc9 z^DlhoJKsk6jADKI*qg_;{raze`to1Bwrs~14nUPl{o~NbJo>d~zxC9zndAC;5AVc} z?(JW{|M9+K7w)!pEqnUgzw?j(=nwzlZ+~qmYTN6*Sj@4Kb4!T2@A}>TzW$LDyFwrg zA2;iu%~pZ98{9?T&~xF&tt)3aDW2)x zyA5t5O6T-tUwz@FfBvuk)xZ4FAO4dcy!ee3)BBEm@PGdsffWDvkAM7Me)8&??ZqHp0#xKbKm{JOTYW#*OyL5x7tlGq7T-s zW%XFQ^$5sr6EkMolrgtX?Ax{fST7z++-Lb}{pn}8)L%7c%-Jo!`agg1zyIph*WP^l z&0oIp!T#RqbD4_|-fr!W8X zFMsyxYXqy@xpUvq3wK*O7p++N;LP#;y@z(=*T>cIafbiiu$GR6PyFWhU;5$ieec;v z=5}!XcB}UYwmS9?y)$acyp_Zz`}PY8zcp`$#4r}GpWnK}eJ_62V@3|SetQ3=w_g48 z|N8HL{NsQ3AOGxs{N-yO>^;|nvBbAu`Xe;p&p*8q9%{NF0d?uzxhr_-%y{szCy6sO zud`ixp(A@aDSm=~&RVQDdhd>EZ5fU*YQ{(J5^m$1j>b;tU~9%Prepl5zNJZ?NeqiUyYmdbI&2&ly&<-Qqt+OvaDRz28D5b**lj8-|4?DvY06H3~^SFfUO9u1&TbOv-ZT6VPu^@wok&- zo{&Hk7^x%p) z7D-qbz`xQ6<10N2C#n@hsD1pAhh|S{A=ct?hhN@->Po&`qjjGR8Ci*Aug@*$SoM_% zB?#JcbPR4nsmWgM^>;Uadg^L_%hWkbRy>T(KIzD=^`7R|1W#9D542C6vy^DK=mh2v z#&86|MUjiUxv4pE5u?9R#6QLqVd_M-bsZeQMi19rhz^l*4d;L$=eUiVptB28B6TFVQrlYS3RkS4EUJdKgm&8xS_CBb<5;g ziDd@AE^s+{ z;M8^b62Ub;;i6SXSmf!k^Vn0hPUxJs{4r_ku?azMjn%zq&UN+ZaTB@qSSD2!`vTTN zc2_%@HDQ%;?i#RSz7|;y`TiMe)seckVZIHyN1VRHgfZB>ek}*cx8K>Y>*)FGL)so# z`PFZJ>o=ZycoEKllaLa!m5n$-qbJN-LTFSr6ZcPUg+F?Z5O457`@Q_akL^fvD#N7p)|jmaE85jt-oc`G&a=3@5$j?&hH;{ ztF@nzK6YWq#MuunTe%W5968AA`l`RFkFc!Ad#(;0-?ebrDrP&O6WY1NM2T|&SM;5` z@W{V$SDv}pXJP8BYy2@|i4BeZ1RfqLPhAELU*yv$e|K)%ya_JZyz|J#rglQWE?)|7 zOhB5-$w?33Y*C54PHeKr9+v!=hVQrobV%R5Z5JW9**qc{!}$zLAmqRzJYrIu0^mX&??c|{Q0F*hjx9u-VV#_w|>fo zxV>}!(iIQQo;dvWRTNF!ly##+`tMx7&~y3>G5T7tC{w_COxXx5*BwFYHf-9m>#%Gt2~)ph;RDlQ0Kz1~ zA2^GD_Sw;%t3$@mTC(cl6%Wpv%}JeeDUlt{Y7@ecUFvU{=+l8BRa|B_sh~ukM)Z(7 zqlgx(AQ|{xc1{}Gf92$-+c&UHf`j>anz8Tj&Hwy~kK*uA~3L;q4pVCkW($lb7!iJ5EZf#H z3ja)NYrfHQaQlXJYd_qAM8yV4>O46?akSu$7x(Y(6KAzv%_WHb6Hh#j`OwVCE&Uk& zZTj^ufBuVKv7DW~Gj_^Mj4+8(h<0>z)Acilc5mH`ZSg@Cy0MeH=HaHkZ21aIaPFTl z0-3OXm#wUaj2=H3Cb*xgsTtE0>=*@O_t9g76To-|Lx9Jhc#@ze3#PZ+Id^c&+BaVN z`QN^=Zu^mo_eK*h1Sufz{w7`X?)(@<`Bvgi-W)!mYXQ+PuoZd!*=L?uKKs7@i{1M_ z*@n9C7z+Gm4zPp{(_v2b47+3uvH#HN8zVdBuX_5~7chr>{+Y)XO&@*p`*f7oM#Ci~oFCh~M zjdQRY^LuVZ`?L*{Ly!XR;m64(@0DA`+L)-wIx@~%g}XM!t#>ue@Ymr6MlQtMAN0wa z0^bZ?`-hHlWT3?uP^?_WhGt4D0V}wE-%5xTf;kgN@;q^4ZPJY zgyUVj{E^2Wf0O_%7>CJYo{$?v$-;J|8x1I4j&h6bl^e|k%o3YM5oCs#J6~DNrT-&@ zU76lC*a~COe}c3>m6+;z2AS)L@rZYJwx4k_+K+1?=N8T!HCe zOPz?#9K`dPx0nqJ=7bB7Ns4CCqf7kVICDE103ip4YYQv=2siX7K(J$AQG$%R!h{_c z>289K-NU>Isn7o~!i5V|>}Jg57%iQLv>l4Gh~2KXN3zVtC@hYt3Oc!+09vTTb;ZWf zfV*;b?7D~!eE@^tYuQi{bJ?UYujfu2A#kgL7NE>hkTc_w&#Ep#+wOzw=PzczE)z|~ z+-Nr8cWvLQ|9pV$I;SwLN{Sh1T$sJE3FAhQyZc}g88jdPrP;*s+YW>%(B(yliB0n4 zm0H4A%!G;p-BN;3DSB4KA9DjWGZ|xRnRK@+6@XP8Qrbw7OE3)GP@{>^`LLOT2~L$V zDQY>p{lolVCo?;L{d~Gunau zTIqBFey?BYY56Hg(B{O7}Bw0U@cZ0P{rHD-vk|;My>}vq;AEfX3#vt z+6H~Pb*DsrXeLY{UZ$-5p;SRxC`qioajHV;6#q+(0-NG8jS^8SvMfOQZV^NKm?F#V zMh+JZ6(huLuSyPgraYJPcUYNhiv76}v*2V~)lakWCE{Q5anZCXlBU zSK*=Y3U5@aZx{jYd8Im$*%+3mq6Zrd8RCBiwu6$63eCnP@esna>eh9-dKFZD0Dn)5}MwhVi z(w5<`&}qMqTIW7rt9xlhAmO?X&mv@)xHzY>aj^^m6}o-<(8-lj2$>F8bg>#>J)m8e zNqC%arEJk-L8BngXcNMLPf*E9kE5#!_Mi-kZunqBZV-e>D>a-yW(097(SS4FAhfE) zW_sahEZY!8?Nq#0Y3s&fs6ADI~k5eQd31Z2<%Ie(n-U>nyJ$n`W&6m zV)x?_VClEqlUj>wv!qfMFYz#;W%y?VfkfI$Z5QNME{zy$A)810xrWAt6O)x!C|SZk z)~16#aW#3H0c8-g;sQT5Sx~FQDqJa~!IdnQ1FBqTMN2t-f+*Z`)m>KRL=R>T<0bi{ zJ_cp9qY*je`>suxW)m%!EeuC|Q$s_hrtqK!<}nTL@~DOO=5@E!W$7%Li0+t_uey_9 zH%MEvPqD56H2z2=wa(~_EhsNVxw=#!v*wqnruEIqK#8TLUZrO;BjGLyQreh?-htL# z3jnnj>hNTW#P}GonxZkIK6OV=)T=!Ljpj*1ElNmBCtY)zEp(~!&}gB`4_jDa2s-8g zPGmGb;Sr}suQhjqJJkl-6Mpf=>Y?Id2i}&4wwrHFn{Uk&T_BB_N6lR8v8BdbWpp{( z!=0XnBt6l|G~jNhu8`s)RV2{BN#hD)xXesebS!2Fb0yrMGd2li3rNjI2F>FYq(yH9DxJV7PYcn$a{$RCde=I4I5CWJ6+Nc{EH@)b#?jj8ZFvT=4L^ zL@QKr6JjtW&dMf}<`%}#YTVM8(pD%CMWafMn;sazgtkx%^0@DbIm90Ylet+EkgR%y zQ(=@nUYhi3ToSfH8(~S4FwJhAlh{2ZK_87ahp81NuPCjD5i@{osf|io~8n75bu!#4COxT1e##JP6)0OS|+`2&ILD6I~4JEch z26?JR5oqiIaV^1$Vtli{`sUGdSCHT0Hx<_~Gh0kX^9VCvOu)Q|(;kvff`s;n092Ae z%_V|&?=_&sXo)lR#Cj546*KV!3yB0VG3m3K$YTJ>B*qTr$#`PPD5D%m8nUFQQdP%@ znXJ)2F@P~Aab)VM%NBpyIJnnH8G0_87uI>5O=GE-VAg&*3H*?sViBQ9f|p*0a0=`~ z>xQ^NneT%2)iWWC=Yj%so<}xo?`Hx8D)4BHy zY1b6n3R6mAAInW@@^(-hB9raNwlXTe2gU)6p0_TQ}U!D=pcwX5nVL9 zgs4+hmB-|_Y)F67oVHkGC^e~g#25OLDO1d3(WjVW8WG0JH1J`7*=c-1V-J`K8XNsv>e8 zGqV^a^aR-?t3*8kSn7DzMS;Y({>Vr`1NTTEc|6TJz3)fnYC`lYHD4vt@G2*UQ;g>AiO}%~(p1!dDK9-5@92M~ zOQxSXkzs1c5gg@q1!>*F1QvY{Zq~?{JYeKeS27aKj5H#K&g@Bk)R_y$8wgquBehr2w8zTm>~Tv8sZYUHThT7<)<8l`nKykAQFS- zqA|rXK1wM=^-)@lR;x|^Ji#%>~tQiCWbI_pBh5IZI77vDA3g>}-*^@(5WXJP32=L`X|VGk^HnzwJJf@jAOXM=3bEAKW`qd7kTrq-smghtg)9?W~-bcBO(eoHI_YE8Y7XuzB zl~_J`PS^2cDnQxjo?b|cwmXrw2~!pW(ZbX-GnR5G6toP$)ax`j&NLZ?B-Q6BCS(kl zm%=2a6O8M0uTzZ$*I5X98|yh&j9MORfb>KYR9jjv(!M1LA9&da8859U^e!=0L9rkR zt<4m6wJPsNz4o*=zJSUlqKJE}jKl@b^&h8|l&a7q*Xa5Z@1op5m|ODV@gAkP->*z z$ke%z2bIj|n8!wB6vh}DcU=<5BT*D6Udo|Qg!E6!)__nK4-Ig)`6C`ngml@+6>&2P zQ!+6@zzHG>FsOb~y=r$xmciWqU{v8M9up~THPjf<1fpnzz>^lKXmP*<&ivPi0!L6W z^J&?&+{NgmdhF?!i08pJsw9nbmx?}^@R{<#IR%rXA*-~k01MVmn7hw!LCG|he3NRrq%m-LlG7kNPjy9A=F<#hY@V5stLh8- z_X<`lFCEN^CcDWMq;jREa3v>}yC78|dd!i9B*^lr7*cO; z)YeL;J#NuNw@jJkBg!lMYknwV>gI-cdRF)+O;8t4wFFH>5JARJ2Uvkg#S>lhD!|0{ zd6bK}39gb8L~Fwa5SS`*s=l2br-Vg60!*k(MO8&|0hR<{fgwQ6;i(bYF_hzNLOR>5 zr{eCh**;AncTBA`obUxeYK>YHXacz4VaSns79fy6&zTB6%ytQ~oK2!;h`2OppcImV z3nT#xylME&#VOeou{;2-O8vy@?nKmQ8m3WBBdvxA&ZJgLGA_NiZHb7H9`pzp4N*}- z%UwK5D#_tf0-I^B%hHyo5jH`JZ$w2=pUUzCrJZKSC=exz;Zeh*4g88~X;1+w77Nwg z;882%;f?$ZociXPbF!=D54Z}DfC=I=au6}K#MK!h4=8{|=kmnS%+XUr{Aftf*x0Bm z9=D`+eg?YK2Q!JgQ2Z%}Dj^bEQBU+c5xSTkWa!Dz00$3S5(`qGL29)~A9_;r3IfK2 zp<9Ws3{{pZ%BP{$NNaH~j{jMLr<#GxEy@iyWEutKs-@~`E*A~00jxHYVrjx?0u;TY zeD%rQDu11uaa4=)?mFFqj7bGjs)=tQlc=vcBVQy=96(wg$rwrxfIF5sq>wQM@l}hT z)Gl{SlE-}Id6pZL2Pi}6w`_;#mmlhiJhhW2J}Ql~uuANa53Px{RBJI{CC4OS)uomS zQ({S#2{Z|nYbgE%dO;XJ>@V9>VUPqwUWq$UxpgHH@D>PCP317x zkfiJxjVpSUB(U30m(}h{OM@Py1;WfDNeqUdFu@XPet4qEK@(NzD&5LzZnP)QzM>Of z@{+30Ju^)z^M!Vn_;OQ()r}H=0%?u`kDHeM@R^GTBUUmKu>xnp*Z>$5RFT^+oaxE* zsEj~^QWREdz!-~ObHU1Ql&EH<6yb^2DD5s3RTfnhJ*I3SX@e@6i?iHeRmgK%jN-~w zx2n)@fi2aUlAW&Bc>k_KTw_Jqn!l;00$5e%C$mvhQ^%%hm=o($r%Gjt2!*~qUQVa$ z;7B|iZ7kXWz5;)q7eIPr7JYV$R3@4hkO3Ac>Y5PdM-8EPZe)d01=ivvh+3dXID%NN zkCOGc3g8l~Ivjwd5~+CwYl|YPG*_7@!jvhBWYA2^nqiBE6y)L)L~domDTKnE)AY-y zk_A=bOLatfmln-qXXQ2mRF)SU5UKK1p*J(UUI43K}7s`p}`E#@+d1WY;5Wo-#w^;Zz;v!F@>b6QT%XpK>c z#iSUJ6L692c0jdMD6-Pu3>cqoOwP|)HNUw}x!>+Uo=$E~S)7W>kAZ+0PyCi8c}rQ5 zmLc_}j0(l#HI=RcWtjZynySDhOd$F4za@n0$)8^UDCEj^(cJ17H5@RP z8XRd+N!?2YqAsU8NR?7GuLe;MDzJ2`rc8X)5Im1#hN>x_6N}$3$gSd~d{HuE%fBf@ zRW@Rc3S?15gO}VQSCKyklxvic)ADZt6b+2eoSA+}REO$P`7D43<{Bd9XD(?}MNJ(p zUyr7WMDJyOeNIj0U=`Q02z@B)i#OHUV6?~-waYRMuve1mYc0Pkg=$~RB9*sXq>@xi zcNG{cvrJD7cWtS2evcAGzv_rq!Vkn*hgC&gqyCg{MN)n#s~k|O%<@}?h~K)*{8?M5 z@|6qlTS-l?mCW>7EmNN~u=Ic`Yl{r%nQAW&diogbskWoRdo5Uff!bVul|||@%Z&7v z^XoHmdj75EN1FVFYIEVRTr6coft=XjH&;;mTVF8c)+h5_g=>&qlV2@cyw?K_no)yn zP^b)EU!cKvE}DPqi{$j$-&9I$RsU29Hkyl-?BX@5C_V?)=>qln<+lO+S#1odl_L4I zK?%){MiZ5y8LH85wWjo*i+w>>DpFq}_c_;4|65;vK+^^ms86Y_lH5p0#TpD{EkI4_ z3{+R79;Lr2Q%V04h`Q|fYz$sWt-K}(aC%fzeU$>~wIQNvLn-GnHK5fx6Q-JcVEo;< z_Qntm0KlAUDylErR#$mZqIjt*z-N&aFR6fgSj`#$SWJLwshanCkebZ=Q54Dv@vA}l z!pGSq%)qi`UVfttuPT{S>V5}S;*`2l`W#TQu1sLyulkYm>Va~4`mJV{Kn*e*G)g$C z@cF$KMNTb$Yx5h_Q5GnHcq^03x0(X_aCM?U{i7VG4FGXMU2&1Hdazf>| z2D+@L(OU(oe61-M$u&u3D@qvN>dMrWs^(U}s>%7ilHKUFzIzSI)ECJ$*ZvlOwe(h@ zBCB|DYJzv7%J2_V@hPBqRYt?d1uK6lcm>iBtWvyub?sk*t;_~48rQHofoEWG*4AXe;mPc^-2Sq484z82H*4 zq>?K7HlT2-sZwyj>p)}!QU<^j2?L5oLXkhni|8>3Xif4U;C~m`#-KH|H~44_RZVRG zRGZ{cs6yoT0bL%f8yR50Z!Mxhzr+glPf=LSD?X|(^$?ZsYOz7zE9Gln2fuV7F z0}Ixq7%EX?uo@b0M@`YeP^(Z4vc?~S^n769s7=KO!I+Z2h`nkWUVKEAU{uuu5f>@W zEud;&gglK=QQj}Pm_A&&i{;enZ-z_tM1KWkFhl1GgpDWt#CsIXg`JgZOzz({CKPy_c*t? z2HYRY$vv)xRgLM15sGp-Eq;q4>9e+qsJw)z&n<~ROOeFjhkOn1=Rh5 zN@|MgL$s{xSp{YNYr{6HmH|&L8H26t0jL|psYNQSKYrB4_*c~6x>QD`_?KQ>FbXM2 zP~_#u#VSPvr%$DqPqjdXto%l;f-^{hj%tj|e<}cjy_W5wM9s(G5Gt0C1W-bjIvYJH wz?E85T)rkUkW*w9AWCxv6&H^a3-}VqZ{?q;Pvy!Yt~e!-nh0*vDT}2453V_!$^ZZW literal 0 HcmV?d00001 diff --git a/boards/rp-pico/examples/pico_pwm_audio.rs b/boards/rp-pico/examples/pico_pwm_audio.rs new file mode 100644 index 000000000..a7dd073fa --- /dev/null +++ b/boards/rp-pico/examples/pico_pwm_audio.rs @@ -0,0 +1,244 @@ +//! # Pico PWM Audio Example +//! +//! Drives GPIO0 with PWM to generate an audio signal for use with a speaker. +//! +//! Note that you will need to supply your own speaker. When hooked up to GPIO0, +//! you should hear an audible chime. +//! +//! See the `Cargo.toml` file for Copyright and license details. + +#![no_std] +#![no_main] + +use embedded_hal::digital::v2::OutputPin; +use hal::{ + clocks::{ClocksManager, InitError}, + pac::interrupt, + pll::{common_configs::PLL_USB_48MHZ, PLLConfig}, + pwm::{FreeRunning, Pwm0}, + Watchdog, +}; + +// The macro for our start-up function +use rp_pico::entry; + +// GPIO traits +use embedded_hal::PwmPin; + +// Time handling traits +use embedded_time::rate::*; + +// Ensure we halt the program on panic (if we don't mention this crate it won't +// be linked) +use panic_halt as _; + +// Pull in any important traits +use rp_pico::hal::prelude::*; + +// A shorter alias for the Peripheral Access Crate, which provides low-level +// register access +use rp_pico::hal::pac; + +// A shorter alias for the Hardware Abstraction Layer, which provides +// higher-level drivers. +use rp_pico::hal; + +/// Signed 8-bit raw PCM samples +/// +/// If you want to create your own, use Audacity to create a recording with a +/// sample rate of 32,000 Hz and then export it as raw 8-bit signed PCM with no +/// file header. +const AUDIO: &[u8] = include_bytes!("pico_pwm_audio.raw"); + +/// The hardware PWM driver that is shared with the interrupt routine. +static mut PWM: Option> = None; + +// Output from vocalc.py +/// This clock rate is closest to 176,400,000 Hz, which is a multiple of 44,100 Hz. +#[allow(dead_code)] +const PLL_SYS_176MHZ: PLLConfig = PLLConfig { + vco_freq: Megahertz(528), + refdiv: 1, + post_div1: 3, + post_div2: 1, +}; + +/// This clock rate is closest to 131,072,000 Hz, which is a multiple of 32,000 Hz (the audio sample rate). +#[allow(dead_code)] +const PLL_SYS_131MHZ: PLLConfig = PLLConfig { + vco_freq: Megahertz(1572), + refdiv: 1, + post_div1: 6, + post_div2: 2, +}; + +/// Initialize system clocks and PLLs according to specified configs +#[allow(clippy::too_many_arguments)] +fn init_clocks_and_plls_cfg( + xosc_crystal_freq: u32, + xosc_dev: pac::XOSC, + clocks_dev: pac::CLOCKS, + pll_sys_dev: pac::PLL_SYS, + pll_usb_dev: pac::PLL_USB, + pll_sys_cfg: PLLConfig, + pll_usb_cfg: PLLConfig, + resets: &mut pac::RESETS, + watchdog: &mut Watchdog, +) -> Result { + let xosc = hal::xosc::setup_xosc_blocking(xosc_dev, xosc_crystal_freq.Hz()) + .map_err(InitError::XoscErr)?; + + // Configure watchdog tick generation to tick over every microsecond + watchdog.enable_tick_generation((xosc_crystal_freq / 1_000_000) as u8); + + let mut clocks = ClocksManager::new(clocks_dev); + + let pll_sys = hal::pll::setup_pll_blocking( + pll_sys_dev, + xosc.operating_frequency().into(), + pll_sys_cfg, + &mut clocks, + resets, + ) + .map_err(InitError::PllError)?; + let pll_usb = hal::pll::setup_pll_blocking( + pll_usb_dev, + xosc.operating_frequency().into(), + pll_usb_cfg, + &mut clocks, + resets, + ) + .map_err(InitError::PllError)?; + + clocks + .init_default(&xosc, &pll_sys, &pll_usb) + .map_err(InitError::ClockError)?; + Ok(clocks) +} + +/// Entry point to our bare-metal application. +/// +/// The `#[entry]` macro ensures the Cortex-M start-up code calls this function +/// as soon as all global variables are initialised. +/// +/// The function configures the RP2040 peripherals, then outputs an audio signal +/// on GPIO0 in an infinite loop. +#[entry] +fn main() -> ! { + // Grab our singleton objects + let mut pac = pac::Peripherals::take().unwrap(); + let core = pac::CorePeripherals::take().unwrap(); + + // Set up the watchdog driver - needed by the clock setup code + let mut watchdog = hal::Watchdog::new(pac.WATCHDOG); + + // Configure the clocks + // Note that we choose a nonstandard system clock rate, so that we can closely + // control the PWM cycles so that they're (close to) a multiple of the audio sample rate. + let clocks = init_clocks_and_plls_cfg( + rp_pico::XOSC_CRYSTAL_FREQ, + pac.XOSC, + pac.CLOCKS, + pac.PLL_SYS, + pac.PLL_USB, + PLL_SYS_131MHZ, + PLL_USB_48MHZ, + &mut pac.RESETS, + &mut watchdog, + ) + .ok() + .unwrap(); + + // The single-cycle I/O block controls our GPIO pins + let sio = hal::Sio::new(pac.SIO); + + // Set the pins up according to their function on this particular board + let pins = rp_pico::Pins::new( + pac.IO_BANK0, + pac.PADS_BANK0, + sio.gpio_bank0, + &mut pac.RESETS, + ); + + // The delay object lets us wait for specified amounts of time (in + // milliseconds) + let mut delay = cortex_m::delay::Delay::new(core.SYST, clocks.system_clock.freq().integer()); + + // Init PWMs + let pwm_slices = hal::pwm::Slices::new(pac.PWM, &mut pac.RESETS); + + // Setup the LED pin + let mut led_pin = pins.led.into_push_pull_output(); + + // Configure PWM0 + let mut pwm = pwm_slices.pwm0; + pwm.default_config(); + + // 131,000,000 Hz divided by (top * div.int). + // + // fPWM = fSYS / ((TOP + 1) * (CSR_PH_CORRECT + 1) * (DIV_INT + (DIV_FRAC / 16))) + // + // 32kHz ~= 131,000,000 / ((4096 + 1) * 1 * 1) + pwm.set_top(4096); + pwm.set_div_int(1); + + pwm.enable_interrupt(); + pwm.enable(); + + // Output channel A on PWM0 to GPIO0 + pwm.channel_a.output_to(pins.gpio0); + + unsafe { + // Share the PWM with our interrupt routine. + PWM = Some(pwm); + + // Unmask the PWM_IRQ_WRAP interrupt so we start receiving events. + pac::NVIC::unmask(pac::interrupt::PWM_IRQ_WRAP); + } + + // N.B: Note that this would be much more efficiently implemented by using a DMA controller + // to continuously feed audio samples to the PWM straight from memory. The hardware + // is set up in a way where a rollover interrupt from the PWM channel can trigger a DMA + // request for the next byte (or u16) of memory. + // So while this is a good illustration for driving an audio signal from PWM, use DMA instead + // for a real project. + + // Infinite loop, with LED on while audio is playing. + loop { + let _ = led_pin.set_high(); + + for i in AUDIO { + // Rescale from signed i8 numbers to 0..4096 (the TOP register we specified earlier) + // + // The PWM channel will increment an internal counter register, and if the counter is + // above or equal to this number, the PWM will output a logic high signal. + let i = ((*i as u16) << 4).wrapping_add(2048) & 0xFFF; + + cortex_m::interrupt::free(|_| { + // SAFETY: Interrupt cannot currently use this while we're in a critical section. + let channel = &mut unsafe { PWM.as_mut() }.unwrap().channel_a; + channel.set_duty(i); + }); + + // Throttle until the PWM channel delivers us an interrupt saying it's done + // with this cycle (the internal counter wrapped). The interrupt handler will + // clear the interrupt and we'll send out the next sample. + cortex_m::asm::wfi(); + } + + // Flash the LED to let the user know that the audio is looping. + let _ = led_pin.set_low(); + delay.delay_ms(50); + } +} + +#[interrupt] +fn PWM_IRQ_WRAP() { + // SAFETY: This is not used outside of interrupt critical sections in the main thread. + let pwm = unsafe { PWM.as_mut() }.unwrap(); + + // Clear the interrupt (so we don't immediately re-enter this routine) + pwm.clear_interrupt(); +} + +// End of file From eac6a1b00a4967707fc490a6761568ee92cba1f7 Mon Sep 17 00:00:00 2001 From: "Dr. Chat" Date: Fri, 17 Jun 2022 22:12:45 -0500 Subject: [PATCH 2/2] Use a WAV file container and shorten the audio sample --- boards/rp-pico/examples/pico_pwm_audio.raw | Bin 76161 -> 0 bytes boards/rp-pico/examples/pico_pwm_audio.rs | 16 ++++++++-------- boards/rp-pico/examples/pico_pwm_audio.wav | Bin 0 -> 47578 bytes 3 files changed, 8 insertions(+), 8 deletions(-) delete mode 100644 boards/rp-pico/examples/pico_pwm_audio.raw create mode 100644 boards/rp-pico/examples/pico_pwm_audio.wav diff --git a/boards/rp-pico/examples/pico_pwm_audio.raw b/boards/rp-pico/examples/pico_pwm_audio.raw deleted file mode 100644 index 23662b2ac64e1b02047775fe8aabdcfc0a7c1a62..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 76161 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 diff --git a/boards/rp-pico/examples/pico_pwm_audio.rs b/boards/rp-pico/examples/pico_pwm_audio.rs index a7dd073fa..7f4d296db 100644 --- a/boards/rp-pico/examples/pico_pwm_audio.rs +++ b/boards/rp-pico/examples/pico_pwm_audio.rs @@ -43,12 +43,11 @@ use rp_pico::hal::pac; // higher-level drivers. use rp_pico::hal; -/// Signed 8-bit raw PCM samples +/// Unsigned 8-bit PCM samples (in a WAV container) /// /// If you want to create your own, use Audacity to create a recording with a -/// sample rate of 32,000 Hz and then export it as raw 8-bit signed PCM with no -/// file header. -const AUDIO: &[u8] = include_bytes!("pico_pwm_audio.raw"); +/// sample rate of 32,000 Hz and then export it as WAV 8-bit unsigned PCM. +const AUDIO: &[u8] = include_bytes!("pico_pwm_audio.wav"); /// The hardware PWM driver that is shared with the interrupt routine. static mut PWM: Option> = None; @@ -207,12 +206,13 @@ fn main() -> ! { loop { let _ = led_pin.set_high(); - for i in AUDIO { - // Rescale from signed i8 numbers to 0..4096 (the TOP register we specified earlier) + // N.B: Skip the WAV header here. We're going to assume the format is what we expect. + for i in &AUDIO[0x2C..] { + // Rescale from unsigned u8 numbers to 0..4096 (the TOP register we specified earlier) // // The PWM channel will increment an internal counter register, and if the counter is // above or equal to this number, the PWM will output a logic high signal. - let i = ((*i as u16) << 4).wrapping_add(2048) & 0xFFF; + let i = ((*i as u16) << 4) & 0xFFF; cortex_m::interrupt::free(|_| { // SAFETY: Interrupt cannot currently use this while we're in a critical section. @@ -228,7 +228,7 @@ fn main() -> ! { // Flash the LED to let the user know that the audio is looping. let _ = led_pin.set_low(); - delay.delay_ms(50); + delay.delay_ms(200); } } diff --git a/boards/rp-pico/examples/pico_pwm_audio.wav b/boards/rp-pico/examples/pico_pwm_audio.wav new file mode 100644 index 0000000000000000000000000000000000000000..5f53f418791d9c1008173f34ce6d556269d88341 GIT binary patch literal 47578 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

u77LttctX&&$cqNRE$=jEstjOH4`2%+3{%iY4#p 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 bK}@6p2WxN@5zG>|6cA375}a&v`+xrj(5Hyg literal 0 HcmV?d00001