рд╡рд░реНрдЪреБрдЕрд▓ рдорд╢реАрди рдФрд░ рдорд╛рдЗрдХреНрд░реЛрдХрдВрдЯреНрд░реЛрд▓рд░

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



рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдореИрдВрдиреЗ рдЬрд╛рд╡рд╛, рд▓реБрдЖ рдФрд░ рдЕрдиреНрдп рдорд╢реАрдиреЛрдВ рдХреЗ рдмрд╛рдИрдЯреЗрдХреЛрдб рдХреА рдУрд░ рджреЗрдЦрд╛, рд▓реЗрдХрд┐рди рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕рднреА рдЙрдкрд▓рдмреНрдз рд╕рд╛рдорд╛рди рдХреЛ рдХрд┐рд╕реА рдЕрдиреНрдп рднрд╛рд╖рд╛ рдореЗрдВ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрдирд╛ рдирд╣реАрдВ рдЪрд╛рд╣рддрд╛ред рдЗрд╕рд▓рд┐рдП рд╣рдордиреЗ рднрд╛рд╖рд╛ рдкрд░ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ - рд╕реАред рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЬрд╛рд╡рд╛ рдпрд╛ рд▓реБрдЖ рдЕрднреА рднреА рдЖрдХрд░реНрд╖рдХ рд▓рдЧрддрд╛ рд╣реИред [рез] [реи] [рей] [рек]

рдЕрдЧрд▓рд╛ рдорд╛рдирджрдВрдб рдХрдВрдкрд╛рдЗрд▓рд░ рдерд╛ред рдЕрдкрдиреА рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдореЗрдВ рдореИрдВ рдЕрдХреНрд╕рд░ "рдХреБрдХреАрдЬрд╝ рдЬреАрд╕реАрд╕реА (рд╕реА) рдХреЗ рд▓рд┐рдП рдЫрд╛рддреНрд░реЛрдВ рджреНрд╡рд╛рд░рд╛ рд▓рд┐рдЦрд┐рдд" рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВред рдЙрдиред рдпрджрд┐ рдЖрдк рдЕрдкрдиреА рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рдЬреАрд╕реАрд╕реА (рд╕рдВрдХрд▓рдХ, рд▓рд┐рдВрдХрд░, рдЖрджрд┐) рдХреЗ рдкреВрд░реЗ рдЭреБрдВрдб рдХреЗ рд╕рд╛рде рдЖрдирд╛ рд╣реЛрдЧрд╛ред

рдЪреВрдВрдХрд┐ рдореИрдВ рдПрдХ рдЖрд▓рд╕реА рд╡реНрдпрдХреНрддрд┐ рд╣реВрдВ, рдЗрд╕рд▓рд┐рдП рдореИрдВ рдЬреАрд╕реАрд╕реА рд╕рдорд░реНрдерди рдХреЗ рд╕рд╛рде рд╕рдмрд╕реЗ рдЫреЛрдЯреА рд╕рдВрднрд╡ рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рдХреА рддрд▓рд╛рд╢ рдХрд░ рд░рд╣рд╛ рдерд╛ред рдФрд░ рдпрд╣ MSP430 рдмрди рдЧрдпрд╛ред

рд╕рдВрдХреНрд╖рд┐рдкреНрдд рд╡рд░реНрдгрди


MSP430 рдПрдХ рдмрд╣реБрдд рд╣реА рд╕рд░рд▓ рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рд╣реИред рдЗрд╕рдореЗрдВ рдХреЗрд╡рд▓ 27 рдирд┐рд░реНрджреЗрд╢ рд╣реИрдВ [5] рдФрд░ рд▓рдЧрднрдЧ рдХреЛрдИ рднреА рд╕рдВрдмреЛрдзрдиред

