рдбреЗрдВрдбреА рд╕реЗ рд░рд╛рд╕реНрдкрдмреЗрд░реА рдкрд╛рдИ рд╕реЗ рдЬреЙрдпрд╕реНрдЯрд┐рдХ рдХрдиреЗрдХреНрдЯ рдХрд░реЗрдВ

рдПрдХ рдмрд╛рд░, "рд╣рд░ рдХреЛрдИ рдЦреЗрд▓ рд░рд╣рд╛ рд╣реИ," рдХреЗ рд╕рднреА рдкреНрд░рдХрд╛рд░ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рджреЗрдЦрд╛, рдореИрдВ рднреА рдЕрдкрдиреЗ рд░рд╛рд╕реНрдкрдмреЗрд░реА рдкрд╛рдИ рдЦреЗрд▓рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ред рд╣рд╛рдВ, рди рдХреЗрд╡рд▓ рдЦреЗрд▓рддреЗ рд╣реИрдВ, рдмрд▓реНрдХрд┐ рдПрдХ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдбрд┐рд╡рд╛рдЗрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЦреЗрд▓рддреЗ рд╣реИрдВред 150 рд░реВрдмрд▓ рдХреЗ рд▓рд┐рдП рдореЗрдЯреНрд░реЛ рдореЗрдВ рдбреЗрдВрдбреА (рдПрдХ рдбрдВрдбреА рд╕реЗ рдирд╣реАрдВ, рдмрд▓реНрдХрд┐ рд╕рд┐рдВрдмрд╛рд╕ рдЬреВрдирд┐рдпрд░) рд╕реЗ рдПрдХ рдЬреЙрдпрд╕реНрдЯрд┐рдХ рдЦрд░реАрджрд╛ рдЧрдпрд╛ рдерд╛ред рдЬрд┐рдиреНрд╣реЗрдВ рдЗрд╕рдореЗрдВ рд░реБрдЪрд┐ рд╣реИ рд╡реЗ рдиреАрдЪреЗ рджрд┐рдП рдЧрдП рдмрдЯрди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд▓реЗрдЦ рдХреЗ рдЕрдВрдд рдореЗрдВ рдкреНрд░рдорд╛рдг рдХреЗ рд▓рд┐рдП рдПрдХ рд▓рд┐рдВрдХ рд╣реЛрдЧрд╛ред



рд╣рдорд╛рд░реЗ рдЪреАрдиреА рджреЛрд╕реНрддреЛрдВ, рдЗрд╕реЗ рдЖрджрд░реНрд╢ рд╡рд╛рдХреНрдп рдХреЗ рд╕рд╛рде рдЗрдХрдЯреНрдард╛ рдХрд┐рдпрд╛ - рдХреЛрдИ рдЧреБрдгрд╡рддреНрддрд╛ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдЖрдк рдкрдХрдбрд╝рддреЗ рд╣реИрдВред рддреБрд░рдВрдд рдПрдХ рджреЗрд╢реА рдХреЗрдмрд▓ рдХреЛ 2 рд╡рд░реНрдЧ рдорд╛рдЗрдХреНрд░реЛрди рдХреЗ рдХрдВрдбрдХреНрдЯрд░ рдХреЗ рдХреНрд░реЙрд╕-рд╕реЗрдХреНрд╢рди рдХреЗ рд╕рд╛рде рдорд┐рд▓рд╛рдпрд╛ рдЧрдпрд╛, рдФрд░ рдХреБрдЫ рдФрджреНрдпреЛрдЧрд┐рдХ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХрдирд╡рд░реНрдЯрд░ рд╕реЗ рдХреЗрдмрд▓ рдХреЗ рд╕рд╛рде рдмрджрд▓ рджрд┐рдпрд╛ рдЧрдпрд╛, рдЬреЛ рдЕрдЧрд▓реЗ рдХрдореАрд╢рди рдХреЗ рдмрд╛рдж рдорд┐рд▓рд╛, рдЗрд╕рдореЗрдВ рд╕рд┐рд░реНрдл 5 рддрд╛рд░ рдереЗред

рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ рдХрд┐ рдЖрдк рдХреЛрдб рдореЗрдВ рдмрджрд▓рд╛рд╡ рдХрд░реЗрдВ, рдЖрдкрдХреЛ рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдирд╛ рдерд╛ рдХрд┐ рдЧреЗрдордкреИрдб рдЦреБрдж рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдЧреЗрдордкреИрдб рдореЗрдВ рд╢рд┐рдлреНрдЯ рд░рдЬрд┐рд╕реНрдЯрд░ рд╣реИред рдЧреЗрдордкреИрдб рдореЗрдВ 5 рддрд╛рд░ рд╣реИрдВ - 2 - рд╢рдХреНрддрд┐, 3 рдЬрд╛рдирдХрд╛рд░реА - рд▓рд╛рдЪ (рд╕реНрдЯреНрд░реЛрдм), рдШрдбрд╝реА (рдкрд▓реНрд╕) рдФрд░ рдбреЗрдЯрд╛ред рдЬрдм рдПрдХ рд▓реЙрдЬрд┐рдХрд▓ рдпреВрдирд┐рдЯ рдХреЛ рд▓реИрдЪ рдХреЛ рд╕рдкреНрд▓рд╛рдИ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рд╢рд┐рдлреНрдЯ рд░рдЬрд┐рд╕реНрдЯрд░ рдХреЗ рдЗрдирдкреБрдЯ рдХреА рд╕реНрдерд┐рддрд┐ рдХреЛ рдмрдЪрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдЖрдЙрдЯрдкреБрдЯ - рдбреЗрдЯрд╛ рдкрд░, "рдП" рдмрдЯрди рдХреА рд╕реНрдерд┐рддрд┐ рддреБрд░рдВрдд рдЙрдкрд▓рдмреНрдз рд╣реЛрддреА рд╣реИ, рдФрд░ рдЬрдм рдЖрдЙрдЯрдкреБрдЯ рдкрд░ рдХреНрд▓реЙрдХ рд▓рд╛рдЗрди рдкрд░ рддрд╛рд░реНрдХрд┐рдХ рд╕реНрддрд░ - рдбреЗрдЯрд╛ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рд╣реЛрддрд╛ рд╣реИ, рддреЛ рдЕрдиреНрдп рд╕рд╛рдд рдмрдЯрди рдХреА рд╕реНрдерд┐рддрд┐ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рд╡реЛрд▓реНрдЯреЗрдЬ рдХрд╛ рд╕реНрддрд░ рджрд┐рдЦрд╛рдИ рджреЗрддрд╛ рд╣реИред рдХреНрд░рдорд┐рдХ рд░реВрдк рдореЗрдВред рджрдмрд╛рдпрд╛ рдЧрдпрд╛ рдмрдЯрди - 0 рд╕реЗ рдореЗрд▓ рдЦрд╛рддрд╛ рд╣реИ, рджрдмрд╛рдпрд╛ рдирд╣реАрдВ рдЧрдпрд╛ - 1. рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЦреЗрд▓ рдХреЗ рд▓рд┐рдП рд╕рдм рдХреБрдЫ рдмрд┐рд▓реНрдХреБрд▓ рд╡рд┐рдкрд░реАрдд рд╣реИ, рдЙрд▓рдЯрд╛ рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИред рдиреАрдЪреЗ рджрд┐рдпрд╛ рдЧрдпрд╛ рдЖрдВрдХрдбрд╝рд╛ рдЧреЗрдордкреИрдб рдХрд╛ рдЖрд░реЗрдЦ рджрд┐рдЦрд╛рддрд╛ рд╣реИред

рдЫрд╡рд┐

рдЗрд╕рдХреЗ рдмрд╛рдж рдПрдореБрд▓реЗрдЯрд░ рдХрд╛ рд╡рд┐рдХрд▓реНрдк рдЪреБрдирд╛ рдЧрдпрд╛ред рдЪреБрдирд╛рд╡ рдкреБрд░рд╛рдиреЗ fceu рд╕рдВрд╕реНрдХрд░рдг 0.98.12 рдкрд░ рдЧрд┐рд░ рдЧрдпрд╛, рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рдореЗрдВ рдЙрддреНрдХреГрд╖реНрдЯ рдореЙрдбреНрдпреВрд▓рд░рддрд╛ рд╣реИ рдФрд░ рдХрдВрд╕реЛрд▓ рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдХрд╛ рдХрд╛рдлреА рд╕рдЯреАрдХ рд░реВрдк рд╕реЗ рдЕрдиреБрдХрд░рдг рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдпрд╣ рд╕реА рдореЗрдВ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИред рдЗрд╕рдХреЗ рдмрд╛рдж GPIO рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдЪреБрдирд╛рд╡ рдХрд┐рдпрд╛ рдЧрдпрд╛, рдореИрдВрдиреЗ рдорд╛рдЗрдХ рдореИрдХреЙрд▓реЗ рд╕реЗ bcm2835 рдЪреБрдирд╛ , рдЬреЛ C рдореЗрдВ рднреА рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рдЙрд╕рдХрд╛ рдкреНрд░рджрд░реНрд╢рди рдЕрдЪреНрдЫрд╛ рд╣реИред

