Slide 1

Slide 1 text

"3.ϚΠίϯͰ࡞Δ γϯηαΠβʔ Naomasa Matsubayashi

Slide 2

Slide 2 text

"3.ϚΠίϯͰ࡞Δ γϯηαΠβʔ Naomasa Matsubayashi !GBEJT@ 5XJUUFS (JUIVC TMJEFTIBSF IUUQXXXTMJEFTIBSFOFUGBEJT IUUQTHJUIVCDPN'BEJT

Slide 3

Slide 3 text

TMJEFTIBSF IUUQXXXTMJEFTIBSFOFUGBEJT

Slide 4

Slide 4 text

ੈͷதʹ͸৭Μͳ ARM ͕͋Δ

Slide 5

Slide 5 text

Ͱ͔͍ARM "3. $PSUFY" BeagleBoard-X15 ARM Cortex-A15 1.5GHz x2 IUUQXXXFMJOVYPSH#FBHMFCPBSE#FBHMF#PBSE9

Slide 6

Slide 6 text

"3. $PSUFY. খ͍͞ARM LPC812 ARM Cortex-M0+ 30MHz IUUQXXXOYQMQDDPNMQD@NJDPODPSUFYNMQD

Slide 7

Slide 7 text

ϚΠΫϩίϯτϩʔϥ޲͚ARM Cortex-MγϦʔζ Cortex-M7 Cortex-M4 Cortex-M3 Cortex-M1 Cortex-M0+ CortexM0 IUUQBSNDPNKBQSPEVDUTQSPDFTTPSTDPSUFYNJOEFYQIQ

Slide 8

Slide 8 text

ARM໋ྩʹ͸ରԠ͍ͯ͠ͳ͍ 5IVNC '16 ͷΈ 5IVNC '16 ͷΈ 5IVNCͷΈ 5IVNCͷҰ෦͚ͩ 5IVNCͷҰ෦͚ͩ 5IVNCͷҰ෦͚ͩ Cortex-M7 Cortex-M4 Cortex-M3 Cortex-M1 Cortex-M0+ CortexM0 5IVNCͱ͸"3.ϓϩηοαͷ΋͏ͭͷ໋ྩηοτɻ ໋ྩ͕Մม௕Ͱ"3.໋ྩηοτΑΓϚγϯޠ͕খ͘͞ͳΔɻ

Slide 9

Slide 9 text

ύΠϓϥΠϯ͕୹͍ Cortex-M7 Cortex-M4 Cortex-M3 Cortex-M1 Cortex-M0+ CortexM0 ஈ౤ػత࣮ߦ ஈ౤ػత࣮ߦ ஈ ஈ ஈ ஈ ౤ػత࣮ߦͱ͸ॲཧ͕ඞཁ͔Ͳ͏͔֬ఆ͢Δલ͔Β ࣮ߦΛ࢝Ί͓ͯ͘ࣄɻඞཁͳ͔ͬͨΒ࣮ߦ݁ՌΛࣺͯΔɻ

Slide 10

Slide 10 text

MMU͕ແ͍ جຊతʹ04Λಈ͔͢͜ͱ͸૝ఆ͞Ε͍ͯͳ͍ ..6ͱ͸ϝϞϦ؅ཧϢχοτɻԾ૝ΞυϨεͱ ෺ཧΞυϨεͷม׵ɺٴͼϝϞϦอޢΛߦ͏ϋʔυ΢ΣΞɻ Cortex-M7/M4/M3/M0+ʹ͸ ϝϞϦอޢϢχοτ͚ͩ͸උΘ͍ͬͯΔ IUUQXXXMJOVYBSNPSH-JOVY,FSOFM-JOVY. ͨͩ͠-JOVYΛಈ͔ͯ͠͠·ͬͨਓ͸ډΔ Ծ૝ΞυϨεͷม׵͸ग़དྷͳ͍

Slide 11

Slide 11 text