рд╡рд░реНрдЪреБрдЕрд▓ рдорд╢реАрди рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдкреНрд░реЛрд╕реЗрд╕рд░ рдХреЗ рд╕рдВрджрд░реНрдн рд╕реЗ рд╢реБрд░реВ рд╣реБрдЖред рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рдкреНрд░реЛрд╕реЗрд╕рд░ рдХрд╛ рд╕рдВрджрд░реНрдн рдПрдХ рд╕рдВрд░рдЪрдирд╛ рд╣реИ рдЬреЛ рдкреНрд░реЛрд╕реЗрд╕рд░ рдХреА рд╕реНрдерд┐рддрд┐ рдХрд╛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╡рд░реНрдгрди рдХрд░рддрд╛ рд╣реИред рдФрд░ рдЗрд╕ рдЖрднрд╛рд╕реА рдкреНрд░реЛрд╕реЗрд╕рд░ рдХреА рд╕реНрдерд┐рддрд┐ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╡рд░реНрдгрд┐рдд рд╣реИ:

  • рдореМрдЬреВрджрд╛ рдЯреАрдо
  • рд░рдЬрд┐рд╕реНрдЯрд░
  • рдЗрдВрдЯрд░рдкреНрдЯ рд░рдЬрд┐рд╕реНрдЯрд░реЛрдВ рдХреА рд╡реИрдХрд▓реНрдкрд┐рдХ рд╕реНрдерд┐рддрд┐
  • рд░рд╛рдо рдФрд░ рд░реЛрдо рдХреА рд╡реИрдХрд▓реНрдкрд┐рдХ рд╕рд╛рдордЧреНрд░реА

MSP430 рдХреЗ рд░рдЬрд┐рд╕реНрдЯрд░ 16 рд╣реИрдВред 16 рд░рдЬрд┐рд╕реНрдЯрд░реЛрдВ рдореЗрдВ рд╕реЗ рдкрд╣рд▓реЗ 4 рдХреЛ рд╕рд┐рд╕реНрдЯрдо рд░рдЬрд┐рд╕реНрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдХрд╣рддреЗ рд╣реИрдВ, рдкрддрд╛ рд╕реНрдерд╛рди (рдХрдорд╛рдВрдб рдХрд╛рдЙрдВрдЯрд░) рд╕реЗ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдП рдЬрд╛ рд░рд╣реЗ рдХрдорд╛рдВрдб рдХреЗ рд▓рд┐рдП рд╡рд░реНрддрдорд╛рди рд╕реВрдЪрдХ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрд╢рдХреНрдд рд░рдЬрд┐рд╕реНрдЯрд░ рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реИред

