際際滷
Submit Search
Lisp Meet Up #25, 8-bit PIC マイコン喘ネイティブコンパイラの恬撹
?
2 likes
?
3,693 views
M
masayukitakagi
Follow
Introducing a native compiler for 8-bit PIC micro controllers written in Common Lisp.
Read less
Read more
1 of 24
Download now
Download to read offline
More Related Content
Lisp Meet Up #25, 8-bit PIC マイコン喘ネイティブコンパイラの恬撹
1.
8-bit PIC マイコン喘ネイティブコンパイラの恬撹 2015.2.25
Masayuki Takagi Lisp Meet Up presented by Shibuya.lisp #25
2.
? 2015 Masayuki
Takagi -2- 徭失B初 互直 囘岻 cl-cuda : a library to use NVIDIA CUDA in Common Lisp Common Lisp から CUDA を聞うライブラリ。磯定ほどまえに、ここでB初しました。 碧並は 枠埖に氏芙をO羨。喇呂呂泙世覆い任 >_< Common Lisp
3.
? 2015 Masayuki
Takagi -3- 8-bit PICマイコン鬚吋優ぅ謄ブコンパイラC これまで、まともにアセンブラをいたことがなかったのです。 1埖和儁困呂犬瓩討 PIC マイコン 2埖貧儁困呂犬瓩討離▲札鵐屮 PIC マイコンをはじめて乾りました。 PIC で採恬ろうPIC喘のコンパイラ恬ろう。 2埖嶄儁PIC 喘のコンパイラ
4.
? 2015 Masayuki
Takagi -4- 書晩のの送れ そのあと、書指恬った、PIC マイコン喘のコンパイラについてh苧します。 PIC マイコンについて PIC マイコン喘コンパイラについて 恷兜に、PIC マイコン徭悶についてh苧します。
5.
? 2015 Masayuki
Takagi -5- PIC マイコンとは いまだと Arduino とかありますが、PIC はそれより劣からよく聞われています。 マイクロコントロ`ラ マイクロチップ?テクノロジ`芙 處麻匂、メモリ、k尅指揃、護りzみ、タイマ、リセット、スリ`プなど 光N指揃が1チップに。 書指聞ったのは、匯桑弌さな 8 ビット PIC。PIC12F683 や PIC16F630。 8ビット、16ビット、32ビット
6.
? 2015 Masayuki
Takagi -6- ピン PIC12F6838ピン PIC16F63014ピン VDD ? 貧2云VDD, VSSを坿に俊A ? 火り6云を IO に聞喘辛嬬HI/LOW ? ただし、4桑ピンは秘薦のみ GP5 GP4 GP3 VSS GP0 GP1 GP2 VDD VSS RA5 RA4 RA3 RC5 RC4 RC3 RA0 RA1 RA2 RC0 RC1 RC2 ? 貧2云VDD, VSSを坿に俊A ? 火り12云を IO に聞喘辛嬬HI/LOW ? ただし、4桑ピンは秘薦のみ
7.
? 2015 Masayuki
Takagi -7- PIC12F683 ? プログラムメモリは、2K ワ`ド ? SRAM は、128 バイト ? DDPROM は、256 バイト
8.
? 2015 Masayuki
Takagi -8- PIC12F683 デバイス古Q ? ALU ? \麻匂、FPU、16ビット處麻匂はない ? プログラムメモリとデ`タメモリ ? ハ`ドウェアスタック
9.
? 2015 Masayuki
Takagi -9- メモリア`キテクチャ ? プログラムメモリとデ`タメモリが蛍x┘路`バ`ド?ア`クテクチャ ? プログラムメモリには、喘のC匂でプログラムをきzむ ? プログラムからプログラムメモリを荷恬することはできない デ`タメモリプログラムメモリ
10.
? 2015 Masayuki
Takagi -10- プログラムメモリ ? プログラムメモリは 2048 ワ`ド000h-07FFh ? プログラムは 0 桑仇から兵まる ? 4 桑仇は護りzみk伏rにここにジャンプ ? ハ`ドウェアスタックを隔つ ? CALL 凋綜などで、り・▲疋譽垢eまれる
11.
? 2015 Masayuki
Takagi -11- デ`タメモリ ? デ`タメモリは、SFR と GPR からなる ? SFR は、Special Function Registers ? GPR は、General Purpose Registers ? SFR は、CPU やその麿C嬬の崙囮に聞う ? 火廷なことに、桑仇により仝バンク々を俳り紋え なければならない SFR 喘 レジスタ SFR 喘 レジスタ バンク0 バンク1 00h 20h 80h A0h BFh 7Fh
12.
? 2015 Masayuki
Takagi -12- スペシャル?ファンクション?レジスタ ? SFR は、CPU やその麿C嬬の崙囮に聞う ? STATUS は、バンク俳紋(RP0)、ゼロビット(Z)、キャリ` ビット(DC,C)など ? GPIOは、ピンの彜BHigh/Low ? TRISIOは、ピンの秘竃薦モ`ド ? PCL と PCLATH は、プログラムカウンタ ? INTCON と IOC は、護りzみの嗤/o
13.
? 2015 Masayuki
Takagi -13- W レジスタ ? ALU は、W レジスタとデ`タメモリから 秘薦を鞭け原ける ? 宥械の CPU の仝レジスタ々に犁 ? ただし、1つしかない W レジスタ レジスタ デ`タメモリ メモリ EEPROM ストレ`ジ PIC マイコン 宥械のCPU 廾崔の
14.
? 2015 Masayuki
Takagi -14- 坪ik尅指揃 ? k尅指揃を坪i ? デフォルトの巓襖方は、4MHz \1% ? 1凋綜サイクル = 4クロック = 1μsec
15.
? 2015 Masayuki
Takagi -15- 凋綜セット ADDWF ANDWF CLRF CLRW COMF DECF DECFSZ INCF INCFSZ IORWF MOVF MOVWF NOP RLF RRF SUBWF SWAPF XORWF BCF BSF BTFSC BTFSS ADDLW ANDLW CALL CLRWDT GOTO IORLW MOVLW RETFIE RETLW RETURN SLEEP SUBLW XORLW ? 凋綜は35Nのみ。掲械にg ? 勣する凋綜サイクルは、1サイクル┌1μsec@4MHz ? ただし、CALLや訳周蛍瓷などは、2サイクル
16.
? 2015 Masayuki
Takagi -16- ちょっと中宜 ? 採をするにも、g匯の W レジスタを勣するので、ちょっと中宜 ? デ`タのム`ブR0桑仇からR1桑仇へデ`タをコピ` MOVF R0,W MOVWF R1 END ? 屁方の紗麻R0桑仇に 42 を紗麻 MOVLW 42 ADDWF R0,F END
17.
? 2015 Masayuki
Takagi -17- コンパイラの古勣 ? ホスト冱Zは、ML 狼冱Zの云輝に弌さなサブセット ? タ`ゲット冱Zは、8-bit PIC マイコンのアセンブリ ? コンパイラ冱Zは、Common Lisp ? コンパイラのOは、MinCaml を歌深にしたMinCaml ですみません´
18.
? 2015 Masayuki
Takagi -18- MinCaml とは ? http://esumii.github.io/min-caml/
19.
? 2015 Masayuki
Takagi -19- 猟 書指のコンパイラ MinCaml 協方 プリミティブ處麻+,-,*,/ など 訳周蛍瓷 if e1 then e2 else e3 篳協x let 篳のiみ竃し x 壅「v方協x let rec v方柵び竃し e e1, ´, en Mの恬撹 (e1, ´, en) 塘双の恬撹 Array.create e1 e2 Mのiみ竃し let 塘双のiみ竃し e1.(e2) 塘双へのきzみ e1.(e2) ○ e3 協方 プリミティブ處麻 訳周蛍瓷 篳協x 篳のiみ竃し 壅「v方協x┘ロ`ジャ音駻達 v方柵び竃し Mは音駻 塘双は音駻 SFRへのきzみ setreg
20.
? 2015 Masayuki
Takagi -20- コンパイルステ`ジ 書指のコンパイラ MinCaml 忖鞘盾裂 猟盾裂 侏容 K屎サ αQ βs ネストした let のs インライン婢_ 音勣協x茅 協方みzみ クロ`ジャQ ∀襯泪轡鵐芥`ド伏撹 軸ラ釼m晒 レジスタ護輝て アセンブリ伏撹 CommonLisp のリ`ダを聞喘 侏は 8 ビット屁方のみ K屎サ αQ βs ネストした let のs 恷m晒はあとで クロ`ジャQ ∀襯泪轡鵐芥`ド伏撹 レジスタ護輝て アセンブリ伏撹 恷m晒はあとで
21.
? 2015 Masayuki
Takagi -21- 柵び竃しシs ? 輝兜、ソフトウェアスタックにeんで局していた ? g俊アドレッシングがjなため、圭筝 ? 秘薦喘夘貌レジスタI0-I7、ロ`カル喘夘貌レジスタL0-L7 ? 哈方は、秘薦喘レジスタに鯉{して、柵び竃されるv方に局す ? v方は、ロ`カル喘レジスタを徭喇に聞える ? り、蓮W レジスタに鯉{して卦す ? v方柵び竃しrに、仝伏きているレジスタ々をスタックに曜閲する
22.
? 2015 Masayuki
Takagi -22- クロ`ジャを音駻辰箸靴神輦 ? クロ`ジャには、g俊アドレスへのジャンプが駅勣 ? CALL 凋綜は、オペランドに軸、里瀛椶姥兇韻 ? g俊アドレスへのジャンプは、プログラムカウンタへのきzみで辛嬬 ? しかし、いろいろ中宜 ? PCL と PCLATH ? りアドレスの麻 ? りアドレスの砿尖┘路`ドウェアスタックを聞えない ? PCL の蓐貧がりの深]
23.
? 2015 Masayuki
Takagi -23- API ? defpic ? defpicmacro ? pic-compile ? pic-disassemble
24.
? 2015 Masayuki
Takagi -24- サンプル - LED (defpic init () (progn (setreg :gpio #x0) (setreg :cmcon0 #b00000111) (setbank1) (setreg :trisio #b00001000) (setreg :ansel #x0) (setreg :ioc #x0) (setbank0) (setreg :intcon #b00000000))) (defpic main () (progn (setreg :gpio #b00100000) (mdelay 50) (setreg :gpio #b00000000) (mdelay 950) (main))) (defpic mdelay1 () (loop 52 0)) (defpicmacro mdelay (n) (unless (<= 0 n 65535) (error "The value ~S is invalid." n)) (multiple-value-bind (q r) (truncate n 256) (if (= q 0) `(loop ,r (mdelay1)) `(loop ,q (loop ,r (mdelay1))))))
Download