#include <xc.h> // test.c
#include "common.h"
// RAMで動かす場合の絶対アドレス範囲は、(0x80005000〜0x80008000)です
//__attribute__((address( 0x9D020000 ))) void start_boot(void);//EEPRON使用時
__attribute__((address( 0x80005000 ))) void start_boot(void);
void start_boot(){
extern void start_main();
_HANDLES[_IDX_INIT_SUB_FUNC] = start_main;//起動関数に、下記start_mainを登録
}
//__attribute__((address( 0x9D020400 ))) int wait(int n);//EEPRON使用時
int wait(int n){// nカウント待つ
while(n--) {
int sw2 = _switch2_state();// SW2のスイッチ状態を取得
if(sw2 == 1) return 1; // OFFからONに変わった
}
return 0;
}
//__attribute__((address( 0x9D020500 ))) void start_main();//EEPRON使用時
void start_main(){
PORTBSET = 0x8000;// D1 LED 点灯(RB15を1):これは、0xbf886128番地への設定です.
PORTBCLR = 0x0020;// D2 LED 消灯(RB5を0):これは、0xbf886124番地への設定です.
for(;;){
__asm__ ("NOP");
if(wait(0x00080000)) break;// チョット待って、SW2のスイッチを押したら終了
__asm__ ("NOP");
uint16_t data = PORTB;// ポートBの情報取得
data ^= 0x8020;// D2のLEDと、D1のLEDのビット位置を反転
PORTB = data;;// ポートBにdataを設定
}
}
|
#include <xc.h> // test.S (Lチカの無限ループ)
.set noreorder #アセンブラに命令の順序を自動変更させない。
.section main_loop,address(0x80005000),code
80005000 <start_boot>:
80005000: 27bdfff8 addiu sp,sp,-8
80005004: afbe0004 sw s8,4(sp)
80005008: 03a0f021 move s8,sp
8000500c: 3c02a000 lui v0,0xa000
80005010: 344240c8 ori v0,v0,0x40c8
80005014: 3c038000 lui v1,0x8000
80005018: 246350b4 addiu v1,v1,20660
8000501c: ac430000 sw v1,0(v0)
80005020: 03c0e821 move sp,s8
80005024: 8fbe0004 lw s8,4(sp)
80005028: 27bd0008 addiu sp,sp,8
8000502c: 03e00008 jr ra
80005030: 00000000 nop
80005034 <wait>:
80005034: 27bdffe0 addiu sp,sp,-32
80005038: afbf001c sw ra,28(sp)
8000503c: afbe0018 sw s8,24(sp)
80005040: 03a0f021 move s8,sp
80005044: afc40020 sw a0,32(s8)
80005048: 08001421 j 80005084 <.LBE2>
8000504c: 00000000 nop
80005050 <.LBB2>:
80005050: 3c02a000 lui v0,0xa000
80005054: 3442401c ori v0,v0,0x401c
80005058: 8c420000 lw v0,0(v0)
8000505c: 0040f809 jalr v0
80005060: 00000000 nop
80005064: afc20010 sw v0,16(s8)
80005068: 8fc30010 lw v1,16(s8)
8000506c: 24020001 li v0,1
80005070: 14620004 bne v1,v0,80005084 <.LBE2>
80005074: 00000000 nop
80005078: 24020001 li v0,1
8000507c: 08001427 j 8000509c <.LBE2+0x18>
80005080: 00000000 nop
80005084 <.LBE2>:
80005084: 8fc20020 lw v0,32(s8)
80005088: 2443ffff addiu v1,v0,-1
8000508c: afc30020 sw v1,32(s8)
80005090: 1440ffef bnez v0,80005050 <.LBB2>
80005094: 00000000 nop
80005098: 00001021 move v0,zero
8000509c: 03c0e821 move sp,s8
800050a0: 8fbf001c lw ra,28(sp)
800050a4: 8fbe0018 lw s8,24(sp)
800050a8: 27bd0020 addiu sp,sp,32
800050ac: 03e00008 jr ra
800050b0: 00000000 nop
800050b4 <start_main>:
800050b4: 27bdffe0 addiu sp,sp,-32
800050b8: afbf001c sw ra,28(sp)
800050bc: afbe0018 sw s8,24(sp)
800050c0: 03a0f021 move s8,sp
800050c4: 3c02bf88 lui v0,0xbf88
800050c8: 34038000 li v1,0x8000
800050cc: ac436128 sw v1,24872(v0)
800050d0: 3c02bf88 lui v0,0xbf88
800050d4: 24030020 li v1,32
800050d8: ac436124 sw v1,24868(v0)
800050dc <.LBB3>:
800050dc: 00000000 nop
800050e0: 0c00140d jal 80005034 <wait>
800050e4: 3c040008 lui a0,0x8
800050e8: 10400003 beqz v0,800050f8 <.LBB3+0x1c>
800050ec: 00000000 nop
800050f0: 0800144b j 8000512c <.LBE3+0x8>
800050f4: 00000000 nop
800050f8: 00000000 nop
800050fc: 3c02bf88 lui v0,0xbf88
80005100: 8c426120 lw v0,24864(v0)
80005104: a7c20010 sh v0,16(s8)
80005108: 97c30010 lhu v1,16(s8)
8000510c: 24028020 li v0,-32736
80005110: 00621026 xor v0,v1,v0
80005114: a7c20010 sh v0,16(s8)
80005118: 97c30010 lhu v1,16(s8)
8000511c: 3c02bf88 lui v0,0xbf88
80005120: ac436120 sw v1,24864(v0)
80005124 <.LBE3>:
80005124: 08001437 j 800050dc <.LBB3>
80005128: 00000000 nop
8000512c: 03c0e821 move sp,s8
80005130: 8fbf001c lw ra,28(sp)
80005134: 8fbe0018 lw s8,24(sp)
80005138: 03e00008 jr ra
8000513c: 27bd0020 addiu sp,sp,32
|