рдЪреВрдБрдХрд┐ рдореИрдВ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдореЗрдВ рдПрдХ рдиреЙрдм рд╣реВрдБ, рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рдЙрд╕ рдХреЛрдб рдХреЗ рдЕрдиреБрднрд╛рдЧреЛрдВ рдкрд░ рдЯрд┐рдкреНрдкрдгреА рдХрд░рдиреЗ рдХреЗ рдЕрдиреБрд░реЛрдз рдХреЗ рд╕рд╛рде, рдЙрд╕реА "рд╕реЗрд▓рд┐рдмреНрд░рд┐рдЯреА рд╕реЗ рдПрдХ рдХреЗ рд░реВрдк рдореЗрдВ" рдЦреЗрд▓рдирд╛ рд╣реЛрдЧрд╛ред рдФрд░ рдЕрдкрдиреА рдирд╛рдХ рдХреЛ рдЙрди рдХрд╛рд░реНрдпреЛрдВ рдореЗрдВ рдкреЛрдХ рдХрд░реЗрдВ рдЬреЛ рдмрдЯрди рдХреЗ рд░рд╛рдЬреНрдп рдХреЛ рдЧреЗрдо рдореЗрдВ рдкреНрд░рд╕рд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реИрдВред рдЙрдиреНрд╣реЛрдВрдиреЗ рдореБрдЭреЗ рд╕реБрд▓рдн рднрд╛рд╖рд╛ рдореЗрдВ рд╕рдордЭрд╛рдпрд╛ рдХрд┐ рдХреНрдпрд╛ рдФрд░ рдХреИрд╕реЗред рдФрд░ рдЗрд╕рд▓рд┐рдП, input.c рдлрд╝рд╛рдЗрд▓ рдЗрдирдкреБрдЯ рдХрд╛ рдЕрдиреБрдХрд░рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реИ, рдФрд░ рдпрд╣рд╛рдВ рдореБрдЦреНрдп рдкрд░рд┐рд╡рд░реНрддрди рдЗрд╕рдХреЗ рд╕рд╛рде рд╣реЛрдВрдЧреЗред рдЧреЗрдордкреИрдб рдХреЗ рдЕрдиреБрдХрд░рдг рдХреЗ рд▓рд┐рдП рдХрдИ рдХрд╛рд░реНрдп рд╣реИрдВ - FCEU_UpdateInput, ReadGP рдФрд░ DECLFW (4016), рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдЕрдзрд┐рдХ рд╣реИрдВ, рдпреЗ рдореБрдЦреНрдп рд╣реИрдВред Input.c рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдореБрдЭреЗ file.c рдФрд░ fceu.c рдореЗрдВ рдмрджрд▓рд╛рд╡ рдХрд░рдирд╛ рдкрдбрд╝рд╛ред рдкрд╣рд▓реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдлрд╝рд╛рдЗрд▓.c рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рддреНрд░реБрдЯрд┐рдпрд╛рдВ рдереАрдВ, рд▓реЗрдХрд┐рди рдпрд╣ рд╕рдорд╕реНрдпрд╛ Google рд╣реИ, рдЗрд╕ рдлрд╝рд╛рдЗрд▓ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреИрдЪ рд╣реИ, рдФрд░ fceu.c рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдореИрдВрдиреЗ bcm2835 рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЗ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдлрд╝рдВрдХреНрд╢рди рдХреЛ int рдлрд╝рдВрдХреНрд╢рди FCEUI_ initialize (void) рдореЗрдВ рдЬреЛрдбрд╝рд╛ рд╣реИ:

bcm2835_init();

рдЗрд╕рдХреА рд╣реЗрдбрд░ рдлрд╝рд╛рдЗрд▓ рдХреЛ рдкрд╣рд▓реЗ рд╕реЗ рдЬреЛрдбрд╝рдирд╛

#include	<bcm2835.h>

рдЕрдм input.c, рдореИрдВрдиреЗ usbep рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП bcm2835 рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд╣реЗрдбрд░ рдлрд╝рд╛рдЗрд▓ (fceu.c рдХреЗ рд╕рдорд╛рди) рдФрд░ <unistd.h> рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд╣реЗрдбрд░ рдлрд╝рд╛рдЗрд▓ рднреА рдЬреЛрдбрд╝реАред рдЗрд╕рдХреЗ рдмрд╛рдж, рдореИрдВрдиреЗ GPIO рдкреЛрд░реНрдЯ рдХреА рдШреЛрд╖рдгрд╛ рдХреА рдЬрд┐рд╕рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реЛрдВрдЧреЗ:

    #define LATCH RPI_V2_GPIO_P1_11
    #define CLK RPI_V2_GPIO_P1_13
    #define DATA RPI_V2_GPIO_P1_15

рд╢реВрдиреНрдп рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рдЗрдирдкреБрдЯ (рд╢реВрдиреНрдп) рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ, рдореИрдВрдиреЗ рдПрдХ рдХреЛрдб рдЬреЛрдбрд╝рд╛, рдЬрд┐рд╕рдореЗрдВ рдореИрдВрдиреЗ рдкреНрд░рддреНрдпреЗрдХ GPIO рдкреЛрд░реНрдЯ рдХреЗ рдСрдкрд░реЗрд╢рди рдореЛрдб рдХреЛ рдкрдВрдЬреАрдХреГрдд рдХрд┐рдпрд╛, рдФрд░ рддреБрд░рдВрдд Latch (рд╕реНрдЯреНрд░реЛрдм) рдФрд░ рдШрдбрд╝реА 0 рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рдкреЛрд░реНрдЯ рд░реАрд╕реЗрдЯ рдХрд░ рджрд┐рдПред

        bcm2835_gpio_fsel(LATCH, BCM2835_GPIO_FSEL_OUTP);
	bcm2835_gpio_fsel(CLK, BCM2835_GPIO_FSEL_OUTP);
	bcm2835_gpio_fsel(DATA, BCM2835_GPIO_FSEL_INPT);
	bcm2835_gpio_set_pud(DATA, BCM2835_GPIO_PUD_UP);
	bcm2835_gpio_write(CLK, LOW);
	bcm2835_gpio_write(LATCH, LOW);

рдЕрдм рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП:

рдФрд░ рдЗрд╕рд▓рд┐рдП DECLFW (4016) - рд▓реИрдЪ (рд╕реНрдЯреНрд░реЛрдм) рд╕рд┐рдЧреНрдирд▓ рдХреЗ рдЕрдиреБрдХрд░рдг рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реИред рдЬреИрд╕рд╛ рдХрд┐ рдХрд╣рд╛ рдЧрдпрд╛ рдерд╛, рдмрдЯрди рдХреА рд╕реНрдерд┐рддрд┐ рдХреЛ рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рдереЛрдбрд╝реА рджреЗрд░ рдХреЗ рд▓рд┐рдП рд▓реИрдЪ - 1 рдкрд░ рдЖрд╡реЗрджрди рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдПрдХ Laststrobe рд╡реИрд░рд┐рдПрдмрд▓ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдЗрд╕ рд░рдЬрд┐рд╕реНрдЯрд░ рдХреЛ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рдЕрдВрддрд┐рдо рдорд╛рди рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИред рдпрджрд┐ Laststrobe 0 рдерд╛, рддреЛ рддрд╛рд░реНрдХрд┐рдХ 1 рдХреНрд░рдорд╢рдГ рд▓рд┐рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ GPIO рдкрд┐рди, рдЬрд┐рд╕реЗ Latch рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдХреЛ рднреА 1 рдЦрд┐рд▓рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ 1 ╬╝s рдХреЗ рдмрд╛рдж 0. рдкрд░ рд░реАрд╕реЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдпрджрд┐ Laststrobe 1 рдерд╛, рддреЛ рдХреЛрдб рдХреЗ рдЗрд╕ рдЦрдВрдб рдХреЛ рдЕрдирджреЗрдЦрд╛ рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

