add support for 320x240 st7789 display

This commit is contained in:
jean-marcharvengt 2020-02-21 21:06:46 +01:00
parent a528e0ae28
commit d4ea70b196
115 changed files with 5076 additions and 2477 deletions

View file

@ -3,7 +3,7 @@
(general
(thickness 1.6)
(drawings 4)
(tracks 386)
(tracks 389)
(zones 0)
(modules 0)
(nets 1)
@ -333,7 +333,6 @@
(via (at 68.58 22.86) (size 1.8) (drill 0.4) (layers F.Cu B.Cu) (net 0))
(via (at 57.15 22.86) (size 1.8) (drill 0.4) (layers F.Cu B.Cu) (net 0))
(segment (start 50.8 26.67) (end 54.61 26.67) (width 1) (layer B.Cu) (net 0))
(segment (start 74.93 24.13) (end 69.85 24.13) (width 1) (layer B.Cu) (net 0))
(segment (start 54.61 26.67) (end 55.88 25.4) (width 1) (layer B.Cu) (net 0))
(segment (start 50.8 21.59) (end 48.26 21.59) (width 1) (layer B.Cu) (net 0))
(segment (start 48.26 21.59) (end 48.26 29.21) (width 1) (layer B.Cu) (net 0))
@ -463,7 +462,6 @@
(segment (start 105.41 34.29) (end 105.41 35.56) (width 1) (layer B.Cu) (net 0))
(segment (start 93.98 34.29) (end 101.6 34.29) (width 1) (layer B.Cu) (net 0))
(segment (start 83.82 24.13) (end 93.98 34.29) (width 1) (layer B.Cu) (net 0))
(segment (start 74.93 24.13) (end 83.82 24.13) (width 1) (layer B.Cu) (net 0))
(segment (start 95.25 43.18) (end 93.98 43.18) (width 1) (layer B.Cu) (net 0))
(segment (start 93.98 43.18) (end 91.44 43.18) (width 1) (layer B.Cu) (net 0))
(segment (start 101.6 36.83) (end 97.79 36.83) (width 1) (layer B.Cu) (net 0))
@ -501,5 +499,10 @@
(segment (start 107.95 24.13) (end 101.6 24.13) (width 1) (layer B.Cu) (net 0))
(segment (start 110.49 81.28) (end 110.49 26.67) (width 1) (layer B.Cu) (net 0))
(segment (start 110.49 81.28) (end 110.49 95.25) (width 1) (layer F.Cu) (net 0))
(segment (start 69.85 24.13) (end 72.39 26.67) (width 1) (layer B.Cu) (net 0))
(segment (start 72.39 26.67) (end 74.93 26.67) (width 1) (layer B.Cu) (net 0))
(segment (start 78.742792 24.13) (end 83.82 24.13) (width 1) (layer B.Cu) (net 0))
(segment (start 76.202792 26.67) (end 78.742792 24.13) (width 1) (layer B.Cu) (net 0))
(segment (start 74.93 26.67) (end 76.202792 26.67) (width 1) (layer B.Cu) (net 0))
)

View file

@ -3,7 +3,7 @@
(general
(thickness 1.6)
(drawings 5)
(tracks 360)
(tracks 361)
(zones 0)
(modules 0)
(nets 1)
@ -179,7 +179,7 @@
(via (at 213.741 50.673) (size 1.8) (drill 0.4) (layers F.Cu B.Cu) (net 0) (tstamp 5DC5CBDB))
(via (at 213.741 53.213) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 0) (tstamp 5DC5CBDC))
(via (at 213.741 53.213) (size 1.8) (drill 0.4) (layers F.Cu B.Cu) (net 0) (tstamp 5DC5CBDD))
(via (at 181.739941 85.957485) (size 1.8) (drill 0.4) (layers F.Cu B.Cu) (net 0) (tstamp 5DC5CBDF) (status 1000000))
(via (at 181.739941 85.957485) (size 1.8) (drill 0.4) (layers F.Cu B.Cu) (net 0) (tstamp 5DC5CBDF))
(via (at 184.279941 85.957485) (size 1.8) (drill 0.4) (layers F.Cu B.Cu) (net 0) (tstamp 5DC5CBE1))
(via (at 186.819941 85.957485) (size 1.8) (drill 0.4) (layers F.Cu B.Cu) (net 0) (tstamp 5DC5CBE3))
(via (at 189.359941 85.957485) (size 1.8) (drill 0.4) (layers F.Cu B.Cu) (net 0) (tstamp 5DC5CBE5))
@ -328,15 +328,11 @@
(segment (start 181.739941 64.010941) (end 181.737 64.008) (width 1) (layer B.Cu) (net 0))
(segment (start 189.359941 64.010941) (end 189.357 64.008) (width 1) (layer B.Cu) (net 0))
(segment (start 189.359941 68.939485) (end 189.359941 64.010941) (width 1) (layer B.Cu) (net 0))
(segment (start 199.519941 68.939485) (end 199.519941 66.296941) (width 1) (layer B.Cu) (net 0))
(segment (start 197.231 64.008) (end 199.519941 66.296941) (width 1) (layer B.Cu) (net 0))
(segment (start 191.897 64.008) (end 197.231 64.008) (width 1) (layer B.Cu) (net 0))
(segment (start 176.53 43.053) (end 176.53 64.008) (width 1) (layer F.Cu) (net 0))
(via (at 176.53 88.392) (size 1.8) (drill 0.4) (layers F.Cu B.Cu) (net 0))
(via (at 176.53 91.059) (size 1.8) (drill 0.4) (layers F.Cu B.Cu) (net 0))
(via (at 207.137 91.059) (size 1.8) (drill 0.4) (layers F.Cu B.Cu) (net 0))
(segment (start 207.139941 91.056059) (end 207.137 91.059) (width 1) (layer B.Cu) (net 0))
(segment (start 207.139941 85.957485) (end 207.139941 91.056059) (width 1) (layer B.Cu) (net 0))
(segment (start 176.53 88.392) (end 176.53 91.059) (width 1) (layer B.Cu) (net 0))
(segment (start 176.53 91.059) (end 207.137 91.059) (width 1) (layer F.Cu) (net 0))
(segment (start 176.53 64.008) (end 176.53 66.548) (width 1) (layer B.Cu) (net 0))
@ -389,7 +385,6 @@
(via (at 176.53 85.979) (size 1.8) (drill 0.4) (layers F.Cu B.Cu) (net 0))
(segment (start 179.07 66.548) (end 179.07 85.979) (width 1) (layer F.Cu) (net 0))
(segment (start 176.53 66.548) (end 176.53 88.392) (width 1) (layer F.Cu) (net 0))
(segment (start 199.519941 68.939485) (end 199.519941 70.717485) (width 1) (layer B.Cu) (net 0))
(segment (start 189.357 70.714544) (end 189.359941 70.717485) (width 1) (layer B.Cu) (net 0))
(segment (start 189.357 64.008) (end 189.357 70.714544) (width 1) (layer B.Cu) (net 0))
(segment (start 186.819941 70.717485) (end 186.819941 68.326) (width 1) (layer B.Cu) (net 0))
@ -405,7 +400,6 @@
(segment (start 196.977 69.342) (end 196.979941 69.344941) (width 1) (layer B.Cu) (net 0))
(segment (start 194.439941 69.344941) (end 194.439941 71.752059) (width 1) (layer B.Cu) (net 0))
(segment (start 194.437 69.342) (end 194.439941 69.344941) (width 1) (layer B.Cu) (net 0))
(segment (start 191.899941 69.344941) (end 191.899941 71.752059) (width 1) (layer B.Cu) (net 0))
(segment (start 191.897 69.342) (end 191.899941 69.344941) (width 1) (layer B.Cu) (net 0))
(segment (start 208.026 118.237) (end 214.884 118.237) (width 1) (layer B.Cu) (net 0))
(segment (start 191.899941 102.110941) (end 208.026 118.237) (width 1) (layer B.Cu) (net 0))
@ -478,5 +472,12 @@
(segment (start 207.01 61.341) (end 207.01 64.008) (width 1) (layer B.Cu) (net 0))
(segment (start 146.812 94.615) (end 146.812 125.857) (width 1) (layer B.Cu) (net 0))
(segment (start 148.717 92.71) (end 146.812 94.615) (width 1) (layer B.Cu) (net 0))
(segment (start 199.517 70.714544) (end 199.519941 70.717485) (width 1) (layer B.Cu) (net 0))
(segment (start 199.517 69.5325) (end 199.517 70.714544) (width 1) (layer B.Cu) (net 0))
(segment (start 199.519941 70.717485) (end 199.519941 71.752059) (width 1) (layer B.Cu) (net 0))
(segment (start 191.897 70.714544) (end 191.899941 70.717485) (width 1) (layer B.Cu) (net 0))
(segment (start 191.897 64.008) (end 191.897 70.714544) (width 1) (layer B.Cu) (net 0))
(segment (start 204.599941 88.521941) (end 204.599941 85.957485) (width 1) (layer B.Cu) (net 0))
(segment (start 207.137 91.059) (end 204.599941 88.521941) (width 1) (layer B.Cu) (net 0))
)

View file

@ -3,7 +3,7 @@
(general
(thickness 1.6)
(drawings 4)
(tracks 343)
(tracks 344)
(zones 0)
(modules 0)
(nets 1)
@ -307,12 +307,9 @@
(segment (start 146.177 29.718) (end 146.05 29.591) (width 1) (layer B.Cu) (net 0))
(segment (start 158.784583 26.254417) (end 157.988 27.051) (width 0.8) (layer B.Cu) (net 0))
(segment (start 158.784583 25.364137) (end 158.784583 26.254417) (width 0.8) (layer B.Cu) (net 0))
(segment (start 176.403 28.06572) (end 176.403 28.067) (width 0.8) (layer B.Cu) (net 0))
(segment (start 179.104583 25.364137) (end 176.403 28.06572) (width 0.8) (layer B.Cu) (net 0))
(segment (start 149.987 19.939) (end 149.225 20.701) (width 0.8) (layer B.Cu) (net 0))
(segment (start 149.225 27.432) (end 149.86 28.067) (width 0.8) (layer B.Cu) (net 0))
(segment (start 149.225 20.701) (end 149.225 27.432) (width 0.8) (layer B.Cu) (net 0))
(segment (start 176.403 28.067) (end 149.86 28.067) (width 0.8) (layer B.Cu) (net 0))
(segment (start 184.15 29.718) (end 151.13 29.718) (width 0.8) (layer B.Cu) (net 0))
(segment (start 161.324583 21.554137) (end 162.052 22.281554) (width 0.8) (layer F.Cu) (net 0))
(segment (start 162.941 38.98772) (end 161.324583 40.604137) (width 1) (layer F.Cu) (net 0))
@ -458,5 +455,9 @@
(segment (start 112.915183 34.230625) (end 94.809625 34.230625) (width 0.8) (layer B.Cu) (net 0))
(segment (start 112.915183 36.770625) (end 94.674375 36.770625) (width 0.8) (layer B.Cu) (net 0))
(segment (start 112.915183 39.310625) (end 94.801375 39.310625) (width 0.8) (layer B.Cu) (net 0))
(segment (start 174.710248 28.067) (end 174.498 28.067) (width 0.8) (layer B.Cu) (net 0))
(segment (start 174.498 28.067) (end 149.86 28.067) (width 0.8) (layer B.Cu) (net 0))
(segment (start 176.40172 28.067) (end 179.104583 25.364137) (width 0.8) (layer B.Cu) (net 0))
(segment (start 174.498 28.067) (end 176.40172 28.067) (width 0.8) (layer B.Cu) (net 0))
)

View file

@ -1,508 +0,0 @@
(kicad_pcb (version 20171130) (host pcbnew "(5.0.1-3-g963ef8bb5)")
(general
(thickness 1.6)
(drawings 4)
(tracks 389)
(zones 0)
(modules 0)
(nets 1)
)
(page A4)
(layers
(0 F.Cu signal)
(31 B.Cu signal)
(32 B.Adhes user)
(33 F.Adhes user)
(34 B.Paste user)
(35 F.Paste user)
(36 B.SilkS user)
(37 F.SilkS user)
(38 B.Mask user)
(39 F.Mask user)
(40 Dwgs.User user)
(41 Cmts.User user)
(42 Eco1.User user)
(43 Eco2.User user)
(44 Edge.Cuts user)
(45 Margin user)
(46 B.CrtYd user)
(47 F.CrtYd user)
(48 B.Fab user)
(49 F.Fab user)
)
(setup
(last_trace_width 0.8)
(trace_clearance 0.2)
(zone_clearance 0.508)
(zone_45_only no)
(trace_min 0.2)
(segment_width 0.2)
(edge_width 0.15)
(via_size 1.8)
(via_drill 0.4)
(via_min_size 0.4)
(via_min_drill 0.3)
(uvia_size 0.3)
(uvia_drill 0.1)
(uvias_allowed no)
(uvia_min_size 0.2)
(uvia_min_drill 0.1)
(pcb_text_width 0.3)
(pcb_text_size 1.5 1.5)
(mod_edge_width 0.15)
(mod_text_size 1 1)
(mod_text_width 0.15)
(pad_size 1.524 1.524)
(pad_drill 0.762)
(pad_to_mask_clearance 0.051)
(solder_mask_min_width 0.25)
(aux_axis_origin 0 0)
(visible_elements FFFFFF7F)
(pcbplotparams
(layerselection 0x010fc_ffffffff)
(usegerberextensions false)
(usegerberattributes false)
(usegerberadvancedattributes false)
(creategerberjobfile false)
(excludeedgelayer true)
(linewidth 0.150000)
(plotframeref false)
(viasonmask false)
(mode 1)
(useauxorigin false)
(hpglpennumber 1)
(hpglpenspeed 20)
(hpglpendiameter 15.000000)
(psnegative false)
(psa4output false)
(plotreference true)
(plotvalue true)
(plotinvisibletext false)
(padsonsilk false)
(subtractmaskfromsilk false)
(outputformat 1)
(mirror false)
(drillshape 1)
(scaleselection 1)
(outputdirectory ""))
)
(net 0 "")
(net_class Default "This is the default net class."
(clearance 0.2)
(trace_width 0.8)
(via_dia 1.8)
(via_drill 0.4)
(uvia_dia 0.3)
(uvia_drill 0.1)
)
(net_class neti ""
(clearance 0.2)
(trace_width 0.8)
(via_dia 3)
(via_drill 0.4)
(uvia_dia 0.3)
(uvia_drill 0.1)
)
(gr_line (start 144.018 44.577) (end 144.018 18.415) (layer Edge.Cuts) (width 0.15))
(gr_line (start 189.738 44.704) (end 143.891 44.704) (layer Edge.Cuts) (width 0.15))
(gr_line (start 189.865 18.415) (end 189.865 44.323) (layer Edge.Cuts) (width 0.15))
(gr_line (start 144.018 18.415) (end 189.865 18.415) (layer Edge.Cuts) (width 0.15))
(via (at 176.564583 25.364137) (size 1.2) (drill 0.4) (layers F.Cu B.Cu) (net 0) (tstamp 5E065D07))
(via (at 186.724583 25.364137) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 0) (tstamp 5E065D08))
(via (at 156.244583 40.604137) (size 1.8) (drill 0.4) (layers F.Cu B.Cu) (net 0) (tstamp 5E065D1A))
(via (at 174.024583 40.604137) (size 1.8) (drill 0.4) (layers F.Cu B.Cu) (net 0) (tstamp 5E065D1B))
(via (at 176.564583 40.604137) (size 1.8) (drill 0.4) (layers F.Cu B.Cu) (net 0) (tstamp 5E065D1C))
(via (at 179.104583 40.604137) (size 1.8) (drill 0.4) (layers F.Cu B.Cu) (net 0) (tstamp 5E065D1D))
(via (at 174.024583 25.364137) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 0) (tstamp 5E065D1E))
(via (at 186.724583 25.364137) (size 1.8) (drill 0.4) (layers F.Cu B.Cu) (net 0) (tstamp 5E065D1F))
(via (at 179.104583 25.364137) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 0) (tstamp 5E065D20))
(via (at 181.644583 25.364137) (size 1.8) (drill 0.4) (layers F.Cu B.Cu) (net 0) (tstamp 5E065D21))
(via (at 184.184583 25.364137) (size 1.8) (drill 0.4) (layers F.Cu B.Cu) (net 0) (tstamp 5E065D22))
(via (at 176.564583 25.364137) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 0) (tstamp 5E065D23))
(via (at 181.644583 25.364137) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 0) (tstamp 5E065D24))
(via (at 186.724583 25.364137) (size 1.5) (drill 0.4) (layers F.Cu B.Cu) (net 0) (tstamp 5E065D25))
(via (at 186.724583 25.364137) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 0) (tstamp 5E065D26))
(via (at 184.184583 25.364137) (size 1.5) (drill 0.4) (layers F.Cu B.Cu) (net 0) (tstamp 5E065D27))
(via (at 184.184583 25.364137) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 0) (tstamp 5E065D28))
(via (at 176.564583 25.364137) (size 1.5) (drill 0.4) (layers F.Cu B.Cu) (net 0) (tstamp 5E065D29))
(via (at 179.104583 25.364137) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 0) (tstamp 5E065D2A))
(via (at 158.784583 25.364137) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 0) (tstamp 5E065D2B))
(via (at 158.784583 25.364137) (size 1.8) (drill 0.4) (layers F.Cu B.Cu) (net 0) (tstamp 5E065D2C))
(via (at 171.484583 25.364137) (size 1.8) (drill 0.4) (layers F.Cu B.Cu) (net 0) (tstamp 5E065D2D))
(via (at 181.644583 25.364137) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 0) (tstamp 5E065D2E))
(via (at 179.104583 25.364137) (size 1.5) (drill 0.4) (layers F.Cu B.Cu) (net 0) (tstamp 5E065D2F))
(via (at 184.184583 25.364137) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 0) (tstamp 5E065D30))
(via (at 181.644583 25.364137) (size 1.5) (drill 0.4) (layers F.Cu B.Cu) (net 0) (tstamp 5E065D31))
(via (at 174.024583 25.364137) (size 1.5) (drill 0.4) (layers F.Cu B.Cu) (net 0) (tstamp 5E065D32))
(via (at 174.024583 25.364137) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 0) (tstamp 5E065D33))
(via (at 171.484583 25.364137) (size 1.5) (drill 0.4) (layers F.Cu B.Cu) (net 0) (tstamp 5E065D34))
(via (at 171.484583 25.364137) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 0) (tstamp 5E065D35))
(via (at 168.944583 25.364137) (size 1.5) (drill 0.4) (layers F.Cu B.Cu) (net 0) (tstamp 5E065D36))
(via (at 168.944583 25.364137) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 0) (tstamp 5E065D37))
(via (at 166.404583 25.364137) (size 1.5) (drill 0.4) (layers F.Cu B.Cu) (net 0) (tstamp 5E065D38))
(via (at 166.404583 25.364137) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 0) (tstamp 5E065D39))
(via (at 163.864583 25.364137) (size 1.5) (drill 0.4) (layers F.Cu B.Cu) (net 0) (tstamp 5E065D3A))
(via (at 163.864583 25.364137) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 0) (tstamp 5E065D3B))
(via (at 161.324583 25.364137) (size 1.5) (drill 0.4) (layers F.Cu B.Cu) (net 0) (tstamp 5E065D3C))
(via (at 161.324583 25.364137) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 0) (tstamp 5E065D3D))
(via (at 158.784583 25.364137) (size 1.5) (drill 0.4) (layers F.Cu B.Cu) (net 0) (tstamp 5E065D3E))
(via (at 158.784583 25.364137) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 0) (tstamp 5E065D3F))
(via (at 156.244583 25.364137) (size 1.5) (drill 0.4) (layers F.Cu B.Cu) (net 0) (tstamp 5E065D40))
(via (at 158.784583 40.604137) (size 1.8) (drill 0.4) (layers F.Cu B.Cu) (net 0) (tstamp 5E065D41))
(via (at 156.244583 25.364137) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 0) (tstamp 5E065D42))
(via (at 163.864583 40.604137) (size 1.8) (drill 0.4) (layers F.Cu B.Cu) (net 0) (tstamp 5E065D43))
(via (at 153.704583 25.364137) (size 1.5) (drill 0.4) (layers F.Cu B.Cu) (net 0) (tstamp 5E065D44))
(via (at 153.704583 25.364137) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 0) (tstamp 5E065D45))
(via (at 161.324583 40.604137) (size 1.8) (drill 0.4) (layers F.Cu B.Cu) (net 0) (tstamp 5E065D46))
(via (at 153.704583 25.364137) (size 1.5) (drill 0.4) (layers F.Cu B.Cu) (net 0) (tstamp 5E065D47))
(via (at 153.704583 25.364137) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 0) (tstamp 5E065D48))
(via (at 153.704583 25.364137) (size 1.2) (drill 0.4) (layers F.Cu B.Cu) (net 0) (tstamp 5E065D49))
(via (at 153.704583 25.364137) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 0) (tstamp 5E065D4A))
(via (at 156.244583 25.364137) (size 1.2) (drill 0.4) (layers F.Cu B.Cu) (net 0) (tstamp 5E065D4B))
(via (at 176.564583 25.364137) (size 1.8) (drill 0.4) (layers F.Cu B.Cu) (net 0) (tstamp 5E065D4C))
(via (at 156.244583 25.364137) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 0) (tstamp 5E065D4D))
(via (at 186.724583 40.604137) (size 1.8) (drill 0.4) (layers F.Cu B.Cu) (net 0) (tstamp 5E065D4F))
(via (at 184.184583 40.604137) (size 1.8) (drill 0.4) (layers F.Cu B.Cu) (net 0) (tstamp 5E065D50))
(via (at 181.644583 40.604137) (size 1.8) (drill 0.4) (layers F.Cu B.Cu) (net 0) (tstamp 5E065D51))
(via (at 153.704583 25.364137) (size 1.8) (drill 0.4) (layers F.Cu B.Cu) (net 0) (tstamp 5E065D52))
(via (at 153.704583 25.364137) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 0) (tstamp 5E065D53))
(via (at 156.244583 25.364137) (size 1.8) (drill 0.4) (layers F.Cu B.Cu) (net 0) (tstamp 5E065D54))
(via (at 156.244583 25.364137) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 0) (tstamp 5E065D55))
(via (at 174.024583 25.364137) (size 1.8) (drill 0.4) (layers F.Cu B.Cu) (net 0) (tstamp 5E065D56))
(via (at 166.404583 40.604137) (size 1.8) (drill 0.4) (layers F.Cu B.Cu) (net 0) (tstamp 5E065D57))
(via (at 158.784583 25.364137) (size 1.2) (drill 0.4) (layers F.Cu B.Cu) (net 0) (tstamp 5E065D58))
(via (at 158.784583 25.364137) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 0) (tstamp 5E065D59))
(via (at 161.324583 25.364137) (size 1.2) (drill 0.4) (layers F.Cu B.Cu) (net 0) (tstamp 5E065D5A))
(via (at 161.324583 25.364137) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 0) (tstamp 5E065D5B))
(via (at 163.864583 25.364137) (size 1.2) (drill 0.4) (layers F.Cu B.Cu) (net 0) (tstamp 5E065D5C))
(via (at 163.864583 25.364137) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 0) (tstamp 5E065D5D))
(via (at 166.404583 25.364137) (size 1.2) (drill 0.4) (layers F.Cu B.Cu) (net 0) (tstamp 5E065D5E))
(via (at 166.404583 25.364137) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 0) (tstamp 5E065D5F))
(via (at 168.944583 25.364137) (size 1.2) (drill 0.4) (layers F.Cu B.Cu) (net 0) (tstamp 5E065D60))
(via (at 168.944583 25.364137) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 0) (tstamp 5E065D61))
(via (at 171.484583 25.364137) (size 1.2) (drill 0.4) (layers F.Cu B.Cu) (net 0) (tstamp 5E065D62))
(via (at 171.484583 25.364137) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 0) (tstamp 5E065D63))
(via (at 174.024583 25.364137) (size 1.2) (drill 0.4) (layers F.Cu B.Cu) (net 0) (tstamp 5E065D64))
(via (at 174.024583 25.364137) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 0) (tstamp 5E065D65))
(via (at 176.564583 25.364137) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 0) (tstamp 5E065D66))
(via (at 184.184583 25.364137) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 0) (tstamp 5E065D67))
(via (at 186.724583 25.364137) (size 1.2) (drill 0.4) (layers F.Cu B.Cu) (net 0) (tstamp 5E065D68))
(via (at 176.564583 25.364137) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 0) (tstamp 5E065D69))
(via (at 156.244583 25.364137) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 0) (tstamp 5E065D6A))
(via (at 161.324583 25.364137) (size 1.8) (drill 0.4) (layers F.Cu B.Cu) (net 0) (tstamp 5E065D6B))
(via (at 153.704583 40.604137) (size 1.8) (drill 0.4) (layers F.Cu B.Cu) (net 0) (tstamp 5E065D6C))
(via (at 176.564583 25.364137) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 0) (tstamp 5E065D6D))
(via (at 153.704583 25.364137) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 0) (tstamp 5E065D6E))
(via (at 174.024583 25.364137) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 0) (tstamp 5E065D6F))
(via (at 158.784583 25.364137) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 0) (tstamp 5E065D71))
(via (at 176.564583 25.364137) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 0) (tstamp 5E065D72))
(via (at 171.484583 25.364137) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 0) (tstamp 5E065D73))
(via (at 168.944583 25.364137) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 0) (tstamp 5E065D74))
(via (at 166.404583 25.364137) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 0) (tstamp 5E065D75))
(via (at 163.864583 25.364137) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 0) (tstamp 5E065D76))
(via (at 161.324583 25.364137) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 0) (tstamp 5E065D77))
(via (at 171.484583 40.604137) (size 1.8) (drill 0.4) (layers F.Cu B.Cu) (net 0) (tstamp 5E065D78))
(via (at 179.104583 25.364137) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 0) (tstamp 5E065D79))
(via (at 168.944583 40.604137) (size 1.8) (drill 0.4) (layers F.Cu B.Cu) (net 0) (tstamp 5E065D7A))
(via (at 181.644583 25.364137) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 0) (tstamp 5E065D7B))
(via (at 186.724583 25.364137) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 0) (tstamp 5E065D7C))
(via (at 153.704583 25.364137) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 0) (tstamp 5E065D7D))
(via (at 153.704583 25.364137) (size 1.2) (drill 0.4) (layers F.Cu B.Cu) (net 0) (tstamp 5E065D7E))
(via (at 176.564583 25.364137) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 0) (tstamp 5E065D7F))
(via (at 179.104583 25.364137) (size 1.2) (drill 0.4) (layers F.Cu B.Cu) (net 0) (tstamp 5E065D80))
(via (at 179.104583 25.364137) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 0) (tstamp 5E065D81))
(via (at 181.644583 25.364137) (size 1.2) (drill 0.4) (layers F.Cu B.Cu) (net 0) (tstamp 5E065D82))
(via (at 181.644583 25.364137) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 0) (tstamp 5E065D83))
(via (at 184.184583 25.364137) (size 1.2) (drill 0.4) (layers F.Cu B.Cu) (net 0) (tstamp 5E065D84))
(via (at 168.944583 25.364137) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 0) (tstamp 5E065D85))
(via (at 171.484583 25.364137) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 0) (tstamp 5E065D86))
(via (at 179.104583 25.364137) (size 1.8) (drill 0.4) (layers F.Cu B.Cu) (net 0) (tstamp 5E065D87))
(via (at 161.324583 25.364137) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 0) (tstamp 5E065D88))
(via (at 163.864583 25.364137) (size 1.8) (drill 0.4) (layers F.Cu B.Cu) (net 0) (tstamp 5E065D89))
(via (at 184.184583 25.364137) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 0) (tstamp 5E065D8A))
(via (at 163.864583 25.364137) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 0) (tstamp 5E065D8B))
(via (at 186.724583 25.364137) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 0) (tstamp 5E065D8C))
(via (at 166.404583 25.364137) (size 1.8) (drill 0.4) (layers F.Cu B.Cu) (net 0) (tstamp 5E065D8D))
(via (at 166.404583 25.364137) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 0) (tstamp 5E065D8E))
(via (at 168.944583 25.364137) (size 1.8) (drill 0.4) (layers F.Cu B.Cu) (net 0) (tstamp 5E065D8F))
(via (at 158.784583 21.554137) (size 1.8) (drill 0.4) (layers F.Cu B.Cu) (net 0) (tstamp 5E065F9A))
(via (at 163.864583 21.554137) (size 1.8) (drill 0.4) (layers F.Cu B.Cu) (net 0) (tstamp 5E065F9B))
(via (at 163.864583 21.554137) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 0) (tstamp 5E065F9C))
(via (at 158.784583 21.554137) (size 1.2) (drill 0.4) (layers F.Cu B.Cu) (net 0) (tstamp 5E065F9D))
(via (at 158.784583 21.554137) (size 1.5) (drill 0.4) (layers F.Cu B.Cu) (net 0) (tstamp 5E065F9E))
(via (at 158.784583 21.554137) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 0) (tstamp 5E065F9F))
(via (at 158.784583 21.554137) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 0) (tstamp 5E065FA0))
(via (at 161.324583 21.554137) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 0) (tstamp 5E065FA1))
(via (at 174.024583 21.554137) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 0) (tstamp 5E065FA2))
(via (at 158.784583 21.554137) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 0) (tstamp 5E065FA3))
(via (at 161.324583 21.554137) (size 1.2) (drill 0.4) (layers F.Cu B.Cu) (net 0) (tstamp 5E065FA4))
(via (at 161.324583 21.554137) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 0) (tstamp 5E065FA5))
(via (at 161.324583 21.554137) (size 1.5) (drill 0.4) (layers F.Cu B.Cu) (net 0) (tstamp 5E065FA6))
(via (at 158.784583 21.554137) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 0) (tstamp 5E065FA7))
(via (at 163.864583 21.554137) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 0) (tstamp 5E065FA8))
(via (at 163.864583 21.554137) (size 1.5) (drill 0.4) (layers F.Cu B.Cu) (net 0) (tstamp 5E065FA9))
(via (at 168.944583 21.554137) (size 1.5) (drill 0.4) (layers F.Cu B.Cu) (net 0) (tstamp 5E065FAA))
(via (at 171.484583 21.554137) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 0) (tstamp 5E065FAB))
(via (at 163.864583 21.554137) (size 1.2) (drill 0.4) (layers F.Cu B.Cu) (net 0) (tstamp 5E065FAC))
(via (at 168.944583 21.554137) (size 1.2) (drill 0.4) (layers F.Cu B.Cu) (net 0) (tstamp 5E065FAD))
(via (at 168.944583 21.554137) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 0) (tstamp 5E065FAE))
(via (at 171.484583 21.554137) (size 1.2) (drill 0.4) (layers F.Cu B.Cu) (net 0) (tstamp 5E065FAF))
(via (at 161.324583 21.554137) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 0) (tstamp 5E065FB0))
(via (at 158.784583 21.554137) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 0) (tstamp 5E065FB1))
(via (at 174.024583 21.554137) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 0) (tstamp 5E065FB2))
(via (at 171.484583 21.554137) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 0) (tstamp 5E065FB3))
(via (at 168.944583 21.554137) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 0) (tstamp 5E065FB4))
(via (at 166.404583 21.554137) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 0) (tstamp 5E065FB5))
(via (at 171.484583 21.554137) (size 1.8) (drill 0.4) (layers F.Cu B.Cu) (net 0) (tstamp 5E065FB6))
(via (at 171.484583 21.554137) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 0) (tstamp 5E065FB7))
(via (at 168.944583 21.554137) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 0) (tstamp 5E065FB8))
(via (at 174.024583 21.554137) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 0) (tstamp 5E065FB9))
(via (at 168.944583 21.554137) (size 1.8) (drill 0.4) (layers F.Cu B.Cu) (net 0) (tstamp 5E065FBA))
(via (at 158.784583 21.554137) (size 1.2) (drill 0.4) (layers F.Cu B.Cu) (net 0) (tstamp 5E065FBB))
(via (at 158.784583 21.554137) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 0) (tstamp 5E065FBC))
(via (at 166.404583 21.554137) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 0) (tstamp 5E065FBD))
(via (at 163.864583 21.554137) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 0) (tstamp 5E065FBE))
(via (at 166.404583 21.554137) (size 1.8) (drill 0.4) (layers F.Cu B.Cu) (net 0) (tstamp 5E065FBF))
(via (at 174.024583 21.554137) (size 1.2) (drill 0.4) (layers F.Cu B.Cu) (net 0) (tstamp 5E065FC0))
(via (at 174.024583 21.554137) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 0) (tstamp 5E065FC1))
(via (at 166.404583 21.554137) (size 1.2) (drill 0.4) (layers F.Cu B.Cu) (net 0) (tstamp 5E065FC2))
(via (at 166.404583 21.554137) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 0) (tstamp 5E065FC3))
(via (at 171.484583 21.554137) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 0) (tstamp 5E065FC4))
(via (at 161.324583 21.554137) (size 1.8) (drill 0.4) (layers F.Cu B.Cu) (net 0) (tstamp 5E065FC5))
(via (at 161.324583 21.554137) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 0) (tstamp 5E065FC6))
(via (at 163.864583 21.554137) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 0) (tstamp 5E065FC7))
(via (at 166.404583 21.554137) (size 1.5) (drill 0.4) (layers F.Cu B.Cu) (net 0) (tstamp 5E065FC8))
(via (at 168.944583 21.554137) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 0) (tstamp 5E065FC9))
(via (at 171.484583 21.554137) (size 1.5) (drill 0.4) (layers F.Cu B.Cu) (net 0) (tstamp 5E065FCA))
(via (at 158.784583 21.554137) (size 1.5) (drill 0.4) (layers F.Cu B.Cu) (net 0) (tstamp 5E065FCB))
(via (at 166.404583 21.554137) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 0) (tstamp 5E065FCC))
(via (at 174.024583 21.554137) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 0) (tstamp 5E0661A3))
(via (at 174.024583 21.554137) (size 1.8) (drill 0.4) (layers F.Cu B.Cu) (net 0))
(via (at 184.15 29.718) (size 1.8) (drill 0.4) (layers F.Cu B.Cu) (net 0))
(via (at 184.15 37.338) (size 1.8) (drill 0.4) (layers F.Cu B.Cu) (net 0))
(via (at 179.07 37.338) (size 1.8) (drill 0.4) (layers F.Cu B.Cu) (net 0))
(via (at 173.99 37.338) (size 1.8) (drill 0.4) (layers F.Cu B.Cu) (net 0))
(via (at 179.07 29.718) (size 1.8) (drill 0.4) (layers F.Cu B.Cu) (net 0))
(via (at 173.99 29.718) (size 1.8) (drill 0.4) (layers F.Cu B.Cu) (net 0))
(segment (start 184.184583 29.683417) (end 184.15 29.718) (width 1) (layer B.Cu) (net 0))
(segment (start 156.244583 29.683417) (end 156.21 29.718) (width 1) (layer B.Cu) (net 0) (tstamp 5E0772AE))
(via (at 156.21 29.718) (size 1.8) (drill 0.4) (layers F.Cu B.Cu) (net 0) (tstamp 5E0772B0))
(segment (start 146.084583 29.556417) (end 146.05 29.591) (width 1) (layer B.Cu) (net 0) (tstamp 5E0772AE))
(via (at 146.05 29.718) (size 1.8) (drill 0.4) (layers F.Cu B.Cu) (net 0) (tstamp 5E0772B0))
(via (at 146.05 37.338) (size 1.8) (drill 0.4) (layers F.Cu B.Cu) (net 0) (tstamp 5E0772B1))
(via (at 156.21 37.338) (size 1.8) (drill 0.4) (layers F.Cu B.Cu) (net 0) (tstamp 5E0772B1))
(via (at 151.13 25.4) (size 1.8) (drill 0.4) (layers F.Cu B.Cu) (net 0) (tstamp 5E07763C))
(via (at 151.13 32.766) (size 1.8) (drill 0.4) (layers F.Cu B.Cu) (net 0) (tstamp 5E07763D))
(segment (start 151.164583 34.255417) (end 151.13 34.29) (width 1) (layer B.Cu) (net 0) (tstamp 5E07763B))
(via (at 151.13 34.29) (size 1.8) (drill 0.4) (layers F.Cu B.Cu) (net 0) (tstamp 5E07763C))
(via (at 151.13 41.91) (size 1.8) (drill 0.4) (layers F.Cu B.Cu) (net 0) (tstamp 5E07763D))
(segment (start 146.177 29.718) (end 146.05 29.591) (width 1) (layer B.Cu) (net 0))
(segment (start 158.784583 26.254417) (end 157.988 27.051) (width 0.8) (layer B.Cu) (net 0))
(segment (start 158.784583 25.364137) (end 158.784583 26.254417) (width 0.8) (layer B.Cu) (net 0))
(segment (start 176.403 28.06572) (end 176.403 28.067) (width 0.8) (layer B.Cu) (net 0))
(segment (start 179.104583 25.364137) (end 176.403 28.06572) (width 0.8) (layer B.Cu) (net 0))
(segment (start 149.987 19.939) (end 149.225 20.701) (width 0.8) (layer B.Cu) (net 0))
(segment (start 149.225 27.432) (end 149.86 28.067) (width 0.8) (layer B.Cu) (net 0))
(segment (start 149.225 20.701) (end 149.225 27.432) (width 0.8) (layer B.Cu) (net 0))
(segment (start 176.403 28.067) (end 149.86 28.067) (width 0.8) (layer B.Cu) (net 0))
(segment (start 184.15 29.718) (end 151.13 29.718) (width 0.8) (layer B.Cu) (net 0))
(segment (start 161.324583 21.554137) (end 162.052 22.281554) (width 0.8) (layer F.Cu) (net 0))
(segment (start 162.941 38.98772) (end 161.324583 40.604137) (width 1) (layer F.Cu) (net 0))
(segment (start 184.15 22.352) (end 184.15 22.352) (width 0.8) (layer B.Cu) (net 0))
(segment (start 151.13 25.527) (end 151.13 26.035) (width 0.8) (layer B.Cu) (net 0))
(segment (start 152.146 27.051) (end 157.48 27.051) (width 0.8) (layer B.Cu) (net 0))
(segment (start 151.13 26.035) (end 152.146 27.051) (width 0.8) (layer B.Cu) (net 0))
(segment (start 157.988 27.051) (end 157.48 27.051) (width 0.8) (layer B.Cu) (net 0))
(segment (start 151.13 39.37) (end 151.13 41.91) (width 0.8) (layer B.Cu) (net 0))
(segment (start 151.511 38.989) (end 151.13 39.37) (width 0.8) (layer B.Cu) (net 0))
(segment (start 166.062238 38.989) (end 151.511 38.989) (width 0.8) (layer B.Cu) (net 0))
(segment (start 166.404583 39.331345) (end 166.062238 38.989) (width 0.8) (layer B.Cu) (net 0))
(segment (start 166.404583 40.604137) (end 166.404583 39.331345) (width 0.8) (layer B.Cu) (net 0))
(segment (start 151.13 29.718) (end 151.13 32.893) (width 0.8) (layer B.Cu) (net 0))
(segment (start 168.944583 39.331345) (end 166.951238 37.338) (width 0.8) (layer B.Cu) (net 0))
(segment (start 168.944583 40.604137) (end 168.944583 39.331345) (width 0.8) (layer B.Cu) (net 0))
(segment (start 166.951238 37.338) (end 156.21 37.338) (width 0.8) (layer B.Cu) (net 0))
(segment (start 171.484583 40.604137) (end 171.484583 38.896583) (width 0.8) (layer B.Cu) (net 0))
(segment (start 171.484583 38.896583) (end 168.148 35.56) (width 0.8) (layer B.Cu) (net 0))
(segment (start 168.148 35.56) (end 154.178 35.56) (width 0.8) (layer B.Cu) (net 0))
(segment (start 154.178 35.56) (end 152.4 37.338) (width 0.8) (layer B.Cu) (net 0))
(segment (start 152.4 37.338) (end 150.876 37.338) (width 0.8) (layer B.Cu) (net 0))
(segment (start 150.876 37.338) (end 151.892 37.338) (width 0.8) (layer B.Cu) (net 0))
(segment (start 146.05 37.338) (end 150.876 37.338) (width 0.8) (layer B.Cu) (net 0))
(segment (start 174.024583 37.372583) (end 173.99 37.338) (width 0.8) (layer B.Cu) (net 0))
(segment (start 174.024583 40.604137) (end 174.024583 37.372583) (width 0.8) (layer B.Cu) (net 0))
(segment (start 179.07 37.338) (end 177.292 37.338) (width 0.8) (layer B.Cu) (net 0))
(segment (start 176.564583 38.065417) (end 176.564583 40.604137) (width 0.8) (layer B.Cu) (net 0))
(segment (start 177.292 37.338) (end 176.564583 38.065417) (width 0.8) (layer B.Cu) (net 0))
(segment (start 182.37072 37.338) (end 179.104583 40.604137) (width 0.8) (layer B.Cu) (net 0))
(segment (start 184.15 37.338) (end 182.37072 37.338) (width 0.8) (layer B.Cu) (net 0))
(segment (start 174.024583 21.554137) (end 183.352137 21.554137) (width 0.8) (layer B.Cu) (net 0))
(segment (start 171.45 23.368) (end 171.484583 23.333417) (width 0.8) (layer B.Cu) (net 0))
(segment (start 180.975 23.368) (end 171.45 23.368) (width 0.8) (layer B.Cu) (net 0))
(segment (start 171.484583 23.333417) (end 171.484583 21.554137) (width 0.8) (layer B.Cu) (net 0))
(segment (start 181.644583 24.037583) (end 180.975 23.368) (width 0.8) (layer B.Cu) (net 0))
(segment (start 181.644583 25.364137) (end 181.644583 24.037583) (width 0.8) (layer B.Cu) (net 0))
(segment (start 168.944583 23.275583) (end 168.944583 21.554137) (width 0.8) (layer B.Cu) (net 0))
(segment (start 154.305 23.368) (end 169.037 23.368) (width 0.8) (layer B.Cu) (net 0))
(segment (start 153.704583 23.968417) (end 154.305 23.368) (width 0.8) (layer B.Cu) (net 0))
(segment (start 169.037 23.368) (end 168.944583 23.275583) (width 0.8) (layer B.Cu) (net 0))
(segment (start 153.704583 25.364137) (end 153.704583 23.968417) (width 0.8) (layer B.Cu) (net 0))
(segment (start 156.244583 41.876929) (end 156.244583 40.604137) (width 0.8) (layer B.Cu) (net 0))
(segment (start 156.912654 42.545) (end 156.244583 41.876929) (width 0.8) (layer B.Cu) (net 0))
(segment (start 188.722 21.463) (end 188.722 41.275) (width 0.8) (layer B.Cu) (net 0))
(segment (start 187.071 19.812) (end 188.722 21.463) (width 0.8) (layer B.Cu) (net 0))
(segment (start 187.452 42.545) (end 156.912654 42.545) (width 0.8) (layer B.Cu) (net 0))
(segment (start 188.722 41.275) (end 187.452 42.545) (width 0.8) (layer B.Cu) (net 0))
(segment (start 166.404583 21.554137) (end 166.404583 20.158417) (width 0.8) (layer B.Cu) (net 0))
(segment (start 166.751 19.812) (end 187.071 19.812) (width 0.8) (layer B.Cu) (net 0))
(segment (start 166.404583 20.158417) (end 166.751 19.812) (width 0.8) (layer B.Cu) (net 0))
(segment (start 163.864583 20.281345) (end 163.268238 19.685) (width 0.8) (layer B.Cu) (net 0))
(segment (start 163.864583 21.554137) (end 163.864583 20.281345) (width 0.8) (layer B.Cu) (net 0))
(segment (start 163.268238 19.685) (end 150.368 19.685) (width 0.8) (layer B.Cu) (net 0))
(segment (start 184.15 22.352) (end 184.15 29.21) (width 0.8) (layer B.Cu) (net 0) (tstamp 5E0A4353))
(via (at 184.15 22.352) (size 1.8) (drill 0.4) (layers F.Cu B.Cu) (net 0))
(via (at 186.69 22.352) (size 1.8) (drill 0.4) (layers F.Cu B.Cu) (net 0))
(segment (start 186.69 25.329554) (end 186.724583 25.364137) (width 0.8) (layer B.Cu) (net 0))
(segment (start 186.69 22.352) (end 186.69 25.329554) (width 0.8) (layer B.Cu) (net 0))
(segment (start 183.352137 21.554137) (end 184.15 22.352) (width 0.8) (layer B.Cu) (net 0))
(via (at 148.59 31.115) (size 1.8) (drill 0.4) (layers F.Cu B.Cu) (net 0))
(via (at 148.59 39.751) (size 1.8) (drill 0.4) (layers F.Cu B.Cu) (net 0))
(segment (start 148.59 29.842208) (end 148.59 29.718) (width 0.8) (layer B.Cu) (net 0))
(segment (start 148.59 31.115) (end 148.59 29.842208) (width 0.8) (layer B.Cu) (net 0))
(segment (start 148.59 29.718) (end 146.05 29.718) (width 0.8) (layer B.Cu) (net 0))
(segment (start 151.13 29.718) (end 148.59 29.718) (width 0.8) (layer B.Cu) (net 0))
(via (at 146.05 42.926) (size 1.8) (drill 0.4) (layers F.Cu B.Cu) (net 0))
(segment (start 147.322792 42.926) (end 148.084792 43.688) (width 0.8) (layer B.Cu) (net 0))
(segment (start 146.05 42.926) (end 147.322792 42.926) (width 0.8) (layer B.Cu) (net 0))
(segment (start 148.084792 43.688) (end 158.877 43.688) (width 0.8) (layer B.Cu) (net 0))
(via (at 146.05 40.767) (size 1.8) (drill 0.4) (layers F.Cu B.Cu) (net 0))
(segment (start 147.574 40.767) (end 148.59 39.751) (width 0.8) (layer B.Cu) (net 0))
(segment (start 146.05 40.767) (end 147.574 40.767) (width 0.8) (layer B.Cu) (net 0))
(segment (start 148.59 32.387792) (end 148.59 39.751) (width 0.8) (layer F.Cu) (net 0))
(segment (start 148.59 31.115) (end 148.59 32.387792) (width 0.8) (layer F.Cu) (net 0))
(via (at 136.029183 39.310625) (size 1.8) (drill 0.4) (layers F.Cu B.Cu) (net 0) (tstamp 5E0A4FCC))
(via (at 136.029183 34.230625) (size 1.8) (drill 0.4) (layers F.Cu B.Cu) (net 0) (tstamp 5E0A4FCD))
(via (at 136.029183 34.230625) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 0) (tstamp 5E0A4FCE))
(via (at 136.029183 39.310625) (size 1.2) (drill 0.4) (layers F.Cu B.Cu) (net 0) (tstamp 5E0A4FCF))
(via (at 136.029183 39.310625) (size 1.5) (drill 0.4) (layers F.Cu B.Cu) (net 0) (tstamp 5E0A4FD0))
(via (at 136.029183 39.310625) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 0) (tstamp 5E0A4FD1))
(via (at 136.029183 39.310625) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 0) (tstamp 5E0A4FD2))
(via (at 136.029183 36.770625) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 0) (tstamp 5E0A4FD3))
(via (at 136.029183 24.070625) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 0) (tstamp 5E0A4FD4))
(via (at 136.029183 39.310625) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 0) (tstamp 5E0A4FD5))
(via (at 136.029183 36.770625) (size 1.2) (drill 0.4) (layers F.Cu B.Cu) (net 0) (tstamp 5E0A4FD6))
(via (at 136.029183 36.770625) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 0) (tstamp 5E0A4FD7))
(via (at 136.029183 36.770625) (size 1.5) (drill 0.4) (layers F.Cu B.Cu) (net 0) (tstamp 5E0A4FD8))
(via (at 136.029183 39.310625) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 0) (tstamp 5E0A4FD9))
(via (at 136.029183 34.230625) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 0) (tstamp 5E0A4FDA))
(via (at 136.029183 34.230625) (size 1.5) (drill 0.4) (layers F.Cu B.Cu) (net 0) (tstamp 5E0A4FDB))
(via (at 136.029183 29.150625) (size 1.5) (drill 0.4) (layers F.Cu B.Cu) (net 0) (tstamp 5E0A4FDC))
(via (at 136.029183 26.610625) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 0) (tstamp 5E0A4FDD))
(via (at 136.029183 34.230625) (size 1.2) (drill 0.4) (layers F.Cu B.Cu) (net 0) (tstamp 5E0A4FDE))
(via (at 136.029183 29.150625) (size 1.2) (drill 0.4) (layers F.Cu B.Cu) (net 0) (tstamp 5E0A4FDF))
(via (at 136.029183 29.150625) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 0) (tstamp 5E0A4FE0))
(via (at 136.029183 26.610625) (size 1.2) (drill 0.4) (layers F.Cu B.Cu) (net 0) (tstamp 5E0A4FE1))
(via (at 136.029183 36.770625) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 0) (tstamp 5E0A4FE2))
(via (at 136.029183 39.310625) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 0) (tstamp 5E0A4FE3))
(via (at 136.029183 24.070625) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 0) (tstamp 5E0A4FE4))
(via (at 136.029183 26.610625) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 0) (tstamp 5E0A4FE5))
(via (at 136.029183 29.150625) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 0) (tstamp 5E0A4FE6))
(via (at 136.029183 31.690625) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 0) (tstamp 5E0A4FE7))
(via (at 136.029183 26.610625) (size 1.8) (drill 0.4) (layers F.Cu B.Cu) (net 0) (tstamp 5E0A4FE8))
(via (at 136.029183 26.610625) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 0) (tstamp 5E0A4FE9))
(via (at 136.029183 29.150625) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 0) (tstamp 5E0A4FEA))
(via (at 136.029183 24.070625) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 0) (tstamp 5E0A4FEB))
(via (at 136.029183 29.150625) (size 1.8) (drill 0.4) (layers F.Cu B.Cu) (net 0) (tstamp 5E0A4FEC))
(via (at 136.029183 39.310625) (size 1.2) (drill 0.4) (layers F.Cu B.Cu) (net 0) (tstamp 5E0A4FED))
(via (at 136.029183 39.310625) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 0) (tstamp 5E0A4FEE))
(via (at 136.029183 31.690625) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 0) (tstamp 5E0A4FEF))
(via (at 136.029183 34.230625) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 0) (tstamp 5E0A4FF0))
(via (at 136.029183 31.690625) (size 1.8) (drill 0.4) (layers F.Cu B.Cu) (net 0) (tstamp 5E0A4FF1))
(via (at 136.029183 24.070625) (size 1.2) (drill 0.4) (layers F.Cu B.Cu) (net 0) (tstamp 5E0A4FF2))
(via (at 136.029183 24.070625) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 0) (tstamp 5E0A4FF3))
(via (at 136.029183 31.690625) (size 1.2) (drill 0.4) (layers F.Cu B.Cu) (net 0) (tstamp 5E0A4FF4))
(via (at 136.029183 31.690625) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 0) (tstamp 5E0A4FF5))
(via (at 136.029183 26.610625) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 0) (tstamp 5E0A4FF6))
(via (at 136.029183 36.770625) (size 1.8) (drill 0.4) (layers F.Cu B.Cu) (net 0) (tstamp 5E0A4FF7))
(via (at 136.029183 36.770625) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 0) (tstamp 5E0A4FF8))
(via (at 136.029183 34.230625) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 0) (tstamp 5E0A4FF9))
(via (at 136.029183 31.690625) (size 1.5) (drill 0.4) (layers F.Cu B.Cu) (net 0) (tstamp 5E0A4FFA))
(via (at 136.029183 29.150625) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 0) (tstamp 5E0A4FFB))
(via (at 136.029183 26.610625) (size 1.5) (drill 0.4) (layers F.Cu B.Cu) (net 0) (tstamp 5E0A4FFC))
(via (at 136.029183 39.310625) (size 1.5) (drill 0.4) (layers F.Cu B.Cu) (net 0) (tstamp 5E0A4FFD))
(via (at 136.029183 31.690625) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 0) (tstamp 5E0A4FFE))
(via (at 136.029183 24.070625) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 0) (tstamp 5E0A4FFF))
(via (at 136.029183 24.070625) (size 1.8) (drill 0.4) (layers F.Cu B.Cu) (net 0) (tstamp 5E0A5000))
(via (at 112.915183 39.310625) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 0) (tstamp 5E0A51E4))
(via (at 112.915183 24.070625) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 0) (tstamp 5E0A51E5))
(via (at 112.915183 36.770625) (size 1.2) (drill 0.4) (layers F.Cu B.Cu) (net 0) (tstamp 5E0A51E6))
(via (at 112.915183 26.610625) (size 1.2) (drill 0.4) (layers F.Cu B.Cu) (net 0) (tstamp 5E0A51E7))
(via (at 112.915183 26.610625) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 0) (tstamp 5E0A51E8))
(via (at 112.915183 31.690625) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 0) (tstamp 5E0A51E9))
(via (at 112.915183 34.230625) (size 1.8) (drill 0.4) (layers F.Cu B.Cu) (net 0) (tstamp 5E0A51EA))
(via (at 112.915183 39.310625) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 0) (tstamp 5E0A51EB))
(via (at 112.915183 39.310625) (size 1.8) (drill 0.4) (layers F.Cu B.Cu) (net 0) (tstamp 5E0A51EC))
(via (at 112.915183 26.610625) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 0) (tstamp 5E0A51ED))
(via (at 112.915183 29.150625) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 0) (tstamp 5E0A51EE))
(via (at 112.915183 34.230625) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 0) (tstamp 5E0A51EF))
(via (at 112.915183 39.310625) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 0) (tstamp 5E0A51F0))
(via (at 112.915183 39.310625) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 0) (tstamp 5E0A51F1))
(via (at 112.915183 29.150625) (size 1.5) (drill 0.4) (layers F.Cu B.Cu) (net 0) (tstamp 5E0A51F2) (status 1000000))
(via (at 112.915183 26.610625) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 0) (tstamp 5E0A51F3))
(via (at 112.915183 34.230625) (size 1.2) (drill 0.4) (layers F.Cu B.Cu) (net 0) (tstamp 5E0A51F4))
(via (at 112.915183 29.150625) (size 1.2) (drill 0.4) (layers F.Cu B.Cu) (net 0) (tstamp 5E0A51F5))
(via (at 112.915183 29.150625) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 0) (tstamp 5E0A51F6))
(via (at 112.915183 39.310625) (size 1.5) (drill 0.4) (layers F.Cu B.Cu) (net 0) (tstamp 5E0A51F7))
(via (at 112.915183 36.770625) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 0) (tstamp 5E0A51F8))
(via (at 112.915183 39.310625) (size 1.2) (drill 0.4) (layers F.Cu B.Cu) (net 0) (tstamp 5E0A51F9))
(via (at 112.915183 26.610625) (size 1.8) (drill 0.4) (layers F.Cu B.Cu) (net 0) (tstamp 5E0A51FA))
(via (at 112.915183 36.770625) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 0) (tstamp 5E0A51FB))
(via (at 112.915183 39.310625) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 0) (tstamp 5E0A51FC))
(via (at 112.915183 36.770625) (size 1.5) (drill 0.4) (layers F.Cu B.Cu) (net 0) (tstamp 5E0A51FD))
(via (at 112.915183 34.230625) (size 1.5) (drill 0.4) (layers F.Cu B.Cu) (net 0) (tstamp 5E0A51FE))
(via (at 112.915183 24.070625) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 0) (tstamp 5E0A51FF))
(via (at 112.915183 36.770625) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 0) (tstamp 5E0A5200))
(via (at 112.915183 34.230625) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 0) (tstamp 5E0A5201))
(via (at 112.915183 29.150625) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 0) (tstamp 5E0A5202))
(via (at 112.915183 24.070625) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 0) (tstamp 5E0A5203))
(via (at 112.915183 29.150625) (size 1.8) (drill 0.4) (layers F.Cu B.Cu) (net 0) (tstamp 5E0A5204))
(via (at 112.915183 39.310625) (size 1.2) (drill 0.4) (layers F.Cu B.Cu) (net 0) (tstamp 5E0A5205))
(via (at 112.915183 39.310625) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 0) (tstamp 5E0A5206))
(via (at 112.915183 31.690625) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 0) (tstamp 5E0A5207))
(via (at 112.915183 34.230625) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 0) (tstamp 5E0A5208))
(via (at 112.915183 31.690625) (size 1.8) (drill 0.4) (layers F.Cu B.Cu) (net 0) (tstamp 5E0A5209))
(via (at 112.915183 24.070625) (size 1.2) (drill 0.4) (layers F.Cu B.Cu) (net 0) (tstamp 5E0A520A))
(via (at 112.915183 24.070625) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 0) (tstamp 5E0A520B))
(via (at 112.915183 31.690625) (size 1.2) (drill 0.4) (layers F.Cu B.Cu) (net 0) (tstamp 5E0A520C))
(via (at 112.915183 31.690625) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 0) (tstamp 5E0A520D))
(via (at 112.915183 26.610625) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 0) (tstamp 5E0A520E))
(via (at 112.915183 36.770625) (size 1.8) (drill 0.4) (layers F.Cu B.Cu) (net 0) (tstamp 5E0A520F))
(via (at 112.915183 36.770625) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 0) (tstamp 5E0A5210))
(via (at 112.915183 34.230625) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 0) (tstamp 5E0A5211))
(via (at 112.915183 31.690625) (size 1.5) (drill 0.4) (layers F.Cu B.Cu) (net 0) (tstamp 5E0A5212))
(via (at 112.915183 29.150625) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 0) (tstamp 5E0A5213))
(via (at 112.915183 26.610625) (size 1.5) (drill 0.4) (layers F.Cu B.Cu) (net 0) (tstamp 5E0A5214))
(via (at 112.915183 39.310625) (size 1.5) (drill 0.4) (layers F.Cu B.Cu) (net 0) (tstamp 5E0A5215))
(via (at 112.915183 31.690625) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 0) (tstamp 5E0A5216))
(via (at 112.915183 24.070625) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 0) (tstamp 5E0A5217))
(via (at 112.915183 24.070625) (size 1.8) (drill 0.4) (layers F.Cu B.Cu) (net 0) (tstamp 5E0A5218))
(segment (start 112.915183 24.070625) (end 136.029183 24.070625) (width 0.8) (layer B.Cu) (net 0))
(segment (start 113.763711 26.610625) (end 136.029183 26.610625) (width 0.8) (layer B.Cu) (net 0))
(segment (start 112.915183 26.610625) (end 113.763711 26.610625) (width 0.8) (layer B.Cu) (net 0))
(segment (start 112.915183 29.150625) (end 136.029183 29.150625) (width 0.8) (layer B.Cu) (net 0))
(segment (start 112.915183 31.690625) (end 136.029183 31.690625) (width 0.8) (layer B.Cu) (net 0))
(segment (start 112.915183 34.230625) (end 136.029183 34.230625) (width 0.8) (layer B.Cu) (net 0))
(segment (start 112.915183 36.770625) (end 136.029183 36.770625) (width 0.8) (layer B.Cu) (net 0))
(segment (start 112.915183 39.310625) (end 136.029183 39.310625) (width 0.8) (layer B.Cu) (net 0))
(segment (start 157.511791 21.554137) (end 157.475928 21.59) (width 0.8) (layer B.Cu) (net 0))
(segment (start 157.511791 21.554137) (end 158.784583 21.554137) (width 0.8) (layer B.Cu) (net 0))
)

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,33 @@
update=22/05/2015 07:44:53
version=1
last_client=kicad
[general]
version=1
RootSch=
BoardNm=
[pcbnew]
version=1
LastNetListRead=
UseCmpFile=1
PadDrill=0.600000000000
PadDrillOvalY=0.600000000000
PadSizeH=1.500000000000
PadSizeV=1.500000000000
PcbTextSizeV=1.500000000000
PcbTextSizeH=1.500000000000
PcbTextThickness=0.300000000000
ModuleTextSizeV=1.000000000000
ModuleTextSizeH=1.000000000000
ModuleTextSizeThickness=0.150000000000
SolderMaskClearance=0.000000000000
SolderMaskMinWidth=0.000000000000
DrawSegmentWidth=0.200000000000
BoardOutlineThickness=0.100000000000
ModuleOutlineThickness=0.150000000000
[cvpcb]
version=1
NetIExt=net
[eeschema]
version=1
LibDir=
[eeschema/libraries]

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,33 @@
update=22/05/2015 07:44:53
version=1
last_client=kicad
[general]
version=1
RootSch=
BoardNm=
[pcbnew]
version=1
LastNetListRead=
UseCmpFile=1
PadDrill=0.600000000000
PadDrillOvalY=0.600000000000
PadSizeH=1.500000000000
PadSizeV=1.500000000000
PcbTextSizeV=1.500000000000
PcbTextSizeH=1.500000000000
PcbTextThickness=0.300000000000
ModuleTextSizeV=1.000000000000
ModuleTextSizeH=1.000000000000
ModuleTextSizeThickness=0.150000000000
SolderMaskClearance=0.000000000000
SolderMaskMinWidth=0.000000000000
DrawSegmentWidth=0.200000000000
BoardOutlineThickness=0.100000000000
ModuleOutlineThickness=0.150000000000
[cvpcb]
version=1
NetIExt=net
[eeschema]
version=1
LibDir=
[eeschema/libraries]