рдЖрдк рдореВрд▓ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдорд╛рд░реНрдЧрджрд░реНрд╢рд┐рдХрд╛ msp430x1xxx [6] рдореЗрдВ рд░рдЬрд┐рд╕реНрдЯрд░реЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВред рд░рдЬрд┐рд╕реНрдЯрд░реЛрдВ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдкрддрд╛ рд╕реНрдерд╛рди рдХреА рд╕рд╛рдордЧреНрд░реА рднреА рд╣реИ - рд░реИрдо, рд░реЛрдоред рд▓реЗрдХрд┐рди рдЬрдм рд╕реЗ рд╡рд░реНрдЪреБрдЕрд▓ рдорд╢реАрди рдХреА рдпрд╛рдж рдореЗрдВ "рд╣реЛрд╕реНрдЯ рдорд╢реАрди" (рд╡рд░реНрдЪреБрдЕрд▓ рдорд╢реАрди рдХреЛрдб рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рд╡рд╛рд▓реА рдорд╢реАрди) рдХреЛ рд░рдЦрдирд╛ рдЖрд╕рд╛рди рд╣реЛрддрд╛ рд╣реИ, рдЕрдХреНрд╕рд░ рдЗрд╕рдХрд╛ рдХреЛрдИ рдорддрд▓рдм рдирд╣реАрдВ рд╣реИ - рдХреЙрд▓рдмреИрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдпрд╣ рд╕рдорд╛рдзрд╛рди рдЖрдкрдХреЛ рд╣рд╛рд░реНрд╡рд░реНрдб рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ (рдкрдврд╝реЗрдВ AVR [7] [8]) рдХреЗ рд╕рд╛рде рдкреНрд░реЛрд╕реЗрд╕рд░ рдкрд░ "рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдмрд╛рдПрдВ рд╣рд╛рде рдХреЗ" рдХрд╛рд░реНрдпрдХреНрд░рдореЛрдВ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рдмрд╛рд╣рд░реА рд╕реНрд░реЛрддреЛрдВ (рдЬреИрд╕реЗ, i2c рдореЗрдореЛрд░реА рдпрд╛ рдПрд╕рдбреА рдХрд╛рд░реНрдб) рд╕реЗ рдХрд╛рд░реНрдпрдХреНрд░рдо рд▓реЗ рд░рд╣рд╛ рд╣реИред

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдкреНрд░реЛрд╕реЗрд╕рд░ рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рдЗрдВрдЯрд░рдкреНрдЯ рд░рдЬрд┐рд╕реНрдЯрд░ (рдПрд╕рдПрдлрдЖрд░) рдХрд╛ рд╡рд░реНрдгрди рд╣реИред MSP430 рд░реБрдХрд╛рд╡рдЯ рдкреНрд░рдгрд╛рд▓реА рд╕рдмрд╕реЗ рд╕рдЯреАрдХ рд░реВрдк рд╕реЗ [6], рдЦрдВрдб 2.2 рдореЗрдВ рд╡рд░реНрдгрд┐рдд рд╣реИред
рд▓реЗрдХрд┐рди рд╡рд░реНрдгрд┐рдд рдЖрднрд╛рд╕реА рдорд╢реАрди рдореЗрдВ, рдореИрдВ рдореВрд▓ рд╕реЗ рдереЛрдбрд╝рд╛ рджреВрд░ рдЪрд▓рд╛ рдЧрдпрд╛ред рдореВрд▓ рдкреНрд░реЛрд╕реЗрд╕рд░ рдореЗрдВ, рдмрд╛рдзрд╛ рдЭрдВрдбреЗ рдкрд░рд┐рдзреАрдп рд░рдЬрд┐рд╕реНрдЯрд░реЛрдВ рдореЗрдВ рд╣реИрдВред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдПрд╕рдПрдлрдЖрд░ рд░рдЬрд┐рд╕реНрдЯрд░реЛрдВ рдореЗрдВ рд╡реНрдпрд╡рдзрд╛рди рд╡рд░реНрдгрд┐рдд рд╣реИрдВред

рдкреНрд░реЛрд╕реЗрд╕рд░ рдкрд░рд┐рдзрд┐ рдХреЛ рдХреЙрд▓рдмреИрдХ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЙрд╕реА рддрд░рд╣ рд╡рд░реНрдгрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЬреЛ рдЖрдкрдХреЛ рдЕрдкрдиреА рдЦреБрдж рдХреА рдкрд░рд┐рдзреАрдп рдЗрдЪреНрдЫрд╛рд╢рдХреНрддрд┐ рдмрдирд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред

рдЕрдЧрд▓рд╛ рдкреНрд░реЛрд╕реЗрд╕рд░ рдЖрдЗрдЯрдо рдХрдорд╛рдВрдб рдорд▓реНрдЯреАрдкреНрд▓реЗрдХреНрд╕рд░ рд╣реИред рдХрдорд╛рдВрдб рдорд▓реНрдЯреАрдкреНрд▓реЗрдХреНрд╕ рдПрдХ рдЕрд▓рдЧ рдлрд╝рдВрдХреНрд╢рди рдХрд░рддрд╛ рд╣реИред рдорд▓реНрдЯреАрдкреНрд▓реЗрдХреНрд╕ рдХрдорд╛рдВрдб рд╢рдмреНрдж рд╕реЗ рд╣реА рдХрдорд╛рдВрдб рдХрд╛ рдЪрдпрди рдХрд░рддрд╛ рд╣реИ, рд╕реНрд░реЛрдд рдФрд░ рд░рд┐рд╕реАрд╡рд░ рдХреЛ рд╕рдВрдмреЛрдзрд┐рдд рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдЪрдпрдирд┐рдд рдХрдорд╛рдВрдб рдХреА рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХрд░рддрд╛ рд╣реИред

рдЕрд▓рдЧ-рдЕрд▓рдЧ рдлрд╝рдВрдХреНрд╢рди рд╕реНрд░реЛрдд рдПрдбреНрд░реЗрд╕рд┐рдВрдЧ (SRC) рдФрд░ рд░рд┐рд╕реАрд╡рд░ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддреЗ рд╣реИрдВред

