From dde2cfe83709dc0b1bf0c3b2ed9ba7571fe84339 Mon Sep 17 00:00:00 2001 From: Carter Turn Date: Mon, 5 Feb 2024 10:48:53 -0500 Subject: [PATCH] Add command for setting instructions via large binary block. Should be much faster. --- build/prawnblaster/prawnblaster.uf2 | Bin 136192 -> 137216 bytes build/prawnblaster/prawnblasteroverclock.uf2 | Bin 135680 -> 137216 bytes prawnblaster/prawnblaster.cpp | 129 ++++++++++++++++++- 3 files changed, 128 insertions(+), 1 deletion(-) diff --git a/build/prawnblaster/prawnblaster.uf2 b/build/prawnblaster/prawnblaster.uf2 index 7485de514af9d9238c9d9452df3986db7c950be2..5dcef17885b3b791ed78ba394da10814adf5f8a8 100644 GIT binary patch delta 16433 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 delta 15409 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 T{n15%&ul5R-n!H!?}z;l#lOvL diff --git a/build/prawnblaster/prawnblasteroverclock.uf2 b/build/prawnblaster/prawnblasteroverclock.uf2 index c397ed22e96bd717285ef98761e1e1dcffd3c199..e41ccd52a116db38a185fac230634da020c08069 100644 GIT binary patch delta 16668 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 NIJ`y@H~$l#{{lO|vS|PS delta 16149 zcmb_@4O~>k-v7*DcR}36l|@1#Ji8zvqM~5=9s(|JW@KcfW+-H9R}IY!eN52EtLEb+ z#yp7V<(k*W)QnWTX5i(P8JQZ8d3`M~*hN!2naRQ~?Eg1=_GL~_xBJ}B=kMn;&Ybyu z=R4o|&Fh)76j%Ed@AfMV!F@g)=)kxS8OVL7Lidn1^4{TIF4UQ$7+(|#IrRwfl>-ou z`d}?W3f>uLS_^3!;9o&%pERY|+=WsR^1F>%Agi$o%Gkg0;kQjd+S_4B`;Uo8`^*f4 zRA_qE{=>OXtuiAmO|J{{;WoL_*@j&^c0*bT`QN^9&&P!NkP8Y!u<07o7SxnftC7!s zZXbS6g|L|3dpJPpk8}E9gl0J2YQyDN#J#cT7t2V5(|p9&dg_g|9IAPc;!Td!vO+6=`uU81tWr@V~QC2I(Z$S@*;<5glwcbd^} z8y45~k_NvhuD<)Q=ogK(Zr$;7F|QK$*h#eiRIbQQmiuq!`q>Yw`Uc`aHzp=6Wc$)^ zEcVz)j5?J2(MF8w30$L%l&Dj3Dxr}VA!L7xv|0$(nz4^7P&Cqr8Ma3=qfxj?BldJF zhWBqA{W!lsB_6ir!vEE_p(Zrc*fiI~n^a;?m(LlM*le}d;RwTmDxM?`O&9v#z*mVK z_a~ZwzI2ELq;g+(k$C~bW7BOPShQ(aoMJm-=?C#-o53{K^tGu0DdIj&9ASFUx3#Im z;t!St8>tNl8FdD9-GXogLOBGn=3C=5<1@x7#+I7q%#W)>OwH+ih)P^!^(jT*j`zC` ztNH~x-LDPG(KpGviLf=(z>b) z&B`st2e(=d#GOpZQxxiMH($5p;TMX1FjMyTqQi+sqPDt0wzsgn5EFG z!4C#sau$5ll6}sHH+3MbJp}P_-;s>q@JRF>(xyNtfKUaY0YV3axK|O96y3KHF+7M= z1*-;BIeGjnzB_^rQ17)^{q)6T4X-2Tg0+DqPV0TM+j;CohYXU(#fn$gfnO_H-Jt=r&)>^nosk?Km&fW!I_O%{v4lz0hOXz{7OBs|t%8le5@ z0ClbIc`4gW{kB)2k4>{epEbUfr4}y(&0_PD#-MT}E`@qJAgzP+!d^1f5X#NzJ!~>m zLpL2B7%A;=Q9~6-oZ}#AQE^4dwl|C%&xw!O)*5{v9&cM?>;v(mwqm0{#PK#?)ED9r zHWgAsJk+K{8i*gZDbTaVz%(Q#^gL-$`(`s)hd-<$3$e(Rw8 z9oH2DAmgu)alx4}|9f9}-o@@wF@1~NgT+@o=R~dhUInN>L#b2rxpC|FJgQ7r?(?Nv zel)uJU5j$N&ro!!tHsf2=~Y&2%`8LBIXHqOHW~s|WG;dJnq~KIDa+io9=zAM#PW9L zSQKh1h5RS%zSZ@$9~rBSV%>jB_M*nwmUmYyhLu0ZvN3%lfF{~+SvF+Oqpoj!&JwY5 zKG>eMAj6xPucw9PB5|1gs^txreY(Zb`FZbaP|9F$vJ|;;Ct9#!W#$qmI@tc1C1S-g z;FxSd5%{rkBOc*%=~XDv$9~Kbjr`T(2R5IGXcV988a6}2V%$Dai}P%b&Lcf9KQSJ5 zy6x9;GaI9}8N(1B{D_J-A+fcG^+y=loX4ncvYw-Y~{i(x~2-T6G-`OLxdtIp># z=d%KoEV5)8ub6fu*330oo_4vZ)BLVe<*qzJ2i8l2}eg=Q||B?Hu+)$ zPj~4)R>k&|u*xKK@mx#lwD(b5DvaC5ZN|(vbUQ~aBAcS(9WWYOmD`ij^OCoRY)8-L zWQL)}bo3ZBd$Vn#WfH_2ZDV2OdBoYXS#ZF+cg-_xh-P@-M7Ix=m3iT`zx%YFHXwa7 z8kMFHS2&P9J}n_bAue+a$qdWYT1ElmLfeBDJ&J?Wi?(13DI6ZjZMsf&4mT9tYeU*G z?MRyjVK#&;2-R@Z6=AZz`U*m0c*LKC^n#ZW%7MM~0Hj~!U!HG;J$2~|OJ0HW;*eJ0 zfW3C^0ysKDn(nt9!HBQ=%7;hSVe&&>X(T+q=YvWi?FV^ZN&^BndYU#oL|PF-m=z%n z*3~b->D1+)_h1;~FInJB8uRAG&&b@kL65)RT9;mivU1*lwV=rSRMyAP!pq$o%*P?V z(EXjVKFaQ)v#--E%|1_qh-Q>`4)?dbm9ZUd%gG;t8gH2Y1e}H451Thb zysSII{NE54bPqBYyXvS1?l+y>Bc0smUEFufD?Kcy%vUVMP%gXM$6N$)R=1;lwX6JJ zq5R@><$gsGI8N(q=wWkVrt?tPxCstsTr9e@&#bIKa8SdoL3(&@;zsI_5;lcmD>f|7 zoa>yUQQhCPFLcd=Vj#_Rin7>ggExXGm{XU2YN4+Wc^MDFIW8|FFXgE;9jpa?x{tNz zX8KDjjj8?J6&}CDgi0M9%5*ec1@hY+ov+(xXNH(ibjURv5r&N9xrC9!{>w_2|B^23 zTng0Uqg}7IOY6osC^5~R!ju>eC5FvG{8tub`RH^X(YJSWCWjQ;U{Jxi^+k(fKPEo= zN2VjfBhERj=G$X3l{*HSe4s_2wD=4|m-J??a!4l3;!B6j(eUQg-lM4C;-)0~Y)3Ju z@kooSA)~`QC!>56nVvte3MFOHL-)}ZFPp?hBL3U6OruwXHr zAasJ!_ena*8sYiXWd#dbzK7isCSNp6ND(GT6@*;KYilJhJrY$k6|(IRM!-Qe_a;Jg zJ|zQfeAo51ZoL+5KtAFI*pquZx7twjw8n{G8{9P!R)FTV36LJtb*_y^<6UFF%{Deu zSxFZ#bhV@%4*i$@+^*O$Iup*8m*UI`(CEA#E-oc`5y~GpDiiui2)cnU(U+$pc=e^H z?J%bE=7p7^-KZ(&dJc+-Z&Z#P4)t|f_dtEaoWrFK6rroR?b7^M37uxLDJve9?M_e4 zEo#%F2q<~kx}nVg@dfLfZF-2Ct!vtNh|gJHZ&M5{3b+^!4-MAW+S1YKM#abm3r^UL z^0N9sZk=^uTRuqEq*o!Ds~n${m6zoMmTK$sZS}@T@F(>-UDT?>0rrrTX26}v{XD=Ry-R(GrS<8na;|b0oI(+Lf{R2h0Y;ej6@M5qsRf!OgF{T ztb&?Tz%ZM2+u??58<$`19 zxgGl)D`s8-_s$Tqao$$K=X*5~O>SS$_0F&^ZQU<$RaV;w7M1=%#p))x8ibi`^C|K3Xb1T2_29 zfC{`IqFKl)C;;nHuT}S`MDeJMVkv-@xj`?p3YI|wmU|mOG)r0X{0h06)Q(u*aUaZX>zl%{~JuC^<8U-?>g`)?M2Cf+kdkDYEUGz0p z-YO8V+HIjTZ6!;(8mz_9>K2%kA_O&DdU*zzZjz*Rl1yuHbRZ9RpINYWYHM&B+~GLl z%w%(M8R6Hm)vRW#Sqs&axUEI3yb`dib6dbalchQ*%j#SQp!Hr5(Uh>{>%qFwYtP)!DXx1OCoHwp8y$`x9T19MID2+7gnuB^@>mLV#{>w)CBr9A zHIvm_jjA+wtiMT4Z+(X7%iVQC+cG5P42GFxmqYax-s*{FE8DgTuvU7lx~USyR2fC( zv7i;8Iu15n9>!=sglY(c-{~&7jcxGGGi3R0xV^0k@(#9X67Mt_ZxvL&%S}NC?@m_Q zF0k(QT6I|xMV5?WH@JO|+Xa7NRqUC{O_@Y??O9Fuy$N&`cU~jwrb{f-Wh{Ho5bHiQ ziQO0NRs56$d`bq~2bvCeH4)8TR`CI_9&}sZW5paaaT6zz69+?Sbot;UzbP;iv^9NT z7q5<1(+8ZU(BsUIRF43nInX!2z5f>nAb!XUGP8OMjv_x+k0kt|5RA##Ll1iJx@RQ8 z&&UKHIv5Vu)dsk*u0u6wi2s!<$v6ADH%rntOQ!F5V$h3okT&GV1Mr?>H)7&fhrU}f zhwMEb#toTEP8}c4oqe9%KORH)TDJyT(=oQDTJZY`xAmj2Ah*|My(BS4es^ge$vqLw zwdaw-6O%$M^FRu+!pm;R5k=gw2;>&j8^$w-DOk(`-bvQHQT+#_3SE0By1?G~7dwg|d~+CnfJ|%-@f_=j<{aD5<^=o&+0gt1{C}xA zmGI}iE{QTpelszC6YC-upxE0@KU+}rPmMW7UvVaR@%#$^^Wcs9aG0t#lbh!sA^Zg| z4be2S6<*lQiDuG$A&T%9-Jq}8ac~hj=Ca#DJLUpg{4!Xtdab&JlE#IMMv{GXOu*2SM9Dz`{h?pq*lag$$RMYY7@DP&DcGN-VRQ!TTI z{h(SDuq{x zB7+WTYx=_5kvR;HAQR0Gc-OooQdLWssz|nZ`rylO0i$Rv)|W>3W^CY^vUsEtJ0Op1 z#1Rp%Y3u0oMe?P22GMsU2s-Bx|9iH99h;IWmW~~iOhsIJm zN=qppDkg^RQ4H06mZ}@5>~1PJ^Q@A@u7bi|v33CUdO<|f%~JH9d56c|{?e_MC{{BR z?_}et+~k+v*@agNJcr#>JznWTHiyp$yuxDxEwtA#f+M_Fi;%6LFckw6G#vKI5wcYj z;0J&Kt~1I2=yA%kmf=|xF3j-5rv={MrChKpF{{QOCvZ!`g^m6=1)mVU^2ZOyl-a+B z-YTe3Bdk}U^dz_h7pv^?g|mFG^+Q7ySLk!Goi4=!uVw`5N~HQrnEHimH9i{5+xZ13 z+NTlg)033qKzp(=BKH-Azz5)vu%B$yh8vaQEgR;GYmdP<3B-3>v^9zip3W3B{<5|Q z;N`ep_%Z-L-ETwahC}>w@#9@j*%qR7>!RDFBt1Z#$Ni(iY?&;j?Xt#_H`@7|p4FVsChpT$K2XEjdg@Rop z^JyTC#7)AAK>VkWzjP1ZaAU6D zo`xp~?*`%51wNQT3z|Uey=$&cLf2MXPEdcLdbmt=d-=yM*5@5vD5Axbw`1}>2tzS~3eXW?2fP8RqOMyhV3 z)Ub`RhK10P8|s1y_5m{Ig;HY}%dtt~*d*f!qp)xWCTK!sLnNF6Wb<{i#Isq(!{f7p z-hicLOt3#B(_)|;kxV7JQi-Ef#t}(jQ4CDb7-U+aC?J{v=*lFXG8s=ag~c#1K@%n8 ziJ^d49Kziu!njy0-TDajhh?H;DQLKiB}T?FoC4w)fNra#W~)q19IjVC_YOT2or1#< zsuB26Oc_BlTt+&Ik|wwSf_;QcQUWzTA}c*gR{9YN7{dT`6_TV1nWQlkHjaS_nnz?j z<0xQ)N5!Ku6%%lE82$+w1e?WBU(~q8%tb6Md?;Cm0?^>`R}KmMBpLNM8TBMeoyY)m zJ0*!bWfBu9EQx^$nn^OAB)lbH@~24qZm+|Ub{lDb`G;^n3C9S0ibwWiGTAAV(a3B( zf+k7EXrzENrb^u|N!c!$vNQ_IU|@pADC5bXfTJ*Ju-D!6gHiK37Tm#p6L{j?NRrHOkFlL&XAR! zE-O8Q0&*CDZl9!LpG-v#h0SDOf@X${XC?*AW&pYa63+n{&ukcKr51QUji@w^i7z)E zOF5a6XB>zOrjPSIue0(ObxAO=4eFs8CR)>R*O!c?IsQK97+(ZTYT$#N2l-9)5t2-po9+J_T zDC{K$CTQl%;=tYnbf6}a~aEdOyWEy<6K5z%RQ&8B{E&h zsj-mdI4*G1K*8b&(17w`9#J z#kE?>u}%6n5Lz@y;LBW%r`huv#J5i0my<;M7k+&gfXr>iy0 zo26ygK-;mk3~vW;7Qch7=1Hjz33WDaOjHiJDPP=#n`)4v0r>XG_Q;DEy zkd;0|0p}Qi4!$o^hqTL7oWp5C+c|jqM;74p&UmzZG)4`Ez9eYS;v1 z$J77+1;+p9nTv=2w2Barl>>ps|7lqUpYALi`^5i^gyMEWg*0XbKrbSp@g`1jjh%0B znCBO`)K>COVKR;B7ghR)K3|KkCgsEBJWaQ*U0<}&mHyZ<;b;k@HU0?IE=AfI%aGO| z0!`m~1!>Pim<_=nLNDYkeGQxd!4Ix;*SX?Eh+|(vMb69+c(}7%0{Fv?>K%B#?gG+6 zC#juzrg^^(RbYR=h~9`IExjeBm#y?Vm^P>nGyo!Q6YMX3kPd{0=4~Lf(x3h(1*XR@ zGCfYs7vZhf4P)br@WTFo32d2Pr$ykPd45nwC&gOwny=Ik-(-3d;ihBd+@ZaH}#x4Rau@gs>c# z%9$E>LHb)zbAZWntE2gA{{k1=Roc4q3jSB20c^h&{uTar@(28{ zO7cN~$324PDl=|=hsR0tTbgLzzbp4|>_tujs_W!mVK%<&jcIxYTtm#+{qFWbYq^{<}K1NU+lr5p3>`1duT zWRE7c;D07SnBIn?_}z!#1^RaaGZyVC=Bryh^rtRfY1TYSAP(W z-@@|+{thnmQ0RV<6#l{}6w2@5^#U(4FhO&Rktvjm6mXXT=sG2yP8rW#3cH6_(j(|) z!TzJHIrpgXKFiT1adgQz?o*f*ukbik(A<-0u~I-c%VU#xY%-p13bVU-1be4Ui=7&K z8IEB+5=Rfip-0NJ1&K(!-BoWq?t_pGLN|m+i*TqHFMfyTynYolc1GkoK4iaC`{{t^#vEIIe*XZpoMZRcU4#x$gOuzXq~S_ 3) + { + fast_serial_printf("The specified pseudoclock must be between 0 and 3 (inclusive)\r\n"); + } + else if (start_addr >= max_instructions || start_addr + inst_count >= max_instructions) + { + fast_serial_printf("invalid address or too many instructions\r\n"); + } + // It takes 8 bytes to describe an instruction: 4 bytes for reps, 4 bytes for half period + uint32_t inst_per_buffer = SERIAL_BUFFER_SIZE / 8; + unsigned int addr = start_addr; + while(inst_count > inst_per_buffer){ + fast_serial_read(readstring, 8*inst_per_buffer); + for (int i = 0; i < inst_per_buffer; i++) + { + uint32_t reps = ((readstring[8*i + 7] << 24) + | (readstring[8*i + 6] << 16) + | (readstring[8*i + 5] << 8) + | (readstring[8*i + 4])); + uint32_t half_period = ((readstring[8*i + 3] << 24) + | (readstring[8*i + 2] << 16) + | (readstring[8*i + 1] << 8) + | (readstring[8*i + 0])); + + if (reps == 0) + { + // This indicates either a stop or a wait instruction + instructions[address_offset + addr * 2] = 0; + if (half_period == 0) + { + // It's a stop instruction + instructions[address_offset + addr * 2 + 1] = 0; + addr++; + } + else if (half_period >= 6) + { + // It's a wait instruction. See "set" command for why we do this. + instructions[address_offset + addr * 2 + 1] = (half_period - 4) / 2; + addr++; + } + else + { + fast_serial_printf("invalid request\r\n"); + } + } + else if (half_period < (non_loop_path_length)) + { + fast_serial_printf("half-period too short\r\n"); + } + else if (reps < 1) + { + fast_serial_printf("reps must be at least one\r\n"); + } + else + { + instructions[address_offset + addr * 2] = reps; + instructions[address_offset + addr * 2 + 1] = half_period - non_loop_path_length; + addr++; + } + } + inst_count -= inst_per_buffer; + } + // In this if statement, we read a final serial buffer and load it into instructions. + if(inst_count > 0){ + fast_serial_read(readstring, 8*inst_count); + for(int i = 0; i < inst_count; i++){ + uint32_t reps = ((readstring[8*i + 7] << 24) + | (readstring[8*i + 6] << 16) + | (readstring[8*i + 5] << 8) + | (readstring[8*i + 4])); + uint32_t half_period = ((readstring[8*i + 3] << 24) + | (readstring[8*i + 2] << 16) + | (readstring[8*i + 1] << 8) + | (readstring[8*i + 0])); + + if (reps == 0) + { + // This indicates either a stop or a wait instruction + instructions[address_offset + addr * 2] = 0; + if (half_period == 0) + { + // It's a stop instruction + instructions[address_offset + addr * 2 + 1] = 0; + addr++; + } + else if (half_period >= 6) + { + // It's a wait instruction. See "set" command for why we do this. + instructions[address_offset + addr * 2 + 1] = (half_period - 4) / 2; + addr++; + } + else + { + fast_serial_printf("invalid request\r\n"); + } + } + else if (half_period < (non_loop_path_length)) + { + fast_serial_printf("half-period too short\r\n"); + } + else if (reps < 1) + { + fast_serial_printf("reps must be at least one\r\n"); + } + else + { + instructions[address_offset + addr * 2] = reps; + instructions[address_offset + addr * 2 + 1] = half_period - non_loop_path_length; + addr++; + } + } + } + fast_serial_printf("ok\r\n"); + } else if (strncmp(readstring, "go high", 7) == 0) { unsigned int pseudoclock;