View file

@ -4,17 +4,17 @@ Teensy 4.0 (2x14 pins) or Teensy 3.6 (2x24 pins inc bottom part)
GND X VIn (NC)
(NC) 00 Ang (NC)
(NC) 01 X 3.3v
VGA Blue (OPT2) 02 X 23 DISPLAY - CS (also RST for ST7789!)
Key USER1 (OPT1) 03 X 22 VGA Hsync (OPT2)
Key USER2 (OPT1) 04 X 21 VGA Red (OPT2)
VGA Red (OPT2) 05 20 VGA Red (OPT2)
VGA Green (OPT2) 06 19 I2C CLK (OPT1)
VGA Green (OPT2) 07 18 I2C DAT (OPT1)
VGA Green (OPT2) 08 X 17 JOY2 Fire
JOY1 Fire 02 X X 23 RST for ST7789 DISPLAY
Key USER1 (OPT1) 03 X X 22 DISPLAY - CS
Key USER2 (OPT1) 04 X 21
JOY1 Left 05 X 20
JOY1 Right 06 X 19 I2C CLK (OPT1)
JOY1 Down 07 X 18 I2C DAT (OPT1)
EXT SD CS 08 X 17 JOY2 Fire
DISPLAY - DC 09 X X 16 JOY2 AnalogY-A2
Audio MSQL for T4 (OPT0) 10 X 15 JOY2 AnalogX-A1
DISPLAY - MOSI 11 X 14 VGA Blue (OPT2)
MISO (Touch) for T3.6 (OPT2) 12 X 13 DISPLAY - SCK
DISPLAY/EXT SD - MOSI 11 X X 14 JOY1 Up
MISO (Touch for T3.6 or EXT SD) 12 X 13 DISPLAY/EXT SD - SCK
@ -23,21 +23,51 @@ Teensy 4.0 (2x14 pins) or Teensy 3.6 (2x24 pins inc bottom part)
(NC) 25 DAC0 Audio L for T3.6 (OPT0)
(NC) 26 39 Key USER4 (OPT1)
(NC) 27 38 T_CS (Touch) for T3.6 (OPT2)
(NC) 28 37 T_IRQ (Touch) for T3.6 (OPT2)
VGA Vsync (OPT2) 29 36
30 35
31 34
(NC) 28 37 PSRAM_CLK (OPT3) / T_IRQ (Touch) for T3.6 (OPT2)
29 36 PSRAM_CS (OPT3)
30 35 PSRAM_MOSI (OPT3)
31 34 PSRAM_MISO (OPT3)
32 33 Key USER3 (OPT1)
Display: ILI9341/ST7789 (SPI connected, MISO not connected)
Storage: SD build-in (external SD requires extra CS)
(X) mandatory pins to connect for the minimum set-up
Teensy 3.6 old layout with VGA (2x24 pins inc bottom part)
----------------------------------------------------------
(NC) GND VIn (NC)
(NC) 00 Ang (NC)
(NC) 01 3.3v (NC)
VGA Blue (OPT) 02 X 23 Key RESET
I2C CLK (OPT) 03 22 VGA Hsync (OPT)
I2C DAT (OPT) 04 21 VGA Red (OPT)
VGA Red (OPT) 05 20 VGA Red (OPT)
VGA Green (OPT) 06 19 JOY1 Left (OPT)
VGA Green (OPT) 07 18 JOY1 Right (OPT)
VGA Green (OPT) 08 17 JOY1 Down (OPT)
ILI DC 09 X 16 JOY1 Up (OPT)
ILI CS 10 X 15 (NC)
ILI SDI+T_DIN-SPI MOSI 11 X 14 VGA Blue (OPT)
ILI SDO+T_DO-SPI MISO 12 X X 13 ILI SCK+T_CLK-SPI SCK
ILI VCC 3.3v X X GND ILI GND
(NC) 24 DAC1 Audio R (OPT)
(NC) 25 DAC0 Audio L (OPT)
(NC) 26 39 Key USER4 (OPT)
(NC) 27 X 38 ILI T_CS (Touch screen)
(NC) 28 X 37 ILI T_IRQ (Touch screen)
VGA Vsync (OPT) 29 36 JOY2 Fire
JOY1 Key FIRE(OPT) 30 X 35 Key USER1
JOY2 AnalogX-A12 31 X 34 Key USER2 (OPT)
JOY2 AnalogY-A13 32 X 33 Key USER3 (OPT)
Display: ILI9341/ST7789 (on main SPI, MISO not connected, RST optional or to 3.3v)
Storage: SD build-in (or external SD requires extra CS + main SPI 11,12 and 13)
(X) mandatory pins to connect for the minimum set-up (note that single joystick as JOY1 or JOY2 is possible via SWAP option)
(OPT0) audio output
(OPT1) keys required to play 'better' as for e.g. computer (I2C keyboard, 2 extra joystick buttons)
(OPT2) for VGA output and ILI touch screen (for T3.6 only). ILI touch on same SPI as DISPLAY
(OPT2) for VGA output and ILI touch screen (for T3.6 only). ILI touch on main SPI as DISPLAY
(OPT3) for PSRAM on T4.0 only (with EXT SD only!!!)
The keys (all) are using internal pull-up so just connect the other side to the GND
The Analog joypad also needs VCC and GND connections !

View file

@ -1373,7 +1373,7 @@ void emu_init(void)
emu_InitJoysticks();
#ifdef TEENSYBOY
#ifdef SWAP_JOYSTICK
joySwapped = true;
#else
joySwapped = false;

View file

@ -2,31 +2,17 @@
#define IOPINS_H
#include "platform_config.h"
#include "tft_t_dma_config.h"
#ifndef OLD_LAYOUT
#ifdef ST7789
// ST7789
#define TFT_SCLK 13
#define TFT_MOSI 11
#define TFT_MISO 12
#define TFT_TOUCH_CS 255
#define TFT_TOUCH_INT 255
#define TFT_DC 9
#define TFT_CS 255
#define TFT_RST 23
#else
// ILI9341
#define TFT_SCLK 13
#define TFT_MOSI 11
#define TFT_MISO 12
#define TFT_TOUCH_CS 255 //38
#define TFT_TOUCH_INT 255 //37
#define TFT_DC 9
#define TFT_CS 23
#define TFT_RST 255
#endif
#define TFT_CS 22 // 255 for LORES ST7789 (NO CS)
#define TFT_RST 23 // 255 for ILI/ST if connected to 3.3V
// PSRAM
#define PSRAM_CS 36
@ -38,10 +24,10 @@
#define SD_SCLK 13
#define SD_MOSI 12
#define SD_MISO 11
#ifdef TEENSYBOY
#define SD_CS BUILTIN_SDCARD
#ifdef EXTERNAL_SD
#define SD_CS 8
#else
#define SD_CS 5
#define SD_CS BUILTIN_SDCARD
#endif
// I2C keyboard
@ -54,17 +40,15 @@
#define PIN_JOY2_BTN 17
#define PIN_KEY_USER1 3 //34
#define PIN_KEY_USER2 4 //35
//#define PIN_KEY_USER3 255
//#define PIN_KEY_USER4 255
//#define PIN_KEY_USER3 33
//#define PIN_KEY_USER4 39
#ifdef TEENSYBOY
// Second joystick
#define PIN_JOY1_BTN 2
#define PIN_JOY1_1 14 // UP
#define PIN_JOY1_2 7 // DOWN
#define PIN_JOY1_3 6 // RIGHT
#define PIN_JOY1_4 5 // LEFT
#endif
#else
// OLD LAYOUT!!!!

View file

@ -2,9 +2,15 @@
#define _PLATFORM_CONFIG_H_
//#define OLD_LAYOUT 1
//#define TEENSYBOY 1
//#define HAS_PSRAM 1
#define ILI9341 1
//#define ST7789 1
//#define SWAP_JOYSTICK 1
//#define LOHRES 1
//#define ROTATE_SCREEN 1
#define EXTERNAL_SD 1
#define HAS_PSRAM 1
//#define USE_SDFAT 1
//#define SD_FAT_TYPE 1

View file