рдЗрд╕рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХреИрд╕реЗ рдХрд░реЗрдВ


рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рд╕реЗ рдЙрджрд╛рд╣рд░рдг рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ [9] рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкреНрд░реЛрд╕реЗрд╕рд░ рдХреЗ рд▓рд┐рдП рдЙрджрд╛рд╣рд░рдг рд╣реИрдВ:
  • IAR рд╕рдВрдХрд▓рдХ рдХреЗ рд▓рд┐рдП STM8
  • SDCC рд╕рдВрдХрд▓рдХ рдХреЗ рд▓рд┐рдП STM8
  • рдХреЗрдЗрдПрд▓ рдЖрд░реНрдордХ рдХрдВрдкрд╛рдЗрд▓рд░ рдХреЗ рд▓рд┐рдП STM32
  • рдЬреАрд╕реАрд╕реА рдХрдВрдкрд╛рдЗрд▓рд░ рдХреЗ рд▓рд┐рдП рдПрд╡реАрдЖрд░


Cpu.h рдлрд╝рд╛рдЗрд▓ рдореЗрдВ, рдкреНрд░реЛрд╕реЗрд╕рд░ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред

рдиреАрдЪреЗ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХрд╛ рд╡рд┐рд╡рд░рдг:

  • RAM_USE_CALLBACKS - рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдкреНрд░реЛрд╕реЗрд╕рд░ рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд╕рд░рдгрд┐рдпреЛрдВ рдХреЗ рдмрдЬрд╛рдп рдХреЙрд▓ (рдХреЙрд▓рдмреИрдХ) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реИ рдпрд╛ рдирд╣реАрдВред рд░рд╛рдо рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЙрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реИ рдпрд╛ рдирд╣реАрдВ (рдХреЙрд▓ cpu.ram_read, cpu.ram_write)
  • ROM_USE_CALLBACKS - ROM рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЙрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реИ рдпрд╛ рдирд╣реАрдВ (рдХреЙрд▓ cpu.rom_read)
  • IO_USE_CALLBACKS - рдкрд░рд┐рдзрд┐ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЙрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реИ рдпрд╛ рдирд╣реАрдВ (рдХреЙрд▓ cpu.io_read, cpu.io_write), рдпрджрд┐ 0 рд╣реИ, рддреЛ рдкрд░рд┐рдзрд┐ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдлрд╝рдВрдХреНрд╢рди cpu.c рдлрд╝рд╛рдЗрд▓ рд╕реЗ msp430_io рдореЗрдВ рд╡рд░реНрдгрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред
  • RAM_SIZE - RAM рдЖрдХрд╛рд░ (RAM), рдЕрдВрдд рдкрддрд╛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдЗрд╕ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдкреБрдирд░реНрдЧрдгрдирд╛ рд╣реИ
  • ROM_SIZE - ROM рдЖрдХрд╛рд░ (ROM), рдЗрд╕ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдкрддрд╛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдкреБрдирд░реНрдЧрдгрдирд╛ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ
  • IRQ_USE - рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рд╡реНрдпрд╡рдзрд╛рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛; рдпрджрд┐ 1, рддреЛ рд╡реНрдпрд╡рдзрд╛рди рд╕рдХреНрд╖рдо рд╣реИрдВ
  • HOST_ENDIANESS - рд╣реЛрд╕реНрдЯ рдХрдВрдЯреНрд░реЛрд▓рд░ (рд╡рд░реНрдЪреБрдЕрд▓ рдорд╢реАрди рдЪрд▓рд╛рдиреЗ рд╡рд╛рд▓реЗ рдирд┐рдпрдВрддреНрд░рдХ) рдХреЗ рдмрд╛рдЗрдЯ рдСрд░реНрдбрд░ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИред AVR, X86, STM32 рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдЫреЛрдЯреЗ-рдПрдВрдбрд┐рдпрди рд╣реИрдВ, STM8 рдмрдбрд╝реЗ-рдПрдВрдбрд┐рдпрди рд╣реИрдВ
  • DEBUG_ON - рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдбреАрдмрдЧрд┐рдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ рдпрд╛ рдирд╣реАрдВред рдбрд┐рдмрдЧрд┐рдВрдЧ fprintf - stderr рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ


рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХрд╛ рдЙрдкрдпреЛрдЧ cpu.c рдФрд░ cpu.h рдХреЛ рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╕реЗ рдЬреЛрдбрд╝рдХрд░ рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИред

#include "cpu.h"

рдЕрдЧрд▓рд╛ рдкреНрд░реЛрд╕реЗрд╕рд░ рд╕рдВрджрд░реНрдн рдХреА рдШреЛрд╖рдгрд╛ рд╣реИред * _USE_CALLBACKS рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рд╕рдВрджрд░реНрдн рдШреЛрд╖рдгрд╛ рдХреЛрдб рдмрджрд▓ рдЬрд╛рдПрдЧрд╛ред

рд╕рднреА рдХреЗ рд▓рд┐рдП * _USE_CALLBACKS = 1 рдкреНрд░реЛрд╕реЗрд╕рд░ рд╕рдВрджрд░реНрдн рдШреЛрд╖рдгрд╛рдПрдВ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрд╛рдИ рджреЗрдВрдЧреА:

msp430_context_t cpu_context =
    {
        .ram_read_cb = ram_read,
        .ram_write_cb = ram_write,
        .rom_read_cb = rom_read,
        .io_read_cb = io_read,
        .io_write_cb = io_write
    };


рдЬрд╣рд╛рдБ * _cb рд╡реИрд░рд┐рдПрдмрд▓ рдлрд╝рдВрдХреНрд╢рди рдкреЙрдЗрдВрдЯрд░реНрд╕ (рдЙрджрд╛рд╣рд░рдг рджреЗрдЦреЗрдВ) рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддреЗ рд╣реИрдВред

рдЗрд╕рдХреЗ рд╡рд┐рдкрд░реАрдд, * _USE_CALLBACKS = 0 рдХреЗ рд▓рд┐рдП, рдШреЛрд╖рдгрд╛рдПрдБ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрд╛рдИ рджреЗрдВрдЧреА:

msp430_context_t cpu_context =
    {
         .rom = { /* hex program */ },
    };

рдЕрдЧрд▓рд╛ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕рдВрджрд░реНрдн рдЖрд░рдВрднреАрдХрд░рдг рд╣реИ:

msp430_init(&cpu_context);

рдФрд░ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдПрдХ рд╕рдордп рдореЗрдВ рдПрдХ рдирд┐рд░реНрджреЗрд╢ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдирд╛:

while(1)
    msp430_cpu(&cpu_context);

рдкрддрд╛ рд╕реНрдерд╛рди рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЙрд▓рдмреИрдХ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддреЗ рд╣реИрдВ:

uint16_t io_read(uint16_t address);
void io_write(uint16_t address,uint16_t data);

uint8_t ram_read(uint16_t address);
void ram_write(uint16_t address,uint8_t data);

uint8_t rom_read(uint16_t address);

IO рдХреЗ рдкрддреЗ 0 рдкрддрд╛ рд╕реНрдерд╛рди рдХреЗ рд╕рд╛рдкреЗрдХреНрд╖ рдкреНрд░реЗрд╖рд┐рдд рд╣реЛрддреЗ рд╣реИрдВ (рдпрд╛рдиреА рдпрджрд┐ рд╡рд░реНрдЪреБрдЕрд▓ рдорд╢реАрди рдкреНрд░реЛрдЧреНрд░рд╛рдо P1IN рддрдХ рдкрд╣реБрдВрдЪрддрд╛ рд╣реИ, рдЬрд┐рд╕реЗ 0x20 рдХреЛ рд╕рдВрдмреЛрдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрд╕рд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рддреЛ рдкрддрд╛ 0x20 рдлрд╝рдВрдХреНрд╢рди рдХреЛ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛)ред

