рд╣рдо рдирдВрдЧреЗ рд▓реЛрд╣реЗ рдкрд░ рд░рд╛рд╕реНрдкрдмреЗрд░реА рдкрд╛рдИ рдХрд╛ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХрд░рддреЗ рд╣реИрдВ

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

рдХреИрдЪ рдХреНрдпрд╛ рд╣реИ?


рдкрд╣рд▓реА рдирдЬрд╝рд░ рдореЗрдВ, рдХрд╛рд░реНрдп рддреБрдЪреНрдЫ рд▓рдЧрддрд╛ рд╣реИ: рдХрд╛рдЗрд▓ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░реЗрдВ, рдПрдХ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдмрдирд╛рдПрдВ ... рд▓реЗрдХрд┐рди рдпрд╣ рдЗрддрдирд╛ рд╕рд░рд▓ рдирд╣реАрдВ рд╣реИред рд╕рднреА рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рд╡рд╛рддрд╛рд╡рд░рдг (keil, IAR, Atolic) рдЕрдзрд┐рдХрддрдо ARM9 рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддреЗ рд╣реИрдВред рд╣рдорд╛рд░реЗ рдкрд╛рд╕ ARM11 рд╣реИред рдпрд╣ рдЕрд▓рд┐рдЦрд┐рдд рдирд┐рдпрдо рдХреЗ рдХрд╛рд░рдг рд╣реИ рдХрд┐ рд╡реЗ рдПрдЖрд░рдПрдо 9 рд╕реЗ рдкрд╣рд▓реЗ рдирдВрдЧреЗ рдзрд╛рддреБ рдкрд░ рд▓рд┐рдЦрддреЗ рд╣реИрдВ, рдФрд░ рдлрд┐рд░ рд▓рд┐рдирдХреНрд╕ рдкрд░ред рд▓реЗрдХрд┐рди рдлрд┐рд░ рднреА рдПрдХ рдЦрд╛рдореА рд╣реИ: рдЖрд░реНрдо-рдиреЛрдЗрдВрдЧ-рдПрдЧреНрдмреА-рдЬреАрд╕реАрд╕реА рдХрд┐рд╕реА рднреА рдПрдЖрд░рдПрдо рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИред
рджреВрд╕рд░реА рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдЗрд╕ рдкреНрд░реЛрд╕реЗрд╕рд░ (BCM2835) рдХреЗ рд▓рд┐рдП рдХреЛрдИ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓, рд╣реЗрдбрд░ рдЖрджрд┐ рдирд╣реАрдВ рд╣реИрдВред рдпрд╣рд╛рдБ рд░рд╛рд╕реНрдкрдмреЗрд░реА рдкрд╛рдИ рдмреВрдЯрд▓реЛрдбрд░ рд╣рдорд╛рд░реА рд╕рд╣рд╛рдпрддрд╛ рдХреЗ рд▓рд┐рдП рдЖрддрд╛ рд╣реИред рдФрд░ рдХреБрдЫ рднреА рдирд╣реАрдВ рдХрд┐ рд╡рд╣ рдорд╛рд▓рд┐рдХрд╛рдирд╛ рд╣реИред рдпрд╣ рджреЛ рдХрд╛рд░реНрдп рдХрд░рддрд╛ рд╣реИ: рдкреНрд░реЛрд╕реЗрд╕рд░ рдФрд░ рдЙрд╕рдХреЗ рдмрд╛рд╣реНрдп рдЙрдкрдХрд░рдгреЛрдВ рдХреЛ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдХрд░реНрдиреЗрд▓ рдкрд░ рдирд┐рдпрдВрддреНрд░рдг рднреА рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рддрд╛ рд╣реИред рдЧрд┐рдВрдЬред рд╣рдо рдмрд╕ рдЕрдкрдиреЗ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЛ рдХрд░реНрдиреЗрд▓ рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рдЪреНрдЫрдиреНрди рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдмреВрдЯрд▓реЛрдбрд░ рдЗрд╕реЗ рд╢реБрд░реВ рдХрд░рддрд╛ рд╣реИред

рд╣рдореЗрдВ рдХреНрдпрд╛ рдЪрд╛рд╣рд┐рдП?