static DECLFW(B4016)
{
	if (FCExp)
	if (FCExp->Write)
	FCExp->Write(V & 7);
	if (JPorts[0]->Write)
	JPorts[0]->Write(V & 1);
	if(JPorts[1]->Write)
        JPorts[1]->Write(V&1);

        if((LastStrobe&1) && (!(V&1)))
        {
	 /* This strobe code is just for convenience.  If it were
	    with the code in input / *.c, it would more accurately represent
	    what's really going on.  But who wants accuracy? ;)
	    Seriously, though, this shouldn't be a problem.
	 */
	 if(JPorts[0]->Strobe)
	  JPorts[0]->Strobe(0);
	 	if(JPorts[1]->Strobe)
		JPorts[1]->Strobe(1);
	 if(FCExp)
	  if(FCExp->Strobe)
	   FCExp->Strobe();
	 }
	if (LastStrobe==0)
		{
		bcm2835_gpio_write(LATCH, HIGH);
		usleep(1);
		bcm2835_gpio_write(LATCH, LOW);
		}
	LastStrobe=V&0x1;
}

рдареАрдХ рд╣реИ, рдЕрдм рдЬреЙрдпрд╕реНрдЯрд┐рдХ рдХрд╛ рд╕реНрд╡рдпрдВ рдорддрджрд╛рди, рд╢реВрдиреНрдп FCEU_UpdateInput (рд╢реВрдиреНрдп) - рдЗрд╕ рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ, рдбреЗрдЯрд╛ рдХреЛ рдЗрдирдкреБрдЯ рдбреНрд░рд╛рдЗрд╡рд░реЛрдВ рд╕реЗ рдкрдврд╝рд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬреЛ рдПрдореНрдпреВрд▓реЗрдЯрд░ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдП рдЬрд╛рдиреЗ рдкрд░ рдЪреБрдиреЗ рдЧрдП рдереЗ, рдпрд╛ рдЬрдм рдЗрд╕реЗ рдХреБрдЫ рдХреБрдВрдЬреА рдореЗрдВ рджрд░реНрдЬ рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЧреЗрдордкреИрдб, рдЯрд░реНрдирдкреИрдб, рд▓рд╛рдЗрдЯ рдЧрди, рдЖрджрд┐ред ред, рд╡рд╣ рд╕рдм рдЬреЛ рдХрдВрд╕реЛрд▓ рд╕реЗ рдЬреЛрдбрд╝рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдпрд╣ рдЧреЗрдордкреИрдбреНрд╕ рдЖрдирдВрдж рдХреЗ рдмрдЯрди рдХреА рд╕реНрдерд┐рддрд┐ рдХреЗ рдмрд╛рдЗрдЯреНрд╕ рдХреЛ рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИ [0] ... рдЖрдирдиреНрдж [3], 2 рд╕реЗ 4 рдХреА рд░рд╛рд╢рд┐ рдореЗрдВ, рдЪреВрдВрдХрд┐ рдЖрдк 2 рдФрд░ рдЧреЗрдордкреИрдб рдХреЛ рдХрдиреЗрдХреНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рд┐рдмреНрд▓реВрдбрд╛ рдХреЗ рдЕрдиреБрдХрд░рдг рдХреЛ рд╕рдХреНрд╖рдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣реАрдВ рдкрд░ рдореБрдЦреНрдп рдмрджрд▓рд╛рд╡ рд╣реБрдПред рдЪреВрдВрдХрд┐ рдореБрдЭреЗ 4 рдЧреЗрдордкреИрдб рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдФрд░ рдЕрдиреНрдп рдбреНрд░рд╛рдЗрд╡рд░реЛрдВ рд╕реЗ рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рд╕рднреА рдХреЛрдб рдмрд╛рд╣рд░ рдлреЗрдВрдХ рджрд┐рдП рдФрд░ рдореЗрд░рд╛ рдкреНрд░рд╡реЗрд╢ рдХрд┐рдпрд╛:

    joy[0] = 0;
    joy[1] = 0;
    for (i = 0; i <= 7; i++)
	{
		joy[0] ^= bcm2835_gpio_lev(DATA) << i;
		joy[0] ^= (1 << i);
		joy[1] ^= bcm2835_gpio_lev(DATA) << i;
		joy[1] ^= (1 << i);
		bcm2835_gpio_write(CLK, HIGH);
		usleep(1);
		bcm2835_gpio_write(CLK, LOW);
		usleep(1);
	}

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдореИрдВ рддреБрд░рдВрдд рдкрд╣рд▓реЗ рдФрд░ рджреВрд╕рд░реЗ рдЬреЙрдпрд╕реНрдЯрд┐рдХ рдХреЗ рдХреНрд░рдорд╢рдГ рджреЛ рдмрд╛рдЗрдЯреНрд╕ рдмрдирд╛рддрд╛ рд╣реВрдВред рдЪреВрдВрдХрд┐ рдХрдИ рдЧреЗрдо рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ 2 рдмрдВрджрд░рдЧрд╛рд╣реЛрдВ рд╕реЗ рдмрдЯрди рдХреА рд╕реНрдерд┐рддрд┐ рдХреЛ рдкрдврд╝рддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдЙрдирдХреЗ рд▓рд┐рдП рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рд╡рд╛рд▓реЗ рдмрдВрджрд░рдЧрд╛рд╣ рдХреА рдХреЛрдИ рдЕрд╡рдзрд╛рд░рдгрд╛ рдирд╣реАрдВ рд╣реИред рд▓реЗрдХрд┐рди рдРрд╕реЗ рдЦреЗрд▓ рд╣реИрдВ рдЬрд┐рдирдХреЗ рд▓рд┐рдП рдРрд╕реА рдЕрд╡рдзрд╛рд░рдгрд╛ рдореМрдЬреВрдж рд╣реИ - рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╕рднреА рдорд╛рд░рд┐рдпреЛ, рдХрд┐рд░реНрдмреА, рдЯрд░реНрдорд┐рдиреЗрдЯрд░ 2, рдЖрджрд┐ред рдпрд╣реА рд╣реИ, рд╡реЗ рдкрд╣рд▓реЗ рдкреЛрд░реНрдЯ рд╕реЗ рдХреЗрд╡рд▓ рдмрдЯрди рдХреА рд╕реНрдерд┐рддрд┐ рдкрдврд╝рддреЗ рд╣реИрдВ (рдкрд╣рд▓реЗ рдЦрд┐рд▓рд╛рдбрд╝реА рдХреЗ рд▓рд┐рдП рдорд╛рд░рд┐рдпреЛ рдореЗрдВ, рджреВрд╕рд░реЗ рд╕реЗ рдХреЗрд╡рд▓ рджреВрд╕рд░реЗ рдХреЗ рд▓рд┐рдП), рдЕрд░реНрдерд╛рдд рд░рдЬрд┐рд╕реНрдЯрд░ 4016 рд╕реЗред рдпрд╣ рдлрд╝рдВрдХреНрд╢рди рдХрд╣реЗ рдЬрд╛рдиреЗ рдкрд░ рд╢реВрдиреНрдп рдХреЗ рдорд╛рди рдХреЛ рдЕрд╕рд╛рдЗрди рдХрд░рдирд╛ рднреА рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ, рдЕрдиреНрдпрдерд╛ рдкрд┐рдЫрд▓рд╛ рдорд╛рди рдЙрдирдореЗрдВ рд╕рд╣реЗрдЬрд╛ рдЬрд╛рдПрдЧрд╛, рдФрд░ рдирдпрд╛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЙрди рдкрд░ рд▓рдЧрд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рд╕рд┐рджреНрдзрд╛рдВрдд рд░реВрдк рдореЗрдВ, рд╢реВрдиреНрдп рдХреЗ рдмрд░рд╛рдмрд░ рджреВрд╕рд░реА рдЬреЙрдпрд╕реНрдЯрд┐рдХ рдХреЗ рд▓рд┐рдП рдмрд╛рдЗрдЯ рдХреЛ рдЫреЛрдбрд╝рдирд╛ рд╕рдВрднрд╡ рдерд╛, рд▓реЗрдХрд┐рди рдореИрдВрдиреЗ рдорд╛рд░рд┐рдпреЛ рдХреЛ рдПрдХ рд╕рд╛рде рдЦреЗрд▓рдирд╛ рд╕рдВрднрд╡ рдмрдирд╛ рджрд┐рдпрд╛ред