@ -107,7 +107,6 @@ PROGMEM static const uint8_t init_commands[] = {
#endif
};
static void dmaInterrupt() {
dmatx.clearInterrupt();
curTransfer++;
@ -220,8 +219,9 @@ TFT_T_DMA::TFT_T_DMA(uint8_t cs, uint8_t dc, uint8_t rst, uint8_t mosi, uint8_t
void TFT_T_DMA::setArea(uint16_t x1,uint16_t y1,uint16_t x2,uint16_t y2) {
int dx=0;
int dy=0;
#ifdef ST7789
if (TFT_REALWIDTH == TFT_REALHEIGHT)
{
#ifdef ROTATE_SCREEN
if (!flipped) {
dy += 80;
@ -231,7 +231,29 @@ void TFT_T_DMA::setArea(uint16_t x1,uint16_t y1,uint16_t x2,uint16_t y2) {
dx += 80;
}
#endif
}
#endif
digitalWrite(_dc, 0);
SPI.transfer(TFT_CASET);
digitalWrite(_dc, 1);
SPI.transfer16(x1+dx);
digitalWrite(_dc, 1);
SPI.transfer16(x2+dx);
digitalWrite(_dc, 0);
SPI.transfer(TFT_PASET);
digitalWrite(_dc, 1);
SPI.transfer16(y1+dy);
digitalWrite(_dc, 1);
SPI.transfer16(y2+dy);
digitalWrite(_dc, 0);
SPI.transfer(TFT_RAMWR);
digitalWrite(_dc, 1);
return;
SPI.beginTransaction(SPISettings(SPICLOCK, MSBFIRST, SPI_MODE));
digitalWrite(_cs, 0);
@ -257,6 +279,8 @@ void TFT_T_DMA::setArea(uint16_t x1,uint16_t y1,uint16_t x2,uint16_t y2) {
}
void TFT_T_DMA::begin(void) {
SPI.setMOSI(_mosi);
SPI.setMISO(_miso);
@ -264,16 +288,17 @@ void TFT_T_DMA::begin(void) {
SPI.begin();
// Initialize display
if (_rst < 255) { // toggle RST low to reset
if (_rst != 0xff) {
pinMode(_rst, OUTPUT);
digitalWrite(_rst, HIGH);
delay(5);
delay(100);
digitalWrite(_rst, LOW);
delay(20);
delay(100);
digitalWrite(_rst, HIGH);
delay(120);
delay(200);
}
SPI.beginTransaction(SPISettings(SPICLOCK, MSBFIRST, SPI_MODE));
const uint8_t *addr = init_commands;
digitalWrite(_cs, 0);
@ -307,7 +332,6 @@ void TFT_T_DMA::begin(void) {
SPI.transfer(ILI9341_DISPON);
digitalWrite(_dc, 1);
digitalWrite(_cs, 1);
SPI.endTransaction();
#endif
#ifdef ST7789
uint8_t numCommands, numArgs;
@ -332,22 +356,31 @@ void TFT_T_DMA::begin(void) {
if(ms) {
ms = *addr++; // Read post-command delay time (ms)
if(ms == 255) ms = 500; // If 255, delay for 500 ms
SPI.endTransaction();
digitalWrite(_dc, 1);
digitalWrite(_cs, 1);
SPI.endTransaction();
delay(ms);
//beginSPITransaction();
SPI.beginTransaction(SPISettings(SPICLOCK, MSBFIRST, SPI_MODE));
digitalWrite(_cs, 0);
}
}
digitalWrite(_cs, 1);
#endif
setArea(0, 0, TFT_REALWIDTH-1, TFT_REALHEIGHT-1);
SPI.endTransaction();
cancelled = false;
#ifdef FLIP_SCREEN
flipscreen(true);
#else
flipscreen(false);
#endif
#ifdef ST7789
if (TFT_REALWIDTH != TFT_REALHEIGHT)
{
flipscreen(true);
}
#endif
};
@ -434,6 +467,7 @@ void TFT_T_DMA::startDMA(void) {
#endif
dmatx = dmasettings[0];
digitalWrite(_cs, 0);
setArea((TFT_REALWIDTH-TFT_WIDTH)/2, (TFT_REALHEIGHT-TFT_HEIGHT)/2, (TFT_REALWIDTH-TFT_WIDTH)/2+TFT_WIDTH-1, (TFT_REALHEIGHT-TFT_HEIGHT)/2+TFT_HEIGHT-1);
digitalWrite(_dc, 0);
SPI.transfer(TFT_RAMWR);
digitalWrite(_dc, 1);
@ -623,17 +657,17 @@ void TFT_T_DMA::readCal(uint16_t * oX, uint16_t * oY, uint16_t * oZ) {
No DMA functions
***********************************************************************************************/
void TFT_T_DMA::fillScreenNoDma(uint16_t color) {
setArea(0, 0, TFT_REALWIDTH-1, TFT_REALHEIGHT-1);
SPI.beginTransaction(SPISettings(SPICLOCK, MSBFIRST, SPI_MODE));
digitalWrite(_cs, 0);
digitalWrite(_dc, 0);
SPI.transfer(TFT_RAMWR);
setArea(0, 0, TFT_REALWIDTH-1, TFT_REALHEIGHT-1);
//digitalWrite(_dc, 0);
//SPI.transfer(TFT_RAMWR);
int i,j;
for (j=0; j<TFT_REALHEIGHT; j++)
{
for (i=0; i<TFT_REALWIDTH; i++) {
digitalWrite(_dc, 1);
//digitalWrite(_dc, 1);
SPI.transfer16(color);
}
}
@ -643,24 +677,43 @@ void TFT_T_DMA::fillScreenNoDma(uint16_t color) {
digitalWrite(_dc, 1);
#endif
digitalWrite(_cs, 1);
SPI.endTransaction();
setArea(0, 0, (TFT_REALWIDTH-1), (TFT_REALHEIGHT-1));
SPI.endTransaction();
}
void TFT_T_DMA::writeScreenNoDma(const uint16_t *pcolors) {
setArea(0, 0, TFT_WIDTH-1, TFT_HEIGHT-1);
void TFT_T_DMA::drawRectNoDma(int16_t x, int16_t y, int16_t w, int16_t h, uint16_t color) {
SPI.beginTransaction(SPISettings(SPICLOCK, MSBFIRST, SPI_MODE));
digitalWrite(_cs, 0);
setArea(x,y,x+w-1,y+h-1);
// digitalWrite(_dc, 0);
// SPI.transfer(TFT_RAMWR);
int i;
for (i=0; i<(w*h); i++)
{
//digitalWrite(_dc, 1);
SPI.transfer16(color);
}
#ifdef ILI9341
digitalWrite(_dc, 0);
SPI.transfer(TFT_RAMWR);
SPI.transfer(ILI9341_SLPOUT);
digitalWrite(_dc, 1);
#endif
digitalWrite(_cs, 1);
setArea(0, 0, (TFT_REALWIDTH-1), (TFT_REALHEIGHT-1));
SPI.endTransaction();
}
void TFT_T_DMA::writeScreenNoDma(const uint16_t *pcolors) {
SPI.beginTransaction(SPISettings(SPICLOCK, MSBFIRST, SPI_MODE));
digitalWrite(_cs, 0);
setArea(0, 0, TFT_WIDTH-1, TFT_HEIGHT-1);
//digitalWrite(_dc, 0);
//SPI.transfer(TFT_RAMWR);
int i,j;
for (j=0; j<240; j++)
{
for (i=0; i<TFT_WIDTH; i++) {
digitalWrite(_dc, 1);
// digitalWrite(_dc, 1);
SPI.transfer16(*pcolors++);
}
}
@ -670,9 +723,8 @@ void TFT_T_DMA::writeScreenNoDma(const uint16_t *pcolors) {
digitalWrite(_dc, 1);
#endif
digitalWrite(_cs, 1);
SPI.endTransaction();
setArea(0, 0, (TFT_REALWIDTH-1), (TFT_REALHEIGHT-1));
SPI.endTransaction();
}
void TFT_T_DMA::drawSpriteNoDma(int16_t x, int16_t y, const uint16_t *bitmap) {
@ -723,12 +775,12 @@ void TFT_T_DMA::drawSpriteNoDma(int16_t x, int16_t y, const uint16_t *bitmap, ui
}
}
setArea(arx, ary, arx+arw-1, ary+arh-1);
SPI.beginTransaction(SPISettings(SPICLOCK, MSBFIRST, SPI_MODE));
digitalWrite(_cs, 0);
digitalWrite(_dc, 0);
SPI.transfer(TFT_RAMWR);
setArea(arx, ary, arx+arw-1, ary+arh-1);
//digitalWrite(_dc, 0);
//SPI.transfer(TFT_RAMWR);
bitmap = bitmap + bmp_offy*w + bmp_offx;
for (int row=0;row<arh; row++)
@ -737,7 +789,7 @@ void TFT_T_DMA::drawSpriteNoDma(int16_t x, int16_t y, const uint16_t *bitmap, ui
for (int col=0;col<arw; col++)
{
uint16_t color = *bmp_ptr++;
digitalWrite(_dc, 1);
// digitalWrite(_dc, 1);
SPI.transfer16(color);
}
bitmap += w;
@ -747,9 +799,9 @@ void TFT_T_DMA::drawSpriteNoDma(int16_t x, int16_t y, const uint16_t *bitmap, ui
SPI.transfer(ILI9341_SLPOUT);
digitalWrite(_dc, 1);
#endif
setArea(0, 0, TFT_REALWIDTH-1, TFT_REALHEIGHT-1);
digitalWrite(_cs, 1);
SPI.endTransaction();
setArea(0, 0, TFT_REALWIDTH-1, TFT_REALHEIGHT-1);
}
void TFT_T_DMA::drawTextNoDma(int16_t x, int16_t y, const char * text, uint16_t fgcolor, uint16_t bgcolor, bool doublesize) {
@ -757,20 +809,19 @@ void TFT_T_DMA::drawTextNoDma(int16_t x, int16_t y, const char * text, uint16_t
while ((c = *text++)) {
const unsigned char * charpt=&font8x8[c][0];
setArea(x,y,x+7,y+(doublesize?15:7));
//SPI.beginTransaction(SPISettings(SPICLOCK, MSBFIRST, SPI_MODE));
SPI.beginTransaction(SPISettings(SPICLOCK, MSBFIRST, SPI_MODE));
digitalWrite(_cs, 0);
setArea(x,y,x+7,y+(doublesize?15:7));
//digitalWrite(_dc, 0);
//SPI.transfer(TFT_RAMWR);
digitalWrite(_dc, 1);
//digitalWrite(_dc, 1);
for (int i=0;i<8;i++)
{
unsigned char bits;
if (doublesize) {
bits = *charpt;
digitalWrite(_dc, 1);
//digitalWrite(_dc, 1);
if (bits&0x01) SPI.transfer16(fgcolor);
else SPI.transfer16(bgcolor);
bits = bits >> 1;
@ -796,7 +847,7 @@ void TFT_T_DMA::drawTextNoDma(int16_t x, int16_t y, const char * text, uint16_t
else SPI.transfer16(bgcolor);
}
bits = *charpt++;
digitalWrite(_dc, 1);
//digitalWrite(_dc, 1);
if (bits&0x01) SPI.transfer16(fgcolor);
else SPI.transfer16(bgcolor);
bits = bits >> 1;
@ -831,35 +882,18 @@ void TFT_T_DMA::drawTextNoDma(int16_t x, int16_t y, const char * text, uint16_t
SPI.endTransaction();
}
setArea(0, 0, (TFT_REALWIDTH-1), (TFT_REALHEIGHT-1));
}
void TFT_T_DMA::drawRectNoDma(int16_t x, int16_t y, int16_t w, int16_t h, uint16_t color) {
setArea(x,y,x+w-1,y+h-1);
SPI.beginTransaction(SPISettings(SPICLOCK, MSBFIRST, SPI_MODE));
digitalWrite(_cs, 0);
digitalWrite(_dc, 0);
SPI.transfer(TFT_RAMWR);
int i;
for (i=0; i<(w*h); i++)
{
digitalWrite(_dc, 1);
SPI.transfer16(color);
}
#ifdef ILI9341
digitalWrite(_dc, 0);
SPI.transfer(ILI9341_SLPOUT);
digitalWrite(_dc, 1);
#endif
setArea(0, 0, (TFT_REALWIDTH-1), (TFT_REALHEIGHT-1));
digitalWrite(_cs, 1);
SPI.endTransaction();
setArea(0, 0, (TFT_REALWIDTH-1), (TFT_REALHEIGHT-1));
}
/***********************************************************************************************
DMA functions
***********************************************************************************************/

View file

@ -21,18 +21,15 @@
#define B16(rgb) ((rgb<<3)&0xf8)
#define TFT_HEIGHT 240
#ifdef ILI9341
#define TFT_WIDTH 320
#define TFT_REALWIDTH 320
#define TFT_REALHEIGHT 240
#endif
#ifdef ST7789
#ifdef LOHRES
#define TFT_WIDTH 240
#define TFT_REALWIDTH 240
#define TFT_REALHEIGHT 240
#else
#define TFT_WIDTH 320
#define TFT_REALWIDTH 320
#endif
#define TFT_HEIGHT 240
#define TFT_REALHEIGHT 240
#define LINES_PER_BLOCK 64
#define NR_OF_BLOCK 4

View file

@ -1,11 +1,7 @@
#include "platform_config.h"
#ifdef TEENSYBOY
#define ST7789 1
#define ROTATE_SCREEN 1
#else
#define ILI9341 1
#endif
//#define ST7789 1
//#define ILI9341 1
#define TFT_LINEARINT 1
#define LINEARINT_HACK 1

View file

@ -1372,7 +1372,7 @@ void emu_init(void)
emu_InitJoysticks();
#ifdef TEENSYBOY
#ifdef SWAP_JOYSTICK
joySwapped = true;
#else
joySwapped = false;

View file

@ -2,31 +2,17 @@
#define IOPINS_H
#include "platform_config.h"
#include "tft_t_dma_config.h"
#ifndef OLD_LAYOUT
#ifdef ST7789
// ST7789
#define TFT_SCLK 13
#define TFT_MOSI 11
#define TFT_MISO 12
#define TFT_TOUCH_CS 255
#define TFT_TOUCH_INT 255
#define TFT_DC 9
#define TFT_CS 255
#define TFT_RST 23
#else
// ILI9341
#define TFT_SCLK 13
#define TFT_MOSI 11
#define TFT_MISO 12
#define TFT_TOUCH_CS 255 //38
#define TFT_TOUCH_INT 255 //37
#define TFT_DC 9
#define TFT_CS 23
#define TFT_RST 255
#endif
#define TFT_CS 22 // 255 for LORES ST7789 (NO CS)
#define TFT_RST 23 // 255 for ILI/ST if connected to 3.3V
// PSRAM
#define PSRAM_CS 36
@ -38,10 +24,10 @@
#define SD_SCLK 13
#define SD_MOSI 12
#define SD_MISO 11
#ifdef TEENSYBOY
#define SD_CS BUILTIN_SDCARD
#ifdef EXTERNAL_SD
#define SD_CS 8
#else
#define SD_CS 5
#define SD_CS BUILTIN_SDCARD
#endif
// I2C keyboard
@ -54,17 +40,15 @@
#define PIN_JOY2_BTN 17
#define PIN_KEY_USER1 3 //34
#define PIN_KEY_USER2 4 //35
//#define PIN_KEY_USER3 255
//#define PIN_KEY_USER4 255
//#define PIN_KEY_USER3 33
//#define PIN_KEY_USER4 39
#ifdef TEENSYBOY
// Second joystick
#define PIN_JOY1_BTN 2
#define PIN_JOY1_1 14 // UP
#define PIN_JOY1_2 7 // DOWN
#define PIN_JOY1_3 6 // RIGHT
#define PIN_JOY1_4 5 // LEFT
#endif
#else
// OLD LAYOUT!!!!

View file

@ -2,9 +2,15 @@
#define _PLATFORM_CONFIG_H_
//#define OLD_LAYOUT 1
//#define TEENSYBOY 1
//#define HAS_PSRAM 1
#define ILI9341 1
//#define ST7789 1
//#define SWAP_JOYSTICK 1
//#define LOHRES 1
//#define ROTATE_SCREEN 1
#define EXTERNAL_SD 1
#define HAS_PSRAM 1
//#define USE_SDFAT 1
//#define SD_FAT_TYPE 1

View file

@ -107,7 +107,6 @@ PROGMEM static const uint8_t init_commands[] = {
#endif
};
static void dmaInterrupt() {
dmatx.clearInterrupt();
curTransfer++;
@ -220,8 +219,9 @@ TFT_T_DMA::TFT_T_DMA(uint8_t cs, uint8_t dc, uint8_t rst, uint8_t mosi, uint8_t
void TFT_T_DMA::setArea(uint16_t x1,uint16_t y1,uint16_t x2,uint16_t y2) {
int dx=0;
int dy=0;
#ifdef ST7789
if (TFT_REALWIDTH == TFT_REALHEIGHT)
{
#ifdef ROTATE_SCREEN
if (!flipped) {
dy += 80;
@ -231,7 +231,29 @@ void TFT_T_DMA::setArea(uint16_t x1,uint16_t y1,uint16_t x2,uint16_t y2) {
dx += 80;
}
#endif
}
#endif
digitalWrite(_dc, 0);
SPI.transfer(TFT_CASET);
digitalWrite(_dc, 1);
SPI.transfer16(x1+dx);
digitalWrite(_dc, 1);
SPI.transfer16(x2+dx);
digitalWrite(_dc, 0);
SPI.transfer(TFT_PASET);
digitalWrite(_dc, 1);
SPI.transfer16(y1+dy);
digitalWrite(_dc, 1);
SPI.transfer16(y2+dy);
digitalWrite(_dc, 0);
SPI.transfer(TFT_RAMWR);
digitalWrite(_dc, 1);
return;
SPI.beginTransaction(SPISettings(SPICLOCK, MSBFIRST, SPI_MODE));
digitalWrite(_cs, 0);
@ -257,6 +279,8 @@ void TFT_T_DMA::setArea(uint16_t x1,uint16_t y1,uint16_t x2,uint16_t y2) {
}
void TFT_T_DMA::begin(void) {
SPI.setMOSI(_mosi);
SPI.setMISO(_miso);
@ -264,16 +288,17 @@ void TFT_T_DMA::begin(void) {
SPI.begin();
// Initialize display
if (_rst < 255) { // toggle RST low to reset
if (_rst != 0xff) {
pinMode(_rst, OUTPUT);
digitalWrite(_rst, HIGH);
delay(5);
delay(100);
digitalWrite(_rst, LOW);
delay(20);
delay(100);
digitalWrite(_rst, HIGH);
delay(120);
delay(200);
}
SPI.beginTransaction(SPISettings(SPICLOCK, MSBFIRST, SPI_MODE));
const uint8_t *addr = init_commands;
digitalWrite(_cs, 0);
@ -307,7 +332,6 @@ void TFT_T_DMA::begin(void) {
SPI.transfer(ILI9341_DISPON);
digitalWrite(_dc, 1);
digitalWrite(_cs, 1);
SPI.endTransaction();
#endif
#ifdef ST7789
uint8_t numCommands, numArgs;
@ -332,22 +356,31 @@ void TFT_T_DMA::begin(void) {
if(ms) {
ms = *addr++; // Read post-command delay time (ms)
if(ms == 255) ms = 500; // If 255, delay for 500 ms
SPI.endTransaction();
digitalWrite(_dc, 1);
digitalWrite(_cs, 1);
SPI.endTransaction();
delay(ms);
//beginSPITransaction();
SPI.beginTransaction(SPISettings(SPICLOCK, MSBFIRST, SPI_MODE));
digitalWrite(_cs, 0);
}
}
digitalWrite(_cs, 1);
#endif
setArea(0, 0, TFT_REALWIDTH-1, TFT_REALHEIGHT-1);
SPI.endTransaction();
cancelled = false;
#ifdef FLIP_SCREEN
flipscreen(true);
#else
flipscreen(false);
#endif
#ifdef ST7789
if (TFT_REALWIDTH != TFT_REALHEIGHT)
{
flipscreen(true);
}
#endif
};
@ -434,6 +467,7 @@ void TFT_T_DMA::startDMA(void) {
#endif
dmatx = dmasettings[0];
digitalWrite(_cs, 0);
setArea((TFT_REALWIDTH-TFT_WIDTH)/2, (TFT_REALHEIGHT-TFT_HEIGHT)/2, (TFT_REALWIDTH-TFT_WIDTH)/2+TFT_WIDTH-1, (TFT_REALHEIGHT-TFT_HEIGHT)/2+TFT_HEIGHT-1);
digitalWrite(_dc, 0);
SPI.transfer(TFT_RAMWR);
digitalWrite(_dc, 1);
@ -623,17 +657,17 @@ void TFT_T_DMA::readCal(uint16_t * oX, uint16_t * oY, uint16_t * oZ) {
No DMA functions
***********************************************************************************************/
void TFT_T_DMA::fillScreenNoDma(uint16_t color) {
setArea(0, 0, TFT_REALWIDTH-1, TFT_REALHEIGHT-1);
SPI.beginTransaction(SPISettings(SPICLOCK, MSBFIRST, SPI_MODE));
digitalWrite(_cs, 0);
digitalWrite(_dc, 0);
SPI.transfer(TFT_RAMWR);
setArea(0, 0, TFT_REALWIDTH-1, TFT_REALHEIGHT-1);
//digitalWrite(_dc, 0);
//SPI.transfer(TFT_RAMWR);
int i,j;
for (j=0; j<TFT_REALHEIGHT; j++)
{
for (i=0; i<TFT_REALWIDTH; i++) {
digitalWrite(_dc, 1);
//digitalWrite(_dc, 1);
SPI.transfer16(color);
}
}
@ -643,24 +677,43 @@ void TFT_T_DMA::fillScreenNoDma(uint16_t color) {
digitalWrite(_dc, 1);
#endif
digitalWrite(_cs, 1);
SPI.endTransaction();
setArea(0, 0, (TFT_REALWIDTH-1), (TFT_REALHEIGHT-1));
SPI.endTransaction();
}
void TFT_T_DMA::writeScreenNoDma(const uint16_t *pcolors) {
setArea(0, 0, TFT_WIDTH-1, TFT_HEIGHT-1);
void TFT_T_DMA::drawRectNoDma(int16_t x, int16_t y, int16_t w, int16_t h, uint16_t color) {
SPI.beginTransaction(SPISettings(SPICLOCK, MSBFIRST, SPI_MODE));
digitalWrite(_cs, 0);
setArea(x,y,x+w-1,y+h-1);
// digitalWrite(_dc, 0);
// SPI.transfer(TFT_RAMWR);
int i;
for (i=0; i<(w*h); i++)
{
//digitalWrite(_dc, 1);
SPI.transfer16(color);
}
#ifdef ILI9341
digitalWrite(_dc, 0);
SPI.transfer(TFT_RAMWR);
SPI.transfer(ILI9341_SLPOUT);
digitalWrite(_dc, 1);
#endif
digitalWrite(_cs, 1);
setArea(0, 0, (TFT_REALWIDTH-1), (TFT_REALHEIGHT-1));
SPI.endTransaction();
}
void TFT_T_DMA::writeScreenNoDma(const uint16_t *pcolors) {
SPI.beginTransaction(SPISettings(SPICLOCK, MSBFIRST, SPI_MODE));
digitalWrite(_cs, 0);
setArea(0, 0, TFT_WIDTH-1, TFT_HEIGHT-1);
//digitalWrite(_dc, 0);
//SPI.transfer(TFT_RAMWR);
int i,j;
for (j=0; j<240; j++)
{
for (i=0; i<TFT_WIDTH; i++) {
digitalWrite(_dc, 1);
// digitalWrite(_dc, 1);
SPI.transfer16(*pcolors++);
}
}
@ -670,9 +723,8 @@ void TFT_T_DMA::writeScreenNoDma(const uint16_t *pcolors) {
digitalWrite(_dc, 1);
#endif
digitalWrite(_cs, 1);
SPI.endTransaction();
setArea(0, 0, (TFT_REALWIDTH-1), (TFT_REALHEIGHT-1));
SPI.endTransaction();
}
void TFT_T_DMA::drawSpriteNoDma(int16_t x, int16_t y, const uint16_t *bitmap) {
@ -723,12 +775,12 @@ void TFT_T_DMA::drawSpriteNoDma(int16_t x, int16_t y, const uint16_t *bitmap, ui
}
}
setArea(arx, ary, arx+arw-1, ary+arh-1);
SPI.beginTransaction(SPISettings(SPICLOCK, MSBFIRST, SPI_MODE));
digitalWrite(_cs, 0);
digitalWrite(_dc, 0);
SPI.transfer(TFT_RAMWR);
setArea(arx, ary, arx+arw-1, ary+arh-1);
//digitalWrite(_dc, 0);
//SPI.transfer(TFT_RAMWR);
bitmap = bitmap + bmp_offy*w + bmp_offx;
for (int row=0;row<arh; row++)
@ -737,7 +789,7 @@ void TFT_T_DMA::drawSpriteNoDma(int16_t x, int16_t y, const uint16_t *bitmap, ui
for (int col=0;col<arw; col++)
{
uint16_t color = *bmp_ptr++;
digitalWrite(_dc, 1);
// digitalWrite(_dc, 1);
SPI.transfer16(color);
}
bitmap += w;
@ -747,9 +799,9 @@ void TFT_T_DMA::drawSpriteNoDma(int16_t x, int16_t y, const uint16_t *bitmap, ui
SPI.transfer(ILI9341_SLPOUT);
digitalWrite(_dc, 1);
#endif
setArea(0, 0, TFT_REALWIDTH-1, TFT_REALHEIGHT-1);
digitalWrite(_cs, 1);
SPI.endTransaction();
setArea(0, 0, TFT_REALWIDTH-1, TFT_REALHEIGHT-1);
}
void TFT_T_DMA::drawTextNoDma(int16_t x, int16_t y, const char * text, uint16_t fgcolor, uint16_t bgcolor, bool doublesize) {
@ -757,20 +809,19 @@ void TFT_T_DMA::drawTextNoDma(int16_t x, int16_t y, const char * text, uint16_t
while ((c = *text++)) {
const unsigned char * charpt=&font8x8[c][0];
setArea(x,y,x+7,y+(doublesize?15:7));
//SPI.beginTransaction(SPISettings(SPICLOCK, MSBFIRST, SPI_MODE));
SPI.beginTransaction(SPISettings(SPICLOCK, MSBFIRST, SPI_MODE));
digitalWrite(_cs, 0);
setArea(x,y,x+7,y+(doublesize?15:7));
//digitalWrite(_dc, 0);
//SPI.transfer(TFT_RAMWR);
digitalWrite(_dc, 1);
//digitalWrite(_dc, 1);
for (int i=0;i<8;i++)
{
unsigned char bits;
if (doublesize) {
bits = *charpt;
digitalWrite(_dc, 1);
//digitalWrite(_dc, 1);
if (bits&0x01) SPI.transfer16(fgcolor);
else SPI.transfer16(bgcolor);
bits = bits >> 1;
@ -796,7 +847,7 @@ void TFT_T_DMA::drawTextNoDma(int16_t x, int16_t y, const char * text, uint16_t
else SPI.transfer16(bgcolor);
}
bits = *charpt++;
digitalWrite(_dc, 1);
//digitalWrite(_dc, 1);
if (bits&0x01) SPI.transfer16(fgcolor);
else SPI.transfer16(bgcolor);
bits = bits >> 1;
@ -831,35 +882,18 @@ void TFT_T_DMA::drawTextNoDma(int16_t x, int16_t y, const char * text, uint16_t
SPI.endTransaction();
}
setArea(0, 0, (TFT_REALWIDTH-1), (TFT_REALHEIGHT-1));
}
void TFT_T_DMA::drawRectNoDma(int16_t x, int16_t y, int16_t w, int16_t h, uint16_t color) {
setArea(x,y,x+w-1,y+h-1);
SPI.beginTransaction(SPISettings(SPICLOCK, MSBFIRST, SPI_MODE));
digitalWrite(_cs, 0);
digitalWrite(_dc, 0);
SPI.transfer(TFT_RAMWR);
int i;
for (i=0; i<(w*h); i++)
{
digitalWrite(_dc, 1);
SPI.transfer16(color);
}
#ifdef ILI9341
digitalWrite(_dc, 0);
SPI.transfer(ILI9341_SLPOUT);
digitalWrite(_dc, 1);
#endif
setArea(0, 0, (TFT_REALWIDTH-1), (TFT_REALHEIGHT-1));
digitalWrite(_cs, 1);
SPI.endTransaction();
setArea(0, 0, (TFT_REALWIDTH-1), (TFT_REALHEIGHT-1));
}
/***********************************************************************************************
DMA functions
***********************************************************************************************/

View file

@ -21,18 +21,16 @@
#define B16(rgb) ((rgb<<3)&0xf8)
#define TFT_HEIGHT 240
#ifdef ILI9341
#define TFT_WIDTH 320
#define TFT_REALWIDTH 320
#define TFT_REALHEIGHT 240
#endif
#ifdef ST7789
#ifdef LOHRES
#define TFT_WIDTH 240
#define TFT_REALWIDTH 240
#define TFT_REALHEIGHT 240
#else
#define TFT_WIDTH 320
#define TFT_REALWIDTH 320
#endif
#define TFT_HEIGHT 240
#define TFT_REALHEIGHT 240
#define LINES_PER_BLOCK 64
#define NR_OF_BLOCK 4

View file

@ -1,11 +1,7 @@
#include "platform_config.h"
#ifdef TEENSYBOY
#define ST7789 1
#define ROTATE_SCREEN 1
#else
#define ILI9341 1
#endif
//#define ST7789 1
//#define ILI9341 1
#define TFT_LINEARINT 1
#define LINEARINT_HACK 1

View file

@ -1373,7 +1373,7 @@ void emu_init(void)
emu_InitJoysticks();
#ifdef TEENSYBOY
#ifdef SWAP_JOYSTICK
joySwapped = true;
#else
joySwapped = false;

View file

@ -2,31 +2,17 @@
#define IOPINS_H
#include "platform_config.h"
#include "tft_t_dma_config.h"
#ifndef OLD_LAYOUT
#ifdef ST7789
// ST7789
#define TFT_SCLK 13
#define TFT_MOSI 11
#define TFT_MISO 12
#define TFT_TOUCH_CS 255
#define TFT_TOUCH_INT 255
#define TFT_DC 9
#define TFT_CS 255
#define TFT_RST 23
#else
// ILI9341
#define TFT_SCLK 13
#define TFT_MOSI 11
#define TFT_MISO 12
#define TFT_TOUCH_CS 255 //38
#define TFT_TOUCH_INT 255 //37
#define TFT_DC 9
#define TFT_CS 23
#define TFT_RST 255
#endif
#define TFT_CS 22 // 255 for LORES ST7789 (NO CS)
#define TFT_RST 23 // 255 for ILI/ST if connected to 3.3V
// PSRAM
#define PSRAM_CS 36
@ -38,10 +24,10 @@
#define SD_SCLK 13
#define SD_MOSI 12
#define SD_MISO 11
#ifdef TEENSYBOY
#define SD_CS BUILTIN_SDCARD
#ifdef EXTERNAL_SD
#define SD_CS 8
#else
#define SD_CS 5
#define SD_CS BUILTIN_SDCARD
#endif
// I2C keyboard
@ -54,17 +40,15 @@
#define PIN_JOY2_BTN 17
#define PIN_KEY_USER1 3 //34
#define PIN_KEY_USER2 4 //35
//#define PIN_KEY_USER3 255
//#define PIN_KEY_USER4 255
//#define PIN_KEY_USER3 33
//#define PIN_KEY_USER4 39
#ifdef TEENSYBOY
// Second joystick
#define PIN_JOY1_BTN 2
#define PIN_JOY1_1 14 // UP
#define PIN_JOY1_2 7 // DOWN
#define PIN_JOY1_3 6 // RIGHT
#define PIN_JOY1_4 5 // LEFT
#endif
#else
// OLD LAYOUT!!!!

View file

@ -2,9 +2,15 @@
#define _PLATFORM_CONFIG_H_
//#define OLD_LAYOUT 1
//#define TEENSYBOY 1
//#define HAS_PSRAM 1
#define ILI9341 1
//#define ST7789 1
//#define SWAP_JOYSTICK 1
//#define LOHRES 1
//#define ROTATE_SCREEN 1
#define EXTERNAL_SD 1
#define HAS_PSRAM 1
//#define USE_SDFAT 1
//#define SD_FAT_TYPE 1

View file

@ -107,7 +107,6 @@ PROGMEM static const uint8_t init_commands[] = {
#endif
};
static void dmaInterrupt() {
dmatx.clearInterrupt();
curTransfer++;
@ -220,8 +219,9 @@ TFT_T_DMA::TFT_T_DMA(uint8_t cs, uint8_t dc, uint8_t rst, uint8_t mosi, uint8_t
void TFT_T_DMA::setArea(uint16_t x1,uint16_t y1,uint16_t x2,uint16_t y2) {
int dx=0;
int dy=0;
#ifdef ST7789
if (TFT_REALWIDTH == TFT_REALHEIGHT)
{
#ifdef ROTATE_SCREEN
if (!flipped) {
dy += 80;
@ -231,7 +231,29 @@ void TFT_T_DMA::setArea(uint16_t x1,uint16_t y1,uint16_t x2,uint16_t y2) {
dx += 80;
}
#endif
}
#endif
digitalWrite(_dc, 0);
SPI.transfer(TFT_CASET);
digitalWrite(_dc, 1);
SPI.transfer16(x1+dx);
digitalWrite(_dc, 1);
SPI.transfer16(x2+dx);
digitalWrite(_dc, 0);
SPI.transfer(TFT_PASET);
digitalWrite(_dc, 1);
SPI.transfer16(y1+dy);
digitalWrite(_dc, 1);
SPI.transfer16(y2+dy);
digitalWrite(_dc, 0);
SPI.transfer(TFT_RAMWR);
digitalWrite(_dc, 1);
return;
SPI.beginTransaction(SPISettings(SPICLOCK, MSBFIRST, SPI_MODE));
digitalWrite(_cs, 0);
@ -257,6 +279,8 @@ void TFT_T_DMA::setArea(uint16_t x1,uint16_t y1,uint16_t x2,uint16_t y2) {
}
void TFT_T_DMA::begin(void) {
SPI.setMOSI(_mosi);
SPI.setMISO(_miso);
@ -264,16 +288,17 @@ void TFT_T_DMA::begin(void) {
SPI.begin();
// Initialize display
if (_rst < 255) { // toggle RST low to reset
if (_rst != 0xff) {
pinMode(_rst, OUTPUT);
digitalWrite(_rst, HIGH);
delay(5);
delay(100);
digitalWrite(_rst, LOW);
delay(20);
delay(100);
digitalWrite(_rst, HIGH);
delay(120);
delay(200);
}
SPI.beginTransaction(SPISettings(SPICLOCK, MSBFIRST, SPI_MODE));
const uint8_t *addr = init_commands;
digitalWrite(_cs, 0);
@ -307,7 +332,6 @@ void TFT_T_DMA::begin(void) {
SPI.transfer(ILI9341_DISPON);
digitalWrite(_dc, 1);
digitalWrite(_cs, 1);
SPI.endTransaction();
#endif
#ifdef ST7789
uint8_t numCommands, numArgs;
@ -332,22 +356,31 @@ void TFT_T_DMA::begin(void) {
if(ms) {
ms = *addr++; // Read post-command delay time (ms)
if(ms == 255) ms = 500; // If 255, delay for 500 ms
SPI.endTransaction();
digitalWrite(_dc, 1);
digitalWrite(_cs, 1);
SPI.endTransaction();
delay(ms);
//beginSPITransaction();
SPI.beginTransaction(SPISettings(SPICLOCK, MSBFIRST, SPI_MODE));
digitalWrite(_cs, 0);
}
}
digitalWrite(_cs, 1);
#endif
setArea(0, 0, TFT_REALWIDTH-1, TFT_REALHEIGHT-1);
SPI.endTransaction();
cancelled = false;
#ifdef FLIP_SCREEN
flipscreen(true);
#else
flipscreen(false);
#endif
#ifdef ST7789
if (TFT_REALWIDTH != TFT_REALHEIGHT)
{
flipscreen(true);
}
#endif
};
@ -434,6 +467,7 @@ void TFT_T_DMA::startDMA(void) {
#endif
dmatx = dmasettings[0];
digitalWrite(_cs, 0);
setArea((TFT_REALWIDTH-TFT_WIDTH)/2, (TFT_REALHEIGHT-TFT_HEIGHT)/2, (TFT_REALWIDTH-TFT_WIDTH)/2+TFT_WIDTH-1, (TFT_REALHEIGHT-TFT_HEIGHT)/2+TFT_HEIGHT-1);
digitalWrite(_dc, 0);
SPI.transfer(TFT_RAMWR);
digitalWrite(_dc, 1);
@ -623,17 +657,17 @@ void TFT_T_DMA::readCal(uint16_t * oX, uint16_t * oY, uint16_t * oZ) {
No DMA functions
***********************************************************************************************/
void TFT_T_DMA::fillScreenNoDma(uint16_t color) {
setArea(0, 0, TFT_REALWIDTH-1, TFT_REALHEIGHT-1);
SPI.beginTransaction(SPISettings(SPICLOCK, MSBFIRST, SPI_MODE));
digitalWrite(_cs, 0);
digitalWrite(_dc, 0);
SPI.transfer(TFT_RAMWR);
setArea(0, 0, TFT_REALWIDTH-1, TFT_REALHEIGHT-1);
//digitalWrite(_dc, 0);
//SPI.transfer(TFT_RAMWR);
int i,j;
for (j=0; j<TFT_REALHEIGHT; j++)
{
for (i=0; i<TFT_REALWIDTH; i++) {
digitalWrite(_dc, 1);
//digitalWrite(_dc, 1);
SPI.transfer16(color);
}
}
@ -643,24 +677,43 @@ void TFT_T_DMA::fillScreenNoDma(uint16_t color) {
digitalWrite(_dc, 1);
#endif
digitalWrite(_cs, 1);
SPI.endTransaction();
setArea(0, 0, (TFT_REALWIDTH-1), (TFT_REALHEIGHT-1));
SPI.endTransaction();
}
void TFT_T_DMA::writeScreenNoDma(const uint16_t *pcolors) {
setArea(0, 0, TFT_WIDTH-1, TFT_HEIGHT-1);
void TFT_T_DMA::drawRectNoDma(int16_t x, int16_t y, int16_t w, int16_t h, uint16_t color) {
SPI.beginTransaction(SPISettings(SPICLOCK, MSBFIRST, SPI_MODE));
digitalWrite(_cs, 0);
setArea(x,y,x+w-1,y+h-1);
// digitalWrite(_dc, 0);
// SPI.transfer(TFT_RAMWR);
int i;
for (i=0; i<(w*h); i++)
{
//digitalWrite(_dc, 1);
SPI.transfer16(color);
}
#ifdef ILI9341
digitalWrite(_dc, 0);
SPI.transfer(TFT_RAMWR);
SPI.transfer(ILI9341_SLPOUT);
digitalWrite(_dc, 1);
#endif
digitalWrite(_cs, 1);
setArea(0, 0, (TFT_REALWIDTH-1), (TFT_REALHEIGHT-1));
SPI.endTransaction();
}
void TFT_T_DMA::writeScreenNoDma(const uint16_t *pcolors) {
SPI.beginTransaction(SPISettings(SPICLOCK, MSBFIRST, SPI_MODE));
digitalWrite(_cs, 0);
setArea(0, 0, TFT_WIDTH-1, TFT_HEIGHT-1);
//digitalWrite(_dc, 0);
//SPI.transfer(TFT_RAMWR);
int i,j;
for (j=0; j<240; j++)
{
for (i=0; i<TFT_WIDTH; i++) {
digitalWrite(_dc, 1);
// digitalWrite(_dc, 1);
SPI.transfer16(*pcolors++);
}
}
@ -670,9 +723,8 @@ void TFT_T_DMA::writeScreenNoDma(const uint16_t *pcolors) {
digitalWrite(_dc, 1);
#endif
digitalWrite(_cs, 1);
SPI.endTransaction();
setArea(0, 0, (TFT_REALWIDTH-1), (TFT_REALHEIGHT-1));
SPI.endTransaction();
}
void TFT_T_DMA::drawSpriteNoDma(int16_t x, int16_t y, const uint16_t *bitmap) {
@ -723,12 +775,12 @@ void TFT_T_DMA::drawSpriteNoDma(int16_t x, int16_t y, const uint16_t *bitmap, ui
}
}
setArea(arx, ary, arx+arw-1, ary+arh-1);
SPI.beginTransaction(SPISettings(SPICLOCK, MSBFIRST, SPI_MODE));
digitalWrite(_cs, 0);
digitalWrite(_dc, 0);
SPI.transfer(TFT_RAMWR);
setArea(arx, ary, arx+arw-1, ary+arh-1);
//digitalWrite(_dc, 0);
//SPI.transfer(TFT_RAMWR);
bitmap = bitmap + bmp_offy*w + bmp_offx;
for (int row=0;row<arh; row++)
@ -737,7 +789,7 @@ void TFT_T_DMA::drawSpriteNoDma(int16_t x, int16_t y, const uint16_t *bitmap, ui
for (int col=0;col<arw; col++)
{
uint16_t color = *bmp_ptr++;
digitalWrite(_dc, 1);
// digitalWrite(_dc, 1);
SPI.transfer16(color);
}
bitmap += w;
@ -747,9 +799,9 @@ void TFT_T_DMA::drawSpriteNoDma(int16_t x, int16_t y, const uint16_t *bitmap, ui
SPI.transfer(ILI9341_SLPOUT);
digitalWrite(_dc, 1);
#endif
setArea(0, 0, TFT_REALWIDTH-1, TFT_REALHEIGHT-1);
digitalWrite(_cs, 1);
SPI.endTransaction();
setArea(0, 0, TFT_REALWIDTH-1, TFT_REALHEIGHT-1);
}
void TFT_T_DMA::drawTextNoDma(int16_t x, int16_t y, const char * text, uint16_t fgcolor, uint16_t bgcolor, bool doublesize) {
@ -757,20 +809,19 @@ void TFT_T_DMA::drawTextNoDma(int16_t x, int16_t y, const char * text, uint16_t
while ((c = *text++)) {
const unsigned char * charpt=&font8x8[c][0];
setArea(x,y,x+7,y+(doublesize?15:7));
//SPI.beginTransaction(SPISettings(SPICLOCK, MSBFIRST, SPI_MODE));
SPI.beginTransaction(SPISettings(SPICLOCK, MSBFIRST, SPI_MODE));
digitalWrite(_cs, 0);
setArea(x,y,x+7,y+(doublesize?15:7));
//digitalWrite(_dc, 0);
//SPI.transfer(TFT_RAMWR);
digitalWrite(_dc, 1);
//digitalWrite(_dc, 1);
for (int i=0;i<8;i++)
{
unsigned char bits;
if (doublesize) {
bits = *charpt;
digitalWrite(_dc, 1);
//digitalWrite(_dc, 1);
if (bits&0x01) SPI.transfer16(fgcolor);
else SPI.transfer16(bgcolor);
bits = bits >> 1;
@ -796,7 +847,7 @@ void TFT_T_DMA::drawTextNoDma(int16_t x, int16_t y, const char * text, uint16_t
else SPI.transfer16(bgcolor);
}
bits = *charpt++;
digitalWrite(_dc, 1);
//digitalWrite(_dc, 1);
if (bits&0x01) SPI.transfer16(fgcolor);
else SPI.transfer16(bgcolor);
bits = bits >> 1;
@ -831,35 +882,18 @@ void TFT_T_DMA::drawTextNoDma(int16_t x, int16_t y, const char * text, uint16_t
SPI.endTransaction();
}
setArea(0, 0, (TFT_REALWIDTH-1), (TFT_REALHEIGHT-1));
}
void TFT_T_DMA::drawRectNoDma(int16_t x, int16_t y, int16_t w, int16_t h, uint16_t color) {
setArea(x,y,x+w-1,y+h-1);
SPI.beginTransaction(SPISettings(SPICLOCK, MSBFIRST, SPI_MODE));
digitalWrite(_cs, 0);
digitalWrite(_dc, 0);
SPI.transfer(TFT_RAMWR);
int i;
for (i=0; i<(w*h); i++)
{
digitalWrite(_dc, 1);
SPI.transfer16(color);
}
#ifdef ILI9341
digitalWrite(_dc, 0);
SPI.transfer(ILI9341_SLPOUT);
digitalWrite(_dc, 1);
#endif
setArea(0, 0, (TFT_REALWIDTH-1), (TFT_REALHEIGHT-1));
digitalWrite(_cs, 1);
SPI.endTransaction();
setArea(0, 0, (TFT_REALWIDTH-1), (TFT_REALHEIGHT-1));
}
/***********************************************************************************************
DMA functions
***********************************************************************************************/

View file

@ -21,18 +21,15 @@
#define B16(rgb) ((rgb<<3)&0xf8)
#define TFT_HEIGHT 240
#ifdef ILI9341
#define TFT_WIDTH 320
#define TFT_REALWIDTH 320
#define TFT_REALHEIGHT 240
#endif
#ifdef ST7789
#ifdef LOHRES
#define TFT_WIDTH 240
#define TFT_REALWIDTH 240
#define TFT_REALHEIGHT 240
#else
#define TFT_WIDTH 320
#define TFT_REALWIDTH 320
#endif
#define TFT_HEIGHT 240
#define TFT_REALHEIGHT 240
#define LINES_PER_BLOCK 64
#define NR_OF_BLOCK 4

View file

@ -1,11 +1,7 @@
#include "platform_config.h"
#ifdef TEENSYBOY
#define ST7789 1
#define ROTATE_SCREEN 1
#else
#define ILI9341 1
#endif
//#define ST7789 1
//#define ILI9341 1
#define TFT_LINEARINT 1
#define LINEARINT_HACK 1

View file

@ -1373,7 +1373,7 @@ void emu_init(void)
emu_InitJoysticks();
#ifdef TEENSYBOY
#ifdef SWAP_JOYSTICK
joySwapped = true;
#else
joySwapped = false;

View file

@ -2,31 +2,17 @@
#define IOPINS_H
#include "platform_config.h"
#include "tft_t_dma_config.h"
#ifndef OLD_LAYOUT
#ifdef ST7789
// ST7789
#define TFT_SCLK 13
#define TFT_MOSI 11
#define TFT_MISO 12
#define TFT_TOUCH_CS 255
#define TFT_TOUCH_INT 255
#define TFT_DC 9
#define TFT_CS 255
#define TFT_RST 23
#else
// ILI9341
#define TFT_SCLK 13
#define TFT_MOSI 11
#define TFT_MISO 12
#define TFT_TOUCH_CS 255 //38
#define TFT_TOUCH_INT 255 //37
#define TFT_DC 9
#define TFT_CS 23
#define TFT_RST 255
#endif
#define TFT_CS 22 // 255 for LORES ST7789 (NO CS)
#define TFT_RST 23 // 255 for ILI/ST if connected to 3.3V
// PSRAM
#define PSRAM_CS 36
@ -38,10 +24,10 @@
#define SD_SCLK 13
#define SD_MOSI 12
#define SD_MISO 11
#ifdef TEENSYBOY
#define SD_CS BUILTIN_SDCARD
#ifdef EXTERNAL_SD
#define SD_CS 8
#else
#define SD_CS 5
#define SD_CS BUILTIN_SDCARD
#endif
// I2C keyboard
@ -54,17 +40,15 @@
#define PIN_JOY2_BTN 17
#define PIN_KEY_USER1 3 //34
#define PIN_KEY_USER2 4 //35
//#define PIN_KEY_USER3 255
//#define PIN_KEY_USER4 255
//#define PIN_KEY_USER3 33
//#define PIN_KEY_USER4 39
#ifdef TEENSYBOY
// Second joystick
#define PIN_JOY1_BTN 2
#define PIN_JOY1_1 14 // UP
#define PIN_JOY1_2 7 // DOWN
#define PIN_JOY1_3 6 // RIGHT
#define PIN_JOY1_4 5 // LEFT
#endif
#else
// OLD LAYOUT!!!!

View file

@ -2,9 +2,15 @@
#define _PLATFORM_CONFIG_H_
//#define OLD_LAYOUT 1
//#define TEENSYBOY 1
//#define HAS_PSRAM 1
#define ILI9341 1
//#define ST7789 1
//#define SWAP_JOYSTICK 1
//#define LOHRES 1
//#define ROTATE_SCREEN 1
#define EXTERNAL_SD 1
#define HAS_PSRAM 1
//#define USE_SDFAT 1
//#define SD_FAT_TYPE 1

View file

@ -107,7 +107,6 @@ PROGMEM static const uint8_t init_commands[] = {
#endif
};
static void dmaInterrupt() {
dmatx.clearInterrupt();
curTransfer++;
@ -220,8 +219,9 @@ TFT_T_DMA::TFT_T_DMA(uint8_t cs, uint8_t dc, uint8_t rst, uint8_t mosi, uint8_t
void TFT_T_DMA::setArea(uint16_t x1,uint16_t y1,uint16_t x2,uint16_t y2) {
int dx=0;
int dy=0;
#ifdef ST7789
if (TFT_REALWIDTH == TFT_REALHEIGHT)
{
#ifdef ROTATE_SCREEN
if (!flipped) {
dy += 80;
@ -231,7 +231,29 @@ void TFT_T_DMA::setArea(uint16_t x1,uint16_t y1,uint16_t x2,uint16_t y2) {
dx += 80;
}
#endif
}
#endif
digitalWrite(_dc, 0);
SPI.transfer(TFT_CASET);
digitalWrite(_dc, 1);
SPI.transfer16(x1+dx);
digitalWrite(_dc, 1);
SPI.transfer16(x2+dx);
digitalWrite(_dc, 0);
SPI.transfer(TFT_PASET);
digitalWrite(_dc, 1);
SPI.transfer16(y1+dy);
digitalWrite(_dc, 1);
SPI.transfer16(y2+dy);
digitalWrite(_dc, 0);
SPI.transfer(TFT_RAMWR);
digitalWrite(_dc, 1);
return;
SPI.beginTransaction(SPISettings(SPICLOCK, MSBFIRST, SPI_MODE));
digitalWrite(_cs, 0);
@ -257,6 +279,8 @@ void TFT_T_DMA::setArea(uint16_t x1,uint16_t y1,uint16_t x2,uint16_t y2) {
}
void TFT_T_DMA::begin(void) {
SPI.setMOSI(_mosi);
SPI.setMISO(_miso);
@ -264,16 +288,17 @@ void TFT_T_DMA::begin(void) {
SPI.begin();
// Initialize display
if (_rst < 255) { // toggle RST low to reset
if (_rst != 0xff) {
pinMode(_rst, OUTPUT);
digitalWrite(_rst, HIGH);
delay(5);
delay(100);
digitalWrite(_rst, LOW);
delay(20);
delay(100);
digitalWrite(_rst, HIGH);
delay(120);
delay(200);
}
SPI.beginTransaction(SPISettings(SPICLOCK, MSBFIRST, SPI_MODE));
const uint8_t *addr = init_commands;
digitalWrite(_cs, 0);
@ -307,7 +332,6 @@ void TFT_T_DMA::begin(void) {
SPI.transfer(ILI9341_DISPON);
digitalWrite(_dc, 1);
digitalWrite(_cs, 1);
SPI.endTransaction();
#endif
#ifdef ST7789
uint8_t numCommands, numArgs;
@ -332,22 +356,31 @@ void TFT_T_DMA::begin(void) {
if(ms) {
ms = *addr++; // Read post-command delay time (ms)
if(ms == 255) ms = 500; // If 255, delay for 500 ms
SPI.endTransaction();
digitalWrite(_dc, 1);
digitalWrite(_cs, 1);
SPI.endTransaction();
delay(ms);
//beginSPITransaction();
SPI.beginTransaction(SPISettings(SPICLOCK, MSBFIRST, SPI_MODE));
digitalWrite(_cs, 0);
}
}
digitalWrite(_cs, 1);
#endif
setArea(0, 0, TFT_REALWIDTH-1, TFT_REALHEIGHT-1);
SPI.endTransaction();
cancelled = false;
#ifdef FLIP_SCREEN
flipscreen(true);
#else
flipscreen(false);
#endif
#ifdef ST7789
if (TFT_REALWIDTH != TFT_REALHEIGHT)
{
flipscreen(true);
}
#endif
};
@ -434,6 +467,7 @@ void TFT_T_DMA::startDMA(void) {
#endif
dmatx = dmasettings[0];
digitalWrite(_cs, 0);
setArea((TFT_REALWIDTH-TFT_WIDTH)/2, (TFT_REALHEIGHT-TFT_HEIGHT)/2, (TFT_REALWIDTH-TFT_WIDTH)/2+TFT_WIDTH-1, (TFT_REALHEIGHT-TFT_HEIGHT)/2+TFT_HEIGHT-1);
digitalWrite(_dc, 0);
SPI.transfer(TFT_RAMWR);
digitalWrite(_dc, 1);
@ -623,17 +657,17 @@ void TFT_T_DMA::readCal(uint16_t * oX, uint16_t * oY, uint16_t * oZ) {
No DMA functions
***********************************************************************************************/
void TFT_T_DMA::fillScreenNoDma(uint16_t color) {
setArea(0, 0, TFT_REALWIDTH-1, TFT_REALHEIGHT-1);
SPI.beginTransaction(SPISettings(SPICLOCK, MSBFIRST, SPI_MODE));
digitalWrite(_cs, 0);
digitalWrite(_dc, 0);
SPI.transfer(TFT_RAMWR);
setArea(0, 0, TFT_REALWIDTH-1, TFT_REALHEIGHT-1);
//digitalWrite(_dc, 0);
//SPI.transfer(TFT_RAMWR);
int i,j;
for (j=0; j<TFT_REALHEIGHT; j++)
{
for (i=0; i<TFT_REALWIDTH; i++) {
digitalWrite(_dc, 1);
//digitalWrite(_dc, 1);
SPI.transfer16(color);
}
}
@ -643,24 +677,43 @@ void TFT_T_DMA::fillScreenNoDma(uint16_t color) {
digitalWrite(_dc, 1);
#endif
digitalWrite(_cs, 1);
SPI.endTransaction();
setArea(0, 0, (TFT_REALWIDTH-1), (TFT_REALHEIGHT-1));
SPI.endTransaction();
}
void TFT_T_DMA::writeScreenNoDma(const uint16_t *pcolors) {
setArea(0, 0, TFT_WIDTH-1, TFT_HEIGHT-1);
void TFT_T_DMA::drawRectNoDma(int16_t x, int16_t y, int16_t w, int16_t h, uint16_t color) {
SPI.beginTransaction(SPISettings(SPICLOCK, MSBFIRST, SPI_MODE));
digitalWrite(_cs, 0);
setArea(x,y,x+w-1,y+h-1);
// digitalWrite(_dc, 0);
// SPI.transfer(TFT_RAMWR);
int i;
for (i=0; i<(w*h); i++)
{
//digitalWrite(_dc, 1);
SPI.transfer16(color);
}
#ifdef ILI9341
digitalWrite(_dc, 0);
SPI.transfer(TFT_RAMWR);
SPI.transfer(ILI9341_SLPOUT);
digitalWrite(_dc, 1);
#endif
digitalWrite(_cs, 1);
setArea(0, 0, (TFT_REALWIDTH-1), (TFT_REALHEIGHT-1));
SPI.endTransaction();
}
void TFT_T_DMA::writeScreenNoDma(const uint16_t *pcolors) {
SPI.beginTransaction(SPISettings(SPICLOCK, MSBFIRST, SPI_MODE));
digitalWrite(_cs, 0);
setArea(0, 0, TFT_WIDTH-1, TFT_HEIGHT-1);
//digitalWrite(_dc, 0);
//SPI.transfer(TFT_RAMWR);
int i,j;
for (j=0; j<240; j++)
{
for (i=0; i<TFT_WIDTH; i++) {
digitalWrite(_dc, 1);
// digitalWrite(_dc, 1);
SPI.transfer16(*pcolors++);
}
}
@ -670,9 +723,8 @@ void TFT_T_DMA::writeScreenNoDma(const uint16_t *pcolors) {
digitalWrite(_dc, 1);
#endif
digitalWrite(_cs, 1);
SPI.endTransaction();
setArea(0, 0, (TFT_REALWIDTH-1), (TFT_REALHEIGHT-1));
SPI.endTransaction();
}
void TFT_T_DMA::drawSpriteNoDma(int16_t x, int16_t y, const uint16_t *bitmap) {
@ -723,12 +775,12 @@ void TFT_T_DMA::drawSpriteNoDma(int16_t x, int16_t y, const uint16_t *bitmap, ui
}
}
setArea(arx, ary, arx+arw-1, ary+arh-1);
SPI.beginTransaction(SPISettings(SPICLOCK, MSBFIRST, SPI_MODE));
digitalWrite(_cs, 0);
digitalWrite(_dc, 0);
SPI.transfer(TFT_RAMWR);
setArea(arx, ary, arx+arw-1, ary+arh-1);
//digitalWrite(_dc, 0);
//SPI.transfer(TFT_RAMWR);
bitmap = bitmap + bmp_offy*w + bmp_offx;
for (int row=0;row<arh; row++)
@ -737,7 +789,7 @@ void TFT_T_DMA::drawSpriteNoDma(int16_t x, int16_t y, const uint16_t *bitmap, ui
for (int col=0;col<arw; col++)
{
uint16_t color = *bmp_ptr++;
digitalWrite(_dc, 1);
// digitalWrite(_dc, 1);
SPI.transfer16(color);
}
bitmap += w;
@ -747,9 +799,9 @@ void TFT_T_DMA::drawSpriteNoDma(int16_t x, int16_t y, const uint16_t *bitmap, ui
SPI.transfer(ILI9341_SLPOUT);
digitalWrite(_dc, 1);
#endif
setArea(0, 0, TFT_REALWIDTH-1, TFT_REALHEIGHT-1);
digitalWrite(_cs, 1);
SPI.endTransaction();
setArea(0, 0, TFT_REALWIDTH-1, TFT_REALHEIGHT-1);
}
void TFT_T_DMA::drawTextNoDma(int16_t x, int16_t y, const char * text, uint16_t fgcolor, uint16_t bgcolor, bool doublesize) {
@ -757,20 +809,19 @@ void TFT_T_DMA::drawTextNoDma(int16_t x, int16_t y, const char * text, uint16_t
while ((c = *text++)) {
const unsigned char * charpt=&font8x8[c][0];
setArea(x,y,x+7,y+(doublesize?15:7));
//SPI.beginTransaction(SPISettings(SPICLOCK, MSBFIRST, SPI_MODE));
SPI.beginTransaction(SPISettings(SPICLOCK, MSBFIRST, SPI_MODE));
digitalWrite(_cs, 0);
setArea(x,y,x+7,y+(doublesize?15:7));
//digitalWrite(_dc, 0);
//SPI.transfer(TFT_RAMWR);
digitalWrite(_dc, 1);
//digitalWrite(_dc, 1);
for (int i=0;i<8;i++)
{
unsigned char bits;
if (doublesize) {
bits = *charpt;
digitalWrite(_dc, 1);
//digitalWrite(_dc, 1);
if (bits&0x01) SPI.transfer16(fgcolor);
else SPI.transfer16(bgcolor);
bits = bits >> 1;
@ -796,7 +847,7 @@ void TFT_T_DMA::drawTextNoDma(int16_t x, int16_t y, const char * text, uint16_t
else SPI.transfer16(bgcolor);
}
bits = *charpt++;
digitalWrite(_dc, 1);
//digitalWrite(_dc, 1);
if (bits&0x01) SPI.transfer16(fgcolor);
else SPI.transfer16(bgcolor);
bits = bits >> 1;
@ -831,35 +882,18 @@ void TFT_T_DMA::drawTextNoDma(int16_t x, int16_t y, const char * text, uint16_t
SPI.endTransaction();
}
setArea(0, 0, (TFT_REALWIDTH-1), (TFT_REALHEIGHT-1));
}
void TFT_T_DMA::drawRectNoDma(int16_t x, int16_t y, int16_t w, int16_t h, uint16_t color) {
setArea(x,y,x+w-1,y+h-1);
SPI.beginTransaction(SPISettings(SPICLOCK, MSBFIRST, SPI_MODE));
digitalWrite(_cs, 0);
digitalWrite(_dc, 0);
SPI.transfer(TFT_RAMWR);
int i;
for (i=0; i<(w*h); i++)
{
digitalWrite(_dc, 1);
SPI.transfer16(color);
}
#ifdef ILI9341
digitalWrite(_dc, 0);
SPI.transfer(ILI9341_SLPOUT);
digitalWrite(_dc, 1);
#endif
setArea(0, 0, (TFT_REALWIDTH-1), (TFT_REALHEIGHT-1));
digitalWrite(_cs, 1);
SPI.endTransaction();
setArea(0, 0, (TFT_REALWIDTH-1), (TFT_REALHEIGHT-1));
}
/***********************************************************************************************
DMA functions
***********************************************************************************************/

View file

@ -21,18 +21,15 @@
#define B16(rgb) ((rgb<<3)&0xf8)
#define TFT_HEIGHT 200
#ifdef ILI9341
#define TFT_WIDTH 320
#define TFT_REALWIDTH 320
#define TFT_REALHEIGHT 240
#endif
#ifdef ST7789
#ifdef LOHRES
#define TFT_WIDTH 240
#define TFT_REALWIDTH 240
#define TFT_REALHEIGHT 240
#else
#define TFT_WIDTH 320
#define TFT_REALWIDTH 320
#endif
#define TFT_HEIGHT 200
#define TFT_REALHEIGHT 240
#define LINES_PER_BLOCK 64
#define NR_OF_BLOCK 4

View file

@ -1,11 +1,7 @@
#include "platform_config.h"
#ifdef TEENSYBOY
#define ST7789 1
#define ROTATE_SCREEN 1
#else
#define ILI9341 1
#endif
//#define ST7789 1
//#define ILI9341 1
#define TFT_LINEARINT 1
#define LINEARINT_HACK 1

View file

@ -1380,7 +1380,7 @@ void emu_init(void)
emu_InitJoysticks();
#ifdef TEENSYBOY
#ifdef SWAP_JOYSTICK
joySwapped = true;
#else
joySwapped = false;

View file

@ -2,31 +2,17 @@
#define IOPINS_H
#include "platform_config.h"
#include "tft_t_dma_config.h"
#ifndef OLD_LAYOUT
#ifdef ST7789
// ST7789
#define TFT_SCLK 13
#define TFT_MOSI 11
#define TFT_MISO 12
#define TFT_TOUCH_CS 255
#define TFT_TOUCH_INT 255
#define TFT_DC 9
#define TFT_CS 255
#define TFT_RST 23
#else
// ILI9341
#define TFT_SCLK 13
#define TFT_MOSI 11
#define TFT_MISO 12
#define TFT_TOUCH_CS 255 //38
#define TFT_TOUCH_INT 255 //37
#define TFT_DC 9
#define TFT_CS 23
#define TFT_RST 255
#endif
#define TFT_CS 22 // 255 for LORES ST7789 (NO CS)
#define TFT_RST 23 // 255 for ILI/ST if connected to 3.3V
// PSRAM
#define PSRAM_CS 36
@ -38,10 +24,10 @@
#define SD_SCLK 13
#define SD_MOSI 12
#define SD_MISO 11
#ifdef TEENSYBOY
#define SD_CS BUILTIN_SDCARD
#ifdef EXTERNAL_SD
#define SD_CS 8
#else
#define SD_CS 5
#define SD_CS BUILTIN_SDCARD
#endif
// I2C keyboard
@ -54,17 +40,15 @@
#define PIN_JOY2_BTN 17
#define PIN_KEY_USER1 3 //34
#define PIN_KEY_USER2 4 //35
//#define PIN_KEY_USER3 255
//#define PIN_KEY_USER4 255
//#define PIN_KEY_USER3 33
//#define PIN_KEY_USER4 39
#ifdef TEENSYBOY
// Second joystick
#define PIN_JOY1_BTN 2
#define PIN_JOY1_1 14 // UP
#define PIN_JOY1_2 7 // DOWN
#define PIN_JOY1_3 6 // RIGHT
#define PIN_JOY1_4 5 // LEFT
#endif
#else
// OLD LAYOUT!!!!

View file

@ -2,9 +2,15 @@
#define _PLATFORM_CONFIG_H_
//#define OLD_LAYOUT 1
//#define TEENSYBOY 1
//#define HAS_PSRAM 1
#define ILI9341 1
//#define ST7789 1
//#define SWAP_JOYSTICK 1
//#define LOHRES 1
//#define ROTATE_SCREEN 1
#define EXTERNAL_SD 1
#define HAS_PSRAM 1
//#define USE_SDFAT 1
//#define SD_FAT_TYPE 1

View file

@ -107,7 +107,6 @@ PROGMEM static const uint8_t init_commands[] = {
#endif
};
static void dmaInterrupt() {
dmatx.clearInterrupt();
curTransfer++;
@ -220,8 +219,9 @@ TFT_T_DMA::TFT_T_DMA(uint8_t cs, uint8_t dc, uint8_t rst, uint8_t mosi, uint8_t
void TFT_T_DMA::setArea(uint16_t x1,uint16_t y1,uint16_t x2,uint16_t y2) {
int dx=0;
int dy=0;
#ifdef ST7789
if (TFT_REALWIDTH == TFT_REALHEIGHT)
{
#ifdef ROTATE_SCREEN
if (!flipped) {
dy += 80;
@ -231,7 +231,29 @@ void TFT_T_DMA::setArea(uint16_t x1,uint16_t y1,uint16_t x2,uint16_t y2) {
dx += 80;
}
#endif
}
#endif
digitalWrite(_dc, 0);
SPI.transfer(TFT_CASET);
digitalWrite(_dc, 1);
SPI.transfer16(x1+dx);
digitalWrite(_dc, 1);
SPI.transfer16(x2+dx);
digitalWrite(_dc, 0);
SPI.transfer(TFT_PASET);
digitalWrite(_dc, 1);
SPI.transfer16(y1+dy);
digitalWrite(_dc, 1);
SPI.transfer16(y2+dy);
digitalWrite(_dc, 0);
SPI.transfer(TFT_RAMWR);
digitalWrite(_dc, 1);
return;
SPI.beginTransaction(SPISettings(SPICLOCK, MSBFIRST, SPI_MODE));
digitalWrite(_cs, 0);
@ -257,6 +279,8 @@ void TFT_T_DMA::setArea(uint16_t x1,uint16_t y1,uint16_t x2,uint16_t y2) {
}
void TFT_T_DMA::begin(void) {
SPI.setMOSI(_mosi);
SPI.setMISO(_miso);
@ -264,16 +288,17 @@ void TFT_T_DMA::begin(void) {
SPI.begin();
// Initialize display
if (_rst < 255) { // toggle RST low to reset
if (_rst != 0xff) {
pinMode(_rst, OUTPUT);
digitalWrite(_rst, HIGH);
delay(5);
delay(100);
digitalWrite(_rst, LOW);
delay(20);
delay(100);
digitalWrite(_rst, HIGH);
delay(120);
delay(200);
}
SPI.beginTransaction(SPISettings(SPICLOCK, MSBFIRST, SPI_MODE));
const uint8_t *addr = init_commands;
digitalWrite(_cs, 0);
@ -307,7 +332,6 @@ void TFT_T_DMA::begin(void) {
SPI.transfer(ILI9341_DISPON);
digitalWrite(_dc, 1);
digitalWrite(_cs, 1);
SPI.endTransaction();
#endif
#ifdef ST7789
uint8_t numCommands, numArgs;
@ -332,22 +356,31 @@ void TFT_T_DMA::begin(void) {
if(ms) {
ms = *addr++; // Read post-command delay time (ms)
if(ms == 255) ms = 500; // If 255, delay for 500 ms
SPI.endTransaction();
digitalWrite(_dc, 1);
digitalWrite(_cs, 1);
SPI.endTransaction();
delay(ms);
//beginSPITransaction();
SPI.beginTransaction(SPISettings(SPICLOCK, MSBFIRST, SPI_MODE));
digitalWrite(_cs, 0);
}
}
digitalWrite(_cs, 1);
#endif
setArea(0, 0, TFT_REALWIDTH-1, TFT_REALHEIGHT-1);
SPI.endTransaction();
cancelled = false;
#ifdef FLIP_SCREEN
flipscreen(true);
#else
flipscreen(false);
#endif
#ifdef ST7789
if (TFT_REALWIDTH != TFT_REALHEIGHT)
{
flipscreen(true);
}
#endif
};
@ -434,6 +467,7 @@ void TFT_T_DMA::startDMA(void) {
#endif
dmatx = dmasettings[0];
digitalWrite(_cs, 0);
setArea((TFT_REALWIDTH-TFT_WIDTH)/2, (TFT_REALHEIGHT-TFT_HEIGHT)/2, (TFT_REALWIDTH-TFT_WIDTH)/2+TFT_WIDTH-1, (TFT_REALHEIGHT-TFT_HEIGHT)/2+TFT_HEIGHT-1);
digitalWrite(_dc, 0);
SPI.transfer(TFT_RAMWR);
digitalWrite(_dc, 1);
@ -623,17 +657,17 @@ void TFT_T_DMA::readCal(uint16_t * oX, uint16_t * oY, uint16_t * oZ) {
No DMA functions
***********************************************************************************************/
void TFT_T_DMA::fillScreenNoDma(uint16_t color) {
setArea(0, 0, TFT_REALWIDTH-1, TFT_REALHEIGHT-1);
SPI.beginTransaction(SPISettings(SPICLOCK, MSBFIRST, SPI_MODE));
digitalWrite(_cs, 0);
digitalWrite(_dc, 0);
SPI.transfer(TFT_RAMWR);
setArea(0, 0, TFT_REALWIDTH-1, TFT_REALHEIGHT-1);
//digitalWrite(_dc, 0);
//SPI.transfer(TFT_RAMWR);
int i,j;
for (j=0; j<TFT_REALHEIGHT; j++)
{
for (i=0; i<TFT_REALWIDTH; i++) {
digitalWrite(_dc, 1);
//digitalWrite(_dc, 1);
SPI.transfer16(color);
}
}
@ -643,24 +677,43 @@ void TFT_T_DMA::fillScreenNoDma(uint16_t color) {
digitalWrite(_dc, 1);
#endif
digitalWrite(_cs, 1);
SPI.endTransaction();
setArea(0, 0, (TFT_REALWIDTH-1), (TFT_REALHEIGHT-1));
SPI.endTransaction();
}
void TFT_T_DMA::writeScreenNoDma(const uint16_t *pcolors) {
setArea(0, 0, TFT_WIDTH-1, TFT_HEIGHT-1);
void TFT_T_DMA::drawRectNoDma(int16_t x, int16_t y, int16_t w, int16_t h, uint16_t color) {
SPI.beginTransaction(SPISettings(SPICLOCK, MSBFIRST, SPI_MODE));
digitalWrite(_cs, 0);
setArea(x,y,x+w-1,y+h-1);
// digitalWrite(_dc, 0);
// SPI.transfer(TFT_RAMWR);
int i;
for (i=0; i<(w*h); i++)
{
//digitalWrite(_dc, 1);
SPI.transfer16(color);
}
#ifdef ILI9341
digitalWrite(_dc, 0);
SPI.transfer(TFT_RAMWR);
SPI.transfer(ILI9341_SLPOUT);
digitalWrite(_dc, 1);
#endif
digitalWrite(_cs, 1);
setArea(0, 0, (TFT_REALWIDTH-1), (TFT_REALHEIGHT-1));
SPI.endTransaction();
}
void TFT_T_DMA::writeScreenNoDma(const uint16_t *pcolors) {
SPI.beginTransaction(SPISettings(SPICLOCK, MSBFIRST, SPI_MODE));
digitalWrite(_cs, 0);
setArea(0, 0, TFT_WIDTH-1, TFT_HEIGHT-1);
//digitalWrite(_dc, 0);
//SPI.transfer(TFT_RAMWR);
int i,j;
for (j=0; j<240; j++)
{
for (i=0; i<TFT_WIDTH; i++) {
digitalWrite(_dc, 1);
// digitalWrite(_dc, 1);
SPI.transfer16(*pcolors++);
}
}
@ -670,9 +723,8 @@ void TFT_T_DMA::writeScreenNoDma(const uint16_t *pcolors) {
digitalWrite(_dc, 1);
#endif
digitalWrite(_cs, 1);
SPI.endTransaction();
setArea(0, 0, (TFT_REALWIDTH-1), (TFT_REALHEIGHT-1));
SPI.endTransaction();
}
void TFT_T_DMA::drawSpriteNoDma(int16_t x, int16_t y, const uint16_t *bitmap) {
@ -723,12 +775,12 @@ void TFT_T_DMA::drawSpriteNoDma(int16_t x, int16_t y, const uint16_t *bitmap, ui
}
}
setArea(arx, ary, arx+arw-1, ary+arh-1);
SPI.beginTransaction(SPISettings(SPICLOCK, MSBFIRST, SPI_MODE));
digitalWrite(_cs, 0);
digitalWrite(_dc, 0);
SPI.transfer(TFT_RAMWR);
setArea(arx, ary, arx+arw-1, ary+arh-1);
//digitalWrite(_dc, 0);
//SPI.transfer(TFT_RAMWR);
bitmap = bitmap + bmp_offy*w + bmp_offx;
for (int row=0;row<arh; row++)
@ -737,7 +789,7 @@ void TFT_T_DMA::drawSpriteNoDma(int16_t x, int16_t y, const uint16_t *bitmap, ui
for (int col=0;col<arw; col++)
{
uint16_t color = *bmp_ptr++;
digitalWrite(_dc, 1);
// digitalWrite(_dc, 1);
SPI.transfer16(color);
}
bitmap += w;
@ -747,9 +799,9 @@ void TFT_T_DMA::drawSpriteNoDma(int16_t x, int16_t y, const uint16_t *bitmap, ui
SPI.transfer(ILI9341_SLPOUT);
digitalWrite(_dc, 1);
#endif
setArea(0, 0, TFT_REALWIDTH-1, TFT_REALHEIGHT-1);
digitalWrite(_cs, 1);
SPI.endTransaction();
setArea(0, 0, TFT_REALWIDTH-1, TFT_REALHEIGHT-1);
}
void TFT_T_DMA::drawTextNoDma(int16_t x, int16_t y, const char * text, uint16_t fgcolor, uint16_t bgcolor, bool doublesize) {
@ -757,20 +809,19 @@ void TFT_T_DMA::drawTextNoDma(int16_t x, int16_t y, const char * text, uint16_t
while ((c = *text++)) {
const unsigned char * charpt=&font8x8[c][0];
setArea(x,y,x+7,y+(doublesize?15:7));
//SPI.beginTransaction(SPISettings(SPICLOCK, MSBFIRST, SPI_MODE));
SPI.beginTransaction(SPISettings(SPICLOCK, MSBFIRST, SPI_MODE));
digitalWrite(_cs, 0);
setArea(x,y,x+7,y+(doublesize?15:7));
//digitalWrite(_dc, 0);
//SPI.transfer(TFT_RAMWR);
digitalWrite(_dc, 1);
//digitalWrite(_dc, 1);
for (int i=0;i<8;i++)
{
unsigned char bits;
if (doublesize) {
bits = *charpt;
digitalWrite(_dc, 1);
//digitalWrite(_dc, 1);
if (bits&0x01) SPI.transfer16(fgcolor);
else SPI.transfer16(bgcolor);
bits = bits >> 1;
@ -796,7 +847,7 @@ void TFT_T_DMA::drawTextNoDma(int16_t x, int16_t y, const char * text, uint16_t
else SPI.transfer16(bgcolor);
}
bits = *charpt++;
digitalWrite(_dc, 1);
//digitalWrite(_dc, 1);
if (bits&0x01) SPI.transfer16(fgcolor);
else SPI.transfer16(bgcolor);
bits = bits >> 1;
@ -831,35 +882,18 @@ void TFT_T_DMA::drawTextNoDma(int16_t x, int16_t y, const char * text, uint16_t
SPI.endTransaction();
}
setArea(0, 0, (TFT_REALWIDTH-1), (TFT_REALHEIGHT-1));
}
void TFT_T_DMA::drawRectNoDma(int16_t x, int16_t y, int16_t w, int16_t h, uint16_t color) {
setArea(x,y,x+w-1,y+h-1);
SPI.beginTransaction(SPISettings(SPICLOCK, MSBFIRST, SPI_MODE));
digitalWrite(_cs, 0);
digitalWrite(_dc, 0);
SPI.transfer(TFT_RAMWR);
int i;
for (i=0; i<(w*h); i++)
{
digitalWrite(_dc, 1);
SPI.transfer16(color);
}
#ifdef ILI9341
digitalWrite(_dc, 0);
SPI.transfer(ILI9341_SLPOUT);
digitalWrite(_dc, 1);
#endif
setArea(0, 0, (TFT_REALWIDTH-1), (TFT_REALHEIGHT-1));
digitalWrite(_cs, 1);
SPI.endTransaction();
setArea(0, 0, (TFT_REALWIDTH-1), (TFT_REALHEIGHT-1));
}
/***********************************************************************************************
DMA functions
***********************************************************************************************/

View file

@ -21,18 +21,15 @@
#define B16(rgb) ((rgb<<3)&0xf8)
#define TFT_HEIGHT 192
#ifdef ILI9341
#define TFT_WIDTH 320
#define TFT_REALWIDTH 320
#define TFT_REALHEIGHT 240
#endif
#ifdef ST7789
#ifdef LOHRES
#define TFT_WIDTH 240
#define TFT_REALWIDTH 240
#define TFT_REALHEIGHT 240
#else
#define TFT_WIDTH 320
#define TFT_REALWIDTH 320
#endif
#define TFT_HEIGHT 192
#define TFT_REALHEIGHT 240
#define LINES_PER_BLOCK 64
#define NR_OF_BLOCK 4

View file

@ -1,11 +1,7 @@
#include "platform_config.h"
#ifdef TEENSYBOY
#define ST7789 1
#define ROTATE_SCREEN 1
#else
#define ILI9341 1
#endif
//#define ST7789 1
//#define ILI9341 1
#define TFT_LINEARINT 1
#define LINEARINT_HACK 1

View file

@ -1410,7 +1410,7 @@ void emu_init(void)
emu_InitJoysticks();
#ifdef TEENSYBOY
#ifdef SWAP_JOYSTICK
joySwapped = true;
#else
joySwapped = false;

View file

@ -2,31 +2,17 @@
#define IOPINS_H
#include "platform_config.h"
#include "tft_t_dma_config.h"
#ifndef OLD_LAYOUT
#ifdef ST7789
// ST7789
#define TFT_SCLK 13
#define TFT_MOSI 11
#define TFT_MISO 12
#define TFT_TOUCH_CS 255
#define TFT_TOUCH_INT 255
#define TFT_DC 9
#define TFT_CS 255
#define TFT_RST 23
#else
// ILI9341
#define TFT_SCLK 13
#define TFT_MOSI 11
#define TFT_MISO 12
#define TFT_TOUCH_CS 255 //38
#define TFT_TOUCH_INT 255 //37
#define TFT_DC 9
#define TFT_CS 23
#define TFT_RST 255
#endif
#define TFT_CS 22 // 255 for LORES ST7789 (NO CS)
#define TFT_RST 23 // 255 for ILI/ST if connected to 3.3V
// PSRAM
#define PSRAM_CS 36
@ -38,10 +24,10 @@
#define SD_SCLK 13
#define SD_MOSI 12
#define SD_MISO 11
#ifdef TEENSYBOY
#define SD_CS BUILTIN_SDCARD
#ifdef EXTERNAL_SD
#define SD_CS 8
#else
#define SD_CS 5
#define SD_CS BUILTIN_SDCARD
#endif
// I2C keyboard
@ -54,17 +40,15 @@
#define PIN_JOY2_BTN 17
#define PIN_KEY_USER1 3 //34
#define PIN_KEY_USER2 4 //35
//#define PIN_KEY_USER3 255
//#define PIN_KEY_USER4 255
//#define PIN_KEY_USER3 33
//#define PIN_KEY_USER4 39
#ifdef TEENSYBOY
// Second joystick
#define PIN_JOY1_BTN 2
#define PIN_JOY1_1 14 // UP
#define PIN_JOY1_2 7 // DOWN
#define PIN_JOY1_3 6 // RIGHT
#define PIN_JOY1_4 5 // LEFT
#endif
#else
// OLD LAYOUT!!!!

View file

@ -2,7 +2,13 @@
#define _PLATFORM_CONFIG_H_
//#define OLD_LAYOUT 1
//#define TEENSYBOY 1
#define ILI9341 1
//#define ST7789 1
//#define SWAP_JOYSTICK 1
//#define LOHRES 1
//#define ROTATE_SCREEN 1
#define EXTERNAL_SD 1
#define HAS_PSRAM 1

View file

@ -37,7 +37,7 @@ enum
FREQ_44Khz
};
#define MIXBUFFER_SIZE 8192
#define MIXBUFFER_SIZE 1024 //8192
#define SCREEN_START_CYCLE 96 /* Cycle first normal pixel appears on */
#define SCANLINES_PER_FRAME 313 /* Number of scan lines per frame */
#define CYCLES_PER_LINE 512 /* Cycles per horiztonal line scan */

View file

@ -107,7 +107,6 @@ PROGMEM static const uint8_t init_commands[] = {
#endif
};
static void dmaInterrupt() {
dmatx.clearInterrupt();
curTransfer++;
@ -220,8 +219,9 @@ TFT_T_DMA::TFT_T_DMA(uint8_t cs, uint8_t dc, uint8_t rst, uint8_t mosi, uint8_t
void TFT_T_DMA::setArea(uint16_t x1,uint16_t y1,uint16_t x2,uint16_t y2) {
int dx=0;
int dy=0;
#ifdef ST7789
if (TFT_REALWIDTH == TFT_REALHEIGHT)
{
#ifdef ROTATE_SCREEN
if (!flipped) {
dy += 80;
@ -231,7 +231,29 @@ void TFT_T_DMA::setArea(uint16_t x1,uint16_t y1,uint16_t x2,uint16_t y2) {
dx += 80;
}
#endif
}
#endif
digitalWrite(_dc, 0);
SPI.transfer(TFT_CASET);
digitalWrite(_dc, 1);
SPI.transfer16(x1+dx);
digitalWrite(_dc, 1);
SPI.transfer16(x2+dx);
digitalWrite(_dc, 0);
SPI.transfer(TFT_PASET);
digitalWrite(_dc, 1);
SPI.transfer16(y1+dy);
digitalWrite(_dc, 1);
SPI.transfer16(y2+dy);
digitalWrite(_dc, 0);
SPI.transfer(TFT_RAMWR);
digitalWrite(_dc, 1);
return;
SPI.beginTransaction(SPISettings(SPICLOCK, MSBFIRST, SPI_MODE));
digitalWrite(_cs, 0);
@ -257,6 +279,8 @@ void TFT_T_DMA::setArea(uint16_t x1,uint16_t y1,uint16_t x2,uint16_t y2) {
}
void TFT_T_DMA::begin(void) {
SPI.setMOSI(_mosi);
SPI.setMISO(_miso);
@ -264,16 +288,17 @@ void TFT_T_DMA::begin(void) {
SPI.begin();
// Initialize display
if (_rst < 255) { // toggle RST low to reset
if (_rst != 0xff) {
pinMode(_rst, OUTPUT);
digitalWrite(_rst, HIGH);
delay(5);
delay(100);
digitalWrite(_rst, LOW);
delay(20);
delay(100);
digitalWrite(_rst, HIGH);
delay(120);
delay(200);
}
SPI.beginTransaction(SPISettings(SPICLOCK, MSBFIRST, SPI_MODE));
const uint8_t *addr = init_commands;
digitalWrite(_cs, 0);
@ -307,7 +332,6 @@ void TFT_T_DMA::begin(void) {
SPI.transfer(ILI9341_DISPON);
digitalWrite(_dc, 1);
digitalWrite(_cs, 1);
SPI.endTransaction();
#endif
#ifdef ST7789
uint8_t numCommands, numArgs;
@ -332,22 +356,31 @@ void TFT_T_DMA::begin(void) {
if(ms) {
ms = *addr++; // Read post-command delay time (ms)
if(ms == 255) ms = 500; // If 255, delay for 500 ms
SPI.endTransaction();
digitalWrite(_dc, 1);
digitalWrite(_cs, 1);
SPI.endTransaction();
delay(ms);
//beginSPITransaction();
SPI.beginTransaction(SPISettings(SPICLOCK, MSBFIRST, SPI_MODE));
digitalWrite(_cs, 0);
}
}
digitalWrite(_cs, 1);
#endif
setArea(0, 0, TFT_REALWIDTH-1, TFT_REALHEIGHT-1);
SPI.endTransaction();
cancelled = false;
#ifdef FLIP_SCREEN
flipscreen(true);
#else
flipscreen(false);
#endif
#ifdef ST7789
if (TFT_REALWIDTH != TFT_REALHEIGHT)
{
flipscreen(true);
}
#endif
};
@ -434,6 +467,7 @@ void TFT_T_DMA::startDMA(void) {
#endif
dmatx = dmasettings[0];
digitalWrite(_cs, 0);
setArea((TFT_REALWIDTH-TFT_WIDTH)/2, (TFT_REALHEIGHT-TFT_HEIGHT)/2, (TFT_REALWIDTH-TFT_WIDTH)/2+TFT_WIDTH-1, (TFT_REALHEIGHT-TFT_HEIGHT)/2+TFT_HEIGHT-1);
digitalWrite(_dc, 0);
SPI.transfer(TFT_RAMWR);
digitalWrite(_dc, 1);
@ -623,17 +657,17 @@ void TFT_T_DMA::readCal(uint16_t * oX, uint16_t * oY, uint16_t * oZ) {
No DMA functions
***********************************************************************************************/
void TFT_T_DMA::fillScreenNoDma(uint16_t color) {
setArea(0, 0, TFT_REALWIDTH-1, TFT_REALHEIGHT-1);
SPI.beginTransaction(SPISettings(SPICLOCK, MSBFIRST, SPI_MODE));
digitalWrite(_cs, 0);
digitalWrite(_dc, 0);
SPI.transfer(TFT_RAMWR);
setArea(0, 0, TFT_REALWIDTH-1, TFT_REALHEIGHT-1);
//digitalWrite(_dc, 0);
//SPI.transfer(TFT_RAMWR);
int i,j;
for (j=0; j<TFT_REALHEIGHT; j++)
{
for (i=0; i<TFT_REALWIDTH; i++) {
digitalWrite(_dc, 1);
//digitalWrite(_dc, 1);
SPI.transfer16(color);
}
}
@ -643,24 +677,43 @@ void TFT_T_DMA::fillScreenNoDma(uint16_t color) {
digitalWrite(_dc, 1);
#endif
digitalWrite(_cs, 1);
SPI.endTransaction();
setArea(0, 0, (TFT_REALWIDTH-1), (TFT_REALHEIGHT-1));
SPI.endTransaction();
}
void TFT_T_DMA::writeScreenNoDma(const uint16_t *pcolors) {
setArea(0, 0, TFT_WIDTH-1, TFT_HEIGHT-1);
void TFT_T_DMA::drawRectNoDma(int16_t x, int16_t y, int16_t w, int16_t h, uint16_t color) {
SPI.beginTransaction(SPISettings(SPICLOCK, MSBFIRST, SPI_MODE));
digitalWrite(_cs, 0);
setArea(x,y,x+w-1,y+h-1);
// digitalWrite(_dc, 0);
// SPI.transfer(TFT_RAMWR);
int i;
for (i=0; i<(w*h); i++)
{
//digitalWrite(_dc, 1);
SPI.transfer16(color);
}
#ifdef ILI9341
digitalWrite(_dc, 0);
SPI.transfer(TFT_RAMWR);
SPI.transfer(ILI9341_SLPOUT);
digitalWrite(_dc, 1);
#endif
digitalWrite(_cs, 1);
setArea(0, 0, (TFT_REALWIDTH-1), (TFT_REALHEIGHT-1));
SPI.endTransaction();
}
void TFT_T_DMA::writeScreenNoDma(const uint16_t *pcolors) {
SPI.beginTransaction(SPISettings(SPICLOCK, MSBFIRST, SPI_MODE));
digitalWrite(_cs, 0);
setArea(0, 0, TFT_WIDTH-1, TFT_HEIGHT-1);
//digitalWrite(_dc, 0);
//SPI.transfer(TFT_RAMWR);
int i,j;
for (j=0; j<240; j++)
{
for (i=0; i<TFT_WIDTH; i++) {
digitalWrite(_dc, 1);
// digitalWrite(_dc, 1);
SPI.transfer16(*pcolors++);
}
}
@ -670,9 +723,8 @@ void TFT_T_DMA::writeScreenNoDma(const uint16_t *pcolors) {
digitalWrite(_dc, 1);
#endif
digitalWrite(_cs, 1);
SPI.endTransaction();
setArea(0, 0, (TFT_REALWIDTH-1), (TFT_REALHEIGHT-1));
SPI.endTransaction();
}
void TFT_T_DMA::drawSpriteNoDma(int16_t x, int16_t y, const uint16_t *bitmap) {
@ -723,12 +775,12 @@ void TFT_T_DMA::drawSpriteNoDma(int16_t x, int16_t y, const uint16_t *bitmap, ui
}
}
setArea(arx, ary, arx+arw-1, ary+arh-1);
SPI.beginTransaction(SPISettings(SPICLOCK, MSBFIRST, SPI_MODE));
digitalWrite(_cs, 0);
digitalWrite(_dc, 0);
SPI.transfer(TFT_RAMWR);
setArea(arx, ary, arx+arw-1, ary+arh-1);
//digitalWrite(_dc, 0);
//SPI.transfer(TFT_RAMWR);
bitmap = bitmap + bmp_offy*w + bmp_offx;
for (int row=0;row<arh; row++)
@ -737,7 +789,7 @@ void TFT_T_DMA::drawSpriteNoDma(int16_t x, int16_t y, const uint16_t *bitmap, ui
for (int col=0;col<arw; col++)
{
uint16_t color = *bmp_ptr++;
digitalWrite(_dc, 1);
// digitalWrite(_dc, 1);
SPI.transfer16(color);
}
bitmap += w;
@ -747,9 +799,9 @@ void TFT_T_DMA::drawSpriteNoDma(int16_t x, int16_t y, const uint16_t *bitmap, ui
SPI.transfer(ILI9341_SLPOUT);
digitalWrite(_dc, 1);
#endif
setArea(0, 0, TFT_REALWIDTH-1, TFT_REALHEIGHT-1);
digitalWrite(_cs, 1);
SPI.endTransaction();
setArea(0, 0, TFT_REALWIDTH-1, TFT_REALHEIGHT-1);
}
void TFT_T_DMA::drawTextNoDma(int16_t x, int16_t y, const char * text, uint16_t fgcolor, uint16_t bgcolor, bool doublesize) {
@ -757,20 +809,19 @@ void TFT_T_DMA::drawTextNoDma(int16_t x, int16_t y, const char * text, uint16_t
while ((c = *text++)) {
const unsigned char * charpt=&font8x8[c][0];
setArea(x,y,x+7,y+(doublesize?15:7));
//SPI.beginTransaction(SPISettings(SPICLOCK, MSBFIRST, SPI_MODE));
SPI.beginTransaction(SPISettings(SPICLOCK, MSBFIRST, SPI_MODE));
digitalWrite(_cs, 0);
setArea(x,y,x+7,y+(doublesize?15:7));
//digitalWrite(_dc, 0);
//SPI.transfer(TFT_RAMWR);
digitalWrite(_dc, 1);
//digitalWrite(_dc, 1);
for (int i=0;i<8;i++)
{
unsigned char bits;
if (doublesize) {
bits = *charpt;
digitalWrite(_dc, 1);
//digitalWrite(_dc, 1);
if (bits&0x01) SPI.transfer16(fgcolor);
else SPI.transfer16(bgcolor);
bits = bits >> 1;
@ -796,7 +847,7 @@ void TFT_T_DMA::drawTextNoDma(int16_t x, int16_t y, const char * text, uint16_t
else SPI.transfer16(bgcolor);
}
bits = *charpt++;
digitalWrite(_dc, 1);
//digitalWrite(_dc, 1);
if (bits&0x01) SPI.transfer16(fgcolor);
else SPI.transfer16(bgcolor);
bits = bits >> 1;
@ -831,35 +882,18 @@ void TFT_T_DMA::drawTextNoDma(int16_t x, int16_t y, const char * text, uint16_t
SPI.endTransaction();
}
setArea(0, 0, (TFT_REALWIDTH-1), (TFT_REALHEIGHT-1));
}
void TFT_T_DMA::drawRectNoDma(int16_t x, int16_t y, int16_t w, int16_t h, uint16_t color) {
setArea(x,y,x+w-1,y+h-1);
SPI.beginTransaction(SPISettings(SPICLOCK, MSBFIRST, SPI_MODE));
digitalWrite(_cs, 0);
digitalWrite(_dc, 0);
SPI.transfer(TFT_RAMWR);
int i;
for (i=0; i<(w*h); i++)
{
digitalWrite(_dc, 1);
SPI.transfer16(color);
}
#ifdef ILI9341
digitalWrite(_dc, 0);
SPI.transfer(ILI9341_SLPOUT);
digitalWrite(_dc, 1);
#endif
setArea(0, 0, (TFT_REALWIDTH-1), (TFT_REALHEIGHT-1));
digitalWrite(_cs, 1);
SPI.endTransaction();
setArea(0, 0, (TFT_REALWIDTH-1), (TFT_REALHEIGHT-1));
}
/***********************************************************************************************
DMA functions
***********************************************************************************************/

View file

@ -21,18 +21,16 @@
#define B16(rgb) ((rgb<<3)&0xf8)
#define TFT_HEIGHT 200
#ifdef ILI9341
#define TFT_WIDTH 320
#define TFT_REALWIDTH 320
#define TFT_REALHEIGHT 240
#endif
#ifdef ST7789
#ifdef LOHRES
#define TFT_WIDTH 240
#define TFT_REALWIDTH 240
#define TFT_REALHEIGHT 240
#else
#define TFT_WIDTH 320
#define TFT_REALWIDTH 320
#endif
#define TFT_HEIGHT 200
#define TFT_REALHEIGHT 240
#define LINES_PER_BLOCK 64
#define NR_OF_BLOCK 4

View file

@ -1,11 +1,7 @@
#include "platform_config.h"
#ifdef TEENSYBOY
#define ST7789 1
#define ROTATE_SCREEN 1
#else
#define ILI9341 1
#endif
//#define ST7789 1
//#define ILI9341 1
#define TFT_LINEARINT 1
#define LINEARINT_HACK 1

View file

@ -1373,7 +1373,7 @@ void emu_init(void)
emu_InitJoysticks();
#ifdef TEENSYBOY
#ifdef SWAP_JOYSTICK
joySwapped = true;
#else
joySwapped = false;

View file

@ -2,31 +2,17 @@
#define IOPINS_H
#include "platform_config.h"
#include "tft_t_dma_config.h"
#ifndef OLD_LAYOUT
#ifdef ST7789
// ST7789
#define TFT_SCLK 13
#define TFT_MOSI 11
#define TFT_MISO 12
#define TFT_TOUCH_CS 255
#define TFT_TOUCH_INT 255
#define TFT_DC 9
#define TFT_CS 255
#define TFT_RST 23
#else
// ILI9341
#define TFT_SCLK 13
#define TFT_MOSI 11
#define TFT_MISO 12
#define TFT_TOUCH_CS 255 //38
#define TFT_TOUCH_INT 255 //37
#define TFT_DC 9
#define TFT_CS 23
#define TFT_RST 255
#endif
#define TFT_CS 22 // 255 for LORES ST7789 (NO CS)
#define TFT_RST 23 // 255 for ILI/ST if connected to 3.3V
// PSRAM
#define PSRAM_CS 36
@ -38,10 +24,10 @@
#define SD_SCLK 13
#define SD_MOSI 12
#define SD_MISO 11
#ifdef TEENSYBOY
#define SD_CS BUILTIN_SDCARD
#ifdef EXTERNAL_SD
#define SD_CS 8
#else
#define SD_CS 5
#define SD_CS BUILTIN_SDCARD
#endif
// I2C keyboard
@ -54,17 +40,15 @@
#define PIN_JOY2_BTN 17
#define PIN_KEY_USER1 3 //34
#define PIN_KEY_USER2 4 //35
//#define PIN_KEY_USER3 255
//#define PIN_KEY_USER4 255
//#define PIN_KEY_USER3 33
//#define PIN_KEY_USER4 39
#ifdef TEENSYBOY
// Second joystick
#define PIN_JOY1_BTN 2
#define PIN_JOY1_1 14 // UP
#define PIN_JOY1_2 7 // DOWN
#define PIN_JOY1_3 6 // RIGHT
#define PIN_JOY1_4 5 // LEFT
#endif
#else
// OLD LAYOUT!!!!

View file

@ -2,9 +2,15 @@
#define _PLATFORM_CONFIG_H_
//#define OLD_LAYOUT 1
//#define TEENSYBOY 1
//#define HAS_PSRAM 1
#define ILI9341 1
//#define ST7789 1
//#define SWAP_JOYSTICK 1
//#define LOHRES 1
//#define ROTATE_SCREEN 1
#define EXTERNAL_SD 1
#define HAS_PSRAM 1
//#define USE_SDFAT 1
//#define SD_FAT_TYPE 1

View file

@ -107,7 +107,6 @@ PROGMEM static const uint8_t init_commands[] = {
#endif
};
static void dmaInterrupt() {
dmatx.clearInterrupt();
curTransfer++;
@ -220,8 +219,9 @@ TFT_T_DMA::TFT_T_DMA(uint8_t cs, uint8_t dc, uint8_t rst, uint8_t mosi, uint8_t
void TFT_T_DMA::setArea(uint16_t x1,uint16_t y1,uint16_t x2,uint16_t y2) {
int dx=0;
int dy=0;
#ifdef ST7789
if (TFT_REALWIDTH == TFT_REALHEIGHT)
{
#ifdef ROTATE_SCREEN
if (!flipped) {
dy += 80;
@ -231,7 +231,29 @@ void TFT_T_DMA::setArea(uint16_t x1,uint16_t y1,uint16_t x2,uint16_t y2) {
dx += 80;
}
#endif
}
#endif
digitalWrite(_dc, 0);
SPI.transfer(TFT_CASET);
digitalWrite(_dc, 1);
SPI.transfer16(x1+dx);
digitalWrite(_dc, 1);
SPI.transfer16(x2+dx);
digitalWrite(_dc, 0);
SPI.transfer(TFT_PASET);
digitalWrite(_dc, 1);
SPI.transfer16(y1+dy);
digitalWrite(_dc, 1);
SPI.transfer16(y2+dy);
digitalWrite(_dc, 0);
SPI.transfer(TFT_RAMWR);
digitalWrite(_dc, 1);
return;
SPI.beginTransaction(SPISettings(SPICLOCK, MSBFIRST, SPI_MODE));
digitalWrite(_cs, 0);
@ -257,6 +279,8 @@ void TFT_T_DMA::setArea(uint16_t x1,uint16_t y1,uint16_t x2,uint16_t y2) {
}
void TFT_T_DMA::begin(void) {
SPI.setMOSI(_mosi);
SPI.setMISO(_miso);
@ -264,16 +288,17 @@ void TFT_T_DMA::begin(void) {
SPI.begin();
// Initialize display
if (_rst < 255) { // toggle RST low to reset
if (_rst != 0xff) {
pinMode(_rst, OUTPUT);
digitalWrite(_rst, HIGH);
delay(5);
delay(100);
digitalWrite(_rst, LOW);
delay(20);
delay(100);
digitalWrite(_rst, HIGH);
delay(120);
delay(200);
}
SPI.beginTransaction(SPISettings(SPICLOCK, MSBFIRST, SPI_MODE));
const uint8_t *addr = init_commands;
digitalWrite(_cs, 0);
@ -307,7 +332,6 @@ void TFT_T_DMA::begin(void) {
SPI.transfer(ILI9341_DISPON);
digitalWrite(_dc, 1);
digitalWrite(_cs, 1);
SPI.endTransaction();
#endif
#ifdef ST7789
uint8_t numCommands, numArgs;
@ -332,22 +356,31 @@ void TFT_T_DMA::begin(void) {
if(ms) {
ms = *addr++; // Read post-command delay time (ms)
if(ms == 255) ms = 500; // If 255, delay for 500 ms
SPI.endTransaction();
digitalWrite(_dc, 1);
digitalWrite(_cs, 1);
SPI.endTransaction();
delay(ms);
//beginSPITransaction();
SPI.beginTransaction(SPISettings(SPICLOCK, MSBFIRST, SPI_MODE));
digitalWrite(_cs, 0);
}
}
digitalWrite(_cs, 1);
#endif
setArea(0, 0, TFT_REALWIDTH-1, TFT_REALHEIGHT-1);
SPI.endTransaction();
cancelled = false;
#ifdef FLIP_SCREEN
flipscreen(true);
#else
flipscreen(false);
#endif
#ifdef ST7789
if (TFT_REALWIDTH != TFT_REALHEIGHT)
{
flipscreen(true);
}
#endif
};
@ -434,6 +467,7 @@ void TFT_T_DMA::startDMA(void) {
#endif
dmatx = dmasettings[0];
digitalWrite(_cs, 0);
setArea((TFT_REALWIDTH-TFT_WIDTH)/2, (TFT_REALHEIGHT-TFT_HEIGHT)/2, (TFT_REALWIDTH-TFT_WIDTH)/2+TFT_WIDTH-1, (TFT_REALHEIGHT-TFT_HEIGHT)/2+TFT_HEIGHT-1);
digitalWrite(_dc, 0);
SPI.transfer(TFT_RAMWR);
digitalWrite(_dc, 1);
@ -623,17 +657,17 @@ void TFT_T_DMA::readCal(uint16_t * oX, uint16_t * oY, uint16_t * oZ) {
No DMA functions
***********************************************************************************************/
void TFT_T_DMA::fillScreenNoDma(uint16_t color) {
setArea(0, 0, TFT_REALWIDTH-1, TFT_REALHEIGHT-1);
SPI.beginTransaction(SPISettings(SPICLOCK, MSBFIRST, SPI_MODE));
digitalWrite(_cs, 0);
digitalWrite(_dc, 0);
SPI.transfer(TFT_RAMWR);
setArea(0, 0, TFT_REALWIDTH-1, TFT_REALHEIGHT-1);
//digitalWrite(_dc, 0);
//SPI.transfer(TFT_RAMWR);
int i,j;
for (j=0; j<TFT_REALHEIGHT; j++)
{
for (i=0; i<TFT_REALWIDTH; i++) {
digitalWrite(_dc, 1);
//digitalWrite(_dc, 1);
SPI.transfer16(color);
}
}
@ -643,24 +677,43 @@ void TFT_T_DMA::fillScreenNoDma(uint16_t color) {
digitalWrite(_dc, 1);
#endif
digitalWrite(_cs, 1);
SPI.endTransaction();
setArea(0, 0, (TFT_REALWIDTH-1), (TFT_REALHEIGHT-1));
SPI.endTransaction();
}
void TFT_T_DMA::writeScreenNoDma(const uint16_t *pcolors) {
setArea(0, 0, TFT_WIDTH-1, TFT_HEIGHT-1);
void TFT_T_DMA::drawRectNoDma(int16_t x, int16_t y, int16_t w, int16_t h, uint16_t color) {
SPI.beginTransaction(SPISettings(SPICLOCK, MSBFIRST, SPI_MODE));
digitalWrite(_cs, 0);
setArea(x,y,x+w-1,y+h-1);
// digitalWrite(_dc, 0);
// SPI.transfer(TFT_RAMWR);
int i;
for (i=0; i<(w*h); i++)
{
//digitalWrite(_dc, 1);
SPI.transfer16(color);
}
#ifdef ILI9341
digitalWrite(_dc, 0);
SPI.transfer(TFT_RAMWR);
SPI.transfer(ILI9341_SLPOUT);
digitalWrite(_dc, 1);
#endif
digitalWrite(_cs, 1);
setArea(0, 0, (TFT_REALWIDTH-1), (TFT_REALHEIGHT-1));
SPI.endTransaction();
}
void TFT_T_DMA::writeScreenNoDma(const uint16_t *pcolors) {
SPI.beginTransaction(SPISettings(SPICLOCK, MSBFIRST, SPI_MODE));
digitalWrite(_cs, 0);
setArea(0, 0, TFT_WIDTH-1, TFT_HEIGHT-1);
//digitalWrite(_dc, 0);
//SPI.transfer(TFT_RAMWR);
int i,j;
for (j=0; j<240; j++)
{
for (i=0; i<TFT_WIDTH; i++) {
digitalWrite(_dc, 1);
// digitalWrite(_dc, 1);
SPI.transfer16(*pcolors++);
}
}
@ -670,9 +723,8 @@ void TFT_T_DMA::writeScreenNoDma(const uint16_t *pcolors) {
digitalWrite(_dc, 1);
#endif
digitalWrite(_cs, 1);
SPI.endTransaction();
setArea(0, 0, (TFT_REALWIDTH-1), (TFT_REALHEIGHT-1));
SPI.endTransaction();
}
void TFT_T_DMA::drawSpriteNoDma(int16_t x, int16_t y, const uint16_t *bitmap) {
@ -723,12 +775,12 @@ void TFT_T_DMA::drawSpriteNoDma(int16_t x, int16_t y, const uint16_t *bitmap, ui
}
}
setArea(arx, ary, arx+arw-1, ary+arh-1);
SPI.beginTransaction(SPISettings(SPICLOCK, MSBFIRST, SPI_MODE));
digitalWrite(_cs, 0);
digitalWrite(_dc, 0);
SPI.transfer(TFT_RAMWR);
setArea(arx, ary, arx+arw-1, ary+arh-1);
//digitalWrite(_dc, 0);
//SPI.transfer(TFT_RAMWR);
bitmap = bitmap + bmp_offy*w + bmp_offx;
for (int row=0;row<arh; row++)
@ -737,7 +789,7 @@ void TFT_T_DMA::drawSpriteNoDma(int16_t x, int16_t y, const uint16_t *bitmap, ui
for (int col=0;col<arw; col++)
{
uint16_t color = *bmp_ptr++;
digitalWrite(_dc, 1);
// digitalWrite(_dc, 1);
SPI.transfer16(color);
}
bitmap += w;
@ -747,9 +799,9 @@ void TFT_T_DMA::drawSpriteNoDma(int16_t x, int16_t y, const uint16_t *bitmap, ui
SPI.transfer(ILI9341_SLPOUT);
digitalWrite(_dc, 1);
#endif
setArea(0, 0, TFT_REALWIDTH-1, TFT_REALHEIGHT-1);
digitalWrite(_cs, 1);
SPI.endTransaction();
setArea(0, 0, TFT_REALWIDTH-1, TFT_REALHEIGHT-1);
}
void TFT_T_DMA::drawTextNoDma(int16_t x, int16_t y, const char * text, uint16_t fgcolor, uint16_t bgcolor, bool doublesize) {
@ -757,20 +809,19 @@ void TFT_T_DMA::drawTextNoDma(int16_t x, int16_t y, const char * text, uint16_t
while ((c = *text++)) {
const unsigned char * charpt=&font8x8[c][0];
setArea(x,y,x+7,y+(doublesize?15:7));
//SPI.beginTransaction(SPISettings(SPICLOCK, MSBFIRST, SPI_MODE));
SPI.beginTransaction(SPISettings(SPICLOCK, MSBFIRST, SPI_MODE));
digitalWrite(_cs, 0);
setArea(x,y,x+7,y+(doublesize?15:7));
//digitalWrite(_dc, 0);
//SPI.transfer(TFT_RAMWR);
digitalWrite(_dc, 1);
//digitalWrite(_dc, 1);
for (int i=0;i<8;i++)
{
unsigned char bits;
if (doublesize) {
bits = *charpt;
digitalWrite(_dc, 1);
//digitalWrite(_dc, 1);
if (bits&0x01) SPI.transfer16(fgcolor);
else SPI.transfer16(bgcolor);
bits = bits >> 1;
@ -796,7 +847,7 @@ void TFT_T_DMA::drawTextNoDma(int16_t x, int16_t y, const char * text, uint16_t
else SPI.transfer16(bgcolor);
}
bits = *charpt++;
digitalWrite(_dc, 1);
//digitalWrite(_dc, 1);
if (bits&0x01) SPI.transfer16(fgcolor);
else SPI.transfer16(bgcolor);
bits = bits >> 1;
@ -831,35 +882,18 @@ void TFT_T_DMA::drawTextNoDma(int16_t x, int16_t y, const char * text, uint16_t
SPI.endTransaction();
}
setArea(0, 0, (TFT_REALWIDTH-1), (TFT_REALHEIGHT-1));
}
void TFT_T_DMA::drawRectNoDma(int16_t x, int16_t y, int16_t w, int16_t h, uint16_t color) {
setArea(x,y,x+w-1,y+h-1);
SPI.beginTransaction(SPISettings(SPICLOCK, MSBFIRST, SPI_MODE));
digitalWrite(_cs, 0);
digitalWrite(_dc, 0);
SPI.transfer(TFT_RAMWR);
int i;
for (i=0; i<(w*h); i++)
{
digitalWrite(_dc, 1);
SPI.transfer16(color);
}
#ifdef ILI9341
digitalWrite(_dc, 0);
SPI.transfer(ILI9341_SLPOUT);
digitalWrite(_dc, 1);
#endif
setArea(0, 0, (TFT_REALWIDTH-1), (TFT_REALHEIGHT-1));
digitalWrite(_cs, 1);
SPI.endTransaction();
setArea(0, 0, (TFT_REALWIDTH-1), (TFT_REALHEIGHT-1));
}
/***********************************************************************************************
DMA functions
***********************************************************************************************/

View file

@ -21,18 +21,15 @@
#define B16(rgb) ((rgb<<3)&0xf8)
#define TFT_HEIGHT 192
#ifdef ILI9341
#define TFT_WIDTH 256
#define TFT_REALWIDTH 320
#define TFT_REALHEIGHT 240
#endif
#ifdef ST7789
#ifdef LOHRES
#define TFT_WIDTH 240
#define TFT_REALWIDTH 240
#define TFT_REALHEIGHT 240
#else
#define TFT_WIDTH 256
#define TFT_REALWIDTH 320
#endif
#define TFT_HEIGHT 192
#define TFT_REALHEIGHT 240
#define LINES_PER_BLOCK 64
#define NR_OF_BLOCK 4

View file

@ -1,11 +1,7 @@
#include "platform_config.h"
#ifdef TEENSYBOY
#define ST7789 1
#define ROTATE_SCREEN 1
#else
#define ILI9341 1
#endif
//#define ST7789 1
//#define ILI9341 1
#define TFT_LINEARINT 1
#define LINEARINT_HACK 1

View file

@ -1373,7 +1373,7 @@ void emu_init(void)
emu_InitJoysticks();
#ifdef TEENSYBOY
#ifdef SWAP_JOYSTICK
joySwapped = true;
#else
joySwapped = false;

View file

@ -2,31 +2,17 @@
#define IOPINS_H
#include "platform_config.h"
#include "tft_t_dma_config.h"
#ifndef OLD_LAYOUT
#ifdef ST7789
// ST7789
#define TFT_SCLK 13
#define TFT_MOSI 11
#define TFT_MISO 12
#define TFT_TOUCH_CS 255
#define TFT_TOUCH_INT 255
#define TFT_DC 9
#define TFT_CS 255
#define TFT_RST 23
#else
// ILI9341
#define TFT_SCLK 13
#define TFT_MOSI 11
#define TFT_MISO 12
#define TFT_TOUCH_CS 255 //38
#define TFT_TOUCH_INT 255 //37
#define TFT_DC 9
#define TFT_CS 23
#define TFT_RST 255
#endif
#define TFT_CS 22 // 255 for LORES ST7789 (NO CS)
#define TFT_RST 23 // 255 for ILI/ST if connected to 3.3V
// PSRAM
#define PSRAM_CS 36
@ -38,10 +24,10 @@
#define SD_SCLK 13
#define SD_MOSI 12
#define SD_MISO 11
#ifdef TEENSYBOY
#define SD_CS BUILTIN_SDCARD
#ifdef EXTERNAL_SD
#define SD_CS 8
#else
#define SD_CS 5
#define SD_CS BUILTIN_SDCARD
#endif
// I2C keyboard
@ -54,17 +40,15 @@
#define PIN_JOY2_BTN 17
#define PIN_KEY_USER1 3 //34
#define PIN_KEY_USER2 4 //35
//#define PIN_KEY_USER3 255
//#define PIN_KEY_USER4 255
//#define PIN_KEY_USER3 33
//#define PIN_KEY_USER4 39
#ifdef TEENSYBOY
// Second joystick
#define PIN_JOY1_BTN 2
#define PIN_JOY1_1 14 // UP
#define PIN_JOY1_2 7 // DOWN
#define PIN_JOY1_3 6 // RIGHT
#define PIN_JOY1_4 5 // LEFT
#endif
#else
// OLD LAYOUT!!!!

View file

@ -2,7 +2,13 @@
#define _PLATFORM_CONFIG_H_
//#define OLD_LAYOUT 1
//#define TEENSYBOY 1
#define ILI9341 1
//#define ST7789 1
//#define SWAP_JOYSTICK 1
//#define LOHRES 1
//#define ROTATE_SCREEN 1
#define EXTERNAL_SD 1
#define HAS_PSRAM 1

View file

@ -107,7 +107,6 @@ PROGMEM static const uint8_t init_commands[] = {
#endif
};
static void dmaInterrupt() {
dmatx.clearInterrupt();
curTransfer++;
@ -220,8 +219,9 @@ TFT_T_DMA::TFT_T_DMA(uint8_t cs, uint8_t dc, uint8_t rst, uint8_t mosi, uint8_t
void TFT_T_DMA::setArea(uint16_t x1,uint16_t y1,uint16_t x2,uint16_t y2) {
int dx=0;
int dy=0;
#ifdef ST7789
if (TFT_REALWIDTH == TFT_REALHEIGHT)
{
#ifdef ROTATE_SCREEN
if (!flipped) {
dy += 80;
@ -231,7 +231,29 @@ void TFT_T_DMA::setArea(uint16_t x1,uint16_t y1,uint16_t x2,uint16_t y2) {
dx += 80;
}
#endif
}
#endif
digitalWrite(_dc, 0);
SPI.transfer(TFT_CASET);
digitalWrite(_dc, 1);
SPI.transfer16(x1+dx);
digitalWrite(_dc, 1);
SPI.transfer16(x2+dx);
digitalWrite(_dc, 0);
SPI.transfer(TFT_PASET);
digitalWrite(_dc, 1);
SPI.transfer16(y1+dy);
digitalWrite(_dc, 1);
SPI.transfer16(y2+dy);
digitalWrite(_dc, 0);
SPI.transfer(TFT_RAMWR);
digitalWrite(_dc, 1);
return;
SPI.beginTransaction(SPISettings(SPICLOCK, MSBFIRST, SPI_MODE));
digitalWrite(_cs, 0);
@ -257,6 +279,8 @@ void TFT_T_DMA::setArea(uint16_t x1,uint16_t y1,uint16_t x2,uint16_t y2) {
}
void TFT_T_DMA::begin(void) {
SPI.setMOSI(_mosi);
SPI.setMISO(_miso);
@ -264,16 +288,17 @@ void TFT_T_DMA::begin(void) {
SPI.begin();
// Initialize display
if (_rst < 255) { // toggle RST low to reset
if (_rst != 0xff) {
pinMode(_rst, OUTPUT);
digitalWrite(_rst, HIGH);
delay(5);
delay(100);
digitalWrite(_rst, LOW);
delay(20);
delay(100);
digitalWrite(_rst, HIGH);
delay(120);
delay(200);
}
SPI.beginTransaction(SPISettings(SPICLOCK, MSBFIRST, SPI_MODE));
const uint8_t *addr = init_commands;
digitalWrite(_cs, 0);
@ -307,7 +332,6 @@ void TFT_T_DMA::begin(void) {
SPI.transfer(ILI9341_DISPON);
digitalWrite(_dc, 1);
digitalWrite(_cs, 1);
SPI.endTransaction();
#endif
#ifdef ST7789
uint8_t numCommands, numArgs;
@ -332,22 +356,31 @@ void TFT_T_DMA::begin(void) {
if(ms) {
ms = *addr++; // Read post-command delay time (ms)
if(ms == 255) ms = 500; // If 255, delay for 500 ms
SPI.endTransaction();
digitalWrite(_dc, 1);
digitalWrite(_cs, 1);
SPI.endTransaction();
delay(ms);
//beginSPITransaction();
SPI.beginTransaction(SPISettings(SPICLOCK, MSBFIRST, SPI_MODE));
digitalWrite(_cs, 0);
}
}
digitalWrite(_cs, 1);
#endif
setArea(0, 0, TFT_REALWIDTH-1, TFT_REALHEIGHT-1);
SPI.endTransaction();
cancelled = false;
#ifdef FLIP_SCREEN
flipscreen(true);
#else
flipscreen(false);
#endif
#ifdef ST7789
if (TFT_REALWIDTH != TFT_REALHEIGHT)
{
flipscreen(true);
}
#endif
};
@ -434,6 +467,7 @@ void TFT_T_DMA::startDMA(void) {
#endif
dmatx = dmasettings[0];
digitalWrite(_cs, 0);
setArea((TFT_REALWIDTH-TFT_WIDTH)/2, (TFT_REALHEIGHT-TFT_HEIGHT)/2, (TFT_REALWIDTH-TFT_WIDTH)/2+TFT_WIDTH-1, (TFT_REALHEIGHT-TFT_HEIGHT)/2+TFT_HEIGHT-1);
digitalWrite(_dc, 0);
SPI.transfer(TFT_RAMWR);
digitalWrite(_dc, 1);
@ -623,17 +657,17 @@ void TFT_T_DMA::readCal(uint16_t * oX, uint16_t * oY, uint16_t * oZ) {
No DMA functions
***********************************************************************************************/
void TFT_T_DMA::fillScreenNoDma(uint16_t color) {
setArea(0, 0, TFT_REALWIDTH-1, TFT_REALHEIGHT-1);
SPI.beginTransaction(SPISettings(SPICLOCK, MSBFIRST, SPI_MODE));
digitalWrite(_cs, 0);
digitalWrite(_dc, 0);
SPI.transfer(TFT_RAMWR);
setArea(0, 0, TFT_REALWIDTH-1, TFT_REALHEIGHT-1);
//digitalWrite(_dc, 0);
//SPI.transfer(TFT_RAMWR);
int i,j;
for (j=0; j<TFT_REALHEIGHT; j++)
{
for (i=0; i<TFT_REALWIDTH; i++) {
digitalWrite(_dc, 1);
//digitalWrite(_dc, 1);
SPI.transfer16(color);
}
}
@ -643,24 +677,43 @@ void TFT_T_DMA::fillScreenNoDma(uint16_t color) {
digitalWrite(_dc, 1);
#endif
digitalWrite(_cs, 1);
SPI.endTransaction();
setArea(0, 0, (TFT_REALWIDTH-1), (TFT_REALHEIGHT-1));
SPI.endTransaction();
}
void TFT_T_DMA::writeScreenNoDma(const uint16_t *pcolors) {
setArea(0, 0, TFT_WIDTH-1, TFT_HEIGHT-1);
void TFT_T_DMA::drawRectNoDma(int16_t x, int16_t y, int16_t w, int16_t h, uint16_t color) {
SPI.beginTransaction(SPISettings(SPICLOCK, MSBFIRST, SPI_MODE));
digitalWrite(_cs, 0);
setArea(x,y,x+w-1,y+h-1);
// digitalWrite(_dc, 0);
// SPI.transfer(TFT_RAMWR);
int i;
for (i=0; i<(w*h); i++)
{
//digitalWrite(_dc, 1);
SPI.transfer16(color);
}
#ifdef ILI9341
digitalWrite(_dc, 0);
SPI.transfer(TFT_RAMWR);
SPI.transfer(ILI9341_SLPOUT);
digitalWrite(_dc, 1);
#endif
digitalWrite(_cs, 1);
setArea(0, 0, (TFT_REALWIDTH-1), (TFT_REALHEIGHT-1));
SPI.endTransaction();
}
void TFT_T_DMA::writeScreenNoDma(const uint16_t *pcolors) {
SPI.beginTransaction(SPISettings(SPICLOCK, MSBFIRST, SPI_MODE));
digitalWrite(_cs, 0);
setArea(0, 0, TFT_WIDTH-1, TFT_HEIGHT-1);
//digitalWrite(_dc, 0);
//SPI.transfer(TFT_RAMWR);
int i,j;
for (j=0; j<240; j++)
{
for (i=0; i<TFT_WIDTH; i++) {
digitalWrite(_dc, 1);
// digitalWrite(_dc, 1);
SPI.transfer16(*pcolors++);
}
}
@ -670,9 +723,8 @@ void TFT_T_DMA::writeScreenNoDma(const uint16_t *pcolors) {
digitalWrite(_dc, 1);
#endif
digitalWrite(_cs, 1);
SPI.endTransaction();
setArea(0, 0, (TFT_REALWIDTH-1), (TFT_REALHEIGHT-1));
SPI.endTransaction();
}
void TFT_T_DMA::drawSpriteNoDma(int16_t x, int16_t y, const uint16_t *bitmap) {
@ -723,12 +775,12 @@ void TFT_T_DMA::drawSpriteNoDma(int16_t x, int16_t y, const uint16_t *bitmap, ui
}
}
setArea(arx, ary, arx+arw-1, ary+arh-1);
SPI.beginTransaction(SPISettings(SPICLOCK, MSBFIRST, SPI_MODE));
digitalWrite(_cs, 0);
digitalWrite(_dc, 0);
SPI.transfer(TFT_RAMWR);
setArea(arx, ary, arx+arw-1, ary+arh-1);
//digitalWrite(_dc, 0);
//SPI.transfer(TFT_RAMWR);
bitmap = bitmap + bmp_offy*w + bmp_offx;
for (int row=0;row<arh; row++)
@ -737,7 +789,7 @@ void TFT_T_DMA::drawSpriteNoDma(int16_t x, int16_t y, const uint16_t *bitmap, ui
for (int col=0;col<arw; col++)
{
uint16_t color = *bmp_ptr++;
digitalWrite(_dc, 1);
// digitalWrite(_dc, 1);
SPI.transfer16(color);
}
bitmap += w;
@ -747,9 +799,9 @@ void TFT_T_DMA::drawSpriteNoDma(int16_t x, int16_t y, const uint16_t *bitmap, ui
SPI.transfer(ILI9341_SLPOUT);
digitalWrite(_dc, 1);
#endif
setArea(0, 0, TFT_REALWIDTH-1, TFT_REALHEIGHT-1);
digitalWrite(_cs, 1);
SPI.endTransaction();
setArea(0, 0, TFT_REALWIDTH-1, TFT_REALHEIGHT-1);
}
void TFT_T_DMA::drawTextNoDma(int16_t x, int16_t y, const char * text, uint16_t fgcolor, uint16_t bgcolor, bool doublesize) {
@ -757,20 +809,19 @@ void TFT_T_DMA::drawTextNoDma(int16_t x, int16_t y, const char * text, uint16_t
while ((c = *text++)) {
const unsigned char * charpt=&font8x8[c][0];
setArea(x,y,x+7,y+(doublesize?15:7));
//SPI.beginTransaction(SPISettings(SPICLOCK, MSBFIRST, SPI_MODE));
SPI.beginTransaction(SPISettings(SPICLOCK, MSBFIRST, SPI_MODE));
digitalWrite(_cs, 0);
setArea(x,y,x+7,y+(doublesize?15:7));
//digitalWrite(_dc, 0);
//SPI.transfer(TFT_RAMWR);
digitalWrite(_dc, 1);
//digitalWrite(_dc, 1);
for (int i=0;i<8;i++)
{
unsigned char bits;
if (doublesize) {
bits = *charpt;
digitalWrite(_dc, 1);
//digitalWrite(_dc, 1);
if (bits&0x01) SPI.transfer16(fgcolor);
else SPI.transfer16(bgcolor);
bits = bits >> 1;
@ -796,7 +847,7 @@ void TFT_T_DMA::drawTextNoDma(int16_t x, int16_t y, const char * text, uint16_t
else SPI.transfer16(bgcolor);
}
bits = *charpt++;
digitalWrite(_dc, 1);
//digitalWrite(_dc, 1);
if (bits&0x01) SPI.transfer16(fgcolor);
else SPI.transfer16(bgcolor);
bits = bits >> 1;
@ -831,35 +882,18 @@ void TFT_T_DMA::drawTextNoDma(int16_t x, int16_t y, const char * text, uint16_t
SPI.endTransaction();
}
setArea(0, 0, (TFT_REALWIDTH-1), (TFT_REALHEIGHT-1));
}
void TFT_T_DMA::drawRectNoDma(int16_t x, int16_t y, int16_t w, int16_t h, uint16_t color) {
setArea(x,y,x+w-1,y+h-1);
SPI.beginTransaction(SPISettings(SPICLOCK, MSBFIRST, SPI_MODE));
digitalWrite(_cs, 0);
digitalWrite(_dc, 0);
SPI.transfer(TFT_RAMWR);
int i;
for (i=0; i<(w*h); i++)
{
digitalWrite(_dc, 1);
SPI.transfer16(color);
}
#ifdef ILI9341
digitalWrite(_dc, 0);
SPI.transfer(ILI9341_SLPOUT);
digitalWrite(_dc, 1);
#endif
setArea(0, 0, (TFT_REALWIDTH-1), (TFT_REALHEIGHT-1));
digitalWrite(_cs, 1);
SPI.endTransaction();
setArea(0, 0, (TFT_REALWIDTH-1), (TFT_REALHEIGHT-1));
}
/***********************************************************************************************
DMA functions
***********************************************************************************************/

View file

@ -22,18 +22,15 @@
#define PAL_COLOR_MASK 0xff
#define TFT_HEIGHT 240
#ifdef ILI9341
#define TFT_WIDTH 320
#define TFT_REALWIDTH 320
#define TFT_REALHEIGHT 240
#endif
#ifdef ST7789
#ifdef LOHRES
#define TFT_WIDTH 240
#define TFT_REALWIDTH 240
#define TFT_REALHEIGHT 240
#else
#define TFT_WIDTH 320
#define TFT_REALWIDTH 320
#endif
#define TFT_HEIGHT 240
#define TFT_REALHEIGHT 240
#define LINES_PER_BLOCK 64
#define NR_OF_BLOCK 4

View file

@ -1,11 +1,7 @@
#include "platform_config.h"
#ifdef TEENSYBOY
#define ST7789 1
#define ROTATE_SCREEN 1
#else
#define ILI9341 1
#endif
//#define ST7789 1
//#define ILI9341 1
#define TFT_LINEARINT 1
#define LINEARINT_HACK 1

View file

@ -1373,7 +1373,7 @@ void emu_init(void)
emu_InitJoysticks();
#ifdef TEENSYBOY
#ifdef SWAP_JOYSTICK
joySwapped = true;
#else
joySwapped = false;

View file

@ -2,31 +2,17 @@
#define IOPINS_H
#include "platform_config.h"
#include "tft_t_dma_config.h"
#ifndef OLD_LAYOUT
#ifdef ST7789
// ST7789
#define TFT_SCLK 13
#define TFT_MOSI 11
#define TFT_MISO 12
#define TFT_TOUCH_CS 255
#define TFT_TOUCH_INT 255
#define TFT_DC 9
#define TFT_CS 255
#define TFT_RST 23
#else
// ILI9341
#define TFT_SCLK 13
#define TFT_MOSI 11
#define TFT_MISO 12
#define TFT_TOUCH_CS 255 //38
#define TFT_TOUCH_INT 255 //37
#define TFT_DC 9
#define TFT_CS 23
#define TFT_RST 255
#endif
#define TFT_CS 22 // 255 for LORES ST7789 (NO CS)
#define TFT_RST 23 // 255 for ILI/ST if connected to 3.3V
// PSRAM
#define PSRAM_CS 36
@ -38,10 +24,10 @@
#define SD_SCLK 13
#define SD_MOSI 12
#define SD_MISO 11
#ifdef TEENSYBOY
#define SD_CS BUILTIN_SDCARD
#ifdef EXTERNAL_SD
#define SD_CS 8
#else
#define SD_CS 5
#define SD_CS BUILTIN_SDCARD
#endif
// I2C keyboard
@ -54,17 +40,15 @@
#define PIN_JOY2_BTN 17
#define PIN_KEY_USER1 3 //34
#define PIN_KEY_USER2 4 //35
//#define PIN_KEY_USER3 255
//#define PIN_KEY_USER4 255
//#define PIN_KEY_USER3 33
//#define PIN_KEY_USER4 39
#ifdef TEENSYBOY
// Second joystick
#define PIN_JOY1_BTN 2
#define PIN_JOY1_1 14 // UP
#define PIN_JOY1_2 7 // DOWN
#define PIN_JOY1_3 6 // RIGHT
#define PIN_JOY1_4 5 // LEFT
#endif
#else
// OLD LAYOUT!!!!

View file

@ -2,7 +2,13 @@
#define _PLATFORM_CONFIG_H_
//#define OLD_LAYOUT 1
//#define TEENSYBOY 1
#define ILI9341 1
//#define ST7789 1
//#define SWAP_JOYSTICK 1
//#define LOHRES 1
//#define ROTATE_SCREEN 1
#define EXTERNAL_SD 1
#define HAS_PSRAM 1

View file

@ -107,7 +107,6 @@ PROGMEM static const uint8_t init_commands[] = {
#endif
};
static void dmaInterrupt() {
dmatx.clearInterrupt();
curTransfer++;
@ -220,8 +219,9 @@ TFT_T_DMA::TFT_T_DMA(uint8_t cs, uint8_t dc, uint8_t rst, uint8_t mosi, uint8_t
void TFT_T_DMA::setArea(uint16_t x1,uint16_t y1,uint16_t x2,uint16_t y2) {
int dx=0;
int dy=0;
#ifdef ST7789
if (TFT_REALWIDTH == TFT_REALHEIGHT)
{
#ifdef ROTATE_SCREEN
if (!flipped) {
dy += 80;
@ -231,7 +231,29 @@ void TFT_T_DMA::setArea(uint16_t x1,uint16_t y1,uint16_t x2,uint16_t y2) {
dx += 80;
}
#endif
}
#endif
digitalWrite(_dc, 0);
SPI.transfer(TFT_CASET);
digitalWrite(_dc, 1);
SPI.transfer16(x1+dx);
digitalWrite(_dc, 1);
SPI.transfer16(x2+dx);
digitalWrite(_dc, 0);
SPI.transfer(TFT_PASET);
digitalWrite(_dc, 1);
SPI.transfer16(y1+dy);
digitalWrite(_dc, 1);
SPI.transfer16(y2+dy);
digitalWrite(_dc, 0);
SPI.transfer(TFT_RAMWR);
digitalWrite(_dc, 1);
return;
SPI.beginTransaction(SPISettings(SPICLOCK, MSBFIRST, SPI_MODE));
digitalWrite(_cs, 0);
@ -257,6 +279,8 @@ void TFT_T_DMA::setArea(uint16_t x1,uint16_t y1,uint16_t x2,uint16_t y2) {
}
void TFT_T_DMA::begin(void) {
SPI.setMOSI(_mosi);
SPI.setMISO(_miso);
@ -264,16 +288,17 @@ void TFT_T_DMA::begin(void) {
SPI.begin();
// Initialize display
if (_rst < 255) { // toggle RST low to reset
if (_rst != 0xff) {
pinMode(_rst, OUTPUT);
digitalWrite(_rst, HIGH);
delay(5);
delay(100);
digitalWrite(_rst, LOW);
delay(20);
delay(100);
digitalWrite(_rst, HIGH);
delay(120);
delay(200);
}
SPI.beginTransaction(SPISettings(SPICLOCK, MSBFIRST, SPI_MODE));
const uint8_t *addr = init_commands;
digitalWrite(_cs, 0);
@ -307,7 +332,6 @@ void TFT_T_DMA::begin(void) {
SPI.transfer(ILI9341_DISPON);
digitalWrite(_dc, 1);
digitalWrite(_cs, 1);
SPI.endTransaction();
#endif
#ifdef ST7789
uint8_t numCommands, numArgs;
@ -332,22 +356,31 @@ void TFT_T_DMA::begin(void) {
if(ms) {
ms = *addr++; // Read post-command delay time (ms)
if(ms == 255) ms = 500; // If 255, delay for 500 ms
SPI.endTransaction();
digitalWrite(_dc, 1);
digitalWrite(_cs, 1);
SPI.endTransaction();
delay(ms);
//beginSPITransaction();
SPI.beginTransaction(SPISettings(SPICLOCK, MSBFIRST, SPI_MODE));
digitalWrite(_cs, 0);
}
}
digitalWrite(_cs, 1);
#endif
setArea(0, 0, TFT_REALWIDTH-1, TFT_REALHEIGHT-1);
SPI.endTransaction();
cancelled = false;
#ifdef FLIP_SCREEN
flipscreen(true);
#else
flipscreen(false);
#endif
#ifdef ST7789
if (TFT_REALWIDTH != TFT_REALHEIGHT)
{
flipscreen(true);
}
#endif
};
@ -434,6 +467,7 @@ void TFT_T_DMA::startDMA(void) {
#endif
dmatx = dmasettings[0];
digitalWrite(_cs, 0);
setArea((TFT_REALWIDTH-TFT_WIDTH)/2, (TFT_REALHEIGHT-TFT_HEIGHT)/2, (TFT_REALWIDTH-TFT_WIDTH)/2+TFT_WIDTH-1, (TFT_REALHEIGHT-TFT_HEIGHT)/2+TFT_HEIGHT-1);
digitalWrite(_dc, 0);
SPI.transfer(TFT_RAMWR);
digitalWrite(_dc, 1);
@ -623,17 +657,17 @@ void TFT_T_DMA::readCal(uint16_t * oX, uint16_t * oY, uint16_t * oZ) {
No DMA functions
***********************************************************************************************/
void TFT_T_DMA::fillScreenNoDma(uint16_t color) {
setArea(0, 0, TFT_REALWIDTH-1, TFT_REALHEIGHT-1);
SPI.beginTransaction(SPISettings(SPICLOCK, MSBFIRST, SPI_MODE));
digitalWrite(_cs, 0);
digitalWrite(_dc, 0);
SPI.transfer(TFT_RAMWR);
setArea(0, 0, TFT_REALWIDTH-1, TFT_REALHEIGHT-1);
//digitalWrite(_dc, 0);
//SPI.transfer(TFT_RAMWR);
int i,j;
for (j=0; j<TFT_REALHEIGHT; j++)
{
for (i=0; i<TFT_REALWIDTH; i++) {
digitalWrite(_dc, 1);
//digitalWrite(_dc, 1);
SPI.transfer16(color);
}
}
@ -643,24 +677,43 @@ void TFT_T_DMA::fillScreenNoDma(uint16_t color) {
digitalWrite(_dc, 1);
#endif
digitalWrite(_cs, 1);
SPI.endTransaction();
setArea(0, 0, (TFT_REALWIDTH-1), (TFT_REALHEIGHT-1));
SPI.endTransaction();
}
void TFT_T_DMA::writeScreenNoDma(const uint16_t *pcolors) {
setArea(0, 0, TFT_WIDTH-1, TFT_HEIGHT-1);
void TFT_T_DMA::drawRectNoDma(int16_t x, int16_t y, int16_t w, int16_t h, uint16_t color) {
SPI.beginTransaction(SPISettings(SPICLOCK, MSBFIRST, SPI_MODE));
digitalWrite(_cs, 0);
setArea(x,y,x+w-1,y+h-1);
// digitalWrite(_dc, 0);
// SPI.transfer(TFT_RAMWR);
int i;
for (i=0; i<(w*h); i++)
{
//digitalWrite(_dc, 1);
SPI.transfer16(color);
}
#ifdef ILI9341
digitalWrite(_dc, 0);
SPI.transfer(TFT_RAMWR);
SPI.transfer(ILI9341_SLPOUT);
digitalWrite(_dc, 1);
#endif
digitalWrite(_cs, 1);
setArea(0, 0, (TFT_REALWIDTH-1), (TFT_REALHEIGHT-1));
SPI.endTransaction();
}
void TFT_T_DMA::writeScreenNoDma(const uint16_t *pcolors) {
SPI.beginTransaction(SPISettings(SPICLOCK, MSBFIRST, SPI_MODE));
digitalWrite(_cs, 0);
setArea(0, 0, TFT_WIDTH-1, TFT_HEIGHT-1);
//digitalWrite(_dc, 0);
//SPI.transfer(TFT_RAMWR);
int i,j;
for (j=0; j<240; j++)
{
for (i=0; i<TFT_WIDTH; i++) {
digitalWrite(_dc, 1);
// digitalWrite(_dc, 1);
SPI.transfer16(*pcolors++);
}
}
@ -670,9 +723,8 @@ void TFT_T_DMA::writeScreenNoDma(const uint16_t *pcolors) {
digitalWrite(_dc, 1);
#endif
digitalWrite(_cs, 1);
SPI.endTransaction();
setArea(0, 0, (TFT_REALWIDTH-1), (TFT_REALHEIGHT-1));
SPI.endTransaction();
}
void TFT_T_DMA::drawSpriteNoDma(int16_t x, int16_t y, const uint16_t *bitmap) {
@ -723,12 +775,12 @@ void TFT_T_DMA::drawSpriteNoDma(int16_t x, int16_t y, const uint16_t *bitmap, ui
}
}
setArea(arx, ary, arx+arw-1, ary+arh-1);
SPI.beginTransaction(SPISettings(SPICLOCK, MSBFIRST, SPI_MODE));
digitalWrite(_cs, 0);
digitalWrite(_dc, 0);
SPI.transfer(TFT_RAMWR);
setArea(arx, ary, arx+arw-1, ary+arh-1);
//digitalWrite(_dc, 0);
//SPI.transfer(TFT_RAMWR);
bitmap = bitmap + bmp_offy*w + bmp_offx;
for (int row=0;row<arh; row++)
@ -737,7 +789,7 @@ void TFT_T_DMA::drawSpriteNoDma(int16_t x, int16_t y, const uint16_t *bitmap, ui
for (int col=0;col<arw; col++)
{
uint16_t color = *bmp_ptr++;
digitalWrite(_dc, 1);
// digitalWrite(_dc, 1);
SPI.transfer16(color);
}
bitmap += w;
@ -747,9 +799,9 @@ void TFT_T_DMA::drawSpriteNoDma(int16_t x, int16_t y, const uint16_t *bitmap, ui
SPI.transfer(ILI9341_SLPOUT);
digitalWrite(_dc, 1);
#endif
setArea(0, 0, TFT_REALWIDTH-1, TFT_REALHEIGHT-1);
digitalWrite(_cs, 1);
SPI.endTransaction();
setArea(0, 0, TFT_REALWIDTH-1, TFT_REALHEIGHT-1);
}
void TFT_T_DMA::drawTextNoDma(int16_t x, int16_t y, const char * text, uint16_t fgcolor, uint16_t bgcolor, bool doublesize) {
@ -757,20 +809,19 @@ void TFT_T_DMA::drawTextNoDma(int16_t x, int16_t y, const char * text, uint16_t
while ((c = *text++)) {
const unsigned char * charpt=&font8x8[c][0];
setArea(x,y,x+7,y+(doublesize?15:7));
//SPI.beginTransaction(SPISettings(SPICLOCK, MSBFIRST, SPI_MODE));
SPI.beginTransaction(SPISettings(SPICLOCK, MSBFIRST, SPI_MODE));
digitalWrite(_cs, 0);
setArea(x,y,x+7,y+(doublesize?15:7));
//digitalWrite(_dc, 0);
//SPI.transfer(TFT_RAMWR);
digitalWrite(_dc, 1);
//digitalWrite(_dc, 1);
for (int i=0;i<8;i++)
{
unsigned char bits;
if (doublesize) {
bits = *charpt;
digitalWrite(_dc, 1);
//digitalWrite(_dc, 1);
if (bits&0x01) SPI.transfer16(fgcolor);
else SPI.transfer16(bgcolor);
bits = bits >> 1;
@ -796,7 +847,7 @@ void TFT_T_DMA::drawTextNoDma(int16_t x, int16_t y, const char * text, uint16_t
else SPI.transfer16(bgcolor);
}
bits = *charpt++;
digitalWrite(_dc, 1);
//digitalWrite(_dc, 1);
if (bits&0x01) SPI.transfer16(fgcolor);
else SPI.transfer16(bgcolor);
bits = bits >> 1;
@ -831,35 +882,18 @@ void TFT_T_DMA::drawTextNoDma(int16_t x, int16_t y, const char * text, uint16_t
SPI.endTransaction();
}
setArea(0, 0, (TFT_REALWIDTH-1), (TFT_REALHEIGHT-1));
}
void TFT_T_DMA::drawRectNoDma(int16_t x, int16_t y, int16_t w, int16_t h, uint16_t color) {
setArea(x,y,x+w-1,y+h-1);
SPI.beginTransaction(SPISettings(SPICLOCK, MSBFIRST, SPI_MODE));
digitalWrite(_cs, 0);
digitalWrite(_dc, 0);
SPI.transfer(TFT_RAMWR);
int i;
for (i=0; i<(w*h); i++)
{
digitalWrite(_dc, 1);
SPI.transfer16(color);
}
#ifdef ILI9341
digitalWrite(_dc, 0);
SPI.transfer(ILI9341_SLPOUT);
digitalWrite(_dc, 1);
#endif
setArea(0, 0, (TFT_REALWIDTH-1), (TFT_REALHEIGHT-1));
digitalWrite(_cs, 1);
SPI.endTransaction();
setArea(0, 0, (TFT_REALWIDTH-1), (TFT_REALHEIGHT-1));
}
/***********************************************************************************************
DMA functions
***********************************************************************************************/

View file

@ -22,18 +22,15 @@
#define PAL_COLOR_MASK 0xff
#define TFT_HEIGHT 144
#ifdef ILI9341
#define TFT_WIDTH 320
#define TFT_REALWIDTH 320
#define TFT_REALHEIGHT 240
#endif
#ifdef ST7789
#ifdef LOHRES
#define TFT_WIDTH 240
#define TFT_REALWIDTH 240
#define TFT_REALHEIGHT 240
#else
#define TFT_WIDTH 320
#define TFT_REALWIDTH 320
#endif
#define TFT_HEIGHT 144
#define TFT_REALHEIGHT 240
#define LINES_PER_BLOCK 64
#define NR_OF_BLOCK 4

View file

@ -1,11 +1,7 @@
#include "platform_config.h"
#ifdef TEENSYBOY
#define ST7789 1
#define ROTATE_SCREEN 1
#else
#define ILI9341 1
#endif
//#define ST7789 1
//#define ILI9341 1
#define TFT_LINEARINT 1
#define LINEARINT_HACK 1

View file

@ -1373,7 +1373,7 @@ void emu_init(void)
emu_InitJoysticks();
#ifdef TEENSYBOY
#ifdef SWAP_JOYSTICK
joySwapped = true;
#else
joySwapped = false;

View file

@ -2,31 +2,17 @@
#define IOPINS_H
#include "platform_config.h"
#include "tft_t_dma_config.h"
#ifndef OLD_LAYOUT
#ifdef ST7789
// ST7789
#define TFT_SCLK 13
#define TFT_MOSI 11
#define TFT_MISO 12
#define TFT_TOUCH_CS 255
#define TFT_TOUCH_INT 255
#define TFT_DC 9
#define TFT_CS 255
#define TFT_RST 23
#else
// ILI9341
#define TFT_SCLK 13
#define TFT_MOSI 11
#define TFT_MISO 12
#define TFT_TOUCH_CS 255 //38
#define TFT_TOUCH_INT 255 //37
#define TFT_DC 9
#define TFT_CS 23
#define TFT_RST 255
#endif
#define TFT_CS 22 // 255 for LORES ST7789 (NO CS)
#define TFT_RST 23 // 255 for ILI/ST if connected to 3.3V
// PSRAM
#define PSRAM_CS 36
@ -38,10 +24,10 @@
#define SD_SCLK 13
#define SD_MOSI 12
#define SD_MISO 11
#ifdef TEENSYBOY
#define SD_CS BUILTIN_SDCARD
#ifdef EXTERNAL_SD
#define SD_CS 8
#else
#define SD_CS 5
#define SD_CS BUILTIN_SDCARD
#endif
// I2C keyboard
@ -54,17 +40,15 @@
#define PIN_JOY2_BTN 17
#define PIN_KEY_USER1 3 //34
#define PIN_KEY_USER2 4 //35
//#define PIN_KEY_USER3 255
//#define PIN_KEY_USER4 255
//#define PIN_KEY_USER3 33
//#define PIN_KEY_USER4 39
#ifdef TEENSYBOY
// Second joystick
#define PIN_JOY1_BTN 2
#define PIN_JOY1_1 14 // UP
#define PIN_JOY1_2 7 // DOWN
#define PIN_JOY1_3 6 // RIGHT
#define PIN_JOY1_4 5 // LEFT
#endif
#else
// OLD LAYOUT!!!!

View file

@ -2,9 +2,15 @@
#define _PLATFORM_CONFIG_H_
//#define OLD_LAYOUT 1
//#define TEENSYBOY 1
//#define HAS_PSRAM 1
#define ILI9341 1
//#define ST7789 1
//#define SWAP_JOYSTICK 1
//#define LOHRES 1
//#define ROTATE_SCREEN 1
#define EXTERNAL_SD 1
#define HAS_PSRAM 1
//#define USE_SDFAT 1
//#define SD_FAT_TYPE 1

View file

@ -8,18 +8,19 @@ extern "C" {
#include "mcume.h"
TFT_T_DMA tft = TFT_T_DMA(TFT_CS, TFT_DC, TFT_RST, TFT_MOSI, TFT_SCLK, TFT_MISO, TFT_TOUCH_CS, TFT_TOUCH_INT);
static int xOffLogo=0;
static int swipeAngle=0;
void setup() {
//emu_sndInit();
tft.begin();
//emu_sndPlaySound(0, 255, 4000);
emu_init();
//delay(5000);
//toggleMenu(false);
//tft.fillScreenNoDma(RGBVAL16(0x00,0x00,0x00));
//tft.startDMA();
}
static uint8_t col=0x00;

View file

@ -107,7 +107,6 @@ PROGMEM static const uint8_t init_commands[] = {
#endif
};
static void dmaInterrupt() {
dmatx.clearInterrupt();
curTransfer++;
@ -220,8 +219,9 @@ TFT_T_DMA::TFT_T_DMA(uint8_t cs, uint8_t dc, uint8_t rst, uint8_t mosi, uint8_t
void TFT_T_DMA::setArea(uint16_t x1,uint16_t y1,uint16_t x2,uint16_t y2) {
int dx=0;
int dy=0;
#ifdef ST7789
if (TFT_REALWIDTH == TFT_REALHEIGHT)
{
#ifdef ROTATE_SCREEN
if (!flipped) {
dy += 80;
@ -231,7 +231,29 @@ void TFT_T_DMA::setArea(uint16_t x1,uint16_t y1,uint16_t x2,uint16_t y2) {
dx += 80;
}
#endif
}
#endif
digitalWrite(_dc, 0);
SPI.transfer(TFT_CASET);
digitalWrite(_dc, 1);
SPI.transfer16(x1+dx);
digitalWrite(_dc, 1);
SPI.transfer16(x2+dx);
digitalWrite(_dc, 0);
SPI.transfer(TFT_PASET);
digitalWrite(_dc, 1);
SPI.transfer16(y1+dy);
digitalWrite(_dc, 1);
SPI.transfer16(y2+dy);
digitalWrite(_dc, 0);
SPI.transfer(TFT_RAMWR);
digitalWrite(_dc, 1);
return;
SPI.beginTransaction(SPISettings(SPICLOCK, MSBFIRST, SPI_MODE));
digitalWrite(_cs, 0);
@ -257,6 +279,8 @@ void TFT_T_DMA::setArea(uint16_t x1,uint16_t y1,uint16_t x2,uint16_t y2) {
}
void TFT_T_DMA::begin(void) {
SPI.setMOSI(_mosi);
SPI.setMISO(_miso);
@ -264,16 +288,17 @@ void TFT_T_DMA::begin(void) {
SPI.begin();
// Initialize display
if (_rst < 255) { // toggle RST low to reset
if (_rst != 0xff) {
pinMode(_rst, OUTPUT);
digitalWrite(_rst, HIGH);
delay(5);
delay(100);
digitalWrite(_rst, LOW);
delay(20);
delay(100);
digitalWrite(_rst, HIGH);
delay(120);
delay(200);
}
SPI.beginTransaction(SPISettings(SPICLOCK, MSBFIRST, SPI_MODE));
const uint8_t *addr = init_commands;
digitalWrite(_cs, 0);
@ -307,7 +332,6 @@ void TFT_T_DMA::begin(void) {
SPI.transfer(ILI9341_DISPON);
digitalWrite(_dc, 1);
digitalWrite(_cs, 1);
SPI.endTransaction();
#endif
#ifdef ST7789
uint8_t numCommands, numArgs;
@ -332,22 +356,31 @@ void TFT_T_DMA::begin(void) {
if(ms) {
ms = *addr++; // Read post-command delay time (ms)
if(ms == 255) ms = 500; // If 255, delay for 500 ms
SPI.endTransaction();
digitalWrite(_dc, 1);
digitalWrite(_cs, 1);
SPI.endTransaction();
delay(ms);
//beginSPITransaction();
SPI.beginTransaction(SPISettings(SPICLOCK, MSBFIRST, SPI_MODE));
digitalWrite(_cs, 0);
}
}
digitalWrite(_cs, 1);
#endif
setArea(0, 0, TFT_REALWIDTH-1, TFT_REALHEIGHT-1);
SPI.endTransaction();
cancelled = false;
#ifdef FLIP_SCREEN
flipscreen(true);
#else
flipscreen(false);
#endif
#ifdef ST7789
if (TFT_REALWIDTH != TFT_REALHEIGHT)
{
flipscreen(true);
}
#endif
};
@ -434,6 +467,7 @@ void TFT_T_DMA::startDMA(void) {
#endif
dmatx = dmasettings[0];
digitalWrite(_cs, 0);
setArea((TFT_REALWIDTH-TFT_WIDTH)/2, (TFT_REALHEIGHT-TFT_HEIGHT)/2, (TFT_REALWIDTH-TFT_WIDTH)/2+TFT_WIDTH-1, (TFT_REALHEIGHT-TFT_HEIGHT)/2+TFT_HEIGHT-1);
digitalWrite(_dc, 0);
SPI.transfer(TFT_RAMWR);
digitalWrite(_dc, 1);
@ -623,17 +657,17 @@ void TFT_T_DMA::readCal(uint16_t * oX, uint16_t * oY, uint16_t * oZ) {
No DMA functions
***********************************************************************************************/
void TFT_T_DMA::fillScreenNoDma(uint16_t color) {
setArea(0, 0, TFT_REALWIDTH-1, TFT_REALHEIGHT-1);
SPI.beginTransaction(SPISettings(SPICLOCK, MSBFIRST, SPI_MODE));
digitalWrite(_cs, 0);
digitalWrite(_dc, 0);
SPI.transfer(TFT_RAMWR);
setArea(0, 0, TFT_REALWIDTH-1, TFT_REALHEIGHT-1);
//digitalWrite(_dc, 0);
//SPI.transfer(TFT_RAMWR);
int i,j;
for (j=0; j<TFT_REALHEIGHT; j++)
{
for (i=0; i<TFT_REALWIDTH; i++) {
digitalWrite(_dc, 1);
//digitalWrite(_dc, 1);
SPI.transfer16(color);
}
}
@ -643,24 +677,43 @@ void TFT_T_DMA::fillScreenNoDma(uint16_t color) {
digitalWrite(_dc, 1);
#endif
digitalWrite(_cs, 1);
SPI.endTransaction();
setArea(0, 0, (TFT_REALWIDTH-1), (TFT_REALHEIGHT-1));
SPI.endTransaction();
}
void TFT_T_DMA::writeScreenNoDma(const uint16_t *pcolors) {
setArea(0, 0, TFT_WIDTH-1, TFT_HEIGHT-1);
void TFT_T_DMA::drawRectNoDma(int16_t x, int16_t y, int16_t w, int16_t h, uint16_t color) {
SPI.beginTransaction(SPISettings(SPICLOCK, MSBFIRST, SPI_MODE));
digitalWrite(_cs, 0);
setArea(x,y,x+w-1,y+h-1);
// digitalWrite(_dc, 0);
// SPI.transfer(TFT_RAMWR);
int i;
for (i=0; i<(w*h); i++)
{
//digitalWrite(_dc, 1);
SPI.transfer16(color);
}
#ifdef ILI9341
digitalWrite(_dc, 0);
SPI.transfer(TFT_RAMWR);
SPI.transfer(ILI9341_SLPOUT);
digitalWrite(_dc, 1);
#endif
digitalWrite(_cs, 1);
setArea(0, 0, (TFT_REALWIDTH-1), (TFT_REALHEIGHT-1));
SPI.endTransaction();
}
void TFT_T_DMA::writeScreenNoDma(const uint16_t *pcolors) {
SPI.beginTransaction(SPISettings(SPICLOCK, MSBFIRST, SPI_MODE));
digitalWrite(_cs, 0);
setArea(0, 0, TFT_WIDTH-1, TFT_HEIGHT-1);
//digitalWrite(_dc, 0);
//SPI.transfer(TFT_RAMWR);
int i,j;
for (j=0; j<240; j++)
{
for (i=0; i<TFT_WIDTH; i++) {
digitalWrite(_dc, 1);
// digitalWrite(_dc, 1);
SPI.transfer16(*pcolors++);
}
}
@ -670,9 +723,8 @@ void TFT_T_DMA::writeScreenNoDma(const uint16_t *pcolors) {
digitalWrite(_dc, 1);
#endif
digitalWrite(_cs, 1);
SPI.endTransaction();
setArea(0, 0, (TFT_REALWIDTH-1), (TFT_REALHEIGHT-1));
SPI.endTransaction();
}
void TFT_T_DMA::drawSpriteNoDma(int16_t x, int16_t y, const uint16_t *bitmap) {
@ -723,12 +775,12 @@ void TFT_T_DMA::drawSpriteNoDma(int16_t x, int16_t y, const uint16_t *bitmap, ui
}
}
setArea(arx, ary, arx+arw-1, ary+arh-1);
SPI.beginTransaction(SPISettings(SPICLOCK, MSBFIRST, SPI_MODE));
digitalWrite(_cs, 0);
digitalWrite(_dc, 0);
SPI.transfer(TFT_RAMWR);
setArea(arx, ary, arx+arw-1, ary+arh-1);
//digitalWrite(_dc, 0);
//SPI.transfer(TFT_RAMWR);
bitmap = bitmap + bmp_offy*w + bmp_offx;
for (int row=0;row<arh; row++)
@ -737,7 +789,7 @@ void TFT_T_DMA::drawSpriteNoDma(int16_t x, int16_t y, const uint16_t *bitmap, ui
for (int col=0;col<arw; col++)
{
uint16_t color = *bmp_ptr++;
digitalWrite(_dc, 1);
// digitalWrite(_dc, 1);
SPI.transfer16(color);
}
bitmap += w;
@ -747,9 +799,9 @@ void TFT_T_DMA::drawSpriteNoDma(int16_t x, int16_t y, const uint16_t *bitmap, ui
SPI.transfer(ILI9341_SLPOUT);
digitalWrite(_dc, 1);
#endif
setArea(0, 0, TFT_REALWIDTH-1, TFT_REALHEIGHT-1);
digitalWrite(_cs, 1);
SPI.endTransaction();
setArea(0, 0, TFT_REALWIDTH-1, TFT_REALHEIGHT-1);
}
void TFT_T_DMA::drawTextNoDma(int16_t x, int16_t y, const char * text, uint16_t fgcolor, uint16_t bgcolor, bool doublesize) {
@ -757,20 +809,19 @@ void TFT_T_DMA::drawTextNoDma(int16_t x, int16_t y, const char * text, uint16_t
while ((c = *text++)) {
const unsigned char * charpt=&font8x8[c][0];
setArea(x,y,x+7,y+(doublesize?15:7));
//SPI.beginTransaction(SPISettings(SPICLOCK, MSBFIRST, SPI_MODE));
SPI.beginTransaction(SPISettings(SPICLOCK, MSBFIRST, SPI_MODE));
digitalWrite(_cs, 0);
setArea(x,y,x+7,y+(doublesize?15:7));
//digitalWrite(_dc, 0);
//SPI.transfer(TFT_RAMWR);
digitalWrite(_dc, 1);
//digitalWrite(_dc, 1);
for (int i=0;i<8;i++)
{
unsigned char bits;
if (doublesize) {
bits = *charpt;
digitalWrite(_dc, 1);
//digitalWrite(_dc, 1);
if (bits&0x01) SPI.transfer16(fgcolor);
else SPI.transfer16(bgcolor);
bits = bits >> 1;
@ -796,7 +847,7 @@ void TFT_T_DMA::drawTextNoDma(int16_t x, int16_t y, const char * text, uint16_t
else SPI.transfer16(bgcolor);
}
bits = *charpt++;
digitalWrite(_dc, 1);
//digitalWrite(_dc, 1);
if (bits&0x01) SPI.transfer16(fgcolor);
else SPI.transfer16(bgcolor);
bits = bits >> 1;
@ -831,35 +882,18 @@ void TFT_T_DMA::drawTextNoDma(int16_t x, int16_t y, const char * text, uint16_t
SPI.endTransaction();
}
setArea(0, 0, (TFT_REALWIDTH-1), (TFT_REALHEIGHT-1));
}
void TFT_T_DMA::drawRectNoDma(int16_t x, int16_t y, int16_t w, int16_t h, uint16_t color) {
setArea(x,y,x+w-1,y+h-1);
SPI.beginTransaction(SPISettings(SPICLOCK, MSBFIRST, SPI_MODE));
digitalWrite(_cs, 0);
digitalWrite(_dc, 0);
SPI.transfer(TFT_RAMWR);
int i;
for (i=0; i<(w*h); i++)
{
digitalWrite(_dc, 1);
SPI.transfer16(color);
}
#ifdef ILI9341
digitalWrite(_dc, 0);
SPI.transfer(ILI9341_SLPOUT);
digitalWrite(_dc, 1);
#endif
setArea(0, 0, (TFT_REALWIDTH-1), (TFT_REALHEIGHT-1));
digitalWrite(_cs, 1);
SPI.endTransaction();
setArea(0, 0, (TFT_REALWIDTH-1), (TFT_REALHEIGHT-1));
}
/***********************************************************************************************
DMA functions
***********************************************************************************************/

View file

@ -21,18 +21,16 @@
#define B16(rgb) ((rgb<<3)&0xf8)
#define TFT_HEIGHT 240
#ifdef ILI9341
#define TFT_WIDTH 320
#define TFT_REALWIDTH 320
#define TFT_REALHEIGHT 240
#endif
#ifdef ST7789
#ifdef LOHRES
#define TFT_WIDTH 240
#define TFT_REALWIDTH 240
#define TFT_REALHEIGHT 240
#else
#define TFT_WIDTH 320
#define TFT_REALWIDTH 320
#endif
#define TFT_HEIGHT 240
#define TFT_REALHEIGHT 240
#define LINES_PER_BLOCK 64
#define NR_OF_BLOCK 4

View file

@ -1,11 +1,7 @@
#include "platform_config.h"
#ifdef TEENSYBOY
#define ST7789 1
#define ROTATE_SCREEN 1
#else
#define ILI9341 1
#endif
//#define ST7789 1
//#define ILI9341 1
#define TFT_LINEARINT 1
#define LINEARINT_HACK 1

View file

@ -1373,7 +1373,7 @@ void emu_init(void)
emu_InitJoysticks();
#ifdef TEENSYBOY
#ifdef SWAP_JOYSTICK
joySwapped = true;
#else
joySwapped = false;

View file

@ -2,31 +2,17 @@
#define IOPINS_H
#include "platform_config.h"
#include "tft_t_dma_config.h"
#ifndef OLD_LAYOUT
#ifdef ST7789
// ST7789
#define TFT_SCLK 13
#define TFT_MOSI 11
#define TFT_MISO 12
#define TFT_TOUCH_CS 255
#define TFT_TOUCH_INT 255
#define TFT_DC 9
#define TFT_CS 255
#define TFT_RST 23
#else
// ILI9341
#define TFT_SCLK 13
#define TFT_MOSI 11
#define TFT_MISO 12
#define TFT_TOUCH_CS 255 //38
#define TFT_TOUCH_INT 255 //37
#define TFT_DC 9
#define TFT_CS 23
#define TFT_RST 255
#endif
#define TFT_CS 22 // 255 for LORES ST7789 (NO CS)
#define TFT_RST 23 // 255 for ILI/ST if connected to 3.3V
// PSRAM
#define PSRAM_CS 36
@ -38,10 +24,10 @@
#define SD_SCLK 13
#define SD_MOSI 12
#define SD_MISO 11
#ifdef TEENSYBOY
#define SD_CS BUILTIN_SDCARD
#ifdef EXTERNAL_SD
#define SD_CS 8
#else
#define SD_CS 5
#define SD_CS BUILTIN_SDCARD
#endif
// I2C keyboard
@ -54,17 +40,15 @@
#define PIN_JOY2_BTN 17
#define PIN_KEY_USER1 3 //34
#define PIN_KEY_USER2 4 //35
//#define PIN_KEY_USER3 255
//#define PIN_KEY_USER4 255
//#define PIN_KEY_USER3 33
//#define PIN_KEY_USER4 39
#ifdef TEENSYBOY
// Second joystick
#define PIN_JOY1_BTN 2
#define PIN_JOY1_1 14 // UP
#define PIN_JOY1_2 7 // DOWN
#define PIN_JOY1_3 6 // RIGHT
#define PIN_JOY1_4 5 // LEFT
#endif
#else
// OLD LAYOUT!!!!

View file

@ -2,9 +2,15 @@
#define _PLATFORM_CONFIG_H_
//#define OLD_LAYOUT 1
//#define TEENSYBOY 1
//#define HAS_PSRAM 1
#define ILI9341 1
//#define ST7789 1
//#define SWAP_JOYSTICK 1
//#define LOHRES 1
//#define ROTATE_SCREEN 1
#define EXTERNAL_SD 1
#define HAS_PSRAM 1
//#define USE_SDFAT 1
//#define SD_FAT_TYPE 1

View file

@ -107,7 +107,6 @@ PROGMEM static const uint8_t init_commands[] = {
#endif
};
static void dmaInterrupt() {
dmatx.clearInterrupt();
curTransfer++;
@ -220,8 +219,9 @@ TFT_T_DMA::TFT_T_DMA(uint8_t cs, uint8_t dc, uint8_t rst, uint8_t mosi, uint8_t
void TFT_T_DMA::setArea(uint16_t x1,uint16_t y1,uint16_t x2,uint16_t y2) {
int dx=0;
int dy=0;
#ifdef ST7789
if (TFT_REALWIDTH == TFT_REALHEIGHT)
{
#ifdef ROTATE_SCREEN
if (!flipped) {
dy += 80;
@ -231,7 +231,29 @@ void TFT_T_DMA::setArea(uint16_t x1,uint16_t y1,uint16_t x2,uint16_t y2) {
dx += 80;
}
#endif
}
#endif
digitalWrite(_dc, 0);
SPI.transfer(TFT_CASET);
digitalWrite(_dc, 1);
SPI.transfer16(x1+dx);
digitalWrite(_dc, 1);
SPI.transfer16(x2+dx);
digitalWrite(_dc, 0);
SPI.transfer(TFT_PASET);
digitalWrite(_dc, 1);
SPI.transfer16(y1+dy);
digitalWrite(_dc, 1);
SPI.transfer16(y2+dy);
digitalWrite(_dc, 0);
SPI.transfer(TFT_RAMWR);
digitalWrite(_dc, 1);
return;
SPI.beginTransaction(SPISettings(SPICLOCK, MSBFIRST, SPI_MODE));
digitalWrite(_cs, 0);
@ -257,6 +279,8 @@ void TFT_T_DMA::setArea(uint16_t x1,uint16_t y1,uint16_t x2,uint16_t y2) {
}
void TFT_T_DMA::begin(void) {
SPI.setMOSI(_mosi);
SPI.setMISO(_miso);
@ -264,16 +288,17 @@ void TFT_T_DMA::begin(void) {
SPI.begin();
// Initialize display
if (_rst < 255) { // toggle RST low to reset
if (_rst != 0xff) {
pinMode(_rst, OUTPUT);
digitalWrite(_rst, HIGH);
delay(5);
delay(100);
digitalWrite(_rst, LOW);
delay(20);
delay(100);
digitalWrite(_rst, HIGH);
delay(120);
delay(200);
}
SPI.beginTransaction(SPISettings(SPICLOCK, MSBFIRST, SPI_MODE));
const uint8_t *addr = init_commands;
digitalWrite(_cs, 0);
@ -307,7 +332,6 @@ void TFT_T_DMA::begin(void) {
SPI.transfer(ILI9341_DISPON);
digitalWrite(_dc, 1);
digitalWrite(_cs, 1);
SPI.endTransaction();
#endif
#ifdef ST7789
uint8_t numCommands, numArgs;
@ -332,22 +356,31 @@ void TFT_T_DMA::begin(void) {
if(ms) {
ms = *addr++; // Read post-command delay time (ms)
if(ms == 255) ms = 500; // If 255, delay for 500 ms
SPI.endTransaction();
digitalWrite(_dc, 1);
digitalWrite(_cs, 1);
SPI.endTransaction();
delay(ms);
//beginSPITransaction();
SPI.beginTransaction(SPISettings(SPICLOCK, MSBFIRST, SPI_MODE));
digitalWrite(_cs, 0);
}
}
digitalWrite(_cs, 1);
#endif
setArea(0, 0, TFT_REALWIDTH-1, TFT_REALHEIGHT-1);
SPI.endTransaction();
cancelled = false;
#ifdef FLIP_SCREEN
flipscreen(true);
#else
flipscreen(false);
#endif
#ifdef ST7789
if (TFT_REALWIDTH != TFT_REALHEIGHT)
{
flipscreen(true);
}
#endif
};
@ -434,6 +467,7 @@ void TFT_T_DMA::startDMA(void) {
#endif
dmatx = dmasettings[0];
digitalWrite(_cs, 0);
setArea((TFT_REALWIDTH-TFT_WIDTH)/2, (TFT_REALHEIGHT-TFT_HEIGHT)/2, (TFT_REALWIDTH-TFT_WIDTH)/2+TFT_WIDTH-1, (TFT_REALHEIGHT-TFT_HEIGHT)/2+TFT_HEIGHT-1);
digitalWrite(_dc, 0);
SPI.transfer(TFT_RAMWR);
digitalWrite(_dc, 1);
@ -623,17 +657,17 @@ void TFT_T_DMA::readCal(uint16_t * oX, uint16_t * oY, uint16_t * oZ) {
No DMA functions
***********************************************************************************************/
void TFT_T_DMA::fillScreenNoDma(uint16_t color) {
setArea(0, 0, TFT_REALWIDTH-1, TFT_REALHEIGHT-1);
SPI.beginTransaction(SPISettings(SPICLOCK, MSBFIRST, SPI_MODE));
digitalWrite(_cs, 0);
digitalWrite(_dc, 0);
SPI.transfer(TFT_RAMWR);
setArea(0, 0, TFT_REALWIDTH-1, TFT_REALHEIGHT-1);
//digitalWrite(_dc, 0);
//SPI.transfer(TFT_RAMWR);
int i,j;
for (j=0; j<TFT_REALHEIGHT; j++)
{
for (i=0; i<TFT_REALWIDTH; i++) {
digitalWrite(_dc, 1);
//digitalWrite(_dc, 1);
SPI.transfer16(color);
}
}
@ -643,24 +677,43 @@ void TFT_T_DMA::fillScreenNoDma(uint16_t color) {
digitalWrite(_dc, 1);
#endif
digitalWrite(_cs, 1);
SPI.endTransaction();
setArea(0, 0, (TFT_REALWIDTH-1), (TFT_REALHEIGHT-1));
SPI.endTransaction();
}
void TFT_T_DMA::writeScreenNoDma(const uint16_t *pcolors) {
setArea(0, 0, TFT_WIDTH-1, TFT_HEIGHT-1);
void TFT_T_DMA::drawRectNoDma(int16_t x, int16_t y, int16_t w, int16_t h, uint16_t color) {
SPI.beginTransaction(SPISettings(SPICLOCK, MSBFIRST, SPI_MODE));
digitalWrite(_cs, 0);
setArea(x,y,x+w-1,y+h-1);
// digitalWrite(_dc, 0);
// SPI.transfer(TFT_RAMWR);
int i;
for (i=0; i<(w*h); i++)
{
//digitalWrite(_dc, 1);
SPI.transfer16(color);
}
#ifdef ILI9341
digitalWrite(_dc, 0);
SPI.transfer(TFT_RAMWR);
SPI.transfer(ILI9341_SLPOUT);
digitalWrite(_dc, 1);
#endif
digitalWrite(_cs, 1);
setArea(0, 0, (TFT_REALWIDTH-1), (TFT_REALHEIGHT-1));
SPI.endTransaction();
}
void TFT_T_DMA::writeScreenNoDma(const uint16_t *pcolors) {
SPI.beginTransaction(SPISettings(SPICLOCK, MSBFIRST, SPI_MODE));
digitalWrite(_cs, 0);
setArea(0, 0, TFT_WIDTH-1, TFT_HEIGHT-1);
//digitalWrite(_dc, 0);
//SPI.transfer(TFT_RAMWR);
int i,j;
for (j=0; j<240; j++)
{
for (i=0; i<TFT_WIDTH; i++) {
digitalWrite(_dc, 1);
// digitalWrite(_dc, 1);
SPI.transfer16(*pcolors++);
}
}
@ -670,9 +723,8 @@ void TFT_T_DMA::writeScreenNoDma(const uint16_t *pcolors) {
digitalWrite(_dc, 1);
#endif
digitalWrite(_cs, 1);
SPI.endTransaction();
setArea(0, 0, (TFT_REALWIDTH-1), (TFT_REALHEIGHT-1));
SPI.endTransaction();
}
void TFT_T_DMA::drawSpriteNoDma(int16_t x, int16_t y, const uint16_t *bitmap) {
@ -723,12 +775,12 @@ void TFT_T_DMA::drawSpriteNoDma(int16_t x, int16_t y, const uint16_t *bitmap, ui
}
}
setArea(arx, ary, arx+arw-1, ary+arh-1);
SPI.beginTransaction(SPISettings(SPICLOCK, MSBFIRST, SPI_MODE));
digitalWrite(_cs, 0);
digitalWrite(_dc, 0);
SPI.transfer(TFT_RAMWR);
setArea(arx, ary, arx+arw-1, ary+arh-1);
//digitalWrite(_dc, 0);
//SPI.transfer(TFT_RAMWR);
bitmap = bitmap + bmp_offy*w + bmp_offx;
for (int row=0;row<arh; row++)
@ -737,7 +789,7 @@ void TFT_T_DMA::drawSpriteNoDma(int16_t x, int16_t y, const uint16_t *bitmap, ui
for (int col=0;col<arw; col++)
{
uint16_t color = *bmp_ptr++;
digitalWrite(_dc, 1);
// digitalWrite(_dc, 1);
SPI.transfer16(color);
}
bitmap += w;
@ -747,9 +799,9 @@ void TFT_T_DMA::drawSpriteNoDma(int16_t x, int16_t y, const uint16_t *bitmap, ui
SPI.transfer(ILI9341_SLPOUT);
digitalWrite(_dc, 1);
#endif
setArea(0, 0, TFT_REALWIDTH-1, TFT_REALHEIGHT-1);
digitalWrite(_cs, 1);
SPI.endTransaction();
setArea(0, 0, TFT_REALWIDTH-1, TFT_REALHEIGHT-1);
}
void TFT_T_DMA::drawTextNoDma(int16_t x, int16_t y, const char * text, uint16_t fgcolor, uint16_t bgcolor, bool doublesize) {
@ -757,20 +809,19 @@ void TFT_T_DMA::drawTextNoDma(int16_t x, int16_t y, const char * text, uint16_t
while ((c = *text++)) {
const unsigned char * charpt=&font8x8[c][0];
setArea(x,y,x+7,y+(doublesize?15:7));
//SPI.beginTransaction(SPISettings(SPICLOCK, MSBFIRST, SPI_MODE));
SPI.beginTransaction(SPISettings(SPICLOCK, MSBFIRST, SPI_MODE));
digitalWrite(_cs, 0);
setArea(x,y,x+7,y+(doublesize?15:7));
//digitalWrite(_dc, 0);
//SPI.transfer(TFT_RAMWR);
digitalWrite(_dc, 1);
//digitalWrite(_dc, 1);
for (int i=0;i<8;i++)
{
unsigned char bits;
if (doublesize) {
bits = *charpt;
digitalWrite(_dc, 1);
//digitalWrite(_dc, 1);
if (bits&0x01) SPI.transfer16(fgcolor);
else SPI.transfer16(bgcolor);
bits = bits >> 1;
@ -796,7 +847,7 @@ void TFT_T_DMA::drawTextNoDma(int16_t x, int16_t y, const char * text, uint16_t
else SPI.transfer16(bgcolor);
}
bits = *charpt++;
digitalWrite(_dc, 1);
//digitalWrite(_dc, 1);
if (bits&0x01) SPI.transfer16(fgcolor);
else SPI.transfer16(bgcolor);
bits = bits >> 1;
@ -831,35 +882,18 @@ void TFT_T_DMA::drawTextNoDma(int16_t x, int16_t y, const char * text, uint16_t
SPI.endTransaction();
}
setArea(0, 0, (TFT_REALWIDTH-1), (TFT_REALHEIGHT-1));
}
void TFT_T_DMA::drawRectNoDma(int16_t x, int16_t y, int16_t w, int16_t h, uint16_t color) {
setArea(x,y,x+w-1,y+h-1);
SPI.beginTransaction(SPISettings(SPICLOCK, MSBFIRST, SPI_MODE));
digitalWrite(_cs, 0);
digitalWrite(_dc, 0);
SPI.transfer(TFT_RAMWR);
int i;
for (i=0; i<(w*h); i++)
{
digitalWrite(_dc, 1);
SPI.transfer16(color);
}
#ifdef ILI9341
digitalWrite(_dc, 0);
SPI.transfer(ILI9341_SLPOUT);
digitalWrite(_dc, 1);
#endif
setArea(0, 0, (TFT_REALWIDTH-1), (TFT_REALHEIGHT-1));
digitalWrite(_cs, 1);
SPI.endTransaction();
setArea(0, 0, (TFT_REALWIDTH-1), (TFT_REALHEIGHT-1));
}
/***********************************************************************************************
DMA functions
***********************************************************************************************/

View file

@ -21,18 +21,15 @@
#define B16(rgb) ((rgb<<3)&0xf8)
#define TFT_HEIGHT 240
#ifdef ILI9341
#define TFT_WIDTH 256
#define TFT_REALWIDTH 320
#define TFT_REALHEIGHT 240
#endif
#ifdef ST7789
#ifdef LOHRES
#define TFT_WIDTH 240
#define TFT_REALWIDTH 240
#define TFT_REALHEIGHT 240
#else
#define TFT_WIDTH 256
#define TFT_REALWIDTH 320
#endif
#define TFT_HEIGHT 240
#define TFT_REALHEIGHT 240
#define LINES_PER_BLOCK 64
#define NR_OF_BLOCK 4

View file

@ -1,11 +1,7 @@
#include "platform_config.h"
#ifdef TEENSYBOY
#define ST7789 1
#define ROTATE_SCREEN 1
#else
#define ILI9341 1
#endif
//#define ST7789 1
//#define ILI9341 1
#define TFT_LINEARINT 1
#define LINEARINT_HACK 1

View file

@ -1373,7 +1373,7 @@ void emu_init(void)
emu_InitJoysticks();
#ifdef TEENSYBOY
#ifdef SWAP_JOYSTICK
joySwapped = true;
#else
joySwapped = false;

View file

@ -2,31 +2,17 @@
#define IOPINS_H
#include "platform_config.h"
#include "tft_t_dma_config.h"
#ifndef OLD_LAYOUT
#ifdef ST7789
// ST7789
#define TFT_SCLK 13
#define TFT_MOSI 11
#define TFT_MISO 12
#define TFT_TOUCH_CS 255
#define TFT_TOUCH_INT 255
#define TFT_DC 9
#define TFT_CS 255
#define TFT_RST 23
#else
// ILI9341
#define TFT_SCLK 13
#define TFT_MOSI 11
#define TFT_MISO 12
#define TFT_TOUCH_CS 255 //38
#define TFT_TOUCH_INT 255 //37
#define TFT_DC 9
#define TFT_CS 23
#define TFT_RST 255
#endif
#define TFT_CS 22 // 255 for LORES ST7789 (NO CS)
#define TFT_RST 23 // 255 for ILI/ST if connected to 3.3V
// PSRAM
#define PSRAM_CS 36
@ -38,10 +24,10 @@
#define SD_SCLK 13
#define SD_MOSI 12
#define SD_MISO 11
#ifdef TEENSYBOY
#define SD_CS BUILTIN_SDCARD
#ifdef EXTERNAL_SD
#define SD_CS 8
#else
#define SD_CS 5
#define SD_CS BUILTIN_SDCARD
#endif
// I2C keyboard
@ -54,17 +40,15 @@
#define PIN_JOY2_BTN 17
#define PIN_KEY_USER1 3 //34
#define PIN_KEY_USER2 4 //35
//#define PIN_KEY_USER3 255
//#define PIN_KEY_USER4 255
//#define PIN_KEY_USER3 33
//#define PIN_KEY_USER4 39
#ifdef TEENSYBOY
// Second joystick
#define PIN_JOY1_BTN 2
#define PIN_JOY1_1 14 // UP
#define PIN_JOY1_2 7 // DOWN
#define PIN_JOY1_3 6 // RIGHT
#define PIN_JOY1_4 5 // LEFT
#endif
#else
// OLD LAYOUT!!!!

View file

@ -2,9 +2,15 @@
#define _PLATFORM_CONFIG_H_
//#define OLD_LAYOUT 1
//#define TEENSYBOY 1
//#define HAS_PSRAM 1
#define ILI9341 1
//#define ST7789 1
//#define SWAP_JOYSTICK 1
//#define LOHRES 1
//#define ROTATE_SCREEN 1
#define EXTERNAL_SD 1
#define HAS_PSRAM 1
//#define USE_SDFAT 1
//#define SD_FAT_TYPE 1

View file

@ -107,7 +107,6 @@ PROGMEM static const uint8_t init_commands[] = {
#endif
};
static void dmaInterrupt() {
dmatx.clearInterrupt();
curTransfer++;
@ -220,8 +219,9 @@ TFT_T_DMA::TFT_T_DMA(uint8_t cs, uint8_t dc, uint8_t rst, uint8_t mosi, uint8_t
void TFT_T_DMA::setArea(uint16_t x1,uint16_t y1,uint16_t x2,uint16_t y2) {
int dx=0;
int dy=0;
#ifdef ST7789
if (TFT_REALWIDTH == TFT_REALHEIGHT)
{
#ifdef ROTATE_SCREEN
if (!flipped) {
dy += 80;
@ -231,7 +231,29 @@ void TFT_T_DMA::setArea(uint16_t x1,uint16_t y1,uint16_t x2,uint16_t y2) {
dx += 80;
}
#endif
}
#endif
digitalWrite(_dc, 0);
SPI.transfer(TFT_CASET);
digitalWrite(_dc, 1);
SPI.transfer16(x1+dx);
digitalWrite(_dc, 1);
SPI.transfer16(x2+dx);
digitalWrite(_dc, 0);
SPI.transfer(TFT_PASET);
digitalWrite(_dc, 1);
SPI.transfer16(y1+dy);
digitalWrite(_dc, 1);
SPI.transfer16(y2+dy);
digitalWrite(_dc, 0);
SPI.transfer(TFT_RAMWR);
digitalWrite(_dc, 1);
return;
SPI.beginTransaction(SPISettings(SPICLOCK, MSBFIRST, SPI_MODE));
digitalWrite(_cs, 0);
@ -257,6 +279,8 @@ void TFT_T_DMA::setArea(uint16_t x1,uint16_t y1,uint16_t x2,uint16_t y2) {
}
void TFT_T_DMA::begin(void) {
SPI.setMOSI(_mosi);
SPI.setMISO(_miso);
@ -264,16 +288,17 @@ void TFT_T_DMA::begin(void) {
SPI.begin();
// Initialize display
if (_rst < 255) { // toggle RST low to reset
if (_rst != 0xff) {
pinMode(_rst, OUTPUT);
digitalWrite(_rst, HIGH);
delay(5);
delay(100);
digitalWrite(_rst, LOW);
delay(20);
delay(100);
digitalWrite(_rst, HIGH);
delay(120);
delay(200);
}
SPI.beginTransaction(SPISettings(SPICLOCK, MSBFIRST, SPI_MODE));
const uint8_t *addr = init_commands;
digitalWrite(_cs, 0);
@ -307,7 +332,6 @@ void TFT_T_DMA::begin(void) {
SPI.transfer(ILI9341_DISPON);
digitalWrite(_dc, 1);
digitalWrite(_cs, 1);
SPI.endTransaction();
#endif
#ifdef ST7789
uint8_t numCommands, numArgs;
@ -332,22 +356,31 @@ void TFT_T_DMA::begin(void) {
if(ms) {
ms = *addr++; // Read post-command delay time (ms)
if(ms == 255) ms = 500; // If 255, delay for 500 ms
SPI.endTransaction();
digitalWrite(_dc, 1);
digitalWrite(_cs, 1);
SPI.endTransaction();
delay(ms);
//beginSPITransaction();
SPI.beginTransaction(SPISettings(SPICLOCK, MSBFIRST, SPI_MODE));
digitalWrite(_cs, 0);
}
}
digitalWrite(_cs, 1);
#endif
setArea(0, 0, TFT_REALWIDTH-1, TFT_REALHEIGHT-1);
SPI.endTransaction();
cancelled = false;
#ifdef FLIP_SCREEN
flipscreen(true);
#else
flipscreen(false);
#endif
#ifdef ST7789
if (TFT_REALWIDTH != TFT_REALHEIGHT)
{
flipscreen(true);
}
#endif
};
@ -434,6 +467,7 @@ void TFT_T_DMA::startDMA(void) {
#endif
dmatx = dmasettings[0];
digitalWrite(_cs, 0);
setArea((TFT_REALWIDTH-TFT_WIDTH)/2, (TFT_REALHEIGHT-TFT_HEIGHT)/2, (TFT_REALWIDTH-TFT_WIDTH)/2+TFT_WIDTH-1, (TFT_REALHEIGHT-TFT_HEIGHT)/2+TFT_HEIGHT-1);
digitalWrite(_dc, 0);
SPI.transfer(TFT_RAMWR);
digitalWrite(_dc, 1);
@ -623,17 +657,17 @@ void TFT_T_DMA::readCal(uint16_t * oX, uint16_t * oY, uint16_t * oZ) {
No DMA functions
***********************************************************************************************/
void TFT_T_DMA::fillScreenNoDma(uint16_t color) {
setArea(0, 0, TFT_REALWIDTH-1, TFT_REALHEIGHT-1);
SPI.beginTransaction(SPISettings(SPICLOCK, MSBFIRST, SPI_MODE));
digitalWrite(_cs, 0);
digitalWrite(_dc, 0);
SPI.transfer(TFT_RAMWR);
setArea(0, 0, TFT_REALWIDTH-1, TFT_REALHEIGHT-1);
//digitalWrite(_dc, 0);
//SPI.transfer(TFT_RAMWR);
int i,j;
for (j=0; j<TFT_REALHEIGHT; j++)
{
for (i=0; i<TFT_REALWIDTH; i++) {
digitalWrite(_dc, 1);
//digitalWrite(_dc, 1);
SPI.transfer16(color);
}
}
@ -643,24 +677,43 @@ void TFT_T_DMA::fillScreenNoDma(uint16_t color) {
digitalWrite(_dc, 1);
#endif
digitalWrite(_cs, 1);
SPI.endTransaction();
setArea(0, 0, (TFT_REALWIDTH-1), (TFT_REALHEIGHT-1));
SPI.endTransaction();
}
void TFT_T_DMA::writeScreenNoDma(const uint16_t *pcolors) {
setArea(0, 0, TFT_WIDTH-1, TFT_HEIGHT-1);
void TFT_T_DMA::drawRectNoDma(int16_t x, int16_t y, int16_t w, int16_t h, uint16_t color) {
SPI.beginTransaction(SPISettings(SPICLOCK, MSBFIRST, SPI_MODE));
digitalWrite(_cs, 0);
setArea(x,y,x+w-1,y+h-1);
// digitalWrite(_dc, 0);
// SPI.transfer(TFT_RAMWR);
int i;
for (i=0; i<(w*h); i++)
{
//digitalWrite(_dc, 1);
SPI.transfer16(color);
}
#ifdef ILI9341
digitalWrite(_dc, 0);
SPI.transfer(TFT_RAMWR);
SPI.transfer(ILI9341_SLPOUT);
digitalWrite(_dc, 1);
#endif
digitalWrite(_cs, 1);
setArea(0, 0, (TFT_REALWIDTH-1), (TFT_REALHEIGHT-1));
SPI.endTransaction();
}
void TFT_T_DMA::writeScreenNoDma(const uint16_t *pcolors) {
SPI.beginTransaction(SPISettings(SPICLOCK, MSBFIRST, SPI_MODE));
digitalWrite(_cs, 0);
setArea(0, 0, TFT_WIDTH-1, TFT_HEIGHT-1);
//digitalWrite(_dc, 0);
//SPI.transfer(TFT_RAMWR);
int i,j;
for (j=0; j<240; j++)
{
for (i=0; i<TFT_WIDTH; i++) {
digitalWrite(_dc, 1);
// digitalWrite(_dc, 1);
SPI.transfer16(*pcolors++);
}
}
@ -670,9 +723,8 @@ void TFT_T_DMA::writeScreenNoDma(const uint16_t *pcolors) {
digitalWrite(_dc, 1);
#endif
digitalWrite(_cs, 1);
SPI.endTransaction();
setArea(0, 0, (TFT_REALWIDTH-1), (TFT_REALHEIGHT-1));
SPI.endTransaction();
}
void TFT_T_DMA::drawSpriteNoDma(int16_t x, int16_t y, const uint16_t *bitmap) {
@ -723,12 +775,12 @@ void TFT_T_DMA::drawSpriteNoDma(int16_t x, int16_t y, const uint16_t *bitmap, ui
}
}
setArea(arx, ary, arx+arw-1, ary+arh-1);
SPI.beginTransaction(SPISettings(SPICLOCK, MSBFIRST, SPI_MODE));
digitalWrite(_cs, 0);
digitalWrite(_dc, 0);
SPI.transfer(TFT_RAMWR);
setArea(arx, ary, arx+arw-1, ary+arh-1);
//digitalWrite(_dc, 0);
//SPI.transfer(TFT_RAMWR);
bitmap = bitmap + bmp_offy*w + bmp_offx;
for (int row=0;row<arh; row++)
@ -737,7 +789,7 @@ void TFT_T_DMA::drawSpriteNoDma(int16_t x, int16_t y, const uint16_t *bitmap, ui
for (int col=0;col<arw; col++)
{
uint16_t color = *bmp_ptr++;
digitalWrite(_dc, 1);
// digitalWrite(_dc, 1);
SPI.transfer16(color);
}
bitmap += w;
@ -747,9 +799,9 @@ void TFT_T_DMA::drawSpriteNoDma(int16_t x, int16_t y, const uint16_t *bitmap, ui
SPI.transfer(ILI9341_SLPOUT);
digitalWrite(_dc, 1);
#endif
setArea(0, 0, TFT_REALWIDTH-1, TFT_REALHEIGHT-1);
digitalWrite(_cs, 1);
SPI.endTransaction();
setArea(0, 0, TFT_REALWIDTH-1, TFT_REALHEIGHT-1);
}
void TFT_T_DMA::drawTextNoDma(int16_t x, int16_t y, const char * text, uint16_t fgcolor, uint16_t bgcolor, bool doublesize) {
@ -757,20 +809,19 @@ void TFT_T_DMA::drawTextNoDma(int16_t x, int16_t y, const char * text, uint16_t
while ((c = *text++)) {
const unsigned char * charpt=&font8x8[c][0];
setArea(x,y,x+7,y+(doublesize?15:7));
//SPI.beginTransaction(SPISettings(SPICLOCK, MSBFIRST, SPI_MODE));
SPI.beginTransaction(SPISettings(SPICLOCK, MSBFIRST, SPI_MODE));
digitalWrite(_cs, 0);
setArea(x,y,x+7,y+(doublesize?15:7));
//digitalWrite(_dc, 0);
//SPI.transfer(TFT_RAMWR);
digitalWrite(_dc, 1);
//digitalWrite(_dc, 1);
for (int i=0;i<8;i++)
{
unsigned char bits;
if (doublesize) {
bits = *charpt;
digitalWrite(_dc, 1);
//digitalWrite(_dc, 1);
if (bits&0x01) SPI.transfer16(fgcolor);
else SPI.transfer16(bgcolor);
bits = bits >> 1;
@ -796,7 +847,7 @@ void TFT_T_DMA::drawTextNoDma(int16_t x, int16_t y, const char * text, uint16_t
else SPI.transfer16(bgcolor);
}
bits = *charpt++;
digitalWrite(_dc, 1);
//digitalWrite(_dc, 1);
if (bits&0x01) SPI.transfer16(fgcolor);
else SPI.transfer16(bgcolor);
bits = bits >> 1;
@ -831,35 +882,18 @@ void TFT_T_DMA::drawTextNoDma(int16_t x, int16_t y, const char * text, uint16_t
SPI.endTransaction();
}
setArea(0, 0, (TFT_REALWIDTH-1), (TFT_REALHEIGHT-1));
}
void TFT_T_DMA::drawRectNoDma(int16_t x, int16_t y, int16_t w, int16_t h, uint16_t color) {
setArea(x,y,x+w-1,y+h-1);
SPI.beginTransaction(SPISettings(SPICLOCK, MSBFIRST, SPI_MODE));
digitalWrite(_cs, 0);
digitalWrite(_dc, 0);
SPI.transfer(TFT_RAMWR);
int i;
for (i=0; i<(w*h); i++)
{
digitalWrite(_dc, 1);
SPI.transfer16(color);
}
#ifdef ILI9341
digitalWrite(_dc, 0);
SPI.transfer(ILI9341_SLPOUT);
digitalWrite(_dc, 1);
#endif
setArea(0, 0, (TFT_REALWIDTH-1), (TFT_REALHEIGHT-1));
digitalWrite(_cs, 1);
SPI.endTransaction();
setArea(0, 0, (TFT_REALWIDTH-1), (TFT_REALHEIGHT-1));
}
/***********************************************************************************************
DMA functions
***********************************************************************************************/

View file

@ -21,18 +21,16 @@
#define B16(rgb) ((rgb<<3)&0xf8)
#define TFT_HEIGHT 240
#ifdef ILI9341
#define TFT_WIDTH 320
#define TFT_REALWIDTH 320
#define TFT_REALHEIGHT 240
#endif
#ifdef ST7789
#ifdef LOHRES
#define TFT_WIDTH 240
#define TFT_REALWIDTH 240
#define TFT_REALHEIGHT 240
#else
#define TFT_WIDTH 320
#define TFT_REALWIDTH 320
#endif
#define TFT_HEIGHT 240
#define TFT_REALHEIGHT 240
#define LINES_PER_BLOCK 64
#define NR_OF_BLOCK 4

View file

@ -1,11 +1,7 @@
#include "platform_config.h"
#ifdef TEENSYBOY
#define ST7789 1
#define ROTATE_SCREEN 1
#else
#define ILI9341 1
#endif
//#define ST7789 1
//#define ILI9341 1
#define TFT_LINEARINT 1
#define LINEARINT_HACK 1

View file

@ -1373,7 +1373,7 @@ void emu_init(void)
emu_InitJoysticks();
#ifdef TEENSYBOY
#ifdef SWAP_JOYSTICK
joySwapped = true;
#else
joySwapped = false;

View file

@ -2,31 +2,17 @@
#define IOPINS_H
#include "platform_config.h"
#include "tft_t_dma_config.h"
#ifndef OLD_LAYOUT
#ifdef ST7789
// ST7789
#define TFT_SCLK 13
#define TFT_MOSI 11
#define TFT_MISO 12
#define TFT_TOUCH_CS 255
#define TFT_TOUCH_INT 255
#define TFT_DC 9
#define TFT_CS 255
#define TFT_RST 23
#else
// ILI9341
#define TFT_SCLK 13
#define TFT_MOSI 11
#define TFT_MISO 12
#define TFT_TOUCH_CS 255 //38
#define TFT_TOUCH_INT 255 //37
#define TFT_DC 9
#define TFT_CS 23
#define TFT_RST 255
#endif
#define TFT_CS 22 // 255 for LORES ST7789 (NO CS)
#define TFT_RST 23 // 255 for ILI/ST if connected to 3.3V
// PSRAM
#define PSRAM_CS 36
@ -38,10 +24,10 @@
#define SD_SCLK 13
#define SD_MOSI 12
#define SD_MISO 11
#ifdef TEENSYBOY
#define SD_CS BUILTIN_SDCARD
#ifdef EXTERNAL_SD
#define SD_CS 8
#else
#define SD_CS 5
#define SD_CS BUILTIN_SDCARD
#endif
// I2C keyboard
@ -54,17 +40,15 @@
#define PIN_JOY2_BTN 17
#define PIN_KEY_USER1 3 //34
#define PIN_KEY_USER2 4 //35
//#define PIN_KEY_USER3 255
//#define PIN_KEY_USER4 255
//#define PIN_KEY_USER3 33
//#define PIN_KEY_USER4 39
#ifdef TEENSYBOY
// Second joystick
#define PIN_JOY1_BTN 2
#define PIN_JOY1_1 14 // UP
#define PIN_JOY1_2 7 // DOWN
#define PIN_JOY1_3 6 // RIGHT
#define PIN_JOY1_4 5 // LEFT
#endif
#else
// OLD LAYOUT!!!!

View file

@ -2,7 +2,13 @@
#define _PLATFORM_CONFIG_H_
//#define OLD_LAYOUT 1
//#define TEENSYBOY 1
#define ILI9341 1
//#define ST7789 1
//#define SWAP_JOYSTICK 1
//#define LOHRES 1
//#define ROTATE_SCREEN 1
#define EXTERNAL_SD 1
#define HAS_PSRAM 1

View file

@ -107,7 +107,6 @@ PROGMEM static const uint8_t init_commands[] = {
#endif
};
static void dmaInterrupt() {
dmatx.clearInterrupt();
curTransfer++;
@ -220,8 +219,9 @@ TFT_T_DMA::TFT_T_DMA(uint8_t cs, uint8_t dc, uint8_t rst, uint8_t mosi, uint8_t
void TFT_T_DMA::setArea(uint16_t x1,uint16_t y1,uint16_t x2,uint16_t y2) {
int dx=0;
int dy=0;
#ifdef ST7789
if (TFT_REALWIDTH == TFT_REALHEIGHT)
{
#ifdef ROTATE_SCREEN
if (!flipped) {
dy += 80;
@ -231,7 +231,29 @@ void TFT_T_DMA::setArea(uint16_t x1,uint16_t y1,uint16_t x2,uint16_t y2) {
dx += 80;
}
#endif
}
#endif
digitalWrite(_dc, 0);
SPI.transfer(TFT_CASET);
digitalWrite(_dc, 1);
SPI.transfer16(x1+dx);
digitalWrite(_dc, 1);
SPI.transfer16(x2+dx);
digitalWrite(_dc, 0);
SPI.transfer(TFT_PASET);
digitalWrite(_dc, 1);
SPI.transfer16(y1+dy);
digitalWrite(_dc, 1);
SPI.transfer16(y2+dy);
digitalWrite(_dc, 0);
SPI.transfer(TFT_RAMWR);
digitalWrite(_dc, 1);
return;
SPI.beginTransaction(SPISettings(SPICLOCK, MSBFIRST, SPI_MODE));
digitalWrite(_cs, 0);
@ -257,6 +279,8 @@ void TFT_T_DMA::setArea(uint16_t x1,uint16_t y1,uint16_t x2,uint16_t y2) {
}
void TFT_T_DMA::begin(void) {
SPI.setMOSI(_mosi);
SPI.setMISO(_miso);
@ -264,16 +288,17 @@ void TFT_T_DMA::begin(void) {
SPI.begin();
// Initialize display
if (_rst < 255) { // toggle RST low to reset
if (_rst != 0xff) {
pinMode(_rst, OUTPUT);
digitalWrite(_rst, HIGH);
delay(5);
delay(100);
digitalWrite(_rst, LOW);
delay(20);
delay(100);
digitalWrite(_rst, HIGH);
delay(120);
delay(200);
}
SPI.beginTransaction(SPISettings(SPICLOCK, MSBFIRST, SPI_MODE));
const uint8_t *addr = init_commands;
digitalWrite(_cs, 0);
@ -307,7 +332,6 @@ void TFT_T_DMA::begin(void) {
SPI.transfer(ILI9341_DISPON);
digitalWrite(_dc, 1);
digitalWrite(_cs, 1);
SPI.endTransaction();
#endif
#ifdef ST7789
uint8_t numCommands, numArgs;
@ -332,22 +356,31 @@ void TFT_T_DMA::begin(void) {
if(ms) {
ms = *addr++; // Read post-command delay time (ms)
if(ms == 255) ms = 500; // If 255, delay for 500 ms
SPI.endTransaction();
digitalWrite(_dc, 1);
digitalWrite(_cs, 1);
SPI.endTransaction();
delay(ms);
//beginSPITransaction();
SPI.beginTransaction(SPISettings(SPICLOCK, MSBFIRST, SPI_MODE));
digitalWrite(_cs, 0);
}
}
digitalWrite(_cs, 1);
#endif
setArea(0, 0, TFT_REALWIDTH-1, TFT_REALHEIGHT-1);
SPI.endTransaction();
cancelled = false;
#ifdef FLIP_SCREEN
flipscreen(true);
#else
flipscreen(false);
#endif
#ifdef ST7789
if (TFT_REALWIDTH != TFT_REALHEIGHT)
{
flipscreen(true);
}
#endif
};
@ -434,6 +467,7 @@ void TFT_T_DMA::startDMA(void) {
#endif
dmatx = dmasettings[0];
digitalWrite(_cs, 0);
setArea((TFT_REALWIDTH-TFT_WIDTH)/2, (TFT_REALHEIGHT-TFT_HEIGHT)/2, (TFT_REALWIDTH-TFT_WIDTH)/2+TFT_WIDTH-1, (TFT_REALHEIGHT-TFT_HEIGHT)/2+TFT_HEIGHT-1);
digitalWrite(_dc, 0);
SPI.transfer(TFT_RAMWR);
digitalWrite(_dc, 1);
@ -623,17 +657,17 @@ void TFT_T_DMA::readCal(uint16_t * oX, uint16_t * oY, uint16_t * oZ) {
No DMA functions
***********************************************************************************************/
void TFT_T_DMA::fillScreenNoDma(uint16_t color) {
setArea(0, 0, TFT_REALWIDTH-1, TFT_REALHEIGHT-1);
SPI.beginTransaction(SPISettings(SPICLOCK, MSBFIRST, SPI_MODE));
digitalWrite(_cs, 0);
digitalWrite(_dc, 0);
SPI.transfer(TFT_RAMWR);
setArea(0, 0, TFT_REALWIDTH-1, TFT_REALHEIGHT-1);
//digitalWrite(_dc, 0);
//SPI.transfer(TFT_RAMWR);
int i,j;
for (j=0; j<TFT_REALHEIGHT; j++)
{
for (i=0; i<TFT_REALWIDTH; i++) {
digitalWrite(_dc, 1);
//digitalWrite(_dc, 1);
SPI.transfer16(color);
}
}
@ -643,24 +677,43 @@ void TFT_T_DMA::fillScreenNoDma(uint16_t color) {
digitalWrite(_dc, 1);
#endif
digitalWrite(_cs, 1);
SPI.endTransaction();
setArea(0, 0, (TFT_REALWIDTH-1), (TFT_REALHEIGHT-1));
SPI.endTransaction();
}
void TFT_T_DMA::writeScreenNoDma(const uint16_t *pcolors) {
setArea(0, 0, TFT_WIDTH-1, TFT_HEIGHT-1);
void TFT_T_DMA::drawRectNoDma(int16_t x, int16_t y, int16_t w, int16_t h, uint16_t color) {
SPI.beginTransaction(SPISettings(SPICLOCK, MSBFIRST, SPI_MODE));
digitalWrite(_cs, 0);
setArea(x,y,x+w-1,y+h-1);
// digitalWrite(_dc, 0);
// SPI.transfer(TFT_RAMWR);
int i;
for (i=0; i<(w*h); i++)
{
//digitalWrite(_dc, 1);
SPI.transfer16(color);
}
#ifdef ILI9341
digitalWrite(_dc, 0);
SPI.transfer(TFT_RAMWR);
SPI.transfer(ILI9341_SLPOUT);
digitalWrite(_dc, 1);
#endif
digitalWrite(_cs, 1);
setArea(0, 0, (TFT_REALWIDTH-1), (TFT_REALHEIGHT-1));
SPI.endTransaction();
}
void TFT_T_DMA::writeScreenNoDma(const uint16_t *pcolors) {
SPI.beginTransaction(SPISettings(SPICLOCK, MSBFIRST, SPI_MODE));
digitalWrite(_cs, 0);
setArea(0, 0, TFT_WIDTH-1, TFT_HEIGHT-1);
//digitalWrite(_dc, 0);
//SPI.transfer(TFT_RAMWR);
int i,j;
for (j=0; j<240; j++)
{
for (i=0; i<TFT_WIDTH; i++) {
digitalWrite(_dc, 1);
// digitalWrite(_dc, 1);
SPI.transfer16(*pcolors++);
}
}
@ -670,9 +723,8 @@ void TFT_T_DMA::writeScreenNoDma(const uint16_t *pcolors) {
digitalWrite(_dc, 1);
#endif
digitalWrite(_cs, 1);
SPI.endTransaction();
setArea(0, 0, (TFT_REALWIDTH-1), (TFT_REALHEIGHT-1));
SPI.endTransaction();
}
void TFT_T_DMA::drawSpriteNoDma(int16_t x, int16_t y, const uint16_t *bitmap) {
@ -723,12 +775,12 @@ void TFT_T_DMA::drawSpriteNoDma(int16_t x, int16_t y, const uint16_t *bitmap, ui
}
}
setArea(arx, ary, arx+arw-1, ary+arh-1);
SPI.beginTransaction(SPISettings(SPICLOCK, MSBFIRST, SPI_MODE));
digitalWrite(_cs, 0);
digitalWrite(_dc, 0);
SPI.transfer(TFT_RAMWR);
setArea(arx, ary, arx+arw-1, ary+arh-1);
//digitalWrite(_dc, 0);
//SPI.transfer(TFT_RAMWR);
bitmap = bitmap + bmp_offy*w + bmp_offx;
for (int row=0;row<arh; row++)
@ -737,7 +789,7 @@ void TFT_T_DMA::drawSpriteNoDma(int16_t x, int16_t y, const uint16_t *bitmap, ui
for (int col=0;col<arw; col++)
{
uint16_t color = *bmp_ptr++;
digitalWrite(_dc, 1);
// digitalWrite(_dc, 1);
SPI.transfer16(color);
}
bitmap += w;
@ -747,9 +799,9 @@ void TFT_T_DMA::drawSpriteNoDma(int16_t x, int16_t y, const uint16_t *bitmap, ui
SPI.transfer(ILI9341_SLPOUT);
digitalWrite(_dc, 1);
#endif
setArea(0, 0, TFT_REALWIDTH-1, TFT_REALHEIGHT-1);
digitalWrite(_cs, 1);
SPI.endTransaction();
setArea(0, 0, TFT_REALWIDTH-1, TFT_REALHEIGHT-1);
}
void TFT_T_DMA::drawTextNoDma(int16_t x, int16_t y, const char * text, uint16_t fgcolor, uint16_t bgcolor, bool doublesize) {
@ -757,20 +809,19 @@ void TFT_T_DMA::drawTextNoDma(int16_t x, int16_t y, const char * text, uint16_t
while ((c = *text++)) {
const unsigned char * charpt=&font8x8[c][0];
setArea(x,y,x+7,y+(doublesize?15:7));
//SPI.beginTransaction(SPISettings(SPICLOCK, MSBFIRST, SPI_MODE));
SPI.beginTransaction(SPISettings(SPICLOCK, MSBFIRST, SPI_MODE));
digitalWrite(_cs, 0);
setArea(x,y,x+7,y+(doublesize?15:7));
//digitalWrite(_dc, 0);
//SPI.transfer(TFT_RAMWR);
digitalWrite(_dc, 1);
//digitalWrite(_dc, 1);
for (int i=0;i<8;i++)
{
unsigned char bits;
if (doublesize) {
bits = *charpt;
digitalWrite(_dc, 1);
//digitalWrite(_dc, 1);
if (bits&0x01) SPI.transfer16(fgcolor);
else SPI.transfer16(bgcolor);
bits = bits >> 1;
@ -796,7 +847,7 @@ void TFT_T_DMA::drawTextNoDma(int16_t x, int16_t y, const char * text, uint16_t
else SPI.transfer16(bgcolor);
}
bits = *charpt++;
digitalWrite(_dc, 1);
//digitalWrite(_dc, 1);
if (bits&0x01) SPI.transfer16(fgcolor);
else SPI.transfer16(bgcolor);
bits = bits >> 1;
@ -831,35 +882,18 @@ void TFT_T_DMA::drawTextNoDma(int16_t x, int16_t y, const char * text, uint16_t
SPI.endTransaction();
}
setArea(0, 0, (TFT_REALWIDTH-1), (TFT_REALHEIGHT-1));
}
void TFT_T_DMA::drawRectNoDma(int16_t x, int16_t y, int16_t w, int16_t h, uint16_t color) {
setArea(x,y,x+w-1,y+h-1);
SPI.beginTransaction(SPISettings(SPICLOCK, MSBFIRST, SPI_MODE));
digitalWrite(_cs, 0);
digitalWrite(_dc, 0);
SPI.transfer(TFT_RAMWR);
int i;
for (i=0; i<(w*h); i++)
{
digitalWrite(_dc, 1);
SPI.transfer16(color);
}
#ifdef ILI9341
digitalWrite(_dc, 0);
SPI.transfer(ILI9341_SLPOUT);
digitalWrite(_dc, 1);
#endif
setArea(0, 0, (TFT_REALWIDTH-1), (TFT_REALHEIGHT-1));
digitalWrite(_cs, 1);
SPI.endTransaction();
setArea(0, 0, (TFT_REALWIDTH-1), (TFT_REALHEIGHT-1));
}
/***********************************************************************************************
DMA functions
***********************************************************************************************/

View file

@ -22,18 +22,15 @@
#define PAL_COLOR_MASK 0xff
#define TFT_HEIGHT 240
#ifdef ILI9341
#define TFT_WIDTH 256
#define TFT_REALWIDTH 320
#define TFT_REALHEIGHT 240
#endif
#ifdef ST7789
#ifdef LOHRES
#define TFT_WIDTH 240
#define TFT_REALWIDTH 240
#define TFT_REALHEIGHT 240
#else
#define TFT_WIDTH 256
#define TFT_REALWIDTH 320
#endif
#define TFT_HEIGHT 240
#define TFT_REALHEIGHT 240
#define LINES_PER_BLOCK 64
#define NR_OF_BLOCK 4

View file

@ -1,11 +1,7 @@
#include "platform_config.h"
#ifdef TEENSYBOY
#define ST7789 1
#define ROTATE_SCREEN 1
#else
#define ILI9341 1
#endif
//#define ST7789 1
//#define ILI9341 1
#define TFT_LINEARINT 1
#define LINEARINT_HACK 1

View file

@ -1373,7 +1373,7 @@ void emu_init(void)
emu_InitJoysticks();
#ifdef TEENSYBOY
#ifdef SWAP_JOYSTICK
joySwapped = true;
#else
joySwapped = false;

View file

@ -2,31 +2,17 @@
#define IOPINS_H
#include "platform_config.h"
#include "tft_t_dma_config.h"
#ifndef OLD_LAYOUT
#ifdef ST7789
// ST7789
#define TFT_SCLK 13
#define TFT_MOSI 11
#define TFT_MISO 12
#define TFT_TOUCH_CS 255
#define TFT_TOUCH_INT 255
#define TFT_DC 9
#define TFT_CS 255
#define TFT_RST 23
#else
// ILI9341
#define TFT_SCLK 13
#define TFT_MOSI 11
#define TFT_MISO 12
#define TFT_TOUCH_CS 255 //38
#define TFT_TOUCH_INT 255 //37
#define TFT_DC 9
#define TFT_CS 23
#define TFT_RST 255
#endif
#define TFT_CS 22 // 255 for LORES ST7789 (NO CS)
#define TFT_RST 23 // 255 for ILI/ST if connected to 3.3V
// PSRAM
#define PSRAM_CS 36
@ -38,10 +24,10 @@
#define SD_SCLK 13
#define SD_MOSI 12
#define SD_MISO 11
#ifdef TEENSYBOY
#define SD_CS BUILTIN_SDCARD
#ifdef EXTERNAL_SD
#define SD_CS 8
#else
#define SD_CS 5
#define SD_CS BUILTIN_SDCARD
#endif
// I2C keyboard
@ -54,17 +40,15 @@
#define PIN_JOY2_BTN 17
#define PIN_KEY_USER1 3 //34
#define PIN_KEY_USER2 4 //35
//#define PIN_KEY_USER3 255
//#define PIN_KEY_USER4 255
//#define PIN_KEY_USER3 33
//#define PIN_KEY_USER4 39
#ifdef TEENSYBOY
// Second joystick
#define PIN_JOY1_BTN 2
#define PIN_JOY1_1 14 // UP
#define PIN_JOY1_2 7 // DOWN
#define PIN_JOY1_3 6 // RIGHT
#define PIN_JOY1_4 5 // LEFT
#endif
#else
// OLD LAYOUT!!!!

View file

@ -2,7 +2,13 @@
#define _PLATFORM_CONFIG_H_
//#define OLD_LAYOUT 1
//#define TEENSYBOY 1
#define ILI9341 1
//#define ST7789 1
//#define SWAP_JOYSTICK 1
//#define LOHRES 1
//#define ROTATE_SCREEN 1
#define EXTERNAL_SD 1
#define HAS_PSRAM 1

View file

@ -240,6 +240,7 @@ Serial.printf("D") ; Serial.flush();
#include "emuapi.h"
#define MAXPSRAM (256*1024)
PSRAM_T::PSRAM_T(uint8_t cs, uint8_t mosi, uint8_t sclk, uint8_t miso)
{
@ -247,17 +248,22 @@ PSRAM_T::PSRAM_T(uint8_t cs, uint8_t mosi, uint8_t sclk, uint8_t miso)
void PSRAM_T::begin(void)
{
// emu_Malloc(MAXPSRAM);
emu_FileTempInit();
}
void PSRAM_T::psram_read_n(uint32_t addr, uint8_t * val, int n)
{
//if (addr >= MAXPSRAM)
// return;
emu_FileTempRead(addr,val,n);
}
void PSRAM_T::psram_write(uint32_t addr, uint8_t val)
{
//if (addr >= MAXPSRAM)
// return;
emu_FileTempWrite(addr,val);
}

View file

@ -107,7 +107,6 @@ PROGMEM static const uint8_t init_commands[] = {
#endif
};
static void dmaInterrupt() {
dmatx.clearInterrupt();
curTransfer++;
@ -220,8 +219,9 @@ TFT_T_DMA::TFT_T_DMA(uint8_t cs, uint8_t dc, uint8_t rst, uint8_t mosi, uint8_t
void TFT_T_DMA::setArea(uint16_t x1,uint16_t y1,uint16_t x2,uint16_t y2) {
int dx=0;
int dy=0;
#ifdef ST7789
if (TFT_REALWIDTH == TFT_REALHEIGHT)
{
#ifdef ROTATE_SCREEN
if (!flipped) {
dy += 80;
@ -231,7 +231,29 @@ void TFT_T_DMA::setArea(uint16_t x1,uint16_t y1,uint16_t x2,uint16_t y2) {
dx += 80;
}
#endif
}
#endif
digitalWrite(_dc, 0);
SPI.transfer(TFT_CASET);
digitalWrite(_dc, 1);
SPI.transfer16(x1+dx);
digitalWrite(_dc, 1);
SPI.transfer16(x2+dx);
digitalWrite(_dc, 0);
SPI.transfer(TFT_PASET);
digitalWrite(_dc, 1);
SPI.transfer16(y1+dy);
digitalWrite(_dc, 1);
SPI.transfer16(y2+dy);
digitalWrite(_dc, 0);
SPI.transfer(TFT_RAMWR);
digitalWrite(_dc, 1);
return;
SPI.beginTransaction(SPISettings(SPICLOCK, MSBFIRST, SPI_MODE));
digitalWrite(_cs, 0);
@ -257,6 +279,8 @@ void TFT_T_DMA::setArea(uint16_t x1,uint16_t y1,uint16_t x2,uint16_t y2) {
}
void TFT_T_DMA::begin(void) {
SPI.setMOSI(_mosi);
SPI.setMISO(_miso);
@ -264,16 +288,17 @@ void TFT_T_DMA::begin(void) {
SPI.begin();
// Initialize display
if (_rst < 255) { // toggle RST low to reset
if (_rst != 0xff) {
pinMode(_rst, OUTPUT);
digitalWrite(_rst, HIGH);
delay(5);
delay(100);
digitalWrite(_rst, LOW);
delay(20);
delay(100);
digitalWrite(_rst, HIGH);
delay(120);
delay(200);
}
SPI.beginTransaction(SPISettings(SPICLOCK, MSBFIRST, SPI_MODE));
const uint8_t *addr = init_commands;
digitalWrite(_cs, 0);
@ -307,7 +332,6 @@ void TFT_T_DMA::begin(void) {
SPI.transfer(ILI9341_DISPON);
digitalWrite(_dc, 1);
digitalWrite(_cs, 1);
SPI.endTransaction();
#endif
#ifdef ST7789
uint8_t numCommands, numArgs;
@ -332,22 +356,31 @@ void TFT_T_DMA::begin(void) {
if(ms) {
ms = *addr++; // Read post-command delay time (ms)
if(ms == 255) ms = 500; // If 255, delay for 500 ms
SPI.endTransaction();
digitalWrite(_dc, 1);
digitalWrite(_cs, 1);
SPI.endTransaction();
delay(ms);
//beginSPITransaction();
SPI.beginTransaction(SPISettings(SPICLOCK, MSBFIRST, SPI_MODE));
digitalWrite(_cs, 0);
}
}
digitalWrite(_cs, 1);
#endif
setArea(0, 0, TFT_REALWIDTH-1, TFT_REALHEIGHT-1);
SPI.endTransaction();
cancelled = false;
#ifdef FLIP_SCREEN
flipscreen(true);
#else
flipscreen(false);
#endif
#ifdef ST7789
if (TFT_REALWIDTH != TFT_REALHEIGHT)
{
flipscreen(true);
}
#endif
};
@ -434,6 +467,7 @@ void TFT_T_DMA::startDMA(void) {
#endif
dmatx = dmasettings[0];
digitalWrite(_cs, 0);
setArea((TFT_REALWIDTH-TFT_WIDTH)/2, (TFT_REALHEIGHT-TFT_HEIGHT)/2, (TFT_REALWIDTH-TFT_WIDTH)/2+TFT_WIDTH-1, (TFT_REALHEIGHT-TFT_HEIGHT)/2+TFT_HEIGHT-1);
digitalWrite(_dc, 0);
SPI.transfer(TFT_RAMWR);
digitalWrite(_dc, 1);
@ -623,17 +657,17 @@ void TFT_T_DMA::readCal(uint16_t * oX, uint16_t * oY, uint16_t * oZ) {
No DMA functions
***********************************************************************************************/
void TFT_T_DMA::fillScreenNoDma(uint16_t color) {
setArea(0, 0, TFT_REALWIDTH-1, TFT_REALHEIGHT-1);
SPI.beginTransaction(SPISettings(SPICLOCK, MSBFIRST, SPI_MODE));
digitalWrite(_cs, 0);
digitalWrite(_dc, 0);
SPI.transfer(TFT_RAMWR);
setArea(0, 0, TFT_REALWIDTH-1, TFT_REALHEIGHT-1);
//digitalWrite(_dc, 0);
//SPI.transfer(TFT_RAMWR);
int i,j;
for (j=0; j<TFT_REALHEIGHT; j++)
{
for (i=0; i<TFT_REALWIDTH; i++) {
digitalWrite(_dc, 1);
//digitalWrite(_dc, 1);
SPI.transfer16(color);
}
}
@ -643,24 +677,43 @@ void TFT_T_DMA::fillScreenNoDma(uint16_t color) {
digitalWrite(_dc, 1);
#endif
digitalWrite(_cs, 1);
SPI.endTransaction();
setArea(0, 0, (TFT_REALWIDTH-1), (TFT_REALHEIGHT-1));
SPI.endTransaction();
}
void TFT_T_DMA::writeScreenNoDma(const uint16_t *pcolors) {
setArea(0, 0, TFT_WIDTH-1, TFT_HEIGHT-1);
void TFT_T_DMA::drawRectNoDma(int16_t x, int16_t y, int16_t w, int16_t h, uint16_t color) {
SPI.beginTransaction(SPISettings(SPICLOCK, MSBFIRST, SPI_MODE));
digitalWrite(_cs, 0);
setArea(x,y,x+w-1,y+h-1);
// digitalWrite(_dc, 0);
// SPI.transfer(TFT_RAMWR);
int i;
for (i=0; i<(w*h); i++)
{
//digitalWrite(_dc, 1);
SPI.transfer16(color);
}
#ifdef ILI9341
digitalWrite(_dc, 0);
SPI.transfer(TFT_RAMWR);
SPI.transfer(ILI9341_SLPOUT);
digitalWrite(_dc, 1);
#endif
digitalWrite(_cs, 1);
setArea(0, 0, (TFT_REALWIDTH-1), (TFT_REALHEIGHT-1));
SPI.endTransaction();
}
void TFT_T_DMA::writeScreenNoDma(const uint16_t *pcolors) {
SPI.beginTransaction(SPISettings(SPICLOCK, MSBFIRST, SPI_MODE));
digitalWrite(_cs, 0);
setArea(0, 0, TFT_WIDTH-1, TFT_HEIGHT-1);
//digitalWrite(_dc, 0);
//SPI.transfer(TFT_RAMWR);
int i,j;
for (j=0; j<240; j++)
{
for (i=0; i<TFT_WIDTH; i++) {
digitalWrite(_dc, 1);
// digitalWrite(_dc, 1);
SPI.transfer16(*pcolors++);
}
}
@ -670,9 +723,8 @@ void TFT_T_DMA::writeScreenNoDma(const uint16_t *pcolors) {
digitalWrite(_dc, 1);
#endif
digitalWrite(_cs, 1);
SPI.endTransaction();
setArea(0, 0, (TFT_REALWIDTH-1), (TFT_REALHEIGHT-1));
SPI.endTransaction();
}
void TFT_T_DMA::drawSpriteNoDma(int16_t x, int16_t y, const uint16_t *bitmap) {
@ -723,12 +775,12 @@ void TFT_T_DMA::drawSpriteNoDma(int16_t x, int16_t y, const uint16_t *bitmap, ui
}
}
setArea(arx, ary, arx+arw-1, ary+arh-1);
SPI.beginTransaction(SPISettings(SPICLOCK, MSBFIRST, SPI_MODE));
digitalWrite(_cs, 0);
digitalWrite(_dc, 0);
SPI.transfer(TFT_RAMWR);
setArea(arx, ary, arx+arw-1, ary+arh-1);
//digitalWrite(_dc, 0);
//SPI.transfer(TFT_RAMWR);
bitmap = bitmap + bmp_offy*w + bmp_offx;
for (int row=0;row<arh; row++)
@ -737,7 +789,7 @@ void TFT_T_DMA::drawSpriteNoDma(int16_t x, int16_t y, const uint16_t *bitmap, ui
for (int col=0;col<arw; col++)
{
uint16_t color = *bmp_ptr++;
digitalWrite(_dc, 1);
// digitalWrite(_dc, 1);
SPI.transfer16(color);
}
bitmap += w;
@ -747,9 +799,9 @@ void TFT_T_DMA::drawSpriteNoDma(int16_t x, int16_t y, const uint16_t *bitmap, ui
SPI.transfer(ILI9341_SLPOUT);
digitalWrite(_dc, 1);
#endif
setArea(0, 0, TFT_REALWIDTH-1, TFT_REALHEIGHT-1);
digitalWrite(_cs, 1);
SPI.endTransaction();
setArea(0, 0, TFT_REALWIDTH-1, TFT_REALHEIGHT-1);
}
void TFT_T_DMA::drawTextNoDma(int16_t x, int16_t y, const char * text, uint16_t fgcolor, uint16_t bgcolor, bool doublesize) {
@ -757,20 +809,19 @@ void TFT_T_DMA::drawTextNoDma(int16_t x, int16_t y, const char * text, uint16_t
while ((c = *text++)) {
const unsigned char * charpt=&font8x8[c][0];
setArea(x,y,x+7,y+(doublesize?15:7));
//SPI.beginTransaction(SPISettings(SPICLOCK, MSBFIRST, SPI_MODE));
SPI.beginTransaction(SPISettings(SPICLOCK, MSBFIRST, SPI_MODE));
digitalWrite(_cs, 0);
setArea(x,y,x+7,y+(doublesize?15:7));
//digitalWrite(_dc, 0);
//SPI.transfer(TFT_RAMWR);
digitalWrite(_dc, 1);
//digitalWrite(_dc, 1);
for (int i=0;i<8;i++)
{
unsigned char bits;
if (doublesize) {
bits = *charpt;
digitalWrite(_dc, 1);
//digitalWrite(_dc, 1);
if (bits&0x01) SPI.transfer16(fgcolor);
else SPI.transfer16(bgcolor);
bits = bits >> 1;
@ -796,7 +847,7 @@ void TFT_T_DMA::drawTextNoDma(int16_t x, int16_t y, const char * text, uint16_t
else SPI.transfer16(bgcolor);
}
bits = *charpt++;
digitalWrite(_dc, 1);
//digitalWrite(_dc, 1);
if (bits&0x01) SPI.transfer16(fgcolor);
else SPI.transfer16(bgcolor);
bits = bits >> 1;
@ -831,35 +882,18 @@ void TFT_T_DMA::drawTextNoDma(int16_t x, int16_t y, const char * text, uint16_t
SPI.endTransaction();
}
setArea(0, 0, (TFT_REALWIDTH-1), (TFT_REALHEIGHT-1));
}
void TFT_T_DMA::drawRectNoDma(int16_t x, int16_t y, int16_t w, int16_t h, uint16_t color) {
setArea(x,y,x+w-1,y+h-1);
SPI.beginTransaction(SPISettings(SPICLOCK, MSBFIRST, SPI_MODE));
digitalWrite(_cs, 0);
digitalWrite(_dc, 0);
SPI.transfer(TFT_RAMWR);
int i;
for (i=0; i<(w*h); i++)
{
digitalWrite(_dc, 1);
SPI.transfer16(color);
}
#ifdef ILI9341
digitalWrite(_dc, 0);
SPI.transfer(ILI9341_SLPOUT);
digitalWrite(_dc, 1);
#endif
setArea(0, 0, (TFT_REALWIDTH-1), (TFT_REALHEIGHT-1));
digitalWrite(_cs, 1);
SPI.endTransaction();
setArea(0, 0, (TFT_REALWIDTH-1), (TFT_REALHEIGHT-1));
}
/***********************************************************************************************
DMA functions
***********************************************************************************************/

View file

@ -21,18 +21,15 @@
#define B16(rgb) ((rgb<<3)&0xf8)
#define TFT_HEIGHT 192
#ifdef ILI9341
#define TFT_WIDTH 256
#define TFT_REALWIDTH 320
#define TFT_REALHEIGHT 240
#endif
#ifdef ST7789
#ifdef LOHRES
#define TFT_WIDTH 240
#define TFT_REALWIDTH 240
#define TFT_REALHEIGHT 240
#else
#define TFT_WIDTH 256
#define TFT_REALWIDTH 320
#endif
#define TFT_HEIGHT 192
#define TFT_REALHEIGHT 240
#define LINES_PER_BLOCK 64
#define NR_OF_BLOCK 4

View file

@ -1,11 +1,7 @@
#include "platform_config.h"
#ifdef TEENSYBOY
#define ST7789 1
#define ROTATE_SCREEN 1
#else
#define ILI9341 1
#endif
//#define ST7789 1
//#define ILI9341 1
#define TFT_LINEARINT 1
#define LINEARINT_HACK 1

View file

@ -1373,7 +1373,7 @@ void emu_init(void)
emu_InitJoysticks();
#ifdef TEENSYBOY
#ifdef SWAP_JOYSTICK
joySwapped = true;
#else
joySwapped = false;

View file

@ -2,31 +2,17 @@
#define IOPINS_H
#include "platform_config.h"
#include "tft_t_dma_config.h"
#ifndef OLD_LAYOUT
#ifdef ST7789
// ST7789
#define TFT_SCLK 13
#define TFT_MOSI 11
#define TFT_MISO 12
#define TFT_TOUCH_CS 255
#define TFT_TOUCH_INT 255
#define TFT_DC 9
#define TFT_CS 255
#define TFT_RST 23
#else
// ILI9341
#define TFT_SCLK 13
#define TFT_MOSI 11
#define TFT_MISO 12
#define TFT_TOUCH_CS 255 //38
#define TFT_TOUCH_INT 255 //37
#define TFT_DC 9
#define TFT_CS 23
#define TFT_RST 255
#endif
#define TFT_CS 22 // 255 for LORES ST7789 (NO CS)
#define TFT_RST 23 // 255 for ILI/ST if connected to 3.3V
// PSRAM
#define PSRAM_CS 36
@ -38,10 +24,10 @@
#define SD_SCLK 13
#define SD_MOSI 12
#define SD_MISO 11
#ifdef TEENSYBOY
#define SD_CS BUILTIN_SDCARD
#ifdef EXTERNAL_SD
#define SD_CS 8
#else
#define SD_CS 5
#define SD_CS BUILTIN_SDCARD
#endif
// I2C keyboard
@ -54,17 +40,15 @@
#define PIN_JOY2_BTN 17
#define PIN_KEY_USER1 3 //34
#define PIN_KEY_USER2 4 //35
//#define PIN_KEY_USER3 255
//#define PIN_KEY_USER4 255
//#define PIN_KEY_USER3 33
//#define PIN_KEY_USER4 39
#ifdef TEENSYBOY
// Second joystick
#define PIN_JOY1_BTN 2
#define PIN_JOY1_1 14 // UP
#define PIN_JOY1_2 7 // DOWN
#define PIN_JOY1_3 6 // RIGHT
#define PIN_JOY1_4 5 // LEFT
#endif
#else
// OLD LAYOUT!!!!

View file

@ -2,9 +2,15 @@
#define _PLATFORM_CONFIG_H_
//#define OLD_LAYOUT 1
//#define TEENSYBOY 1
//#define HAS_PSRAM 1
#define ILI9341 1
//#define ST7789 1
//#define SWAP_JOYSTICK 1
//#define LOHRES 1
//#define ROTATE_SCREEN 1
#define EXTERNAL_SD 1
#define HAS_PSRAM 1
//#define USE_SDFAT 1
//#define SD_FAT_TYPE 1

View file

@ -107,7 +107,6 @@ PROGMEM static const uint8_t init_commands[] = {
#endif
};
static void dmaInterrupt() {
dmatx.clearInterrupt();
curTransfer++;
@ -220,8 +219,9 @@ TFT_T_DMA::TFT_T_DMA(uint8_t cs, uint8_t dc, uint8_t rst, uint8_t mosi, uint8_t
void TFT_T_DMA::setArea(uint16_t x1,uint16_t y1,uint16_t x2,uint16_t y2) {
int dx=0;
int dy=0;
#ifdef ST7789
if (TFT_REALWIDTH == TFT_REALHEIGHT)
{
#ifdef ROTATE_SCREEN
if (!flipped) {
dy += 80;
@ -231,7 +231,29 @@ void TFT_T_DMA::setArea(uint16_t x1,uint16_t y1,uint16_t x2,uint16_t y2) {
dx += 80;
}
#endif
}
#endif
digitalWrite(_dc, 0);
SPI.transfer(TFT_CASET);
digitalWrite(_dc, 1);
SPI.transfer16(x1+dx);
digitalWrite(_dc, 1);
SPI.transfer16(x2+dx);
digitalWrite(_dc, 0);
SPI.transfer(TFT_PASET);
digitalWrite(_dc, 1);
SPI.transfer16(y1+dy);
digitalWrite(_dc, 1);
SPI.transfer16(y2+dy);
digitalWrite(_dc, 0);
SPI.transfer(TFT_RAMWR);
digitalWrite(_dc, 1);
return;
SPI.beginTransaction(SPISettings(SPICLOCK, MSBFIRST, SPI_MODE));
digitalWrite(_cs, 0);
@ -257,6 +279,8 @@ void TFT_T_DMA::setArea(uint16_t x1,uint16_t y1,uint16_t x2,uint16_t y2) {
}
void TFT_T_DMA::begin(void) {
SPI.setMOSI(_mosi);
SPI.setMISO(_miso);
@ -264,16 +288,17 @@ void TFT_T_DMA::begin(void) {
SPI.begin();
// Initialize display
if (_rst < 255) { // toggle RST low to reset
if (_rst != 0xff) {
pinMode(_rst, OUTPUT);
digitalWrite(_rst, HIGH);
delay(5);
delay(100);
digitalWrite(_rst, LOW);
delay(20);
delay(100);
digitalWrite(_rst, HIGH);
delay(120);
delay(200);
}
SPI.beginTransaction(SPISettings(SPICLOCK, MSBFIRST, SPI_MODE));
const uint8_t *addr = init_commands;
digitalWrite(_cs, 0);
@ -307,7 +332,6 @@ void TFT_T_DMA::begin(void) {
SPI.transfer(ILI9341_DISPON);
digitalWrite(_dc, 1);
digitalWrite(_cs, 1);
SPI.endTransaction();
#endif
#ifdef ST7789
uint8_t numCommands, numArgs;
@ -332,22 +356,31 @@ void TFT_T_DMA::begin(void) {
if(ms) {
ms = *addr++; // Read post-command delay time (ms)
if(ms == 255) ms = 500; // If 255, delay for 500 ms
SPI.endTransaction();
digitalWrite(_dc, 1);
digitalWrite(_cs, 1);
SPI.endTransaction();
delay(ms);
//beginSPITransaction();
SPI.beginTransaction(SPISettings(SPICLOCK, MSBFIRST, SPI_MODE));
digitalWrite(_cs, 0);
}
}
digitalWrite(_cs, 1);
#endif
setArea(0, 0, TFT_REALWIDTH-1, TFT_REALHEIGHT-1);
SPI.endTransaction();
cancelled = false;
#ifdef FLIP_SCREEN
flipscreen(true);
#else
flipscreen(false);
#endif
#ifdef ST7789
if (TFT_REALWIDTH != TFT_REALHEIGHT)
{
flipscreen(true);
}
#endif
};
@ -434,6 +467,7 @@ void TFT_T_DMA::startDMA(void) {
#endif
dmatx = dmasettings[0];
digitalWrite(_cs, 0);
setArea((TFT_REALWIDTH-TFT_WIDTH)/2, (TFT_REALHEIGHT-TFT_HEIGHT)/2, (TFT_REALWIDTH-TFT_WIDTH)/2+TFT_WIDTH-1, (TFT_REALHEIGHT-TFT_HEIGHT)/2+TFT_HEIGHT-1);
digitalWrite(_dc, 0);
SPI.transfer(TFT_RAMWR);
digitalWrite(_dc, 1);
@ -623,17 +657,17 @@ void TFT_T_DMA::readCal(uint16_t * oX, uint16_t * oY, uint16_t * oZ) {
No DMA functions
***********************************************************************************************/
void TFT_T_DMA::fillScreenNoDma(uint16_t color) {
setArea(0, 0, TFT_REALWIDTH-1, TFT_REALHEIGHT-1);
SPI.beginTransaction(SPISettings(SPICLOCK, MSBFIRST, SPI_MODE));
digitalWrite(_cs, 0);
digitalWrite(_dc, 0);
SPI.transfer(TFT_RAMWR);
setArea(0, 0, TFT_REALWIDTH-1, TFT_REALHEIGHT-1);
//digitalWrite(_dc, 0);
//SPI.transfer(TFT_RAMWR);
int i,j;
for (j=0; j<TFT_REALHEIGHT; j++)
{
for (i=0; i<TFT_REALWIDTH; i++) {
digitalWrite(_dc, 1);
//digitalWrite(_dc, 1);
SPI.transfer16(color);
}
}
@ -643,24 +677,43 @@ void TFT_T_DMA::fillScreenNoDma(uint16_t color) {
digitalWrite(_dc, 1);
#endif
digitalWrite(_cs, 1);
SPI.endTransaction();
setArea(0, 0, (TFT_REALWIDTH-1), (TFT_REALHEIGHT-1));
SPI.endTransaction();
}
void TFT_T_DMA::writeScreenNoDma(const uint16_t *pcolors) {
setArea(0, 0, TFT_WIDTH-1, TFT_HEIGHT-1);
void TFT_T_DMA::drawRectNoDma(int16_t x, int16_t y, int16_t w, int16_t h, uint16_t color) {
SPI.beginTransaction(SPISettings(SPICLOCK, MSBFIRST, SPI_MODE));
digitalWrite(_cs, 0);
setArea(x,y,x+w-1,y+h-1);
// digitalWrite(_dc, 0);
// SPI.transfer(TFT_RAMWR);
int i;
for (i=0; i<(w*h); i++)
{
//digitalWrite(_dc, 1);
SPI.transfer16(color);
}
#ifdef ILI9341
digitalWrite(_dc, 0);
SPI.transfer(TFT_RAMWR);
SPI.transfer(ILI9341_SLPOUT);
digitalWrite(_dc, 1);
#endif
digitalWrite(_cs, 1);
setArea(0, 0, (TFT_REALWIDTH-1), (TFT_REALHEIGHT-1));
SPI.endTransaction();
}
void TFT_T_DMA::writeScreenNoDma(const uint16_t *pcolors) {
SPI.beginTransaction(SPISettings(SPICLOCK, MSBFIRST, SPI_MODE));
digitalWrite(_cs, 0);
setArea(0, 0, TFT_WIDTH-1, TFT_HEIGHT-1);
//digitalWrite(_dc, 0);
//SPI.transfer(TFT_RAMWR);
int i,j;
for (j=0; j<240; j++)
{
for (i=0; i<TFT_WIDTH; i++) {
digitalWrite(_dc, 1);
// digitalWrite(_dc, 1);
SPI.transfer16(*pcolors++);
}
}
@ -670,9 +723,8 @@ void TFT_T_DMA::writeScreenNoDma(const uint16_t *pcolors) {
digitalWrite(_dc, 1);
#endif
digitalWrite(_cs, 1);
SPI.endTransaction();
setArea(0, 0, (TFT_REALWIDTH-1), (TFT_REALHEIGHT-1));
SPI.endTransaction();
}
void TFT_T_DMA::drawSpriteNoDma(int16_t x, int16_t y, const uint16_t *bitmap) {
@ -723,12 +775,12 @@ void TFT_T_DMA::drawSpriteNoDma(int16_t x, int16_t y, const uint16_t *bitmap, ui
}
}
setArea(arx, ary, arx+arw-1, ary+arh-1);
SPI.beginTransaction(SPISettings(SPICLOCK, MSBFIRST, SPI_MODE));
digitalWrite(_cs, 0);
digitalWrite(_dc, 0);
SPI.transfer(TFT_RAMWR);
setArea(arx, ary, arx+arw-1, ary+arh-1);
//digitalWrite(_dc, 0);
//SPI.transfer(TFT_RAMWR);
bitmap = bitmap + bmp_offy*w + bmp_offx;
for (int row=0;row<arh; row++)
@ -737,7 +789,7 @@ void TFT_T_DMA::drawSpriteNoDma(int16_t x, int16_t y, const uint16_t *bitmap, ui
for (int col=0;col<arw; col++)
{
uint16_t color = *bmp_ptr++;
digitalWrite(_dc, 1);
// digitalWrite(_dc, 1);
SPI.transfer16(color);
}
bitmap += w;
@ -747,9 +799,9 @@ void TFT_T_DMA::drawSpriteNoDma(int16_t x, int16_t y, const uint16_t *bitmap, ui
SPI.transfer(ILI9341_SLPOUT);
digitalWrite(_dc, 1);
#endif
setArea(0, 0, TFT_REALWIDTH-1, TFT_REALHEIGHT-1);
digitalWrite(_cs, 1);
SPI.endTransaction();
setArea(0, 0, TFT_REALWIDTH-1, TFT_REALHEIGHT-1);
}
void TFT_T_DMA::drawTextNoDma(int16_t x, int16_t y, const char * text, uint16_t fgcolor, uint16_t bgcolor, bool doublesize) {
@ -757,20 +809,19 @@ void TFT_T_DMA::drawTextNoDma(int16_t x, int16_t y, const char * text, uint16_t
while ((c = *text++)) {
const unsigned char * charpt=&font8x8[c][0];
setArea(x,y,x+7,y+(doublesize?15:7));
//SPI.beginTransaction(SPISettings(SPICLOCK, MSBFIRST, SPI_MODE));
SPI.beginTransaction(SPISettings(SPICLOCK, MSBFIRST, SPI_MODE));
digitalWrite(_cs, 0);
setArea(x,y,x+7,y+(doublesize?15:7));
//digitalWrite(_dc, 0);
//SPI.transfer(TFT_RAMWR);
digitalWrite(_dc, 1);
//digitalWrite(_dc, 1);
for (int i=0;i<8;i++)
{
unsigned char bits;
if (doublesize) {
bits = *charpt;
digitalWrite(_dc, 1);
//digitalWrite(_dc, 1);
if (bits&0x01) SPI.transfer16(fgcolor);
else SPI.transfer16(bgcolor);
bits = bits >> 1;
@ -796,7 +847,7 @@ void TFT_T_DMA::drawTextNoDma(int16_t x, int16_t y, const char * text, uint16_t
else SPI.transfer16(bgcolor);
}
bits = *charpt++;
digitalWrite(_dc, 1);
//digitalWrite(_dc, 1);
if (bits&0x01) SPI.transfer16(fgcolor);
else SPI.transfer16(bgcolor);
bits = bits >> 1;
@ -831,35 +882,18 @@ void TFT_T_DMA::drawTextNoDma(int16_t x, int16_t y, const char * text, uint16_t
SPI.endTransaction();
}
setArea(0, 0, (TFT_REALWIDTH-1), (TFT_REALHEIGHT-1));
}
void TFT_T_DMA::drawRectNoDma(int16_t x, int16_t y, int16_t w, int16_t h, uint16_t color) {
setArea(x,y,x+w-1,y+h-1);
SPI.beginTransaction(SPISettings(SPICLOCK, MSBFIRST, SPI_MODE));
digitalWrite(_cs, 0);
digitalWrite(_dc, 0);
SPI.transfer(TFT_RAMWR);
int i;
for (i=0; i<(w*h); i++)
{
digitalWrite(_dc, 1);
SPI.transfer16(color);
}
#ifdef ILI9341
digitalWrite(_dc, 0);
SPI.transfer(ILI9341_SLPOUT);
digitalWrite(_dc, 1);
#endif
setArea(0, 0, (TFT_REALWIDTH-1), (TFT_REALHEIGHT-1));
digitalWrite(_cs, 1);
SPI.endTransaction();
setArea(0, 0, (TFT_REALWIDTH-1), (TFT_REALHEIGHT-1));
}
/***********************************************************************************************
DMA functions
***********************************************************************************************/

Some files were not shown because too many files have changed in this diff Show more