ARMʹͯ͠͸஗͍ %.*14.)[ͱ͸%ISZTUPOFϕϯνϚʔΫΛඵؒʹ࣮ߦ Ͱ͖ͨճ਺Λप೾਺Ͱׂͬͨ΋ͷɻେ͖͍ఔΫϩοΫลΓͷ ੑೳ͕ྑ͍ɻ଎͍"3.ͩͱҎ্ɺY@ͩͱҎ্ɻ .)[ .)[ .)[ .)[ .)[ Cortex-M7 Cortex-M4 Cortex-M3 Cortex-M0+ CortexM0 %.*14.)[ ΫϩοΫ

Slide 12

Slide 12 text

͍҆ Ϛϧπͱ͸ळ༿ݪͷຊళΛ͸͡ΊશࠃΧॴʹ͋Δిࢠ෦ ඼԰͞Μɻೖ໳Ωοτ͔Βಛघ༻్ͷੴ·Ͱ෯޿͍඼ἧ͑ɻ NXP LPC812ͷ৔߹ ϚϧπͰݸ IUUQXXXNBSVUTVDPKQQDJ 110ԁ ੫ൈ

Slide 13

Slide 13 text

௿ফඅిྗ NXP LPC812ͷ৔߹ ࠷େΫϩοΫ MHz ࣌ 10.89mW ׂΓࠐΈ଴ػ࣌ 5.28µW ΫϩοΫΛ௿Ίʹઃఆ͢Ε͹ ίΠϯܕϦν΢Ϝి஑Ͱ΋ಈ͘

Slide 14

Slide 14 text

ARM$PSUFY.Ͱಈ͘ όΠφϦΛ࡞Ζ͏

Slide 15

Slide 15 text

mbed ϒϥ΢β্Ͱಈ͘౷߹։ൃ؀ڥ IUUQTNCFEPSH

Slide 16

Slide 16 text

mbed ৭Μͳ$PSUFY.ϚΠίϯ޲͚ͷ όΠφϦΛు͚Δ

Slide 17

Slide 17 text

mbed ৭ΜͳσόΠεͷυϥΠό͕ ࠷ॳ͔Β༻ҙ͞Ε͍ͯΔ

Slide 18

Slide 18 text

mbed

Slide 19

Slide 19 text

mbed 64#ετϨʔδΛϚ΢ϯτ ΠʔαωοτυϥΠό )551αʔό %)$1ͰΞυϨεΛ໯ͬͯ͘Δ )551αʔόΛ൪ϙʔτʹCJOE ڻҟͷϨΠϠʔͷߴ͞

Slide 20

Slide 20 text

μϝͩ ΋ͬͱϨΠϠʔΛԼ͛ΔΜͩ

Slide 21

Slide 21 text

BSNOPOFFBCJH ϩʔΧϧͷHDDͰϏϧυ͠Α͏

Slide 22

Slide 22 text

CMSIS Cortex-M޲͚ͷ ϋʔυ΢ΣΞந৅ԽϨΠϠʔ ARM͕ࣾΠϯλʔϑΣʔεΛఆΊͯ ϚΠίϯͷϕϯμ͕࣮૷͢Δ ҧ͏ϕϯμͷϚΠίϯʹҠߦͯ͠΋ جຊతͳػೳͷ࢖͍ํ͸ҰॹͰशಘָ͕

Slide 23

Slide 23 text

Cortex-MϚΠίϯ CMSIS mbedϥΠϒϥϦ mbedίϛϡχςΟ ϖϦϑΣϥϧϥΠϒϥϦ ΞϓϦέʔγϣϯ mbed͸CMSISͷ্Ͱಈ͘ Πʔαωοτ υϥΠό ͱ͔͸͜͜ )551αʔό ͱ͔͸͜͜ σόΠεͷ ॳظԽ ͱ͔͸͜͜ ͜͜·Ͱ͸࢖͍͍ͨ

Slide 24

Slide 24 text

mbedͷιʔείʔυ͸ githubͰެ։͞Ε͍ͯΔ ֤ϚΠίϯ޲͚ͷCMSISͷ࣮૷΋ೖ͍ͬͯΔ IUUQTHJUIVCDPNNCFENJDSPNCFE CMSIS

Slide 25

Slide 25 text

ldscript NCFEͷϠπ͸ "3.७ਖ਼ίϯύΠϥ༻ʹॻ͔Ε͍ͯΔ METDSJQUͱ͸ϦϯΧʹ౉͢ઃఆϑΝΠϧɻόΠφϦΠϝʔδ ͷͲ͜ʹԿ͕ஔ͔ΕΔ͔Λهड़͢Δɻ

Slide 26

Slide 26 text

