// x_s3e_dcm x_s3e_dcm ( wire clk0; wire clk0_; assign clk_ = !clk; DCM x_s3e_dcm ( .CLKIN (clk_ref), // 基底クロック .CLKFB(clk0), .RST (dcm_reset), // DCMリセット .CLK0 (clk0), // クロック .CLK180 (clk0_), // 反転クロック .CLKDV(clk), .LOCKED (locked) // ロック ); defparam x_s3e_dcm.CLK_FEEDBACK = "1X"; defparam x_s3e_dcm.CLKDV_DIVIDE = 4;//2; //(1.5,2,2.5,3,4,5,8,16)// 4=24MHz defparam x_s3e_dcm.CLKFX_DIVIDE = 2; defparam x_s3e_dcm.CLKFX_MULTIPLY = 2; // refclk: 96MHz テスト基板の水晶は96MHz defparam x_s3e_dcm.CLKIN_DIVIDE_BY_2 = "FALSE"; //(TRUE, FALSE) defparam x_s3e_dcm.CLKOUT_PHASE_SHIFT = "FIXED"; defparam x_s3e_dcm.DESKEW_ADJUST = "SYSTEM_SYNCHRONOUS"; defparam x_s3e_dcm.DFS_FREQUENCY_MODE = "LOW"; defparam x_s3e_dcm.DLL_FREQUENCY_MODE = "LOW"; defparam x_s3e_dcm.DSS_MODE = "NONE"; defparam x_s3e_dcm.DUTY_CYCLE_CORRECTION = "TRUE";//(TRUE, FALSE) defparam x_s3e_dcm.PHASE_SHIFT = 0; defparam x_s3e_dcm.STARTUP_WAIT = "FALSE"; // (TRUE, FALSE)
`include "nettype.h" `include "stddef.h" `include "global_config.h" `include "rom.h" module x_s3e_sprom( clka, addra, douta ); input clka; input [`RomAddrBus] addra;// 11bit output [`WordDataBus] douta;// 32bit 8kb RAMB16_S9 ram0(.WE(1'b0), .EN(1'b1), .CLK(clka), .ADDR(addra), .DO(douta[31:24]), .DI(8'h00),.SSR(1'b0)); RAMB16_S9 ram1(.WE(1'b0), .EN(1'b1), .CLK(clka), .ADDR(addra), .DO(douta[23:16]), .DI(8'h00),.SSR(1'b0)); RAMB16_S9 ram2(.WE(1'b0), .EN(1'b1), .CLK(clka), .ADDR(addra), .DO(douta[15:8]), .DI(8'h00),.SSR(1'b0)); RAMB16_S9 ram3(.WE(1'b0), .EN(1'b1), .CLK(clka), .ADDR(addra), .DO(douta[7:0]), .DI(8'h00),.SSR(1'b0)); endmodule
`include "nettype.h" `include "global_config.h" `include "stddef.h" `include "spm.h" // module x_s3e_dpram( clka, addra, dina, wea, douta, // clkb, addrb, dinb, web, doutb ); input clka; input [`SpmAddrBus] addra; input [`WordDataBus] dina; input wea; output [`WordDataBus] douta; // input clkb; input [`SpmAddrBus] addrb; input [`WordDataBus] dinb; input web; output [`WordDataBus] doutb; // RAMB16_S9_S9 ram0(.DIA(dina[31:24]), .ADDRA(addra), .DOA(douta[31:24]), .WEA(wea), .ENA(1'b1), .CLKA(clka), .DIPA(1'b0), .DIB(dinb[31:24]), .ADDRB(addrb), .DOB(doutb[31:24]), .WEB(web), .ENB(1'b1), .CLKB(clkb), .DIPB(1'b0)); RAMB16_S9_S9 ram1(.DIA(dina[23:16]), .ADDRA(addra), .DOA(douta[23:16]), .WEA(wea), .ENA(1'b1), .CLKA(clka), .DIPA(1'b0), .DIB(dinb[23:16]), .ADDRB(addrb), .DOB(doutb[23:16]), .WEB(web), .ENB(1'b1), .CLKB(clkb), .DIPB(1'b0)); RAMB16_S9_S9 ram2(.DIA(dina[15:8]), .ADDRA(addra), .DOA(douta[15:8]), .WEA(wea), .ENA(1'b1), .CLKA(clka), .DIPA(1'b0), .DIB(dinb[15:8]), .ADDRB(addrb), .DOB(doutb[15:8]), .WEB(web), .ENB(1'b1), .CLKB(clkb), .DIPB(1'b0)); RAMB16_S9_S9 ram3(.DIA(dina[7:0]), .ADDRA(addra), .DOA(douta[7:0]), .WEA(wea), .ENA(1'b1), .CLKA(clka), .DIPA(1'b0), .DIB(dinb[7:0]), .ADDRB(addrb), .DOB(doutb[7:0]), .WEB(web), .ENB(1'b1), .CLKB(clkb), .DIPB(1'b0)); endmodule
10000000 0C010000 3C210010 0C2100BC 0C020000 3C420010 0C4200F4 54200000 00000000 0C100048 54400000 00000000 0C100065 54400000 00000000 0C10006C 54400000 00000000 0C10006C 54400000 00000000 0C10006F 54400000 00000000 0C10002C 54400000 00000000 0C100077 54400000 00000000 0C10006F 54400000 00000000 0C100072 54400000 00000000 0C10006C 54400000 00000000 0C100064 54400000 00000000 0C10002E 54400000 00000000 4000FFFF 00000000 0C106000 3E100010 5A110000 06310001 40110007 00000000 5A110004 5A110000 16310001 5E110000 4400FFF7 00000000 53E00000 00000000 0C116000 3E310010 5E300004 5A320000 06520002 4012FFFD 00000000 5A320000 16520002 5E320000 53E00000 00000000
defparam ram0.INIT_00=256'h540C00540C00540C00540C00540C00540C00540C00540C00540C3C0C0C3C0C10; defparam ram1.INIT_00=256'h4010004010004010004010004010004010004010004010002042420221210100; defparam ram2.INIT_00=256'h0000000000000000000000000000000000000000000000000000000000000000; defparam ram3.INIT_00=256'h006F00007700002C00006F00006C00006C0000650000480000F41000BC100000; defparam ram0.INIT_01=256'h5E3E0C005300445E165A5A0040065A3E0C004000540C00540C00540C00540C00; defparam ram1.INIT_01=256'h30311100E0000011311111001131111010000000401000401000401000401000; defparam ram2.INIT_01=256'h000060000000FF0000000000000000006000FF00000000000000000000000000; defparam ram3.INIT_01=256'h041000000000F70001000400070100100000FF00002E00006400006C00007200; defparam ram0.INIT_02=256'h000000000000000000000000000000000000000000000000535E165A0040065A; defparam ram1.INIT_02=256'h000000000000000000000000000000000000000000000000E032523200125232; defparam ram2.INIT_02=256'h0000000000000000000000000000000000000000000000000000000000FF0000; defparam ram3.INIT_02=256'h0000000000000000000000000000000000000000000000000000020000FD0200;
`include "nettype.h" `include "stddef.h" `include "global_config.h" `include "rom.h" module x_s3e_sprom( clka, addra, douta ); input clka; input [`RomAddrBus] addra;// 11bit output [`WordDataBus] douta;// 32bit 8kb RAMB16_S9 ram0(.WE(1'b0), .EN(1'b1), .CLK(clka), .ADDR(addra), .DO(douta[31:24]), .DI(8'h00),.SSR(1'b0)); RAMB16_S9 ram1(.WE(1'b0), .EN(1'b1), .CLK(clka), .ADDR(addra), .DO(douta[23:16]), .DI(8'h00),.SSR(1'b0)); RAMB16_S9 ram2(.WE(1'b0), .EN(1'b1), .CLK(clka), .ADDR(addra), .DO(douta[15:8]), .DI(8'h00),.SSR(1'b0)); RAMB16_S9 ram3(.WE(1'b0), .EN(1'b1), .CLK(clka), .ADDR(addra), .DO(douta[7:0]), .DI(8'h00),.SSR(1'b0)); defparam ram0.INIT_00=256'h540C00540C00540C00540C00540C00540C00540C00540C00540C3C0C0C3C0C10; defparam ram1.INIT_00=256'h4010004010004010004010004010004010004010004010002042420221210100; defparam ram2.INIT_00=256'h0000000000000000000000000000000000000000000000000000000000000000; defparam ram3.INIT_00=256'h006F00007700002C00006F00006C00006C0000650000480000F41000BC100000; defparam ram0.INIT_01=256'h5E3E0C005300445E165A5A0040065A3E0C004000540C00540C00540C00540C00; defparam ram1.INIT_01=256'h30311100E0000011311111001131111010000000401000401000401000401000; defparam ram2.INIT_01=256'h000060000000FF0000000000000000006000FF00000000000000000000000000; defparam ram3.INIT_01=256'h041000000000F70001000400070100100000FF00002E00006400006C00007200; defparam ram0.INIT_02=256'h000000000000000000000000000000000000000000000000535E165A0040065A; defparam ram1.INIT_02=256'h000000000000000000000000000000000000000000000000E032523200125232; defparam ram2.INIT_02=256'h0000000000000000000000000000000000000000000000000000000000FF0000; defparam ram3.INIT_02=256'h0000000000000000000000000000000000000000000000000000020000FD0200; endmodule
XASM AZPR ver. 1.0 (bitcraft) 00000000 ;;; ロケーションアドレスの設定 20000000 LOCATE 0x20000000 20000000 20000000 ;;; シンボルの定義 20000000 TIMER_BASE_ADDR_H EQU 0x4000 ;Timer Base Address High 20000000 TIMER_CTRL_OFFSET EQU 0x0 ;Timer Control Register Offset 20000000 TIMER_INTR_OFFSET EQU 0x4 ;Timer Interrupt Register Offset 20000000 TIMER_EXPIRE_OFFSET EQU 0x8 ;Timer Expiration Register Offset 20000000 GPIO_BASE_ADDR_H EQU 0x8000 ;GPIO Base Address High 20000000 GPIO_IN_OFFSET EQU 0x0 ;GPIO Input Port Register Offset 20000000 GPIO_OUT_OFFSET EQU 0x4 ;GPIO Data Register Offset 20000000 20000000 SEG_DATA_0 EQU 0xC0 20000000 SEG_DATA_1 EQU 0xF9 20000000 SEG_DATA_2 EQU 0xA4 20000000 SEG_DATA_3 EQU 0xB0 20000000 SEG_DATA_4 EQU 0x99 20000000 SEG_DATA_5 EQU 0x92 20000000 SEG_DATA_6 EQU 0x82 20000000 SEG_DATA_7 EQU 0xF8 20000000 SEG_DATA_8 EQU 0x80 20000000 SEG_DATA_9 EQU 0x90 20000000 20000000 PUSH_SW_DATA_1 EQU 0x1 20000000 PUSH_SW_DATA_2 EQU 0x2 20000000 PUSH_SW_DATA_3 EQU 0x4 20000000 PUSH_SW_DATA_4 EQU 0x8 20000000 20000000 20000000 10000000 XORR r0,r0,r0 20000004 20000004 ;;; サブルーチンコールのコール先をレジスタにセット 20000004 0C012000 ORI r0,r1,high(CONV_NUM_TO_SEG_DATA) ;ラベルCONV_NUM_TO_SEG_DATAの上位16ビットをr1にセット 20000008 3C210010 SHLLI r1,r1,16 2000000C 0C210360 ORI r1,r1,low(CONV_NUM_TO_SEG_DATA) ;ラベルCONV_NUM_TO_SEG_DATAの下位16ビットをr1にセット 20000010 20000010 0C022000 ORI r0,r2,high(SET_GPIO_OUT) ;ラベルSET_GPIO_OUTの上位16ビットをr2にセット 20000014 3C420010 SHLLI r2,r2,16 20000018 0C420504 ORI r2,r2,low(SET_GPIO_OUT) ;ラベルSET_GPIO_OUTの下位16ビットをr2にセット 2000001C 2000001C 0C032000 ORI r0,r3,high(DETECT_PUSH_SW_NUM) ;ラベルDETECT_PUSH_SW_NUMの上位16ビットをr3にセット 20000020 3C630010 SHLLI r3,r3,16 20000024 0C63052C ORI r3,r3,low(DETECT_PUSH_SW_NUM) ;ラベルDETECT_PUSH_SW_NUMの下位16ビットをr3にセット 20000028 20000028 0C042000 ORI r0,r4,high(GET_GPIO_OUT) ;ラベルGET_GPIO_OUTの上位16ビットをr4にセット 2000002C 3C840010 SHLLI r4,r4,16 20000030 0C840518 ORI r4,r4,low(GET_GPIO_OUT) ;ラベルGET_GPIO_OUTの下位16ビットをr4にセット 20000034 20000034 ;;; 例外ベクタの設定 20000034 0C072000 ORI r0,r7,high(EXCEPT_HANDLER) 20000038 3CE70010 SHLLI r7,r7,16 2000003C 0CE70588 ORI r7,r7,low(EXCEPT_HANDLER) 20000040 68E40000 WRCR r7,c4 20000044 20000044 ;;; 割り込みの初期設定 20000044 ;; Mask 20000044 0C0700FE ORI r0,r7,0xFE ;Interrupt Maskにセットする値をr7に入れる 20000048 68E60000 WRCR r7,c6 2000004C ;; Status 2000004C 0C070002 ORI r0,r7,0x2 ;Statusにセットする値をr1に入れる(IE:1,EM0) 20000050 68E00000 WRCR r7,c0 20000054 20000054 _RESET_TIMER: 20000054 ;; 分と秒を0に設定 20000054 0C050000 ORI r0,r5,0 ;r5(分)をクリア 20000058 0C060000 ORI r0,r6,0 ;r6(秒)をクリア 2000005C ;; 分を表示(7セグ点灯) 2000005C 08058000 ORR r0,r5,r16 ;r16に表示する値をセット 20000060 54200000 CALL r1 ;CONV_NUM_TO_SEG_DATA呼び出し 20000064 00000000 ANDR r0,r0,r0 ;NOP 20000068 0C070002 ORI r0,r7,2 ;LED1 2000006C 3CE70010 SHLLI r7,r7,16 20000070 08F18000 ORR r7,r17,r16 20000074 54400000 CALL r2 20000078 00000000 ANDR r0,r0,r0 ;NOP 2000007C 11AD6800 XORR r13,r13,r13 ;分or秒をクリア(0:分, 1:秒) 20000080 20000080 ;;; プッシュボタンを検出 20000080 _TIMER_SETTING_LOOP: 20000080 54600000 CALL r3 20000084 00000000 ANDR r0,r0,r0 20000088 08103800 ORR r0,r16,r7 2000008C 0C080001 ORI r0,r8,PUSH_SW_DATA_1 20000090 40E8000A BE r7,r8,_HANDLE_PUSH_SW_1 20000094 00000000 ANDR r0,r0,r0 ;NOP 20000098 0C080002 ORI r0,r8,PUSH_SW_DATA_2 2000009C 40E8001F BE r7,r8,_HANDLE_PUSH_SW_2 200000A0 00000000 ANDR r0,r0,r0 ;NOP 200000A4 0C080004 ORI r0,r8,PUSH_SW_DATA_3 200000A8 40E8003C BE r7,r8,_HANDLE_PUSH_SW_3 200000AC 00000000 ANDR r0,r0,r0 ;NOP 200000B0 0C080008 ORI r0,r8,PUSH_SW_DATA_4 200000B4 40E80059 BE r7,r8,_HANDLE_PUSH_SW_4 200000B8 00000000 ANDR r0,r0,r0 ;NOP 200000BC 200000BC ;;; ボタン1 200000BC ;;; 分と秒の表示の切り替え 200000BC _HANDLE_PUSH_SW_1: 200000BC 440D000C BNE r0,r13,_SECOND_TO_MINUTE ;分or秒?(0:分, 1:秒) 200000C0 00000000 ANDR r0,r0,r0 ;NOP 200000C4 200000C4 _MINUTE_TO_SECOND: 200000C4 08068000 ORR r0,r6,r16 ;秒をセット 200000C8 54200000 CALL r1 ;CONV_NUM_TO_SEG_DATA呼び出し 200000CC 00000000 ANDR r0,r0,r0 ;NOP 200000D0 0C070001 ORI r0,r7,1 ;LED2 200000D4 3CE70010 SHLLI r7,r7,16 200000D8 08F18000 ORR r7,r17,r16 200000DC 54400000 CALL r2 200000E0 00000000 ANDR r0,r0,r0 ;NOP 200000E4 15AD0001 XORI r13,r13,1 ;分or秒を切り替え 200000E8 4000FFE5 BE r0,r0,_TIMER_SETTING_LOOP 200000EC 00000000 ANDR r0,r0,r0 ;NOP 200000F0 200000F0 _SECOND_TO_MINUTE: 200000F0 08058000 ORR r0,r5,r16 ;分をセット 200000F4 54200000 CALL r1 ;CONV_NUM_TO_SEG_DATA呼び出し 200000F8 00000000 ANDR r0,r0,r0 ;NOP 200000FC 0C070002 ORI r0,r7,2 ;LED1 20000100 3CE70010 SHLLI r7,r7,16 20000104 08F18000 ORR r7,r17,r16 20000108 54400000 CALL r2 2000010C 00000000 ANDR r0,r0,r0 ;NOP 20000110 15AD0001 XORI r13,r13,1 ;分or秒を切り替え 20000114 4000FFDA BE r0,r0,_TIMER_SETTING_LOOP 20000118 00000000 ANDR r0,r0,r0 ;NOP 2000011C 2000011C ;;; ボタン2 2000011C ;;; 表示されている値を1増やす 2000011C _HANDLE_PUSH_SW_2: 2000011C 440D0010 BNE r0,r13,_INC_SECOND ;分or秒?(0:分, 1:秒) 20000120 00000000 ANDR r0,r0,r0 ;NOP 20000124 20000124 _INC_MINUTE: 20000124 24A50001 ADDUI r5,r5,1 ;分を1増やす 20000128 0C070064 ORI r0,r7,100 ;100になったら分をクリアする 2000012C 44E50002 BNE r7,r5,_DISPLAY_MINUTE_1 20000130 00000000 ANDR r0,r0,r0 20000134 0C050000 ORI r0,r5,0 20000138 20000138 _DISPLAY_MINUTE_1: 20000138 08058000 ORR r0,r5,r16 ;分をセット 2000013C 54200000 CALL r1 ;CONV_NUM_TO_SEG_DATA呼び出し 20000140 00000000 ANDR r0,r0,r0 ;NOP 20000144 0C070002 ORI r0,r7,2 ;LED1 20000148 3CE70010 SHLLI r7,r7,16 2000014C 08F18000 ORR r7,r17,r16 20000150 54400000 CALL r2 20000154 00000000 ANDR r0,r0,r0 ;NOP 20000158 4000FFC9 BE r0,r0,_TIMER_SETTING_LOOP 2000015C 00000000 ANDR r0,r0,r0 ;NOP 20000160 20000160 _INC_SECOND: 20000160 24C60001 ADDUI r6,r6,1 ;秒を1増やす 20000164 0C07003C ORI r0,r7,60 ;60になったら秒をクリアする 20000168 44E60002 BNE r7,r6,_DISPLAY_SECOND_1 2000016C 00000000 ANDR r0,r0,r0 20000170 0C060000 ORI r0,r6,0 20000174 20000174 _DISPLAY_SECOND_1: 20000174 08068000 ORR r0,r6,r16 ;秒をセット 20000178 54200000 CALL r1 ;CONV_NUM_TO_SEG_DATA呼び出し 2000017C 00000000 ANDR r0,r0,r0 ;NOP 20000180 0C070001 ORI r0,r7,1 ;LED2 20000184 3CE70010 SHLLI r7,r7,16 20000188 08F18000 ORR r7,r17,r16 2000018C 54400000 CALL r2 20000190 00000000 ANDR r0,r0,r0 ;NOP 20000194 4000FFBA BE r0,r0,_TIMER_SETTING_LOOP 20000198 00000000 ANDR r0,r0,r0 ;NOP 2000019C 2000019C ;;; ボタン3 2000019C ;;; 表示されている値を1減らす 2000019C _HANDLE_PUSH_SW_3: 2000019C 440D0010 BNE r0,r13,_DEC_SECOND ;分or秒?(0:分, 1:秒) 200001A0 00000000 ANDR r0,r0,r0 ;NOP 200001A4 200001A4 _DEC_MINUTE: 200001A4 24A5FFFF ADDUI r5,r5,-1 ;分を1減らす 200001A8 2407FFFF ADDUI r0,r7,-1 200001AC 44A70002 BNE r5,r7,_DISPLAY_MINUTE_2 200001B0 00000000 ANDR r0,r0,r0 200001B4 0C050063 ORI r0,r5,99 200001B8 200001B8 _DISPLAY_MINUTE_2: 200001B8 08058000 ORR r0,r5,r16 ;分をセット 200001BC 54200000 CALL r1 ;CONV_NUM_TO_SEG_DATA呼び出し 200001C0 00000000 ANDR r0,r0,r0 ;NOP 200001C4 0C070002 ORI r0,r7,2 ;LED1 200001C8 3CE70010 SHLLI r7,r7,16 200001CC 08F18000 ORR r7,r17,r16 200001D0 54400000 CALL r2 200001D4 00000000 ANDR r0,r0,r0 ;NOP 200001D8 4000FFA9 BE r0,r0,_TIMER_SETTING_LOOP 200001DC 00000000 ANDR r0,r0,r0 ;NOP 200001E0 200001E0 _DEC_SECOND: 200001E0 24C6FFFF ADDUI r6,r6,-1 ;秒を1減らす 200001E4 2407FFFF ADDUI r0,r7,-1 200001E8 44C70002 BNE r6,r7,_DISPLAY_SECOND_2 200001EC 00000000 ANDR r0,r0,r0 200001F0 0C06003B ORI r0,r6,59 200001F4 200001F4 _DISPLAY_SECOND_2: 200001F4 08068000 ORR r0,r6,r16 ;秒をセット 200001F8 54200000 CALL r1 ;CONV_NUM_TO_SEG_DATA呼び出し 200001FC 00000000 ANDR r0,r0,r0 ;NOP 20000200 0C070001 ORI r0,r7,1 ;LED2 20000204 3CE70010 SHLLI r7,r7,16 20000208 08F18000 ORR r7,r17,r16 2000020C 54400000 CALL r2 20000210 00000000 ANDR r0,r0,r0 ;NOP 20000214 4000FF9A BE r0,r0,_TIMER_SETTING_LOOP 20000218 00000000 ANDR r0,r0,r0 ;NOP 2000021C 2000021C ;;; ボタン4 2000021C ;;; タイマ開始 2000021C _HANDLE_PUSH_SW_4: 2000021C ;; 分と秒の値が0ならば_RESET_TIMERに戻る 2000021C 20A66000 ADDUR r5,r6,r12 20000220 400CFF8C BE r0,r12,_RESET_TIMER 20000224 00000000 ANDR r0,r0,r0 20000228 ;; 秒の値を満了値に変換 20000228 0C090000 ORI r0,r9,0 ;満了値 2000022C 08065800 ORR r0,r6,r11 ;秒をコピー 20000230 0C070098 ORI r0,r7,0x98 20000234 3CE70010 SHLLI r7,r7,16 20000238 0CE79680 ORI r7,r7,0x9680 2000023C 0C0823C3 ORI r0,r8,0x23C3 20000240 3D080010 SHLLI r8,r8,16 20000244 0D084600 ORI r8,r8,0x4600 20000248 400B0007 BE r0,r11,_ONE_MINUTE 2000024C 00000000 ANDR r0,r0,r0 20000250 20000250 _SECONDS: 20000250 21274800 ADDUR r9,r7,r9 20000254 256BFFFF ADDUI r11,r11,-1 ;秒を1減らす 20000258 400B0005 BE r0,r11,_SET_TIMER 2000025C 00000000 ANDR r0,r0,r0 20000260 4000FFFB BE r0,r0,_SECONDS 20000264 00000000 ANDR r0,r0,r0 20000268 20000268 ;; 1分の値でタイマを設定 20000268 _ONE_MINUTE: 20000268 21284800 ADDUR r9,r8,r9 2000026C 24A5FFFF ADDUI r5,r5,-1 ;分を1減らす 20000270 20000270 _SET_TIMER: 20000270 ;;; 分を表示 20000270 08058000 ORR r0,r5,r16 20000274 54200000 CALL r1 ;呼び出し 20000278 00000000 ANDR r0,r0,r0 ;NOP 2000027C 0C070003 ORI r0,r7,3 20000280 3CE70010 SHLLI r7,r7,16 20000284 08F18000 ORR r7,r17,r16 20000288 54400000 CALL r2 2000028C 00000000 ANDR r0,r0,r0 ;NOP 20000290 20000290 ;; タイマの設定 20000290 ;; Expiration Register 20000290 0C074000 ORI r0,r7,TIMER_BASE_ADDR_H ;Timer Base Address上位16ビットをr7にセット 20000294 3CE70010 SHLLI r7,r7,16 20000298 5CE90008 STW r7,r9,TIMER_EXPIRE_OFFSET ;満了値を設定 2000029C 2000029C ;; Control Register 2000029C ;; タイマをスタート 2000029C 0C080001 ORI r0,r8,0x1 ;Periodic:0, Start:1 200002A0 5CE80000 STW r7,r8,TIMER_CTRL_OFFSET ;Timer Control Registerを設定 200002A4 200002A4 ;;; .を点滅 200002A4 0C070010 ORI r0,r7,0x10 200002A8 3CE70010 SHLLI r7,r7,16 200002AC 0CE70000 ORI r7,r7,0x0000 200002B0 _TIMER_LOOP: 200002B0 24E7FFFF ADDUI r7,r7,-1 200002B4 200002B4 2408FFFF ADDUI r0,r8,-1 200002B8 4105000D BE r8,r5,_SET_LED 200002BC 00000000 ANDR r0,r0,r0 200002C0 200002C0 4407FFFB BNE r0,r7,_TIMER_LOOP 200002C4 00000000 ANDR r0,r0,r0 200002C8 200002C8 ;7セグの値を読む 200002C8 54800000 CALL r4 200002CC 00000000 ANDR r0,r0,r0 200002D0 200002D0 16108000 XORI r16,r16,0x8000 200002D4 200002D4 54400000 CALL r2 200002D8 00000000 ANDR r0,r0,r0 ;NOP 200002DC 200002DC 0C070010 ORI r0,r7,0x10 200002E0 3CE70010 SHLLI r7,r7,16 200002E4 0CE70000 ORI r7,r7,0x0000 200002E8 4000FFF1 BE r0,r0,_TIMER_LOOP 200002EC 00000000 ANDR r0,r0,r0 200002F0 200002F0 ;;; 2つのLED点滅 200002F0 _SET_LED: 200002F0 0C074000 ORI r0,r7,TIMER_BASE_ADDR_H ;Timer Base Address上位16ビットをr7にセット 200002F4 3CE70010 SHLLI r7,r7,16 200002F8 5CE00000 STW r7,r0,TIMER_CTRL_OFFSET ;Timer Control Registerを設定 200002FC 200002FC 0C070001 ORI r0,r7,1 20000300 3CE70010 SHLLI r7,r7,16 20000304 20000304 _SET_LED2: 20000304 0C0AFFFF ORI r0,r10,0xFFFF 20000308 20000308 ;7セグの値を読む 20000308 54800000 CALL r4 2000030C 00000000 ANDR r0,r0,r0 20000310 20000310 12078000 XORR r16,r7,r16 20000314 20000314 54400000 CALL r2 20000318 00000000 ANDR r0,r0,r0 ;NOP 2000031C 2000031C ;;; プッシュボタンが押された 2000031C 2000031C ;ボタン1はbit16とする 2000031C 0C078000 ORI r0,r7,GPIO_BASE_ADDR_H ;GPIO Base Address上位16ビットをr7にセット 20000320 3CE70010 SHLLI r7,r7,16 20000324 _DETECT_PUSH_BUTTON_2: 20000324 58E80000 LDW r7,r8,GPIO_IN_OFFSET ;GPIO Input Port Registerの値を取得 20000328 44080008 BNE r0,r8,_GOTO_TIMER_SETTING_LOOP 2000032C 2000032C 00000000 ANDR r0,r0,r0 ;NOP 20000330 20000330 254AFFFF ADDUI r10,r10,-1 20000334 20000334 440AFFFB BNE r0,r10,_DETECT_PUSH_BUTTON_2 20000338 00000000 ANDR r0,r0,r0 2000033C 2000033C 0C070003 ORI r0,r7,3 20000340 3CE70010 SHLLI r7,r7,16 20000344 20000344 4000FFEF BE r0,r0,_SET_LED2 20000348 00000000 ANDR r0,r0,r0 2000034C 2000034C _GOTO_TIMER_SETTING_LOOP: 2000034C 58E80000 LDW r7,r8,GPIO_IN_OFFSET ;GPIO Input Port Registerの値を取得 20000350 4408FFFE BNE r0,r8,_GOTO_TIMER_SETTING_LOOP 20000354 00000000 ANDR r0,r0,r0 20000358 4000FF3E BE r0,r0,_RESET_TIMER 2000035C 00000000 ANDR r0,r0,r0 20000360 20000360 20000360 ;;; 7セグ点灯ルーチン 20000360 CONV_NUM_TO_SEG_DATA: 20000360 ;; 下位の桁から数字を抽出 20000360 08109000 ORR r0,r16,r18 ;r16をr18にコピー 20000364 12318800 XORR r17,r17,r17 ;Return Valueのクリア 20000368 12739800 XORR r19,r19,r19 ;0:1桁目(SEG2), 1:2桁目(SEG1) 2000036C 1294A000 XORR r20,r20,r20 ;2桁目の値 20000370 ;; 10の位の値を求める 20000370 0C15000A ORI r0,r21,10 ;r21に10をいれる 20000374 _SUB10: 20000374 4E550005 BUGT r18,r21,_CHECK_0 ;r18
S31520000000100000000C0120003C2100100C21036090 S315200000100C0220003C4200100C4205040C03200078 S315200000203C6300100C63052C0C0420003C8400105B S315200000300C8405180C0720003CE700100CE7058807 S3152000004068E400000C0700FE68E600000C070002CA S3152000005068E000000C0500000C0600000805800082 S3152000006054200000000000000C0700023CE70010AE S3152000007008F18000544000000000000011AD680027 S315200000805460000000000000081038000C08000131 S3152000009040E8000A000000000C08000240E8001FAB S315200000A0000000000C08000440E8003C00000000AE S315200000B00C08000840E8005900000000440D000C20 S315200000C00000000008068000542000000000000008 S315200000D00C0700013CE7001008F1800054400000A6 S315200000E00000000015AD00014000FFE50000000003 S315200000F00805800054200000000000000C070002C4 S315200001003CE7001008F18000544000000000000089 S3152000011015AD00014000FFDA00000000440D00107C S315200001200000000024A500010C07006444E500023D S31520000130000000000C050000080580005420000087 S31520000140000000000C0700023CE7001008F18000C8 S3152000015054400000000000004000FFC900000000DD S3152000016024C600010C07003C44E600020000000003 S315200001700C06000008068000542000000000000045 S315200001800C0700013CE7001008F1800054400000F5 S31520000190000000004000FFBA00000000440D0010DF S315200001A00000000024A5FFFF2407FFFF44A700024C S315200001B0000000000C0500630805800054200000A4 S315200001C0000000000C0700023CE7001008F1800048 S315200001D054400000000000004000FFA9000000007D S315200001E024C6FFFF2407FFFF44C7000200000000CB S315200001F00C06003B0806800054200000000000008A S315200002000C0700013CE7001008F180005440000074 S31520000210000000004000FF9A0000000020A66000B9 S31520000220400CFF8C000000000C0900000806580056 S315200002300C0700983CE700100CE796800C0823C3B7 S315200002403D0800100D084600400B00070000000086 S3152000025021274800256BFFFF400B0005000000000A S315200002604000FFFB000000002128480024A5FFFFD6 S315200002700805800054200000000000000C07000341 S315200002803CE7001008F18000544000000000000008 S315200002900C0740003CE700105CE900080C08000150 S315200002A05CE800000C0700103CE700100CE700009B S315200002B024E7FFFF2408FFFF4105000D0000000092 S315200002C04407FFFB000000005480000000000000EF S315200002D01610800054400000000000000C0700109B S315200002E03CE700100CE700004000FFF10000000092 S315200002F00C0740003CE700105CE000000C07000102 S315200003003CE700100C0AFFFF5480000000000000AC S315200003101207800054400000000000000C078000F7 S315200003203CE7001058E800004408000800000000E0 S31520000330254AFFFF440AFFFB000000000C070003CC S315200003403CE700104000FFEF0000000058E80000E6 S315200003504408FFFE000000004000FF3E00000000B1 S315200003600810900012318800127398001294A00091 S315200003700C15000A4E550005000000002652FFF617 S31520000380269400014000FFFB000000000C15000031 S3152000039046550007000000000C1600C0441300500C S315200003A0000000003ED600084000004D000000007E S315200003B00C15000146550007000000000C1600F938 S315200003C044130047000000003ED6000840000044C9 S315200003D0000000000C150002465500070000000032 S315200003E00C1600A44413003E000000003ED6000870 S315200003F04000003B000000000C1500034655000796 S31520000400000000000C1600B0441300350000000068 S315200004103ED6000840000032000000000C15000403 S3152000042046550007000000000C1600994413002CC6 S31520000430000000003ED60008400000290000000011 S315200004400C15000546550007000000000C1600920A S3152000045044130023000000003ED600084000002080 S31520000460000000000C15000646550007000000009D S315200004700C1600824413001A000000003ED6000825 S3152000048040000017000000000C1500074655000725 S31520000490000000000C1600F84413001100000000B4 S315200004A03ED600084000000E000000000C15000893 S315200004B046550007000000000C1600804413000873 S315200004C0000000003ED600084000000500000000A5 S315200004D00C16009044130002000000003ED60008CF S315200004E00A36880044130005000000000814900016 S315200004F00E7300014000FFA50000000053E000003D S31520000500000000000C1180003E3100105E30000417 S3152000051053E00000000000000C1180003E31001066 S315200005205A30000453E00000000000000C11800047 S315200005303E3100105A3200004012FFFE000000003B S315200005405A3300004413FFFE00000000065300014A S315200005504413000A0000000006530002441300075B S3152000056000000000065300044413000400000000AD S315200005700653000844130001000000000813800001 S3152000058053E00000000000000C1840003F18001047 S315200005905F0000045F00000024A5FFFF2419FFFF71 S315200005A040B9000F000000000C1923C33F3900108A S315200005B0273946005F1900080C0800035F08000071 S315200005C00805800054200000000000000C180003DD S315200005D03F1800100B11800054400000000000005E S315200005E064B8000007180008401800040000000046 S315200005F0647800002718FFFC6B0300006C000000E5 S3092000060000000000D0 S70500000000FA