ReadGP - рдпрд╣ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдмрд╛рдЗрдЯреНрд╕ рдЦреБрд╢реА [0] ... рдЖрдирдВрдж [3] рд╕реЗ рдмрд┐рдЯреНрд╕ рдирд┐рдХрд╛рд▓рддрд╛ рд╣реИ, рдФрд░ рд░рд┐рдЯ рдЪрд░ рдЦреЗрд▓ рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢рд┐рд╖реНрдЯ рдмрдЯрди рдХреА рд╕реНрдерд┐рддрд┐ рдореЗрдВ рд╡рд╛рдкрд╕ рд▓реМрдЯрддрд╛ рд╣реИ, рдмрдЯрди рд╕рдВрдЦреНрдпрд╛ рдЪрд░ joy_readbit [w] рджреНрд╡рд╛рд░рд╛ рд╕реЗрдЯ рдХреА рдЬрд╛рддреА рд╣реИ, рдЬрд╣рд╛рдВ w рдЬреЙрдпрд╕реНрдЯрд┐рдХ рдХрд╛ рдкреЛрд░реНрдЯ рдирдВрдмрд░ рд╣реИ, рдкрд╣рд▓рд╛ рдпрд╛ рджреВрд╕рд░рд╛ред рд▓реЗрдХрд┐рди рдЗрд╕ рдлрдВрдХреНрд╢рди рдореЗрдВ рдореИрдВрдиреЗ рдХреЛрдИ рдмрджрд▓рд╛рд╡ рдирд╣реАрдВ рдХрд┐рдпрд╛ред рдЬреИрд╕рд╛ рд╣реИ рд╡реИрд╕рд╛ рд╣реА рдЫреЛрдбрд╝ рджрд┐рдпрд╛ред