1) рд░рд╛рд╕реНрдкрдмреЗрд░реА рдкрд╛рдИ рдЦреБрдж, рдЗрд╕рдХреЗ рд▓рд┐рдП рдПрдХ рдореЗрдореЛрд░реА рдХрд╛рд░реНрдб рдФрд░ рдкрд╛рд╡рд░ред
2) рдкреНрд░реЛрд╕реЗрд╕рд░ рдХреЛ рдбреЗрдЯрд╢реАрдЯ
3) рд▓рд┐рдирдХреНрд╕ рдХреЗ рд╕рд╛рде рдПрдХ рдХрдВрдкреНрдпреВрдЯрд░ рд╕реНрдерд╛рдкрд┐рдд рд╣реИ (рд▓реЗрдХрд┐рди рдпрд╣ рд╡рд┐рдВрдбреЛрдЬ рдкрд░ рднреА рд╕рдВрднрд╡ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛, рдореИрдВрдиреЗ рдЗрд╕рдХреА рдХреЛрд╢рд┐рд╢ рдирд╣реАрдВ рдХреА рд╣реИ)ред
4) рдЪрд░рдг 3 рд╕реЗ рдХрдВрдкреНрдпреВрдЯрд░ рдкрд░ рд╕реНрдерд╛рдкрд┐рдд рдХреНрд░реЙрд╕ рдХрдВрдкрд╛рдЗрд▓рд░ред рдореИрдВ рдЖрд░реНрдо-рдиреЛрдЗрдВрдЧ-рдПрдЧреНрдмреА-рдЬреАрд╕реАрд╕реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ
5) рдЗрд╕ рдбреИрдбреА рдХреА рд╕рд╛рдордЧреНрд░реАред

рдкрд╛рдХ рдХрд▓рд╛ред


рд╣рдореЗрдВ FAT16 рдореЗрдВ рдореЗрдореЛрд░реА рдХрд╛рд░реНрдб рдХреЛ рдкреНрд░рд╛рд░реВрдкрд┐рдд рдХрд░рдиреЗ рдФрд░ рдЗрд╕ рдлрд╝реЛрд▓реНрдбрд░ рдХреА рд╕рд╛рдордЧреНрд░реА рдХреЛ рдЙрд╕ рдкрд░ рдЫреЛрдбрд╝рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдпрд╣ рдмреВрдЯрд▓реЛрдбрд░ рдкреНрд▓рд╕ рдХрд░реНрдиреЗрд▓ рд╣реИред рдлрд┐рд░ рд╣рдо рд╡рд╣рд╛рдВ рд╕реЗ рдХрд░реНрдиреЗрд▓.рдордЧ рдФрд░ рдХрд░реНрдиреЗрд▓_рдореЗрд░рд┐рдЬрд┐рдмрд┐рд▓рд┐рдЯреА рдлрд╛рдЗрд▓ рдХреЛ рд╣рдЯрд╛рддреЗ рд╣реИрдВред рдпрд╣ рд▓рд┐рдирдХреНрд╕ рдХрд░реНрдиреЗрд▓ рд╣реИ, рд▓реЗрдХрд┐рди рд╣рдореЗрдВ рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред

рдкрд╣рд▓рд╛ рдХрд╛рд░реНрдпрдХреНрд░рдоред


рдЕрдм рд╣рдо рдкрд╣рд▓рд╛ рдкреНрд░реЛрдЧреНрд░рд╛рдо рд▓рд┐рдЦрдирд╛ рд╢реБрд░реВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред Main.c рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдПрдБ рдФрд░ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛрдб рд▓рд┐рдЦреЗрдВ
int main (void) { while(1) { } } void exit (void) { while(1) { } } 

рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдпрд╣ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреБрдЫ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдмрд╛рд╣рд░ рдирд┐рдХрд▓рдиреЗ рдХрд╛ рдХрд╛рд░реНрдп рдХрдВрдкрд╛рдЗрд▓рд░ рджреНрд╡рд╛рд░рд╛ рдЖрд╡рд╢реНрдпрдХ рдХрд┐рд╕реА рдХрд╛рд░рдг рд╕реЗ рд╣реЛрддрд╛ рд╣реИред
рдЕрдм рдЗрд╕реЗ рдПрдХрддреНрд░ рдХрд░реЗрдВред
arm-none-eabi-gcc -O2 -mfpu = vfp -mfloat-abi = hard -march = armv6zk -mtune = arm1176jzf-s -nostartile main.c -o kernel.elf
рдмрд╛рдВрд╣-рдХреЛрдИ-рдУрдмреА-рдУрдмреНрдЬрд╛рдХреЙрдкреА рдХрд░реНрдиреЗрд▓ред рдмреЗрд▓-рдмрд╛рдЗрдирд░реА рдХрд░реНрдиреЗрд▓редрдордЧ

рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рдХрд░реНрдиреЗрд▓ .img рдлрд╝рд╛рдЗрд▓ рдХреЛ рдореЗрдореЛрд░реА рдХрд╛рд░реНрдб рдкрд░ рдлреЗрдВрдХ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╣реЛ рдЧрдпрд╛!

GPIO


рдпрд╣ рд╕рдВрднрд╛рд╡рдирд╛ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЖрдк рдПрдХ рдХрд╛рд░реНрдпрдХреНрд░рдо рд╕реЗ рд╕рдВрддреБрд╖реНрдЯ рд╣реЛрдВрдЧреЗ рдЬреЛ рдмрд┐рд▓реНрдХреБрд▓ рдХреБрдЫ рднреА рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ред рдЕрдм рдмрд▓реНрдм рдХреЛ рдкреНрд░рдХрд╛рд╢ рдореЗрдВ рд▓рд╛рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВред
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╣рдо рдЙрд╕ рдкрддреЗ рдХреЛ рдШреЛрд╖рд┐рдд рдХрд░реЗрдВрдЧреЗ рдЬрд╣рд╛рдВ GPIO рдирд┐рд╣рд┐рдд рд╣реИ (рдЗрд╕реЗ рдбреЗрдЯрд╢реАрдЯ рдореЗрдВ рдкрдврд╝рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ)ред
#define GPIO_BASE 0x20200000UL

рдФрд░ рдПрдХ рдЪрд░ рдШреЛрд╖рд┐рдд рдХрд░реЗрдВ рдЬреЛ рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдмрдВрджрд░рдЧрд╛рд╣ рдЖрдЙрдЯрдкреБрдЯ (GPIO_GPFSEL1) рдХреЗ рд▓рд┐рдП рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рдПрдХ рдЪрд░ рдЬреЛ рдирд┐рдореНрди рд╕реНрддрд░ (рдЕрд░реНрдерд╛рдд рдкреНрд░рдХрд╛рд╢ рдЪрд╛рд▓реВ рд╣реИ) рдкреЛрд░реНрдЯ (GPIO_GPCLR0) рдХреЛ рдЦрд┐рд▓рд╛рддрд╛ рд╣реИред
#define GPIO_GPFSEL1 1
#define GPIO_GPCLR0 10

рдФрд░ рдЕрдВрдд рдореЗрдВ, рд╣рдо рдмрд▓реНрдм рдХреА рд░реЛрд╢рдиреА рдХреЗ рд▓рд┐рдП рдореБрдЦреНрдп рдХрд╛рд░реНрдп рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рддреЗ рд╣реИрдВ:
 volatile unsigned int* gpio; int main(void) { gpio = (unsigned int*)GPIO_BASE; gpio[GPIO_GPFSEL1] |= (1 << 16); gpio[GPIO_GPCLR0] = (1 << 16); while(1) { } } 


рд╣рдо рдЗрдХрдЯреНрдард╛ рдХрд░рддреЗ рд╣реИрдВ, рдлреНрд▓реИрд╢ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЖрдирдиреНрджрд┐рдд рд╣реЛрддреЗ рд╣реИрдВред

рдЕрдЧрд▓реЗ рднрд╛рдЧ рдореЗрдВ рд╣рдо рдЯрд╛рдЗрдорд░ рдФрд░ рд╡реНрдпрд╡рдзрд╛рди рдХреЗ рд╕рд╛рде рдЦреЗрд▓рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВрдЧреЗред

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


All Articles