MEMORY {! flash (rx) : ORIGIN = 0x00000000, LENGTH = 16K! ram (rwx) : ORIGIN = 0x10000000, LENGTH = 4K! }! ENTRY(Reset_Handler)! SECTIONS {! .text : {! KEEP(*(.isr_vector))! *(.text*)! KEEP(*(.init))! KEEP(*(.fini))! *crtbegin.o(.ctors)! *crtbegin?.o(.ctors)! *(EXCLUDE_FILE(*crtend?.o *crtend.o) .ctors)! *(SORT(.ctors.*))! *(.ctors)! *crtbegin.o(.dtors)! *crtbegin?.o(.dtors)! *(EXCLUDE_FILE(*crtend?.o *crtend.o) .dtors)! *(SORT(.dtors.*))! *(.dtors)! *(.rodata*)! KEEP(*(.eh_frame*))! } > flash! .ARM.extab : {! *(.ARM.extab* .gnu.linkonce.armextab.*)! } > flash! __exidx_start = .;! .ARM.exidx : {! *(.ARM.exidx* .gnu.linkonce.armexidx.*)! } > flash! __exidx_end = .;! __etext__ = .;! .data : AT(__etext__) {! __data_values__ = LOADADDR(.data);! __data_begin__ = .;! *(vtable)! *(.data*)! 3".ͱϑϥογϡϝϞϦͷ ։࢝ΞυϨεͱαΠζ͸ ී௨σʔλγʔτʹॻ͍ͯ͋Δ ! ࠓճ࢖͏-1$ͷ৘ใ͸ ҎԼͷ63-͔ΒḷΕΔ IUUQXXXOYQMQDDPNMQD@NJDPODPSUFYNMQD ldscript

Slide 27

Slide 27 text

MEMORY {! flash (rx) : ORIGIN = 0x00000000, LENGTH = 16K! ram (rwx) : ORIGIN = 0x10000000, LENGTH = 4K! }! ENTRY(Reset_Handler)! SECTIONS {! .text : {! KEEP(*(.isr_vector))! *(.text*)! KEEP(*(.init))! KEEP(*(.fini))! *crtbegin.o(.ctors)! *crtbegin?.o(.ctors)! *(EXCLUDE_FILE(*crtend?.o *crtend.o) .ctors)! *(SORT(.ctors.*))! *(.ctors)! *crtbegin.o(.dtors)! *crtbegin?.o(.dtors)! *(EXCLUDE_FILE(*crtend?.o *crtend.o) .dtors)! *(SORT(.dtors.*))! *(.dtors)! *(.rodata*)! KEEP(*(.eh_frame*))! } > flash! .ARM.extab : {! *(.ARM.extab* .gnu.linkonce.armextab.*)! } > flash! __exidx_start = .;! .ARM.exidx : {! *(.ARM.exidx* .gnu.linkonce.armexidx.*)! } > flash! __exidx_end = .;! __etext__ = .;! .data : AT(__etext__) {! __data_values__ = LOADADDR(.data);! __data_begin__ = .;! *(vtable)! *(.data*)! . = ALIGN(4);! ϑϥογϡϝϞϦʹ͸ ! ׂΓࠐΈϕΫλ Ϛγϯޠ ॻ͖มΘΒͳ͍σʔλ ! Λஔ͘ ldscript

Slide 28

Slide 28 text

.ARM.exidx : {! *(.ARM.exidx* .gnu.linkonce.armexidx.*)! } > flash! __exidx_end = .;! __etext__ = .;! .data : AT(__etext__) {! __data_values__ = LOADADDR(.data);! __data_begin__ = .;! *(vtable)! *(.data*)! . = ALIGN(4);! PROVIDE_HIDDEN (__preinit_array_start = .);! KEEP(*(.preinit_array))! PROVIDE_HIDDEN (__preinit_array_end = .);! . = ALIGN(4);! PROVIDE_HIDDEN (__init_array_start = .);! KEEP(*(SORT(.init_array.*)))! KEEP(*(.init_array))! PROVIDE_HIDDEN (__init_array_end = .);! . = ALIGN(4);! PROVIDE_HIDDEN (__fini_array_start = .);! KEEP(*(SORT(.fini_array.*)))! KEEP(*(.fini_array))! PROVIDE_HIDDEN (__fini_array_end = .);! . = ALIGN(4);! __data_end__ = .;! } > ram! .bss : {! __bss_begin__ = .;! *(.bss*)! *(COMMON)! __bss_end__ = .;! } > ram! __stack_begin__ = .;! .stack_dummy : {! *(.stack)! } > ram! __stack_end__ = .;! } 3".ʹ͸ ! WUBCMF ॻ͖มΘΔσʔλ ελοΫ ! Λஔ͘ ldscript

Slide 29

Slide 29 text

ϓϩάϥϜ͕ىಈ͔ͯ͠Β NBJOؔ਺ʹೖΔ·ͰͷॲཧΛॻ͍ͨ΋ͷ ىಈ άϩʔόϧม਺ͷॳظ஋Λઃఆ άϩʔόϧม਺ͷίϯετϥΫλΛ࣮ߦ ϋʔυ΢ΣΞͷॳظԽ main()ʹδϟϯϓ ελʔτΞοϓϧʔνϯ

Slide 30

Slide 30 text

NCFEͷϠπ͸ྫʹΑͬͯ "3.७ਖ਼ίϯύΠϥ༻ʹॻ͔Ε͍ͯΔ ελʔτΞοϓϧʔνϯ

Slide 31

Slide 31 text

ελʔτΞοϓϧʔνϯ Reset_Handler:! ldr r1, =__etext__! ldr r2, =__data_begin__! ldr r3, =__data_end__! ldr r0, =init_data! blx r0! ldr r0, =init_bss! blx r0! ldr r0, =run_preinit! blx r0! ldr r0, =run_init! blx r0! ldr r0, =SystemInit! blx r0! ldr r0, =main! blx r0! .pool ! .size Reset_Handler, . - Reset_Handler

Slide 32

Slide 32 text

ελʔτΞοϓϧʔνϯ Reset_Handler:! ldr r1, =__etext__! ldr r2, =__data_begin__! ldr r3, =__data_end__! ldr r0, =init_data! blx r0! ldr r0, =init_bss! blx r0! ldr r0, =run_preinit! blx r0! ldr r0, =run_init! blx r0! ldr r0, =SystemInit! blx r0! ldr r0, =main! blx r0! .pool ! .size Reset_Handler, . - Reset_Handler ΞηϯϒϦͰ֨ಆͨ͘͠ͳ͍ͷͰ $Ͱ࣮૷ͨ͠ॳظԽίʔυʹඈͿ

Slide 33

Slide 33 text

ελʔτΞοϓϧʔνϯ Reset_Handler:! ldr r1, =__etext__! ldr r2, =__data_begin__! ldr r3, =__data_end__! ldr r0, =init_data! blx r0! ldr r0, =init_bss! blx r0! ldr r0, =run_preinit! blx r0! ldr r0, =run_init! blx r0! ldr r0, =SystemInit! blx r0! ldr r0, =main! blx r0! .pool ! .size Reset_Handler, . - Reset_Handler σόΠεͷॳظԽ͸ CMSISʹ͓·͔ͤ

Slide 34

Slide 34 text

void run_preinit(void) {! int *cur = &__preinit_array_start;! for( ; cur < &__preinit_array_end; cur++ ) {! void (*f)(void) = (void *)*cur;! (*f)();! }! }! void run_init(void) {! int *cur = &__init_array_start;! for( ; cur < &__init_array_end; cur++ ) {! void (*f)(void) = (void *)*cur;! (*f)();! }! }! void init_data(void) {! unsigned char *src = &__data_values__;! unsigned char *dest = &__data_begin__;! unsigned int len = &__data_end__ - &__data_begin__;! while( len-- ) *dest++ = *src++;! }! void init_bss(void) {! unsigned char *dest = &__bss_begin__;! unsigned int len = &__bss_end__ - &__bss_begin__;! while( len-- ) *dest++ = 0;! }

Slide 35

Slide 35 text

void run_preinit(void) {! int *cur = &__preinit_array_start;! for( ; cur < &__preinit_array_end; cur++ ) {! void (*f)(void) = (void *)*cur;! (*f)();! }! }! void run_init(void) {! int *cur = &__init_array_start;! for( ; cur < &__init_array_end; cur++ ) {! void (*f)(void) = (void *)*cur;! (*f)();! }! }! void init_data(void) {! unsigned char *src = &__data_values__;! unsigned char *dest = &__data_begin__;! unsigned int len = &__data_end__ - &__data_begin__;! while( len-- ) *dest++ = *src++;! }! void init_bss(void) {! unsigned char *dest = &__bss_begin__;! unsigned int len = &__bss_end__ - &__bss_begin__;! while( len-- ) *dest++ = 0;! } RAMʹஔ͍͓ͯ͘σʔλΛ ϑϥογϡϝϞϦ͔Βίϐʔ

Slide 36

Slide 36 text

void run_preinit(void) {! int *cur = &__preinit_array_start;! for( ; cur < &__preinit_array_end; cur++ ) {! void (*f)(void) = (void *)*cur;! (*f)();! }! }! void run_init(void) {! int *cur = &__init_array_start;! for( ; cur < &__init_array_end; cur++ ) {! void (*f)(void) = (void *)*cur;! (*f)();! }! }! void init_data(void) {! unsigned char *src = &__data_values__;! unsigned char *dest = &__data_begin__;! unsigned int len = &__data_end__ - &__data_begin__;! while( len-- ) *dest++ = *src++;! }! void init_bss(void) {! unsigned char *dest = &__bss_begin__;! unsigned int len = &__bss_end__ - &__bss_begin__;! while( len-- ) *dest++ = 0;! } άϩʔόϧΦϒδΣΫτͷ ίϯετϥΫλͱ͔Λ࣮ߦ

Slide 37

Slide 37 text

LEDΛ఺໓ͤͯ͞ΈΑ͏

Slide 38

Slide 38 text

#include "LPC8xx.h"! extern "C"! __attribute__((interrupt("IRQ")))! void SysTick_Handler(void) {! LPC_GPIO_PORT->NOT0 = ( 1 << 16 );! }! int main() {! LPC_SYSCON->SYSAHBCLKCTRL |= (1 << 6);! LPC_GPIO_PORT->DIR0 |= ( 1 << 16 );! SysTick_Config( 6000000 );! while( 1 );! }

Slide 39

Slide 39 text

#include "LPC8xx.h"! extern "C"! __attribute__((interrupt("IRQ")))! void SysTick_Handler(void) {! LPC_GPIO_PORT->NOT0 = ( 1 << 16 );! }! int main() {! LPC_SYSCON->SYSAHBCLKCTRL |= (1 << 6);! LPC_GPIO_PORT->DIR0 |= ( 1 << 16 );! SysTick_Config( 6000000 );! while( 1 );! } SysTickλΠϚʔͷׂΓࠐΈ͕ൃੜͨ͠Β ൪໨ͷGPIOͷ஋Λ൓స @@BUUSJCVUF@@ JOUFSSVQU l*32z ͱ͸͜ΕΛࢦఆͯ͠ ͓͘ͱHDDׂ͕ΓࠐΈΤϯτϦϧʔνϯΛ෇͚ͯ͘ΕΔ

Slide 40

Slide 40 text

#include "LPC8xx.h"! extern "C"! __attribute__((interrupt("IRQ")))! void SysTick_Handler(void) {! LPC_GPIO_PORT->NOT0 = ( 1 << 16 );! }! int main() {! LPC_SYSCON->SYSAHBCLKCTRL |= (1 << 6);! LPC_GPIO_PORT->DIR0 |= ( 1 << 16 );! SysTick_Config( 6000000 );! while( 1 );! } GPIO΁ͷΫϩοΫΛ༗ޮʹͯ͠ ൪໨Λग़ྗϞʔυʹ੾Γସ͑ SysTick͕6,000,000Χ΢ϯτ͢Δ౓ʹ SysTickׂΓࠐΈΛൃੜͤ͞ΔΑ͏ʹ͢Δ

Slide 41

Slide 41 text

LPC812͸ ىಈ࣌͸12MHzͰಈ͍͍ͯΔ SysTick͕ 6,000,000Χ΢ϯτ͢Δʹ͸ 0.5ඵ͔͔Δ 0.5ඵຖʹGPIOͷग़ྗ͕ ൓స͢Δ͸ͣ

Slide 42

Slide 42 text

IUUQZPVUVCF(ZQE(%N*D

Slide 43

Slide 43 text

ୈճΧʔωϧ7.ؔ੢Ͱ঺հͨ͠ωλ 100MHzͷCortex-M3ϚΠίϯΛ࢖ͬͯ FMԻݯͱ͔Λ࡞Δ࿩ γϯηαΠβʔೖ໳

Slide 44

Slide 44 text

MHzͷCortex-M0+Ͱ΋ γϯηαΠβʔ͕࡞ΕΔͷͰ͸

Slide 45

Slide 45 text

ԻΛग़ͤΔΑ͏ʹ͠Α͏

Slide 46

Slide 46 text

ϚΠίϯʹ%"$͕ແ͍ͷͰ 41*ʹ%"$ΛͿΒԼ͛Δ 7 "3.ϚΠίϯ -1$ 41*%"$ .$1 Ξϯϓ*$ )57 1*0@ 1*0@ 1*0@ 7%% 744 7%% "744 $4 4$-, 4%* 73&' 7065" 744 LЊ Ж' Ж' Ж' 7%% 744 73&' "6%*/ 065/ 0651

Slide 47

Slide 47 text

void init_dac() {! NVIC_DisableIRQ( (IRQn_Type)( SPI0_IRQn ) );! NVIC_SetPriority(SPI0_IRQn, 0); ! do {! NVIC_ClearPendingIRQ(SPI0_IRQn); ! } while(NVIC_GetPendingIRQ(SPI0_IRQn) != 0);! LPC_SYSCON->SYSAHBCLKCTRL |= (1 << 11);! LPC_SPI0->DLY = 4;! LPC_SPI0->DIV = 2;! LPC_SPI0->TXCTRL = (16-1)<<24 | 1<<22 | ( 1 << 20 );! LPC_SPI0->CFG = (1<<5)|(1<<4)|(1<<2);! switch_matrix::bind_SPI0_SSEL_IO( 8 ); ! switch_matrix::bind_SPI0_SCK_IO( 9 );! switch_matrix::bind_SPI0_MOSI_IO( 1 );! LPC_SPI0->INTENSET = 0x0;! NVIC_EnableIRQ( (IRQn_Type)( SPI0_IRQn ) );! LPC_SPI0->TXDAT = 2048 | ( 1 << 13 )|( 1 << 12 );! }! void set_dac( uint16_t value ) {! value &= 4095;! LPC_SPI0->TXDAT = value | ( 1 << 13 )|( 1 << 12 );! }

Slide 48

Slide 48 text

void init_dac() {! NVIC_DisableIRQ( (IRQn_Type)( SPI0_IRQn ) );! NVIC_SetPriority(SPI0_IRQn, 0); ! do {! NVIC_ClearPendingIRQ(SPI0_IRQn); ! } while(NVIC_GetPendingIRQ(SPI0_IRQn) != 0);! LPC_SYSCON->SYSAHBCLKCTRL |= (1 << 11);! LPC_SPI0->DLY = 4;! LPC_SPI0->DIV = 2;! LPC_SPI0->TXCTRL = (16-1)<<24 | 1<<22 | ( 1 << 20 );! LPC_SPI0->CFG = (1<<5)|(1<<4)|(1<<2);! switch_matrix::bind_SPI0_SSEL_IO( 8 ); ! switch_matrix::bind_SPI0_SCK_IO( 9 );! switch_matrix::bind_SPI0_MOSI_IO( 1 );! LPC_SPI0->INTENSET = 0x0;! NVIC_EnableIRQ( (IRQn_Type)( SPI0_IRQn ) );! LPC_SPI0->TXDAT = 2048 | ( 1 << 13 )|( 1 << 12 );! }! void set_dac( uint16_t value ) {! value &= 4095;! LPC_SPI0->TXDAT = value | ( 1 << 13 )|( 1 << 12 );! } LPC812ͷSPI͸ Ұ౓ʹ16bit·ͰૹΕΔ MCP4821 ࠓճ࢖ͬͨDAC ͸ 16bitૹΔຖʹग़ྗ͕ߋ৽͞ΕΔ ૹ৴׬ྃ࣌ͷׂΓࠐΈ͕ཁΒͳ͍ ૹ৴όοϑΝ΋ཁΒͳ͍ ΍ͬͨͶ

Slide 49

Slide 49 text

void init_system_clock() {! LPC_SYSCON->SYSAHBCLKDIV = 2;! LPC_SYSCON->SYSPLLCTRL = 0x24;! }! int main() {! LPC_SYSCON->SYSAHBCLKCTRL |= (1 << 6);! LPC_SYSCON->SYSAHBCLKCTRL |= (1 << 18);! LPC_GPIO_PORT->DIR0 |= ( 1 << 8 );! LPC_GPIO_PORT->DIR0 |= ( 1 << 9 );! LPC_GPIO_PORT->DIR0 |= ( 1 << 1 );! init_system_clock();! init_dac();! SysTick_Config( 1875*2 );! while( 1 );! } $16ͷΫϩοΫΛ.)[ʹͯ͠ SysTickΛ8kHzʹઃఆ

Slide 50

Slide 50 text

uint16_t step = 0;! ! extern "C"! __attribute__((interrupt("IRQ")))! void SysTick_Handler(void) {! set_dac( step << 5 );! ++step;! } SysTickׂΓࠐΈ͕ൃੜͨ͠Β Χ΢ϯλͷ஋ΛDACʹૹΔ ͜ΕͰϊίΪϦ೾͕ग़Δ͸ͣ

Slide 51

Slide 51 text

IUUQZPVUVCFGBK-LMLQ/*

Slide 52

Slide 52 text

Ի৭Λܭࢉ͠Α͏

Slide 53

Slide 53 text

No content

Slide 54

Slide 54 text

μΠφϛοΫϨϯδѹॖ ΦʔσΟΦόοϑΝ ΦϖϨʔλ࿨Ի'.Իݯ

Slide 55

Slide 55 text

ͷݻఆখ਺఺਺Λ࢖͏ ුಈখ਺ԋࢉث͕ແ͍ ੔਺෦CJUූ߸෇͖੔਺ খ਺෦CJUූ߸ແ͠੔਺ ੔਺͔Βݻఆখ਺఺਺΁ͷม׵͸ࠨʹCJUγϑτ ݻఆখ਺఺਺͔Β੔਺΁ͷม׵͸ӈʹCJUγϑτ

Slide 56

Slide 56 text

ϒϩοΫ୯ҐͰܭࢉ 1$.ͷαϯϓϧ͸L)[͸ͳ͍ͱ ·ͱ΋ͳԻʹฉ͑͜ͳ͍ Իྔͷ্͛Լ͛΍Ωʔͷঢ়ଶ͸ ΋ͬͱ௿͍ස౓Ͱ͔͠มԽ͠ͳ͍ ϒϩοΫ ϒϩοΫͷதͰ͸Իྔ΍ΩʔͷมԽ͸ ແࢹͰ͖Δ΋ͷͱ͢Δ

Slide 57

Slide 57 text

प೾਺ͷ௿͍೾΍ઢܗͳ஋ͷมԽ͸ ؒҾ͍ͯܭࢉग़དྷΔ ิؒ ิؒ ิؒ ิؒ ඞཁͳαϯϓϧ਺ ܭࢉͨ͠αϯϓϧ਺ ͝·͔ͨ͠αϯϓϧ਺ ϒϩοΫ୯ҐͰܭࢉ

Slide 58

Slide 58 text

IUUQZPVUVCF0B6NO0Y[6*

Slide 59

Slide 59 text

ܭࢉΛ଎͘͠Α͏

Slide 60

Slide 60 text

CJUͷ੔਺ಉ࢜ͷ৐ࢉͷ݁Ռ͸ ࠷େͰCJUͷ੔਺ʹͳΔ FFFFFFFF! FFFFFFFF CJU CJU CJU FFFFFFFE00000001 *

Slide 61

Slide 61 text

৐ࢉ໋ྩNVM͸ CJUͱCJUΛֻ͚ͯ ݁ՌͷԼCJUΛಘΔ IUUQJOGPDFOUFSBSNDPNIFMQJOEFYKTQ UPQJD DPNBSNEPDEVJJK$JIJIHHKIUNM

Slide 62

Slide 62 text

FFFF.FFFF! FFFF.FFFF FFFFFFFE.00000001 * ͷݻఆখ਺఺਺ಉ࢜ͷ ৐ࢉͷ݁Ռ͸ ͷݻఆখ਺఺਺ʹͳΔ ݁ՌΛͰಘΔʹ͸ CJU໨͔ΒCJU໨·Ͱ͕ཉ͍͠

Slide 63

Slide 63 text

FFFF.FFFF! FFFF.FFFF FFFFFFFE.00000001 * ݁ՌΛͰಘΔʹ͸ CJU໨͔ΒCJU໨·Ͱ͕ཉ͍͠ ৐ࢉ݁ՌͷCJU໨Ҏ্ͷ஋͕ඞཁ

Slide 64

Slide 64 text

CJUͱCJUΛֻ͚ͯ ݁ՌΛCJUͰಘΔ໋ྩ NVMM

Slide 65

Slide 65 text

inline constexpr self_type operator*(! const self_type &y! ) const {! return self_type(! (! static_cast< double_type >( base ) *! static_cast< double_type >( y.base )! ) >> Shift::value, raw()! );! } NVMM͕࢖ΘΕΔ͜ͱΛظ଴ͯ͠ ৐ࢉΛ͜Μͳ෩ʹ࣮૷͍ͯͨ͠

Slide 66

Slide 66 text

…! 00001374 <__aeabi_lmul>:! 1374: 469c mov ip, r3! 1376: 0403 lsls r3, r0, #16! 1378: b5f0 push {r4, r5, r6, r7, lr}! 137a: 0c1b lsrs r3, r3, #16! 137c: 0417 lsls r7, r2, #16! 137e: 0c3f lsrs r7, r7, #16! 1380: 0c15 lsrs r5, r2, #16! 1382: 1c1e adds r6, r3, #0! 1384: 1c04 adds r4, r0, #0! 1386: 0c00 lsrs r0, r0, #16! 1388: 437e muls r6, r7! 138a: 436b muls r3, r5! 138c: 4347 muls r7, r0! 138e: 4345 muls r5, r0! 1390: 18fb adds r3, r7, r3! 1392: 0c30 lsrs r0, r6, #16! 1394: 1818 adds r0, r3, r0! 1396: 4287 cmp r7, r0! 1398: d902 bls.n 13a0 <__aeabi_lmul+0x2c>! 139a: 2380 movs r3, #128 ; 0x80! ݱ࣮

Slide 67

Slide 67 text

1392: 0c30 lsrs r0, r6, #16! 1394: 1818 adds r0, r3, r0! 1396: 4287 cmp r7, r0! 1398: d902 bls.n 13a0 <__aeabi_lmul+0x2c>! 139a: 2380 movs r3, #128 ; 0x80! 139c: 025b lsls r3, r3, #9! 139e: 18ed adds r5, r5, r3! 13a0: 0c03 lsrs r3, r0, #16! 13a2: 18ed adds r5, r5, r3! 13a4: 4663 mov r3, ip! 13a6: 435c muls r4, r3! 13a8: 434a muls r2, r1! 13aa: 0436 lsls r6, r6, #16! 13ac: 0c36 lsrs r6, r6, #16! 13ae: 18a1 adds r1, r4, r2! 13b0: 0400 lsls r0, r0, #16! 13b2: 1980 adds r0, r0, r6! 13b4: 1949 adds r1, r1, r5! 13b6: bdf0 pop {r4, r5, r6, r7, pc}! … ݱ࣮ mull͸࢖ΘΕ͍ͯͳ͍

Slide 68

Slide 68 text

ARM໋ྩʹ͸ରԠ͍ͯ͠ͳ͍ 5IVNC '16 ͷΈ 5IVNC '16 ͷΈ 5IVNCͷΈ 5IVNCͷҰ෦͚ͩ 5IVNCͷҰ෦͚ͩ 5IVNCͷҰ෦͚ͩ Cortex-M7 Cortex-M4 Cortex-M3 Cortex-M1 Cortex-M0+ CortexM0 5IVNCͱ͸"3.ϓϩηοαͷ΋͏ͭͷ໋ྩηοτɻ ໋ྩ͕Մม௕Ͱ"3.໋ྩηοτΑΓϚγϯޠ͕খ͘͞ͳΔɻ

Slide 69

Slide 69 text

ARM໋ྩʹ͸ରԠ͍ͯ͠ͳ͍ 5IVNC '16 ͷΈ 5IVNC '16 ͷΈ 5IVNCͷΈ 5IVNCͷҰ෦͚ͩ 5IVNCͷҰ෦͚ͩ 5IVNCͷҰ෦͚ͩ Cortex-M7 Cortex-M4 Cortex-M3 Cortex-M1 Cortex-M0+ CortexM0 5IVNCͱ͸"3.ϓϩηοαͷ΋͏ͭͷ໋ྩηοτɻ ໋ྩ͕Մม௕Ͱ"3.໋ྩηοτΑΓϚγϯޠ͕খ͘͞ͳΔɻ Ұ෦ͱ͸

Slide 70

Slide 70 text

NPWNPWXNPWU BEEBEDBES TVCTCDSTC NVMNMBNMTTNVMMVNVMMTNMBMVNMBM TEJWVEJW TTBUVTBU DNQDNO BOEFPSPSSPSOCJDNWOUTUUFR MTMMTSBTSSPSSSYDM[ MESMESIMESCMESTIMESTCMESUMESIUMESCUMESTIUMESTCUMESEMEN TUSTUSITUSCTUSTITUSTCTUSUTUSIUTUSCUTUSTIUTUSTCUTUSETUN QVTIQPQ MESFYMESFYIMESFYCTUSFYTUSFYITUSFYCDMSFY CCMCYCMYDC[DC[OUCCUCI TWDJUDQTJEDQTJFNSTNTSCLQU TYUITYUCVYUIVYUC VCGYTCGYCGDCGJ SFWSFWSFWTISCJU TFWXFGXGJOPQ JTCENCETC M7/M4/M3 Ҡಈ Ճࢉ ݮࢉ ৐ࢉ আࢉ ๞࿨ԋࢉ ൺֱ ࿦ཧԋࢉ γϑτ ϩʔυ ετΞ ελοΫૢ࡞ ηϚϑΥ ෼ذ ঢ়ଶมߋ ܕͷ֦ு ϏοτϑΟʔϧυ Ϗοτྻ൓స ώϯτ όϦΞ ARMv7m

Slide 71

Slide 71 text

NPWNPWXNPWU BEEBEDBES TVCTCDSTC NVMNMBNMTTNVMMVNVMMTNMBMVNMBM TEJWVEJW TTBUVTBU DNQDNO BOEFPSPSSPSOCJDNWOUTUUFR MTMMTSBTSSPSSSYDM[ MESMESIMESCMESTIMESTCMESUMESIUMESCUMESTIUMESTCUMESEMEN TUSTUSITUSCTUSTITUSTCTUSUTUSIUTUSCUTUSTIUTUSTCUTUSETUN QVTIQPQ MESFYMESFYIMESFYCTUSFYTUSFYITUSFYCDMSFY CCMCYCMYDC[DC[OUCCUCI TWDJUDQTJEDQTJFNSTNTSCLQU TYUITYUCVYUIVYUC VCGYTCGYCGDCGJ SFWSFWSFWTISCJU TFWXFGXGJZFJMEOPQ JTCENCETC Ҡಈ Ճࢉ ݮࢉ ৐ࢉ আࢉ ๞࿨ԋࢉ ൺֱ ࿦ཧԋࢉ γϑτ ϩʔυ ετΞ ελοΫૢ࡞ ηϚϑΥ ෼ذ ঢ়ଶมߋ ܕͷ֦ு ϏοτϑΟʔϧυ Ϗοτྻ൓స ώϯτ όϦΞ M1/M0+/M0 ARMv6m

Slide 72

Slide 72 text

M1/M0+/M0 NPWNPWXNPWU BEEBEDBES TVCTCDSTC NVMNMBNMTTNVMMVNVMMTNMBMVNMBM TEJWVEJW TTBUVTBU DNQDNO BOEFPSPSSPSOCJDNWOUTUUFR MTMMTSBTSSPSSSYDM[ MESMESIMESCMESTIMESTCMESUMESIUMESCUMESTIUMESTCUMESEMEN TUSTUSITUSCTUSTITUSTCTUSUTUSIUTUSCUTUSTIUTUSTCUTUSETUN QVTIQPQ MESFYMESFYIMESFYCTUSFYTUSFYITUSFYCDMSFY CCMCYCMYDC[DC[OUCCUCI TWDJUDQTJEDQTJFNSTNTSCLQU TYUITYUCVYUIVYUC VCGYTCGYCGDCGJ SFWSFWSFWTISCJU TFWXFGXGJZFJMEOPQ JTCENCETC Ҡಈ Ճࢉ ݮࢉ ৐ࢉ আࢉ ๞࿨ԋࢉ ൺֱ ࿦ཧԋࢉ γϑτ ϩʔυ ετΞ ελοΫૢ࡞ ηϚϑΥ ෼ذ ঢ়ଶมߋ ܕͷ֦ு ϏοτϑΟʔϧυ Ϗοτྻ൓స ώϯτ όϦΞ ARMv6m NVMM͸٘ਜ਼ʹͳͬͨͷͩ NVMNMBNMTTNVMMVNVMMTNMBMVNMBM

Slide 73

Slide 73 text

NVMMແ͠ͰͲ͏΍ͬͯ ݁Ռ͕CJUͷ৐ࢉΛ͢Δ͔ a b a*d b*d * c d a*c b*c ((a*c)<<32)+((a*d+b*c)<<16)+b*d BCDE͸ͦΕͧΕCJU චࢉͷཁྖͰCJUͮͭ ܭࢉ͍ͯ͘͠

Slide 74

Slide 74 text

a b a*d b*d * c d a*c b*c ((a*c)<<32)+((a*d+b*c)<<16)+b*d αϯϓϧຖʹ͜ΜͳܭࢉΛ Կ౓΋͍ͯͨ͠Βؒʹ߹Θͳ͍

Slide 75

Slide 75 text

CJUͷ৐ࢉΛ ճආͤΑ

Slide 76

Slide 76 text

݁Ռ͕໌Β͔ͳ৔߹ CJU໨͔ΒCJU໨͸໌Β͔ͳͷͰ CJU໨͔ΒCJU໨·Ͱ͕ཉ͍͠ ͜ͷܭࢉ͸NVM໋ྩͰͰ͖Δ 0000.FFFF! 0000.FFFF 00000000.FFFE0001 *

Slide 77

Slide 77 text

݁Ռ͕໌Β͔ͳ৔߹ ࣮͸'.ԻݯͷܭࢉதʹݱΕΔ ৐ࢉͷଟ͘ʹ͜Ε͕੒Γཱͭ ADSR FMมௐ Իྔͷ࣌ؒมԽ ࠷େ ྆ลڞʹͷ৔߹ͷΈ ஫ҙ͢Ε͹NVMͰ0,

Slide 78

Slide 78 text

࣮͸'.ԻݯͷܭࢉதʹݱΕΔ ৐ࢉͷຆͲʹ͜Ε͕੒Γཱͭ ϛΩαʔ JMJMJMJM J J J J M M M M ೖྗ͸'.ΦϖϨʔλͷग़ྗͳͷͰ࠷େ ॏΈ͸શ෦͋Θͤͯ࠷େ ྆ลڞʹͷ৔߹ͷΈ஫ҙ͢Ε͹NVMͰ0, ݁Ռ͕໌Β͔ͳ৔߹

Slide 79

Slide 79 text

ݻఆখ਺఺਺ͱ੔਺ͷ৐ࢉ FFFF.FFFF! FFFF FFFEFFFF.0001 * ݁ՌΛͰಘΔʹ͸ CJU໨͔ΒCJU໨·Ͱ͕ཉ͍͠ ͜ͷܭࢉ͸NVM໋ྩͰͰ͖Δ

Slide 80

Slide 80 text

ʜ ʜ ϒϩοΫͷதͰԿ൪໨ͷαϯϓϧ͔͸ ੔਺Ͱද͞ΕΔ αϯϓϧͷΠϯσοΫεͱ࣌ࠁͷؔ܎͸ઢܗ UGTTT UGTTT ࣌ࠁߦྻ

Slide 81

Slide 81 text

࣌ࠁߦྻ αϯϓϧͷΠϯσοΫεͱ࣌ࠁͷؔ܎͸ઢܗ YͷߦྻͰදݱग़དྷΔ U͸αϯϓϧͷ࣌ࠁ J͸αϯϓϧͷΠϯσοΫε GT͸1$.ͷप೾਺ TT͸͜ͷϒϩοΫͷ࠶ੜ͕࢝·Δ࣌ࠁ

Slide 82

Slide 82 text

τʔϯ࣌ؒ ࣮ࡍͷ࣌ࠁʹରͯ͠ Իͷप೾਺ഒͰਐߦ͢ΔΫϩοΫ τʔϯ࣌ؒͷখ਺෦෼͚ͩΛऔΓग़͢ͱ ҙਤͨ͠प೾਺ͱҐ૬ͷϊίΪϦ೾ʹͳΔ

Slide 83

Slide 83 text

τʔϯߦྻ ࣌ࠁͱτʔϯΫϩοΫͷؔ܎͸ઢܗͳͷͰ YͷߦྻͰදݱͰ͖Δ ͜ͷ৐ࢉ͸খ਺ಉ͔࢜ͭ ݁Ռͷઈର஋͕Ҏ্ʹͳΔ U͸αϯϓϧͷ࣌ࠁɺUU͸αϯϓϧͷτʔϯ࣌ࠁ GU͸ϊʔτͷप೾਺ɺTU͸ϊʔτͷҐ૬

Slide 84

Slide 84 text

͜ͷ෦෼͕ࣄલʹٻ·͍ͬͯΕ͹ ΠϯσοΫε͸੔਺ͳͷͰ τʔϯΫϩοΫ͸ߴ଎ͳ৐ࢉͰٻ·Δ τʔϯߦྻ ࣌ࠁͱτʔϯΫϩοΫͷؔ܎͸ઢܗͳͷͰ YͷߦྻͰදݱͰ͖Δ

Slide 85

Slide 85 text

ϒϩοΫͷ։࢝࣌ࠁ͕ϒϩοΫຖʹมΘΔͷͰ ϒϩοΫຖʹ ࣌ࠁߦྻͱτʔϯߦྻͷੵΛٻΊΔ ߦྻͷੵͷܭࢉʹ͸஗͍৐ࢉ͕ೖΔ͕ ϒϩοΫʹ͖ͭճͷ஗͍৐ࢉͰ αϯϓϧ୯Ґͷ஗͍৐ࢉΛճආग़དྷΔ

Slide 86

Slide 86 text

݁Ռ

Slide 87

Slide 87 text

IUUQZPVUVCF%%-4&JSS@"

Slide 88

Slide 88 text

·ͱΊ খ͞ͳARMʹ͸ େ͖ͳັྗ͕ൿΊΒΕ͍ͯΔ

Slide 89

Slide 89 text

Thank you for listening.