рд╕рдлрд▓ рд╕рдВрдХрд▓рди рдХреЗ рд▓рд┐рдП, рдореЗрдХрдлрд╛рдЗрд▓ рдореЗрдВ (рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрдорд╛рдВрдб рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж), рдЬреЛ рдХрд┐ src рдбрд╛рдпрд░реЗрдХреНрдЯрд░реА рдореЗрдВ рд╕реНрдерд┐рдд рд╣реИ, рдЖрдкрдХреЛ -lbcm2835 -lm -lrt рдХреЛ рдЙрд╕ рдЬрдЧрд╣ рд╕реЗ рдЬреЛрдбрд╝рдирд╛ рд╣реЛрдЧрд╛ рдЬрд╣рд╛рдВ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдирд┐рд░реНрднрд░рддрд╛рдПрдБ рд▓рд┐рдЦреА рдЧрдИ рд╣реИрдВред рдкреИрдЯрд░реНрди:

LIBS =

рдФрд░ рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рд╕рдм рдХреБрдЫ рдХрд╛рдо рдХрд┐рдпрд╛ред рдпрджрд┐ рдореИрдВрдиреЗ рдЕрдЪрд╛рдирдХ рдПрдХ рд╣реА рдЯрдВрдХреА рдореЗрдВ рдПрдХ рд╕рд╛рде рдЦреЗрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рджреВрд╕рд░реА рдЬреЙрдпрд╕реНрдЯрд┐рдХ рдЦрд░реАрджрдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛, рддреЛ рдореИрдВрдиреЗ рдЧреНрд░рд╛рдЙрдВрдбрд╡рд░реНрдХ рдЫреЛрдбрд╝ рджрд┐рдпрд╛ред

┬╗ рд╕рдмреВрдд рд╕реЗ рд▓рд┐рдВрдХ
┬╗ рд╕рд╛рдЗрдЯ рд╕реЗ рдбреЗрдЯрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛
┬╗ рдЗрд╕ рд╡реНрдпрдХреНрддрд┐ рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢реЗрд╖ рдзрдиреНрдпрд╡рд╛рдж рдЬрд┐рд╕рдиреЗ рдореБрдЭреЗ рдПрдореБрд▓реЗрдЯрд░ рдХреЛрдб рдХреЛ рд╕рдордЭрдиреЗ рдореЗрдВ рдорджрдж рдХреА

Source: https://habr.com/ru/post/hi398285/


All Articles