{"id":943,"date":"2018-05-17T21:39:57","date_gmt":"2018-05-17T21:39:57","guid":{"rendered":"http:\/\/hayperek.pl\/?p=943"},"modified":"2018-05-17T21:39:57","modified_gmt":"2018-05-17T21:39:57","slug":"przyspieszamy-obraz-czyli-przesiadka-z-gpio-na-fsmc","status":"publish","type":"post","link":"https:\/\/hayperek.pl\/en\/2018\/05\/17\/przyspieszamy-obraz-czyli-przesiadka-z-gpio-na-fsmc\/","title":{"rendered":"Przyspieszamy obraz, czyli przesiadka z GPIO na FSMC"},"content":{"rendered":"<p>W pierwszym artykule z serii traktuj\u0105cej o wy\u015bwietlaczu LCD, zdecydowa\u0142em, i\u017c na pocz\u0105tku wykorzystamy do komunikacji z nim zwyk\u0142e piny GPIO. Wymaga\u0142y one co prawda r\u0119cznego sterowania, ale dzi\u0119ki temu bardzo szybko uda\u0142o si\u0119 uruchomi\u0107 panel. Zaznaczy\u0142em, \u017ce w przysz\u0142o\u015bci rozwa\u017cymy przej\u015bcie na interfejs szeregowy SPI b\u0105d\u017a r\u00f3wnoleg\u0142y, z wykorzystaniem kontrolera FSMC<em> (ang. Flexible Static Memory Controller)<\/em>. przysz\u0142o\u015b\u0107 sta\u0142a si\u0119 tera\u017aniejszo\u015bci\u0105!<\/p>\n<p>Wraz ze zwi\u0119kszaniem si\u0119 ilo\u015bci element\u00f3w graficznych, znacz\u0105co spad\u0142a szybko\u015b\u0107 od\u015bwie\u017cania ekranu. Wprowadzenie t\u0142a wymusi\u0142o konieczno\u015b\u0107 &#8222;rysowania&#8221; ogromnej liczby pikseli w kr\u00f3tkim czasie tak, aby unikn\u0105\u0107 migotania obrazu. C\u00f3\u017c&#8230; GPIO osi\u0105gn\u0119\u0142o kres swoich mo\u017cliwo\u015bci \ud83d\ude41<\/p>\n<p>Przesiadka na FSMC wcale nie okaza\u0142a si\u0119 taka trywialna. Oczywi\u015bcie przepi\u0119cie przewod\u00f3w na p\u0142ytce prototypowej i skonfigurowanie FSMC by\u0142o do\u015b\u0107 proste, jednak okaza\u0142o si\u0119, \u017ce obraz nie jest wy\u015bwietlany stabilnie&#8230;.<\/p>\n<blockquote><p>Dlaczego?<\/p><\/blockquote>\n<p>Ot\u00f3\u017c okaza\u0142o si\u0119, \u017ce FSMC pracuj\u0105ce ze znacznie wi\u0119ksz\u0105 pr\u0119dko\u015bci\u0105 ni\u017c zwyk\u0142e piny GPIO jest bardziej czu\u0142e na niewielkie szpilki, pojawiaj\u0105ce si\u0119 na liniach zasilaj\u0105cych uk\u0142ad\u00f3w cyfrowych. Aby rozwi\u0105za\u0107 problem musia\u0142em dolutowa\u0107 kilka kondensator\u00f3w ceramicznych, idealnie t\u0142umi\u0105cych wszelkie niepo\u017c\u0105dane zak\u0142\u00f3cenia. Nieco wi\u0119cej na ten temat opowiem w przysz\u0142o\u015bci, w odr\u0119bnym artykule o zasilaniu.<\/p>\n<p>Po\u0142\u0105czenie wygl\u0105da wi\u0119c nast\u0119puj\u0105co:<br \/>\n<a href=\"http:\/\/hayperek.pl\/wp-content\/uploads\/2018\/03\/lcd_3.png\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/hayperek.pl\/wp-content\/uploads\/2018\/03\/lcd_3.png\" alt=\"\" width=\"698\" height=\"322\" class=\"aligncenter size-full wp-image-509\" srcset=\"https:\/\/hayperek.pl\/wp-content\/uploads\/2018\/03\/lcd_3.png 698w, https:\/\/hayperek.pl\/wp-content\/uploads\/2018\/03\/lcd_3-600x277.png 600w, https:\/\/hayperek.pl\/wp-content\/uploads\/2018\/03\/lcd_3-300x138.png 300w\" sizes=\"auto, (max-width: 698px) 100vw, 698px\" \/><\/a><\/p>\n<p>Liczba zaj\u0119tych pin\u00f3w nie uleg\u0142a zmianie, jedynie ich po\u0142o\u017cenie musia\u0142o zosta\u0107 dopasowane do wymaga\u0144 stawianych przez interfejs FSMC. Nie jest on w stanie multipleksowa\u0107 sygna\u0142\u00f3w wyj\u015bciowych na r\u00f3\u017cne piny, st\u0105d mapping jest sztywny i nie mamy mo\u017cliwo\u015bci &#8222;\u017conglowania&#8221;. To jedna z najpowa\u017cniejszych wad tego rozwi\u0105zania.<\/p>\n<blockquote><p>Hmmm.. a zalety?<\/p><\/blockquote>\n<p>Nie musimy mozolnie prze\u0142\u0105cza\u0107 r\u0119cznie stanu pin\u00f3w wyj\u015bciowych, wpisywa\u0107 danych na magistral\u0119, itp. Od tej chwili ca\u0142a operacja zapisu obs\u0142ugiwana jest wewn\u0119trznie przez FSMC. Od strony oprogramowania niczym nie odr\u00f3\u017cnia si\u0119 ona od wpisania warto\u015bci pod konkretny adres pami\u0119ci. Oko\u0142o 6-krotnemu skr\u00f3ceniu uleg\u0142 dzi\u0119ki temu czas potrzebny na ustawienie pojedynczego piksela.<\/p>\n<p>Dodatkowo, gdyby w przysz\u0142o\u015bci wci\u0105\u017c brakowa\u0142o nam mocy obliczeniowej, mo\u017cemy wykorzysta\u0107 transfer DMA, kt\u00f3ry b\u0119dzie w stanie &#8222;automatycznie&#8221; wype\u0142nia\u0107 wi\u0119ksze fragmenty obrazu bez konieczno\u015bci ingerencji procesora.<\/p>","protected":false},"excerpt":{"rendered":"<p>W pierwszym artykule z serii traktuj\u0105cej o wy\u015bwietlaczu LCD, zdecydowa\u0142em, i\u017c na pocz\u0105tku wykorzystamy do komunikacji z nim zwyk\u0142e piny GPIO. Wymaga\u0142y one co prawda r\u0119cznego sterowania, ale dzi\u0119ki temu bardzo szybko uda\u0142o si\u0119 uruchomi\u0107 panel. Zaznaczy\u0142em, \u017ce w przysz\u0142o\u015bci rozwa\u017cymy przej\u015bcie na interfejs szeregowy SPI b\u0105d\u017a r\u00f3wnoleg\u0142y, z wykorzystaniem kontrolera FSMC (ang. Flexible Static [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":948,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[3],"tags":[],"class_list":{"0":"post-943","1":"post","2":"type-post","3":"status-publish","4":"format-standard","5":"has-post-thumbnail","6":"hentry","7":"category-stodni","9":"post-with-thumbnail","10":"post-with-thumbnail-large"},"_links":{"self":[{"href":"https:\/\/hayperek.pl\/en\/wp-json\/wp\/v2\/posts\/943","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/hayperek.pl\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/hayperek.pl\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/hayperek.pl\/en\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/hayperek.pl\/en\/wp-json\/wp\/v2\/comments?post=943"}],"version-history":[{"count":3,"href":"https:\/\/hayperek.pl\/en\/wp-json\/wp\/v2\/posts\/943\/revisions"}],"predecessor-version":[{"id":949,"href":"https:\/\/hayperek.pl\/en\/wp-json\/wp\/v2\/posts\/943\/revisions\/949"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/hayperek.pl\/en\/wp-json\/wp\/v2\/media\/948"}],"wp:attachment":[{"href":"https:\/\/hayperek.pl\/en\/wp-json\/wp\/v2\/media?parent=943"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/hayperek.pl\/en\/wp-json\/wp\/v2\/categories?post=943"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/hayperek.pl\/en\/wp-json\/wp\/v2\/tags?post=943"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}