рдЗрд╕рдХреЗ рд╡рд┐рдкрд░реАрдд, рд░реИрдо рдФрд░ ROM рдХреЗ рдкрддреЗ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдмрд┐рдВрджреБрдУрдВ рдХреЗ рд╕рд╛рдкреЗрдХреНрд╖ рдкреНрд░реЗрд╖рд┐рдд рд╣реЛрддреЗ рд╣реИрдВ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЬрдм рдкрддрд╛ 0xfc06 рддрдХ рдкрд╣реБрдВрдЪрддреЗ рд╣реИрдВ рдФрд░ 0xfc00 рдкрд░ ROM рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдкрддрд╛ 0x0006 рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдкрд╛рд╕ рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдЕрд░реНрдерд╛рдд, рдкрддрд╛ 0 рд╕реЗ RAM_SIZE, 0 - ROM_SIZE рдХреЗ

рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ )ред , рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП I2C (рдЬреЛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдкреНрд░реЛрд╕реЗрд╕рд░ рдХреЛ рдзреАрдорд╛ рдХрд░ рджреЗрддрд╛ рд╣реИ)ред

рдХреИрд╕реЗ рдкреВрд░рд╛ рдХрд░реЗрдВ


рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдкреВрд░реА рдирд╣реАрдВ рд╣реБрдИ рд╣реИред рдпрд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдкрд░реАрдХреНрд╖рдг рдлрд░реНрдорд╡реЗрдпрд░ рдПрдХ рдзрдорд╛рдХреЗ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдЕрдзрд┐рдХрд╛рдВрд╢ рд╕рдВрдХрд▓рдХ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рд░реВрдк рд╕реЗ рд╡рд┐рднрд┐рдиреНрди рд╡рд┐рд╢рд┐рд╖реНрдЯ рдХрдорд╛рдВрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ (рдХрд╣рддреЗ рд╣реИрдВ, рдбреИрдб рд╕реНрд░реЛрдд рдФрд░ рд░рд┐рд╕реАрд╡рд░ рдХрд╛ рджрд╢рдорд▓рд╡ рдЬреЛрдбрд╝ рд╣реИ (рд╣рд╛рдЗрдлрд╝рдиреЗрд╢рди рдХреЗ рд╕рд╛рде)ред рддреЛ рдЕрд╕рд▓реА рдкреНрд░реЛрд╕реЗрд╕рд░ рдХреЗ рд╕рд╛рде 100% рд╕рдВрдЧрддрддрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░рдиреЗ рдХреА рдХреЛрдИ рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред

рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рд░реВрдк рд╕реЗ, рдПрдХ рд╡рд░реНрдЪреБрдЕрд▓ рдорд╢реАрди рдХрдорд╛рдВрдб рдХреЗ рдкреНрд░рддрд┐ рдореЗрдЬрдмрд╛рди рдорд╢реАрди рдХреЗ рд▓рдЧрднрдЧ рджреЛ рджрд░реНрдЬрди рдСрдкрд░реЗрд╢рди рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рдХрд┐рд╕реА рднреА рдЧрддрд┐ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рдорддрд▓рдм рдирд╣реАрдВ рд╣реИред

рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рд╕реНрд░реЛрдд рдФрд░ рдЕрдзрд┐рдХ рд╡реНрдпрд╛рдкрдХ рд╡рд┐рд╡рд░рдг bitbucket.org [9] рдкрд░ рдЙрдкрд▓рдмреНрдз рд╣реИрдВред

рдореБрдЭреЗ рдЦреБрд╢реА рд╣реЛрдЧреА рдЕрдЧрд░ рдпрд╣ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХрд┐рд╕реА рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реИред

[рез] dmitry.gr/index.php?r=05.Projects&proj=12.%20uJ%20-%20a%20micro%20JVM
[2] www.harbaum.org/till/nanovm/index.shtml
[3]www.eluaproject.net
[4] code.google.com/p/picoc
[5] en.wikipedia.org/wiki/MSP430
[6] www.ti.com/lit/ug/slau049f/slau00ff.pdf
[7] en.wikipedia.org/wiki/%D0%93%D0%B0%D1%80%D0%B2%D0%B0%D1%80%D0%B4%D1%81%D0%BA%D0%B0%D1 % 8F_% D0% B0% D1% 80% D1% 85% D0% B8% D1% 82% D0% B5% D5% BA% D1% 82% D1% 83% D1% 80% D0% B0
[8] en .wikipedia.org / wiki / AVR
[9] bitbucket.org/intl/msp430_vm

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


All Articles